1 month free dropshipping trial — then €39/month · Wholesale min €500
cosmeticwholesale

Cosmetic Wholesale

Catalogusfeed

Importeer de productcatalogus en houd voorraad en prijzen actueel vanuit uw eigen systeem.

De Order API vertelt u hoe u een bestelling naar ons stuurt. Deze pagina behandelt de andere helft: de producten in uw shop krijgen en ze actueel houden.

Er is geen "import"-endpoint. Wij publiceren de catalogus als één bestand dat u volgens een vast schema ophaalt — u houdt de kopie, u bepaalt wat u ermee doet. Dat is bewust: wij schrijven nooit in uw shop.

1. Het endpoint

GET /api/v1/feeds/catalog.csv
GET /api/v1/feeds/catalog.json
Authorization: Bearer YOUR_ACCOUNT_TOKEN

Hetzelfde token als bij de Order API. De response is altijd gzip-gecomprimeerd (Content-Encoding: gzip) — de catalogus is groot, dus dit is niet optioneel.

ResponseBetekenis
200De huidige catalogus. De headers ETag en X-CW-Feed-Rows geven de versie en het aantal regels.
304Uw If-None-Match kwam overeen — er is niets gewijzigd sinds uw laatste ophaalactie. Telt niet mee voor de rate limit.
403Ontbrekend, ongeldig of ingetrokken token.
429Rate limit: 30 volledige downloads per uur per token. Retry-After: 3600.
503feed_empty — er is nog geen catalogus gepubliceerd. Behoud uw laatste kopie en probeer het later opnieuw.

2. CSV-formaat

Kopregel, CRLF-regeleinden, UTF-8:

ean,title,stock,price,processing_time,image_url
"6291107455365","Lattafa EDP Qaed Al Fursan 90 ml",42,18.40,"2-3","https://…/6291107455365.jpg"
KolomBetekenis
eanDe productsleutel. Altijd tussen aanhalingstekens — behandel de waarde als tekst, nooit als getal (voorloopnullen doen ertoe).
titleProducttitel.
stockAantal stuks dat op dit moment voor u beschikbaar is.
priceUw inkoopprijs, in EUR, exclusief btw. Geen verkoopprijs.
processing_timeVerwerkingstijd in werkdagen, zoals gepubliceerd door het magazijn.
image_urlProductafbeelding. Anders dan bij onze plugins staat het u vrij deze te gebruiken.

De JSON-variant verpakt dezelfde regels in een envelop die de voorwaarden expliciet vermeldt:

{
  "channel": "DROPSHIPPING",
  "currency": "EUR",
  "tax": "ex_vat",
  "priceSource": "ds_channel_list",
  "generatedAt": "2026-09-07T09:00:00.000Z",
  "rowCount": 67412,
  "truncated": false,
  "rows": [ … ]
}

3. Eerste import

Haal de feed één keer op en maak uw producten aan, met de EAN als sleutel.

Zet de EAN in uw eigen SKU-veld. Bestelregels worden op EAN gematcht — staat er aan uw kant iets anders in de SKU, dan herkent de bestelpush de regel niet en vervalt hij. Onze Shopify-app schrijft de EAN precies daarom in zowel de SKU als de barcode.

Een realistische eerste import telt tienduizenden regels. Voer hem uit als achtergrondtaak, niet binnen een webverzoek, en maak hem hervatbaar — sla uw positie op, zodat een crash niet weer bij nul begint.

4. Update per uur

Haal één keer per uur op en stuur uw laatste ETag mee:

GET /api/v1/feeds/catalog.csv
Authorization: Bearer YOUR_ACCOUNT_TOKEN
If-None-Match: "a3f19c…"

304 betekent dat er niets is gewijzigd — stop daar. Een 200 betekent dat u een nieuwe versie heeft: werk voorraad en prijs bij van de EAN's die u al heeft.

Regels die dit veilig houden:

  • Alleen bijwerken. Maak in de uurtaak geen producten aan, en verwijder niets.
  • Een mislukte ophaalactie is geen lege catalogus. Behoud bij 429, 503, een time-out of een afgebroken download uw vorige gegevens en probeer het later opnieuw. Zet nooit uw hele catalogus op voorraad nul omdat een verzoek is mislukt — dat is verreweg de schadelijkste fout in deze koppeling.
  • stock: 0 is een echte regel, geen ontbrekende. Producten gaan naar nul en komen weer terug.
  • Een uitgefaseerde EAN blijft minstens 14 dagen op stock: 0 in de feed staan voordat hij verdwijnt. Beschouw "niet in de feed" dus pas als "wordt niet meer verkocht" wanneer hij er een tijd uit is — en verberg het product dan nog liever dan het te verwijderen, zodat uw bestelhistorie intact blijft.
  • Haal niet vaker dan een paar keer per uur op. De limiet is 30 volledige downloads per uur; 304-responses zijn gratis.

5. Marge en uw verkoopprijs

Wij slaan geen marge voor u op. De feed geeft u de inkoopprijs; wat u uw klant berekent is uw zaak, en daarover wordt aan onze kant niets ingesteld.

Onze plugins passen deze formule toe, en wij raden hem aan voor gelijkloop — migreert u een shop ooit tussen de plugin en uw eigen systeem, dan verspringen de prijzen niet:

retail_price = round(cost × (1 + margin_percent / 100) + margin_fixed, 2)

Beide getallen bepaalt u zelf. 0 en 0 verkoopt tegen onze inkoopprijs. Bewaar ze in uw eigen instellingen.

Twee dingen om te onthouden wanneer u ze instelt:

  • price is exclusief btw. Tel btw erbij op volgens uw eigen registratie en het land van de klant.
  • Verzendkosten worden apart berekend en staan niet in de feed.

6. Checklist voordat u live gaat

  • EAN wordt als tekst opgeslagen en is uw SKU
  • De eerste import wordt voltooid en is hervatbaar
  • De uurtaak stuurt If-None-Match mee en verwerkt 304
  • Een mislukte of door de rate limit geweigerde ophaalactie laat uw catalogus ongemoeid
  • De uurtaak maakt nooit producten aan en verwijdert nooit producten
  • stock: 0 verbergt het product in plaats van het te verwijderen
  • Uw margeformule komt overeen met wat u eerder had, gecontroleerd tegen tien bekende EAN's
  • De verkoopprijs telt btw op boven op de inkoopprijs uit de feed