Naar de inhoud
SyncMyShop

Systemen

inRiver koppeling met je webshop: complete productdata uit inRiver in je shop

Een inRiver koppeling haalt artikelen, vertalingen en beelden uit inRiver en zet ze in je webshop, en schrijft artikelnummers en basisgegevens uit je ERP terug in inRiver. De REST API levert maximaal 1.000 entiteiten per verzoek en kan filteren op wijzigingsdatum en compleetheid, dus alleen wat af is gaat door.

Wat is inRiver en wie gebruikt het?

inRiver is een PIM: een centraal systeem voor productinformatie dat als cloudomgeving draait. Merken, fabrikanten en groothandels gebruiken het om productteksten, kenmerken, vertalingen en beelden op één plek bij te houden en naar webshops, marktplaatsen en catalogi te sturen.

Het datamodel ligt niet vast. De entiteitstypen, zoals een product en de artikelen per maat en kleur daaronder, de koppeltypen tussen die entiteiten en de velden per type worden per omgeving ingericht. Elk veld heeft een datatype dat bepaalt wat de koppeling terugkrijgt:

Datatype in inRiver Wat de koppeling krijgt Wat ermee gebeurt
String één tekst direct naar een veld in de webshop
LocaleString een tekst per taal per taal naar de vertaling in de webshop
CVL een sleutel uit een keuzelijst sleutel omzetten naar het label per taal
Integer, Double een getal eenheid en decimalen bepalen
DateTime een tijdstip omrekenen naar de tijdzone van de shop
File een verwijzing naar een bestand bestand ophalen en uploaden

Wat je met inRiver koppelt

inRiver is leidend voor wat een artikel is. Het ERP is leidend voor het artikelnummer, de prijs en de voorraad. De webshop toont wat beide aanleveren.

Stroom Richting Endpoint in inRiver
Gewijzigde artikelen vinden inRiver naar koppeling POST /api/v1.0.0/query
Velden, beelden, koppelingen ophalen inRiver naar webshop POST /api/v1.0.1/entities:fetchdata
Assortiment per kanaal inRiver naar webshop GET /api/v1.0.0/channels/{channelId}/entitylist
Artikelnummers en basisgegevens ERP naar inRiver POST /api/v1.0.0/entities:upsert
Keuzelijsten en labels inRiver naar webshop GET /api/v1.0.0/model/cvls/{cvlId}/values

Een kanaal in inRiver is een selectie van entiteiten in een eigen structuur, bijvoorbeeld het assortiment voor de Nederlandse webshop. De koppeling leest dan alleen wat in dat kanaal staat, met de categorieën uit de knooppunten van het kanaal. Hoe productdata in het algemeen tussen systemen loopt, staat op productdata koppelen.

Hoe inRiver data vrijgeeft

REST API met een sleutel in de header

inRiver heeft een REST API met JSON. Elk verzoek draagt de header X-inRiver-APIKey. Het adres hangt af van de regio van je omgeving, zoals apieuw.productmarketingcloud.com of apiuse.productmarketingcloud.com. Elk endpoint noemt in de documentatie welke rechten nodig zijn, bijvoorbeeld View voor lezen en View, AddEntity en UpdateEntity voor een upsert. De sleutel van de koppeling krijgt alleen die rechten. De API-referentie van inRiver staat als Swagger-pagina online.

Eerst zoeken, dan ophalen

Lezen gaat in twee stappen. POST /query geeft een lijst entity id's terug. De zoekvraag kan filteren op systeemkenmerken:

{
  "systemCriteria": [
    { "type": "EntityTypeId", "value": "Item", "operator": "Equal" },
    { "type": "LastModified", "value": "2026-10-03T09:00:00", "operator": "GreaterThan" },
    { "type": "Completeness", "value": 100, "operator": "Equal" }
  ]
}

Daarna haalt entities:fetchdata de gegevens op voor maximaal 1.000 id's per verzoek. Met objects kies je wat er meekomt, zoals FieldValues, Media en SpecificationValues, en met fieldTypeIds welke velden. De documentatie raadt aan zo weinig mogelijk objecten op te vragen, omdat elk object het antwoord trager maakt.

De rekensom voor een catalogus van 18.000 artikelen:

Ronde Rekensom Verzoeken
Eerste vulling 1 zoekvraag + 18.000 / 1.000 19
Delta, 2.340 gewijzigde artikelen 1 zoekvraag + 2.340 / 1.000, naar boven afgerond 4
Delta elk kwartier, een dag lang 4 x 4 x 24, als elke ronde zo groot is 384
Een ronde van de koppeling tegen de REST API van inRiver De koppeling zoekt met POST query de artikelen die sinds 09:00 gewijzigd zijn en 100 procent compleet zijn, en krijgt 2.340 entity id's terug. Die haalt ze op met entities:fetchdata in drie verzoeken van maximaal 1.000 id's. Daarna gaan de gewijzigde producten naar de webshop. Koppeling wachtrij inRiver REST API Webshop producten POST /query LastModified na 09:00, Completeness = 100, EntityTypeId = Item 2.340 entityIds POST entities:fetchdata, 1.000 id's POST entities:fetchdata, 1.000 id's POST entities:fetchdata, 340 id's FieldValues, Media CVL-sleutels naar labels 2.340 artikelen bijgewerkt Drie verzoeken voor 2.340 artikelen: de limiet is 1.000 id's per fetchdata.
Een ronde in twee stappen: eerst de id's zoeken, dan de gegevens ophalen in blokken van maximaal 1.000.

Een rate limit staat niet in de API-referentie. De koppeling meet de antwoordtijd per verzoek en vraagt bij een volle catalogus de velden per blok op in plaats van alles tegelijk.

Schrijven met upsert

entities:upsert neemt een lijst entiteiten aan met een keyFieldTypeIds: de velden waarop inRiver een bestaande entiteit zoekt, bijvoorbeeld het artikelnummer. Bestaat hij, dan wordt hij bijgewerkt, anders aangemaakt. Het antwoord heeft insertedEntities, updatedEntities, een errors-lijst en errorCount. Een upsert van 500 artikelen met 3 fouten slaagt voor 497. De koppeling leest errorCount bij elk antwoord en zet de 3 op een controlelijst.

Waar het bij inRiver op vastloopt

Wat er misgaat Oorzaak in inRiver Wat de koppeling doet
Artikel kwijt aan zijn product staleLinkAction op Unlink bij een upsert met een deel van de koppelingen Altijd None tenzij het hele pakket meegaat
Entiteit verwijderd UnlinkAndDeleteOrphans verwijdert entiteiten zonder koppeling; niet terug te zetten Nooit gebruikt vanuit een koppeling
Vertaling leeggemaakt Lege waarde voor een taal in een LocaleString Alleen de talen meesturen die de bron heeft
Verouderd label in de shop CVL-waarde gedeactiveerd maar nog in gebruik Controlelijst per veld
Deels geslaagde upsert gemist Antwoord met fouten in errors errorCount bij elk antwoord lezen

Koppelingen tussen entiteiten

Een upsert kan ook de koppelingen meesturen, bijvoorbeeld welke artikelen onder welk product vallen. Standaard laat inRiver bestaande koppelingen die niet in het verzoek staan met rust (staleLinkAction: None). Met Unlink worden ze verwijderd, met UnlinkAndDeleteOrphans ook de entiteiten die daarna nergens meer aan hangen. Een ERP-import die per verzoek één maat aanlevert, maakt met Unlink de andere maten los van het product. De koppeling bepaalt per type koppeling welke actie geldt.

Talen

Bij het wijzigen van een LocaleString houdt inRiver de waarde vast voor elke taal die niet in het verzoek staat. Een taal die wel meekomt, wordt bijgewerkt met wat er staat. Stuurt een ERP dat alleen Nederlands kent een leeg Duits veld mee, dan is dat een wijziging van de Duitse omschrijving naar leeg. De koppeling stuurt alleen de talen mee waarvoor de bron leidend is. Meer over dit soort mismatches staat in wat is veldmapping.

Keuzelijsten

Een CVL-waarde heeft een key, een value met het label, optioneel een parentKey en de vlag deactivated. Het artikel bewaart de sleutel, bijvoorbeeld BLK; de webshop moet "Zwart" tonen. De koppeling bouwt per CVL een tabel van sleutel naar label per taal en ververst die bij elke ronde, zodat een nieuw label zonder aanpassing doorkomt. Hoe kenmerken als varianten in de webshop landen staat op varianten.

Platformen die we aan inRiver koppelen

De koppeling wordt gebouwd op jouw model en jouw webshop. Wat het platform aan de ontvangende kant vraagt, staat op de pagina van dat platform:

Werk je met een ander PIM, zie dan Akeneo koppeling, Pimcore koppeling of Salsify koppeling. Het overzicht van alle stromen staat op koppelingen.

Wij bouwen de koppeling voor een vaste prijs, en hosten, draaien en bewaken hem daarna voor een vast bedrag per maand. Voor de livegang draait hij als dry run: je ziet per artikel welke velden, labels en beelden er in de webshop zouden komen, zonder dat er iets wijzigt. Vertel welk model en welke webshop je hebt, dan hoor je welke velden en kanalen de koppeling leest en wat een ronde kost.

Veelgestelde vragen

Heeft inRiver webhooks?

De REST API heeft geen endpoint om een webhook te registreren. Gebeurtenissen in inRiver lopen via extensions die in de omgeving zelf draaien, zoals een EntityListener of ChannelListener. Zonder zo'n extension vraagt de koppeling op een vast interval met LastModified op wat er gewijzigd is. Dat kost per ronde één zoekvraag en één ophaalverzoek per 1.000 artikelen.

Gaan producten die nog niet af zijn ook naar de webshop?

Niet als je dat zo afspreekt. De zoekvraag van de API filtert op Completeness, een getal van 0 tot 100. De koppeling vraagt alleen artikelen op met 100, of met de drempel die jij kiest. Een artikel dat daaronder zakt, bijvoorbeeld omdat een verplichte vertaling is leeggemaakt, blijft in de webshop staan zoals het was tot het weer compleet is.

Kan de koppeling ook gegevens in inRiver schrijven?

Ja. entities:upsert maakt een entiteit aan of werkt hem bij op basis van een sleutelveld, bijvoorbeeld het artikelnummer uit het ERP. De koppeling hoeft het id van inRiver dus niet te kennen. Het antwoord bevat per regel welke entiteiten zijn aangemaakt of bijgewerkt en een lijst met fouten. Een verzoek kan dus deels slagen.

Wat gebeurt er met een waarde uit een keuzelijst?

Een CVL-veld bewaart de sleutel, niet het label. De koppeling leest de labels per taal uit de CVL en zet ze in de webshop. Een waarde kan in inRiver gedeactiveerd zijn terwijl artikelen haar nog gebruiken. Die artikelen komen op een controlelijst in plaats van met een verouderd label in de shop.

Welke inRiver-omgeving gebruikt de koppeling?

De API heeft een eigen adres per regio, bijvoorbeeld apieuw.productmarketingcloud.com en apiuse.productmarketingcloud.com. Welke het is, hangt af van waar jouw omgeving draait. De API-sleutel hoort bij één omgeving; heb je naast productie een testomgeving, dan bouwen en testen wij daartegen en zetten we de sleutel van productie pas bij de livegang in.

Vertel wat je nodig hebt

Vertel welke systemen je gebruikt en wat je wilt verbeteren. Je krijgt binnen één werkdag een persoonlijk antwoord. We helpen je de werkzaamheden helder te krijgen en spreken de prijs en planning af voordat je iets toezegt.

  • Je weet de prijs en de doorlooptijd voordat je iets toezegt
  • Wij zoeken uit welke koppeling het werk uit handen neemt
  • Wij verzorgen de bouw, hosting, bewaking en het onderhoud
  • Je team krijgt minder overtypwerk en minder uitzoekwerk

Leveranciers, producten, orders per dag, een ruwe schatting is prima.

Of mail direct: carsten@syncmyshop.com