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_sleutelPOST /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.
| Veld | Type | Omschrijving |
|---|---|---|
| string (verplicht) | E-mailadres van je klant. Hier gaat de uitnodiging naartoe. | |
| orderNumber | string | Je eigen ordernummer. Wordt getoond bij de review en gebruikt voor ontdubbeling. |
| language | string | Taal van de uitnodiging: nl of en. Standaard nl. |
| delayDays | number | Wijkt 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_IDLimieten
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.
| Veld | Type | Omschrijving |
|---|---|---|
| Badge + verificatie | 1.000 / dag (gratis) · 10.000 / dag (keurmerk) | Telt elke weergave; browsers cachen 5 minuten. |
| POST /v1/orders | 120 / minuut per sleutel | Per API-sleutel, niet per IP. |
| POST /v1/orders/snippet | 30 / minuut per IP | Plus een dagelijks plafond per webshop. |
Foutcodes
| Veld | Type | Omschrijving |
|---|---|---|
| 401 | Unauthorized | Sleutel ontbreekt, is ongeldig of is ingetrokken. |
| 403 | Forbidden | Webshop niet actief, of het verzoek kwam niet van je eigen domein (snippet). |
| 422 | Unprocessable | Ongeldige invoer — bijvoorbeeld een e-mailadres dat niet klopt. |
| 429 | Too Many Requests | Rate limit geraakt. Probeer het later opnieuw. |
| 5xx | Server error | Bij 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.