Deze API laat externe kinderopvang-software (bv. Deona, Ferm/KOALA, KoningApestaart) aanvragen uit het Lokaal Loket Kinderopvang van Luwio ophalen en erop reageren (aanbod doen, status wijzigen, annuleren, berichten sturen).
1. Authenticatie (OAuth2 Client Credentials)
Elke partij krijgt een client_id (GUID) en client_secret. Daarmee vraagt men een toegangstoken op.
POST /api/public/v1/token Content-Type: application/x-www-form-urlencoded
Optie A, via Basic-auth header:
Authorization: Basic base64(client_id:client_secret)
met body:
grant_type=client_credentials
Optie B, alles in de form-body:
grant_type=client_credentials&client_id={client_id}&client_secret={client_secret}Response (200):
{
"access_token": "<jwt>",
"token_type": "Bearer",
"expires_in": 3600
}Gebruik dit token op elke volgende call:
Authorization: Bearer <jwt>
Foutresponses:
400 unsupported_grant_type: alsgrant_typenietclient_credentialsis.400 invalid_request: ontbrekende/ongeldigeclient_id/client_secret.401: client_id onbekend of secret klopt niet.
2. Autorisatie & toegang
Een client_id/secret is altijd gekoppeld aan één tenant, en krijgt per key een vastgelegde toegang tot specifieke locaties (en/of organisaties). Enkel aanvragen van de locaties waartoe de key toegang heeft, komen terug in de resultaten. Dit wordt serverside afgedwongen, niet clientside gefilterd.
3. Endpoints
Alle routes hieronder starten met /api/public/integrations/koz-oapi/v1.
3.1 Aanvragen ophalen
GET /requests/{establishmentNumber}
GET /requestsQuery-parameters (optioneel):
| Param | Type | Betekenis |
|---|---|---|
| From | datetime | enkel aanvragen gewijzigd na deze datum (inclusief) |
| Untill | datetime | enkel aanvragen gewijzigd voor deze datum (exclusief) |
| Limit | int | paginagrootte (standaard 100, geen bovengrens) |
| Offset | int | rij-offset voor paginering |
| GroupId | guid | filter op een specifieke aanvraaggroep (extern group-id of Luwio application-id) |
Mogelijke waarden voor moments: vroeg, voormiddag, namiddag, avond.
Response (200): lijst van aanvragen met o.a. status, contactpersonen, kind- en oudergegevens, schema (dagen/momenten), en paginatie-info.
Rechten vereist: ApplicationsView.
3.2 Status wijzigen
POST /requests/{applicationForLocationId}/transition/{status}{status} moet één van volgende waarden zijn:
| Status | Betekenis |
|---|---|
| new | stopt verwerking, zet terug naar nieuw (enkel geldig als aanvraag in verwerking staat) |
| no_spot | geen plaats, annuleert de aanvraag automatisch |
| receive | aanvraag in behandeling nemen (enkel geldig vanuit status "nieuw") |
| accept | het aanbod (proposition) wordt in optie gezet |
| refuse | het aanbod wordt geweigerd, annuleert de aanvraag automatisch |
| approve | de plaats wordt definitief gereserveerd |
Idempotentie: receive is idempotent. Als de aanvraag al in status InProgress staat (dus al ontvangen was), geeft dit gewoon 200 OK terug als no-op, zonder de verwerking of automatische berichten opnieuw te starten. Dit vangt retries/races vanuit de integratiepartij op zonder dat die een 400 te zien krijgt voor iets dat al gelukt was.
Response: 200 OK (leeg), 400 bij validatie/business-fout, 404 als de aanvraag niet bestaat.
Rechten vereist: ApplicationsEdit.
3.3 Aanbod (proposition) doorgeven
POST /requests/{applicationForLocationId}/transition/proposition
Content-Type: application/jsonBody:
{
"propositionSchedules": [
{
"startDate": "2026-09-01",
"endDate": "2026-09-14",
"days": [
{ "day": 1, "early": false, "morning": true, "afternoon": true, "late": false }
]
}
]
}
daysmoet exact 14 dagen bevatten (2 weken), elkedaytussen 1 en 14.endDatemoet ≥startDatezijn.
Rechten vereist: ApplicationsEdit.
3.4 Aanvraag annuleren
POST /requests/{applicationForLocationId}/transition/cancel Content-Type: application/jsonBody:
{
"cancelledBy": "daycare",
"reason": "no_spot"
}cancelledBy: requestor, daycare, monitor, system.reason: miscarriage, duplicate_application, school_age_reached, moved, spot_elsewhere, insufficient, no_answer, no_spot, no_spot_end_date, financial, financials_changed, needs_changed, location_changed, other_reason.
Rechten vereist: ApplicationsEdit.
3.5 Bericht toevoegen aan een aanvraag
POST /requests/{applicationForLocationId}/message
Content-Type: application/jsonBody:
{
"message": "Vrije tekst van het bericht",
"sender": "requestor"
}sender: daycare, requestor (de aanvragende ouder), of monitor.
Rechten vereist: ApplicationsEdit.
4. Algemene foutresponse
Bij 400/401/404 komt telkens een foutmelding terug met validatie- of business-foutdetails.
Was dit artikel nuttig?
Dat is fantastisch!
Hartelijk dank voor uw beoordeling
Sorry dat we u niet konden helpen
Hartelijk dank voor uw beoordeling
Feedback verzonden
We stellen uw moeite op prijs en zullen proberen het artikel te verbeteren