Naar hoofdinhoud
TrustBedrijfTRUSTBEDRIJF.NLONLINE WEBSHOP KEURMERK
Voor ontwikkelaars

API & koppelingen

Meld je bestellingen bij TrustBedrijf en wij nodigen je klanten automatisch uit voor een review. Twee routes: een API-sleutel vanaf je server, of een snippet op je bedankpagina.

Hoe het werkt

Je meldt een afgeronde bestelling bij ons aan met het e-mailadres van je klant. Wij plannen een review-uitnodiging in — standaard vijf dagen later, zodat het pakket binnen is — en versturen die automatisch. De klant schrijft de review op onze site; jij ziet hem in je dashboard en het cijfer telt mee in je badge.

Dezelfde bestelling twee keer aanmelden levert nooit twee mails op: we ontdubbelen op e-mailadres en ordernummer. Je kunt dus veilig opnieuw proberen na een storing.

Authenticatie

De Orders API werkt met een API-sleutel. Maak er een aan in je dashboard onder Koppelingen. De sleutel begint met tbk_ en is één keer zichtbaar — daarna bewaren wij alleen een hash en kunnen ook wij hem niet meer tonen. Kwijt? Maak een nieuwe aan en trek de oude in.

Stuur de sleutel mee als bearer-token. Gebruik hem alleen vanaf je server — nooit in browsercode, een app of een publieke repository.

Authorization: Bearer tbk_jouw_sleutel

POST /v1/orders

Meldt een bestelling aan en plant de review-uitnodiging in. Dit is de aanbevolen route: hij werkt ook als je klant de browser meteen sluit.

VeldTypeOmschrijving
emailstring (verplicht)E-mailadres van je klant. Hier gaat de uitnodiging naartoe.
orderNumberstringJe eigen ordernummer. Wordt getoond bij de review en gebruikt voor ontdubbeling.
languagestringTaal van de uitnodiging: nl of en. Standaard nl.
delayDaysnumberWijkt af van je standaardinstelling. 0–60 dagen.
curl -X POST https://api.trustbedrijf.nl/v1/orders \
  -H "Authorization: Bearer tbk_jouw_sleutel" \
  -H "Content-Type: application/json" \
  -d '{
    "email": "[email protected]",
    "orderNumber": "2026-00123",
    "language": "nl"
  }'

Antwoord bij een nieuwe bestelling (201):

{
  "inviteId": "9f8c1e70-…",
  "scheduledFor": "2026-07-22T10:14:00.000Z"
}

Was de bestelling al aangemeld, dan krijg je 200 met "duplicate": true en dezelfde inviteId. Er gaat geen tweede mail uit.

POST /v1/orders/snippet

Geen serverkoppeling? Plaats dit op je bestelbevestigingspagina. Er staat geen geheim in de code: het siteId is je publieke webshop-id, dezelfde die al in je badge-embed staat. Wij accepteren het verzoek alleen als het van je eigen, geverifieerde domein komt.

<script>
  fetch("https://api.trustbedrijf.nl/v1/orders/snippet", {
    method: "POST",
    headers: { "Content-Type": "application/json" },
    body: JSON.stringify({
      siteId: "JOUW_WEBSHOP_ID",
      email: "{{ klant_email }}",
      orderNumber: "{{ ordernummer }}"
    })
  }).catch(function () {});
</script>

Vervang de accolades door de variabelen van je webshopsysteem. De .catch() is belangrijk: mocht onze API onbereikbaar zijn, dan merkt je klant daar niets van. Je vindt je eigen kant-en-klare snippet in het dashboard onder Koppelingen.

Antwoord: 202 met { "ok": true }. Ook bij een dubbele melding — de pagina van je klant hoeft nooit iets af te handelen.

Het badge-widget

Het widget is één regel HTML en laadt async, dus het blokkeert je pagina nooit. Het badge tekent zichzelf in een shadow DOM: jouw CSS raakt het niet, en het onze raakt jouw pagina niet.

<script async src="https://widget.trustbedrijf.nl/w/JOUW_WEBSHOP_ID.js"></script>

Uiterlijk (thema, formaat, taal) stel je in het dashboard in — de code hierboven verandert daar niet van. Het widget werkt alleen op je eigen domein; op een andere site doet het niets. Is je keurmerk ingetrokken, dan verdwijnt het badge stil, zonder foutmelding op je pagina.

GET /v1/verify/:id

Openbaar en zonder sleutel: iedereen kan een keurmerk controleren, ook zonder onze site te vertrouwen. Het antwoord bevat een Ed25519-handtekening die je zelf kunt verifiëren tegen onze publieke sleutel op https://api.trustbedrijf.nl/v1/badge/public-keys.

curl https://widget.trustbedrijf.nl/v1/verify/JOUW_WEBSHOP_ID

Limieten

Een gratis (niet-geverifieerd) profiel mag 1.000 weergaven per dag doen, een lid met keurmerk 10.000 (badge + verificatie samen). Boven de limiet toont de widget de rest van de dag (tot 00:00 UTC) niets; je site blijft gewoon werken.

VeldTypeOmschrijving
Badge + verificatie1.000 / dag (gratis) · 10.000 / dag (keurmerk)Telt elke weergave; browsers cachen 5 minuten.
POST /v1/orders120 / minuut per sleutelPer API-sleutel, niet per IP.
POST /v1/orders/snippet30 / minuut per IPPlus een dagelijks plafond per webshop.

Foutcodes

VeldTypeOmschrijving
401UnauthorizedSleutel ontbreekt, is ongeldig of is ingetrokken.
403ForbiddenWebshop niet actief, of het verzoek kwam niet van je eigen domein (snippet).
422UnprocessableOngeldige invoer — bijvoorbeeld een e-mailadres dat niet klopt.
429Too Many RequestsRate limit geraakt. Probeer het later opnieuw.
5xxServer errorBij ons ging iets mis. Probeer het opnieuw — ontdubbeling voorkomt dubbele mails.

Foutantwoorden bevatten een error-veld met een korte omschrijving in het Nederlands.

Privacy

Stuur ons niet meer dan nodig: een e-mailadres en een ordernummer volstaan. Geen adressen, geen betaalgegevens, geen bestelregels. Wij gebruiken het e-mailadres uitsluitend voor de review-uitnodiging. Zie de privacyverklaring voor de volledige verwerking.

Hulp nodig bij de koppeling?

Loop je vast, of gebruik je een systeem dat we nog niet kennen? Stuur ons je situatie — we denken mee.