Integratiehandleiding voor Dealer Management Systeem (DMS)–leveranciers. Deze API stelt jullie in staat om vanuit jullie eigen software namens een aangesloten garagebedrijf pechhulpproducten op te halen en pechhulppassen aan te maken of te verlengen.
Deze documentatie is bedoeld voor softwareleveranciers die een DMS, garagemanagementsysteem of werkplaatssoftware leveren aan automotive-bedrijven. De integratie werkt als volgt:
Eén token = één garagevestiging. Een DMS-leverancier die meerdere garages bedient, beheert dus één token per klantvestiging in het eigen tenant-/configuratiemodel.
https://api.pechplan.nl
Alle requests en responses zijn JSON (Content-Type: application/json, Accept: application/json). Bedragen zijn in euro's en worden als string met twee decimalen geleverd (bijv. "79.50") om afrondingsverliezen in jullie boekhouding te voorkomen. Datums zijn ISO-8601 (YYYY-MM-DD). Identifiers zijn UUID-strings.
Versie: v1. Breaking changes worden minstens 30 dagen vooraf aangekondigd op het opgegeven technische contactadres.
GET /roadside-products aan te roepen. Een 200-response bevestigt dat het token werkt en koppelt aan een actieve garage.GET /roadside-products aanroept en het aantal beschikbare producten toont. Dit verkort de supportcyclus aanzienlijk.
Alle endpoints (behalve deze pagina) vereisen een Bearer token in de Authorization-header:
Authorization: Bearer <token>
Accept: application/json
Tokens worden door de garage zelf in het portal aangemaakt en ingetrokken. Een ingetrokken token werkt direct niet meer — vang 401-responses dus altijd af en toon de eindgebruiker een duidelijke melding dat de PechPlan-koppeling opnieuw geconfigureerd moet worden.
| Status | Betekenis | Aanbevolen DMS-gedrag |
|---|---|---|
200 | OK | Verwerk de response. |
400 | Slecht gevormd verzoek (geen geldige JSON). | Bug in jullie integratie — niet retry-en. |
401 | Token ontbreekt, is ongeldig of ingetrokken. | Markeer de koppeling als "her-configuratie nodig" en informeer de gebruiker. |
403 | De garage heeft geen recht om dit endpoint te gebruiken (bv. mag geen pechhulp verkopen). | Toon een duidelijke melding; niet retry-en. |
404 | Endpoint of resource bestaat niet. | Niet retry-en. |
422 | Validatiefout op de payload, of business-rule afgewezen (bv. te vroege verlenging). | Toon de veldfouten uit het response-body. |
429 | Rate limit overschreden. | Wacht en retry met exponential back-off (zie hieronder). |
500–504 | Onverwachte fout aan onze kant. | Retry met back-off (max 3 pogingen). Bij blijvende fout: zet in queue en alarmeer ons via support. |
Bij 422 en andere clientfouten leveren we een Laravel-stijl foutobject:
{
"message": "The given data was invalid.",
"errors": {
"kenteken": ["Het kenteken is verplicht."],
"postcode": ["Postcode moet voldoen aan formaat 1234AB."]
}
}
Standaard 60 requests per minuut per token. Voor batch-scenario's (bijv. nachtelijke synchronisatie van een groot wagenpark) raden we aan om requests te spreiden of contact op te nemen voor een verhoogd limiet. Bij overschrijding krijg je een 429; pas exponential back-off toe (1s, 2s, 4s, …) tot maximaal 60 seconden.
Levert de pechhulpproducten die voor de aan het token gekoppelde garage beschikbaar zijn. De productset kan per garage verschillen op basis van formule-/netwerkafspraken — cache de uitkomst dus per token, niet globaal.
description + total_yearly_price. Bewaar product_id intern voor het vervolgverzoek.curl https://api.pechplan.nl/roadside-products \
-H "Authorization: Bearer <token>" \
-H "Accept: application/json"
{
"data": [
{
"product_id": "9b1f3a4d-6c2e-4f8a-9b1d-3e5a7c9f0b12",
"description": "PechPlan Basis",
"total_yearly_price": "79.50",
"currency": "EUR"
},
{
"product_id": "1c8b2e7f-4a91-4c63-9d20-7f6b3a1e2c45",
"description": "PechPlan Plus EU",
"total_yearly_price": "129.00",
"currency": "EUR"
}
]
}
| Veld | Type | Beschrijving |
|---|---|---|
product_id | string (UUID) | Stabiele identifier van het product. Gebruik deze in vervolgverzoeken. |
description | string | Door PechPlan beheerde productnaam, geschikt voor weergave aan de eindgebruiker. |
total_yearly_price | string | Totale jaarprijs incl. alle componenten (servicebedrag + reserveringen). Geschikt voor doorbelasting op de factuur. |
currency | string | Altijd "EUR". |
Maakt een pechhulppas aan voor de eindklant van de garage, of verlengt een bestaande pas. Dit is het hoofdintegratiepunt: meestal aangeroepen op het moment dat de garage het product op een werkorder/factuur zet of die order afsluit in jullie DMS.
action: "extended".422 op. Communiceer dit duidelijk in jullie UI; bouw geen automatische retry.| Veld | Type | Verplicht | Beschrijving |
|---|---|---|---|
product_id | UUID | ja | Uit /roadside-products. |
kenteken | string | ja | Nederlands kenteken zonder streepjes, hoofdletters (bijv. 2ZPZ13). |
chassisnummer | string | nee | VIN/chassisnummer. Optioneel — laat leeg of weg indien niet beschikbaar. |
voornaam | string | ja | |
achternaam | string | ja | |
straatnaam | string | ja | |
huisnummer | string | ja | |
huisnummer_toevoeging | string | nee | |
postcode | string | ja | 1234AB of 1234 AB. |
plaatsnaam | string | ja | |
bedrijfsnaam | string | nee | Voor zakelijke klanten. |
telefoonnummer | string | nee | |
emailadres | string | nee | Sterk aanbevolen: gebruikt voor klant-deduplicatie. |
geboortedatum | string (YYYY-MM-DD) | nee | Moet in het verleden liggen. |
invoice_id | string | nee | Eigen factuur-/orderreferentie uit jullie DMS. Wij slaan dit op zodat support koppelingen tussen pas en factuur kan herleiden. |
curl -X POST https://api.pechplan.nl/roadside-passes \
-H "Authorization: Bearer <token>" \
-H "Content-Type: application/json" \
-H "Accept: application/json" \
-d '{
"product_id": "9b1f3a4d-6c2e-4f8a-9b1d-3e5a7c9f0b12",
"kenteken": "2ZPZ13",
"chassisnummer": "WVWZZZ1KZBM123456",
"voornaam": "Jan",
"achternaam": "Jansen",
"straatnaam": "Hoofdstraat",
"huisnummer": "12",
"postcode": "1234 AB",
"plaatsnaam": "Amsterdam",
"telefoonnummer": "0612345678",
"emailadres": "jan@example.nl",
"invoice_id": "WO-2026-04827"
}'
{
"action": "created",
"pass": {
"id": "f0e8d1a2-3b5c-4d6e-8f7a-9b0c1d2e3f4a",
"product_id": "9b1f3a4d-6c2e-4f8a-9b1d-3e5a7c9f0b12",
"kenteken": "2ZPZ13",
"issued_at": "2026-04-28",
"expires_at": "2027-04-28",
"status": "active",
"invoice_id": "WO-2026-04827",
"customer_id": "a1b2c3d4-e5f6-7890-abcd-ef0123456789",
"vehicle_id": "1234abcd-5678-90ef-1234-567890abcdef"
}
}
{
"action": "extended",
"pass": {
"id": "f0e8d1a2-3b5c-4d6e-8f7a-9b0c1d2e3f4a",
"product_id": "9b1f3a4d-6c2e-4f8a-9b1d-3e5a7c9f0b12",
"kenteken": "2ZPZ13",
"issued_at": "2025-05-10",
"expires_at": "2027-05-10",
"status": "active",
"invoice_id": "WO-2026-04827",
"customer_id": "a1b2c3d4-e5f6-7890-abcd-ef0123456789",
"vehicle_id": "1234abcd-5678-90ef-1234-567890abcdef"
}
}
| Veld | Beschrijving |
|---|---|
action | "created" bij een nieuwe pas, "extended" bij verlenging van een bestaande pas. |
pass.id | Stabiele identifier van de pas. Bewaar deze in jullie order-/factuurregel zodat support het verband kan herleiden. |
pass.issued_at | Originele ingangsdatum (blijft staan bij verlenging). |
pass.expires_at | Vervaldatum (1 jaar na ingang, of huidige vervaldatum + 1 jaar bij verlenging). |
pass.status | Altijd "active" bij succesvolle responses. |
pass.customer_id / pass.vehicle_id | Stabiele identifiers binnen het PechPlan-systeem. Optioneel te bewaren voor latere referentie. |
| Status | Betekenis |
|---|---|
403 | De aan het token gekoppelde garage mag geen pechhulpproducten verkopen. |
422 | Validatiefout op de payload, of er bestaat een actieve pas die nog niet verlengd mag worden (alleen mogelijk in de laatste 2 maanden van de looptijd). |
Het /roadside-passes-endpoint is op basis van garage + kenteken + product + tijdvenster de-facto idempotent: een herhaald verzoek binnen dezelfde dag voor dezelfde combinatie levert in de regel hetzelfde resultaat (verlengen of error op te-vroege verlenging). Toch raden we aan:
pass.id uit het response zodra je 'm hebt — dat voorkomt dubbele aanmaakpogingen vanuit dezelfde werkorder.401: toon "PechPlan-koppeling moet opnieuw worden geconfigureerd" met directe link naar jullie configuratiepagina.422 op verlenging: toon "Pas is nog te lang geldig om te verlengen" en de huidige expires_at als die bekend is uit eerder gebruik.action ("Nieuwe pas aangemaakt" / "Bestaande pas verlengd tot {expires_at}") zodat de gebruiker weet wat er is gebeurd.Voor integratiepartners is een sandbox-token beschikbaar. Sandbox-tokens gebruiken dezelfde endpoints, dezelfde URL's, dezelfde validatieregels en dezelfde response-structuur als productie. Het verschil zit alleen aan onze kant: verzoeken met een sandbox-token worden niet verwerkt — er worden geen passen, klanten of facturen aangemaakt. De response is voor de aanroeper niet te onderscheiden van een echte productieresponse.
Vraag een sandbox-token aan via info@pechplan.nl. Daarmee kun je het volgende testen:
GET /roadside-products retourneert in sandbox een vaste lijst met twee producten met de volgende product_id's. Gebruik een van deze in POST /roadside-passes:
00000000-0000-4000-8000-000000000001 — PechPlan Basis00000000-0000-4000-8000-000000000002 — PechPlan EUPOST /roadside-passes reageert in sandbox op basis van het kenteken:
| Kenteken | HTTP | Resultaat |
|---|---|---|
11AABB |
200 |
Succesvolle nieuwe pas (action: "created") |
33EEFF |
200 |
Succesvolle verlenging (action: "extended") |
22CCDD |
422 |
"This pass can only be extended in the last 2 months of its term." |
| elk ander kenteken | 422 |
"No vehicle found for this license plate." |
Gebruik dit om je integratie end-to-end te testen voordat je overstapt naar een productietoken.
POST /roadside-passes wordt aangeroepen.
De huidige API is versie v1. Backward-compatibele uitbreidingen (nieuwe optionele velden, nieuwe endpoints) kunnen zonder waarschuwing worden uitgerold. Breaking changes worden minstens 30 dagen vooraf aangekondigd op het bij ons bekende technisch contactadres en gaan altijd gepaard met een nieuwe versiering (v2) op een nieuw pad of subdomein.
Voor partner-onboarding, technische vragen of het aanmelden van een nieuwe DMS-koppeling: info@pechplan.nl. Geef bij aanmelding aan welke DMS-software jullie leveren, een schatting van het aantal aangesloten garages, en een technisch contactpersoon voor proactieve communicatie over wijzigingen.
v1 PechPlan API