{"openapi":"3.1.0","info":{"title":"Mederi Integration API","version":"0.2.0","summary":"Canonieke integratielaag tussen Mederi en externe systemen.","description":"M.I.A. is de enige integratiegrens rond de Mederi-gegevens.\n\n**Mederi is master.** M.I.A. leest de bronsystemen read-only en geeft\neen canoniek contract terug; legacy tabel- en kolomnamen komen er nooit in voor.\n\n**Webhooks zijn notificaties, geen datalevering.** Een webhook zegt dat een\nobject gewijzigd is; de actuele toestand haal je op bij het endpoint.\n\nAPI-semver blijft `v1`; `info.version` is de versie van deze installatie.","contact":{"name":"Mederi","url":"https://sandbox.mia.e-mederi.be"}},"servers":[{"url":"https://sandbox.mia.e-mederi.be","description":"Sandbox"},{"url":"https://mia.e-mederi.be","description":"Production"}],"tags":[{"name":"Platform","description":"Health en versie. Publiek, geen token nodig."},{"name":"Authenticatie","description":"OAuth2 client credentials."},{"name":"Practices","description":"Canonieke praktijken."},{"name":"Vacancies","description":"Canonieke vacatures."},{"name":"Candidates","description":"Candidate-identiteiten, zonder persoonsgegevens."},{"name":"Applications","description":"Sollicitaties."},{"name":"Recruitment cases","description":"Technisch identity/link-register."},{"name":"Webhooks","description":"Eigen subscriptions en leveringen."}],"security":[{"oauth2ClientCredentials":[]}],"paths":{"/health":{"get":{"operationId":"systemHealth","tags":["Platform"],"summary":"Health check","description":"Publiek. Bevat bewust geen databasedetails.","parameters":[],"responses":{"200":{"description":"OK.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessEnvelope"},"example":{"service":"Mederi Integration API","status":"ok","version":"0.2.0"}}}}},"security":[]}},"/version":{"get":{"operationId":"systemVersion","tags":["Platform"],"summary":"Versie-informatie","description":"Publiek. API-versie, build en omgeving.","parameters":[],"responses":{"200":{"description":"OK.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessEnvelope"},"example":{"success":true,"data":{"api_version":"v1","build":"0.2.0","php":"8.3","environment":"production"},"meta":{"request_id":"facade00-0000-4000-8000-00000000cafe","api_version":"v1"}}}}}},"security":[]}},"/v1/health":{"get":{"operationId":"systemHealthV1","tags":["Platform"],"summary":"Health check","description":"Publiek. Bevat bewust geen databasedetails.","parameters":[],"responses":{"200":{"description":"OK.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessEnvelope"},"example":{"service":"Mederi Integration API","status":"ok","version":"0.2.0"}}}}},"security":[]}},"/v1/version":{"get":{"operationId":"systemVersionV1","tags":["Platform"],"summary":"Versie-informatie","description":"Publiek. API-versie, build en omgeving.","parameters":[],"responses":{"200":{"description":"OK.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessEnvelope"},"example":{"success":true,"data":{"api_version":"v1","build":"0.2.0","php":"8.3","environment":"production"},"meta":{"request_id":"facade00-0000-4000-8000-00000000cafe","api_version":"v1"}}}}}},"security":[]}},"/oauth/token":{"post":{"operationId":"oAuthToken","tags":["Authenticatie"],"summary":"Access token opvragen","description":"OAuth2 client credentials. Volgt RFC 6749 en NIET de M.I.A.-envelope.","parameters":[],"responses":{"200":{"description":"Access token.","headers":{"Cache-Control":{"schema":{"type":"string"},"description":"no-store"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TokenResponse"},"example":{"access_token":"mia_EXAMPLE-TOKEN-NIET-ECHT","token_type":"Bearer","expires_in":3600,"scope":"vacancies:read practices:read"}}}},"400":{"description":"invalid_request, invalid_scope of unsupported_grant_type.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/OAuthError"},"example":{"error":"invalid_client","error_description":"Clientauthenticatie is mislukt."}}}},"401":{"description":"invalid_client: onbekende client of verkeerd secret.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/OAuthError"},"example":{"error":"invalid_client","error_description":"Clientauthenticatie is mislukt."}}}}},"security":[],"requestBody":{"required":true,"content":{"application/x-www-form-urlencoded":{"schema":{"type":"object","required":["grant_type"],"properties":{"grant_type":{"type":"string","const":"client_credentials"},"scope":{"type":"string","description":"Spatiegescheiden. Leeg = alle scopes van de client."}}},"example":{"grant_type":"client_credentials","scope":"vacancies:read practices:read"}}}}}},"/v1/vacancies":{"get":{"operationId":"vacancyIndex","tags":["Vacancies"],"summary":"Vacatures opvragen","description":"Gepagineerde lijst van canonieke vacatures. Mederi is master.","parameters":[{"name":"page","in":"query","required":false,"description":"Paginanummer, vanaf 1.","schema":{"type":"integer"},"example":1},{"name":"per_page","in":"query","required":false,"description":"Aantal per pagina, maximaal 100.","schema":{"type":"integer"},"example":25},{"name":"language","in":"query","required":false,"description":"nl of fr.","schema":{"type":"string"},"example":"nl"},{"name":"province","in":"query","required":false,"description":"Legacy provinciecode.","schema":{"type":"string"},"example":"41"},{"name":"position","in":"query","required":false,"description":"Legacy positiecode.","schema":{"type":"string"},"example":"31"},{"name":"status","in":"query","required":false,"description":"created, open of filled.","schema":{"type":"string"},"example":"open"},{"name":"published","in":"query","required":false,"description":"Alleen (niet-)gepubliceerde vacatures.","schema":{"type":"boolean"},"example":true},{"name":"practice","in":"query","required":false,"description":"Filter op practice_id.","schema":{"type":"string"},"example":"TL-DEMO-001"},{"name":"updated_since","in":"query","required":false,"description":"ISO 8601 datum of datum-tijd.","schema":{"type":"string"},"example":"2026-01-01"}],"responses":{"200":{"description":"OK.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessEnvelope"},"example":{"success":true,"data":[{"uuid":"facade00-0000-4000-8000-000000000001","title":"Verpleegkundige thuisverpleging (demo)","slug":"verpleegkundige-demo","teaser":"Voorbeeldvacature. Alle gegevens zijn verzonnen.","language":"nl","practice":{"legacy_reference":"TL-DEMO-001","name":"Praktijk Demo Antwerpen","type":"groepspraktijk"},"location":{"province":{"code":"41","label":"Antwerpen"},"region":"Regio Antwerpen","postal_code":null,"city":null,"country":null,"latitude":null,"longitude":null},"position":{"code":"31","label":"Verpleegkundige"},"employment":{"time":{"code":"parttime","value":"part_time"},"contract":{"code":"werknemer","value":"employee"}},"content":{"intro":"Demo-intro.","profile":null,"tasks":null,"offer":null,"contact":null},"image":null,"status":{"code":"2","value":"open"},"visible":true,"published":true,"display_date":"2026-01-05","created_at":"2026-01-01T09:00:00+01:00","updated_at":"2026-02-01T09:00:00+01:00","valid_through":null,"seeking_nurse_code":null}],"meta":{"request_id":"facade00-0000-4000-8000-00000000cafe","api_version":"v1","pagination":{"page":1,"per_page":25,"total":1,"total_pages":1}}}}}},"401":{"description":"Geen of ongeldig token.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"example":{"success":false,"error":{"code":"UNAUTHENTICATED","message":"Geen of ongeldig token."},"meta":{"request_id":"facade00-0000-4000-8000-00000000cafe","api_version":"v1"}}}}},"403":{"description":"Token mist de vereiste scope.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"example":{"success":false,"error":{"code":"INSUFFICIENT_SCOPE","message":"Token mist de vereiste scope."},"meta":{"request_id":"facade00-0000-4000-8000-00000000cafe","api_version":"v1"}}}}},"422":{"description":"Ongeldige parameters.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"example":{"success":false,"error":{"code":"VALIDATION_ERROR","message":"Ongeldige parameters."},"meta":{"request_id":"facade00-0000-4000-8000-00000000cafe","api_version":"v1"}}}}},"503":{"description":"Bron tijdelijk onbereikbaar.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"example":{"success":false,"error":{"code":"LEGACY_SOURCE_UNAVAILABLE","message":"Bron tijdelijk onbereikbaar."},"meta":{"request_id":"facade00-0000-4000-8000-00000000cafe","api_version":"v1"}}}}}},"security":[{"oauth2ClientCredentials":["vacancies:read"]}]}},"/v1/vacancies/{uuid}":{"get":{"operationId":"vacancyShow","tags":["Vacancies"],"summary":"Eén vacature opvragen","description":"De canonieke vacature op Mederi-UUID (`Vacatures_uu`).","parameters":[{"name":"uuid","in":"path","required":true,"schema":{"type":"string"},"example":"facade00-0000-4000-8000-000000000001"}],"responses":{"200":{"description":"OK.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessEnvelope"},"example":{"success":true,"data":{"uuid":"facade00-0000-4000-8000-000000000001","title":"Verpleegkundige thuisverpleging (demo)","slug":"verpleegkundige-demo","teaser":"Voorbeeldvacature. Alle gegevens zijn verzonnen.","language":"nl","practice":{"legacy_reference":"TL-DEMO-001","name":"Praktijk Demo Antwerpen","type":"groepspraktijk"},"location":{"province":{"code":"41","label":"Antwerpen"},"region":"Regio Antwerpen","postal_code":null,"city":null,"country":null,"latitude":null,"longitude":null},"position":{"code":"31","label":"Verpleegkundige"},"employment":{"time":{"code":"parttime","value":"part_time"},"contract":{"code":"werknemer","value":"employee"}},"content":{"intro":"Demo-intro.","profile":null,"tasks":null,"offer":null,"contact":null},"image":null,"status":{"code":"2","value":"open"},"visible":true,"published":true,"display_date":"2026-01-05","created_at":"2026-01-01T09:00:00+01:00","updated_at":"2026-02-01T09:00:00+01:00","valid_through":null,"seeking_nurse_code":null},"meta":{"request_id":"facade00-0000-4000-8000-00000000cafe","api_version":"v1"}}}}},"401":{"description":"Geen of ongeldig token.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"example":{"success":false,"error":{"code":"UNAUTHENTICATED","message":"Geen of ongeldig token."},"meta":{"request_id":"facade00-0000-4000-8000-00000000cafe","api_version":"v1"}}}}},"403":{"description":"Token mist de vereiste scope.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"example":{"success":false,"error":{"code":"INSUFFICIENT_SCOPE","message":"Token mist de vereiste scope."},"meta":{"request_id":"facade00-0000-4000-8000-00000000cafe","api_version":"v1"}}}}},"422":{"description":"Ongeldige parameters.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"example":{"success":false,"error":{"code":"VALIDATION_ERROR","message":"Ongeldige parameters."},"meta":{"request_id":"facade00-0000-4000-8000-00000000cafe","api_version":"v1"}}}}},"503":{"description":"Bron tijdelijk onbereikbaar.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"example":{"success":false,"error":{"code":"LEGACY_SOURCE_UNAVAILABLE","message":"Bron tijdelijk onbereikbaar."},"meta":{"request_id":"facade00-0000-4000-8000-00000000cafe","api_version":"v1"}}}}},"404":{"description":"Niet gevonden.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"example":{"success":false,"error":{"code":"NOT_FOUND","message":"Niet gevonden."},"meta":{"request_id":"facade00-0000-4000-8000-00000000cafe","api_version":"v1"}}}}}},"security":[{"oauth2ClientCredentials":["vacancies:read"]}]}},"/v1/practices":{"get":{"operationId":"practiceIndex","tags":["Practices"],"summary":"Praktijken opvragen","description":"Gepagineerde lijst van canonieke praktijken uit beide bronnen.","parameters":[{"name":"page","in":"query","required":false,"description":"Paginanummer, vanaf 1.","schema":{"type":"integer"},"example":1},{"name":"per_page","in":"query","required":false,"description":"Aantal per pagina, maximaal 100.","schema":{"type":"integer"},"example":25},{"name":"active","in":"query","required":false,"description":"Alleen (in)actieve praktijken.","schema":{"type":"boolean"},"example":true},{"name":"visible","in":"query","required":false,"description":"Alleen (on)zichtbare praktijken.","schema":{"type":"boolean"},"example":true},{"name":"language","in":"query","required":false,"description":"nl of fr.","schema":{"type":"string"},"example":"nl"},{"name":"province","in":"query","required":false,"description":"Provincienaam.","schema":{"type":"string"},"example":"Antwerpen"},{"name":"search","in":"query","required":false,"description":"Exacte naam; geen fuzzy zoeken.","schema":{"type":"string"},"example":"Praktijk Demo Antwerpen"}],"responses":{"200":{"description":"OK.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessEnvelope"},"example":{"success":true,"data":[{"practice_id":"TL-DEMO-001","name":"Praktijk Demo Antwerpen","alias":"Demo Antwerpen","active":true,"visible":true,"language":"nl","organisation_type":"groepspraktijk","period":{"start_date":"2020-01-01","stop_date":null},"identifiers":{"vat":"BE0000000097"},"address":{"street":"Demostraat 1","postal_code":"2000","city":"Antwerpen","country":"BE","province":"Antwerpen","latitude":51.2194,"longitude":4.4025,"geo_precision":"city"},"contact":{"email":"demo-antwerpen@example.invalid","phone":"+32 3 000 00 01"},"presentation":{"logo":null,"region_text":"Regio Antwerpen (demo)","contact_text":null},"coach":{"reference":"COACH-DEMO-1"},"external_refs":{"teamleader_id":"TL-DEMO-001","tdm_ids":[]},"warnings":[]}],"meta":{"request_id":"facade00-0000-4000-8000-00000000cafe","api_version":"v1","pagination":{"page":1,"per_page":25,"total":1,"total_pages":1}}}}}},"401":{"description":"Geen of ongeldig token.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"example":{"success":false,"error":{"code":"UNAUTHENTICATED","message":"Geen of ongeldig token."},"meta":{"request_id":"facade00-0000-4000-8000-00000000cafe","api_version":"v1"}}}}},"403":{"description":"Token mist de vereiste scope.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"example":{"success":false,"error":{"code":"INSUFFICIENT_SCOPE","message":"Token mist de vereiste scope."},"meta":{"request_id":"facade00-0000-4000-8000-00000000cafe","api_version":"v1"}}}}},"422":{"description":"Ongeldige parameters.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"example":{"success":false,"error":{"code":"VALIDATION_ERROR","message":"Ongeldige parameters."},"meta":{"request_id":"facade00-0000-4000-8000-00000000cafe","api_version":"v1"}}}}},"503":{"description":"Bron tijdelijk onbereikbaar.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"example":{"success":false,"error":{"code":"LEGACY_SOURCE_UNAVAILABLE","message":"Bron tijdelijk onbereikbaar."},"meta":{"request_id":"facade00-0000-4000-8000-00000000cafe","api_version":"v1"}}}}}},"security":[{"oauth2ClientCredentials":["practices:read"]}]}},"/v1/practices/{practice_id}":{"get":{"operationId":"practiceShow","tags":["Practices"],"summary":"Eén praktijk opvragen","description":"Op `practice_id`: de Teamleader-referentie, bewust geen UUID.","parameters":[{"name":"practice_id","in":"path","required":true,"schema":{"type":"string"},"example":"TL-DEMO-001"}],"responses":{"200":{"description":"OK.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessEnvelope"},"example":{"success":true,"data":{"practice_id":"TL-DEMO-001","name":"Praktijk Demo Antwerpen","alias":"Demo Antwerpen","active":true,"visible":true,"language":"nl","organisation_type":"groepspraktijk","period":{"start_date":"2020-01-01","stop_date":null},"identifiers":{"vat":"BE0000000097"},"address":{"street":"Demostraat 1","postal_code":"2000","city":"Antwerpen","country":"BE","province":"Antwerpen","latitude":51.2194,"longitude":4.4025,"geo_precision":"city"},"contact":{"email":"demo-antwerpen@example.invalid","phone":"+32 3 000 00 01"},"presentation":{"logo":null,"region_text":"Regio Antwerpen (demo)","contact_text":null},"coach":{"reference":"COACH-DEMO-1"},"external_refs":{"teamleader_id":"TL-DEMO-001","tdm_ids":[]},"warnings":[]},"meta":{"request_id":"facade00-0000-4000-8000-00000000cafe","api_version":"v1"}}}}},"401":{"description":"Geen of ongeldig token.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"example":{"success":false,"error":{"code":"UNAUTHENTICATED","message":"Geen of ongeldig token."},"meta":{"request_id":"facade00-0000-4000-8000-00000000cafe","api_version":"v1"}}}}},"403":{"description":"Token mist de vereiste scope.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"example":{"success":false,"error":{"code":"INSUFFICIENT_SCOPE","message":"Token mist de vereiste scope."},"meta":{"request_id":"facade00-0000-4000-8000-00000000cafe","api_version":"v1"}}}}},"422":{"description":"Ongeldige parameters.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"example":{"success":false,"error":{"code":"VALIDATION_ERROR","message":"Ongeldige parameters."},"meta":{"request_id":"facade00-0000-4000-8000-00000000cafe","api_version":"v1"}}}}},"503":{"description":"Bron tijdelijk onbereikbaar.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"example":{"success":false,"error":{"code":"LEGACY_SOURCE_UNAVAILABLE","message":"Bron tijdelijk onbereikbaar."},"meta":{"request_id":"facade00-0000-4000-8000-00000000cafe","api_version":"v1"}}}}},"404":{"description":"Niet gevonden.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"example":{"success":false,"error":{"code":"NOT_FOUND","message":"Niet gevonden."},"meta":{"request_id":"facade00-0000-4000-8000-00000000cafe","api_version":"v1"}}}}}},"security":[{"oauth2ClientCredentials":["practices:read"]}]}},"/v1/candidates":{"get":{"operationId":"candidateIndex","tags":["Candidates"],"summary":"Candidate-identiteiten opvragen","description":"Identity-only. Bevat geen enkel persoonsgegeven en geen lookup hash.","parameters":[{"name":"page","in":"query","required":false,"description":"Paginanummer, vanaf 1.","schema":{"type":"integer"},"example":1},{"name":"per_page","in":"query","required":false,"description":"Aantal per pagina, maximaal 100.","schema":{"type":"integer"},"example":25},{"name":"status","in":"query","required":false,"description":"active, merged of inactive.","schema":{"type":"string"},"example":"active"},{"name":"created_since","in":"query","required":false,"description":"ISO 8601 datum of datum-tijd.","schema":{"type":"string"},"example":"2026-01-01"}],"responses":{"200":{"description":"OK.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessEnvelope"},"example":{"success":true,"data":[{"candidate_uuid":"facade00-0000-4000-8000-0000000000c1","status":"active","merged_into_candidate_uuid":null,"created_at":"2026-01-01T09:00:00+01:00","updated_at":null}],"meta":{"request_id":"facade00-0000-4000-8000-00000000cafe","api_version":"v1","pagination":{"page":1,"per_page":25,"total":1,"total_pages":1}}}}}},"401":{"description":"Geen of ongeldig token.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"example":{"success":false,"error":{"code":"UNAUTHENTICATED","message":"Geen of ongeldig token."},"meta":{"request_id":"facade00-0000-4000-8000-00000000cafe","api_version":"v1"}}}}},"403":{"description":"Token mist de vereiste scope.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"example":{"success":false,"error":{"code":"INSUFFICIENT_SCOPE","message":"Token mist de vereiste scope."},"meta":{"request_id":"facade00-0000-4000-8000-00000000cafe","api_version":"v1"}}}}},"422":{"description":"Ongeldige parameters.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"example":{"success":false,"error":{"code":"VALIDATION_ERROR","message":"Ongeldige parameters."},"meta":{"request_id":"facade00-0000-4000-8000-00000000cafe","api_version":"v1"}}}}},"503":{"description":"Bron tijdelijk onbereikbaar.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"example":{"success":false,"error":{"code":"LEGACY_SOURCE_UNAVAILABLE","message":"Bron tijdelijk onbereikbaar."},"meta":{"request_id":"facade00-0000-4000-8000-00000000cafe","api_version":"v1"}}}}}},"security":[{"oauth2ClientCredentials":["candidates:read"]}]}},"/v1/candidates/{candidate_uuid}":{"get":{"operationId":"candidateShow","tags":["Candidates"],"summary":"Eén Candidate-identiteit opvragen","description":"Identity-only: uuid, status en merge-verwijzing.","parameters":[{"name":"candidate_uuid","in":"path","required":true,"schema":{"type":"string"},"example":"facade00-0000-4000-8000-0000000000c1"}],"responses":{"200":{"description":"OK.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessEnvelope"},"example":{"success":true,"data":{"candidate_uuid":"facade00-0000-4000-8000-0000000000c1","status":"active","merged_into_candidate_uuid":null,"created_at":"2026-01-01T09:00:00+01:00","updated_at":null},"meta":{"request_id":"facade00-0000-4000-8000-00000000cafe","api_version":"v1"}}}}},"401":{"description":"Geen of ongeldig token.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"example":{"success":false,"error":{"code":"UNAUTHENTICATED","message":"Geen of ongeldig token."},"meta":{"request_id":"facade00-0000-4000-8000-00000000cafe","api_version":"v1"}}}}},"403":{"description":"Token mist de vereiste scope.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"example":{"success":false,"error":{"code":"INSUFFICIENT_SCOPE","message":"Token mist de vereiste scope."},"meta":{"request_id":"facade00-0000-4000-8000-00000000cafe","api_version":"v1"}}}}},"422":{"description":"Ongeldige parameters.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"example":{"success":false,"error":{"code":"VALIDATION_ERROR","message":"Ongeldige parameters."},"meta":{"request_id":"facade00-0000-4000-8000-00000000cafe","api_version":"v1"}}}}},"503":{"description":"Bron tijdelijk onbereikbaar.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"example":{"success":false,"error":{"code":"LEGACY_SOURCE_UNAVAILABLE","message":"Bron tijdelijk onbereikbaar."},"meta":{"request_id":"facade00-0000-4000-8000-00000000cafe","api_version":"v1"}}}}},"404":{"description":"Niet gevonden.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"example":{"success":false,"error":{"code":"NOT_FOUND","message":"Niet gevonden."},"meta":{"request_id":"facade00-0000-4000-8000-00000000cafe","api_version":"v1"}}}}}},"security":[{"oauth2ClientCredentials":["candidates:read"]}]}},"/v1/applications":{"get":{"operationId":"applicationIndex","tags":["Applications"],"summary":"Sollicitaties opvragen","description":"Gepagineerde lijst. Zonder interne id, bronmapping of persoonsgegevens.","parameters":[{"name":"page","in":"query","required":false,"description":"Paginanummer, vanaf 1.","schema":{"type":"integer"},"example":1},{"name":"per_page","in":"query","required":false,"description":"Aantal per pagina, maximaal 100.","schema":{"type":"integer"},"example":25},{"name":"candidate_uuid","in":"query","required":false,"description":"Filter op Candidate.","schema":{"type":"string"},"example":"facade00-0000-4000-8000-0000000000c1"},{"name":"vacancy_uuid","in":"query","required":false,"description":"Filter op vacature.","schema":{"type":"string"},"example":"facade00-0000-4000-8000-000000000001"},{"name":"practice_id","in":"query","required":false,"description":"Filter op praktijk.","schema":{"type":"string"},"example":"TL-DEMO-001"},{"name":"resolution","in":"query","required":false,"description":"resolved, unresolved of ambiguous.","schema":{"type":"string"},"example":"resolved"},{"name":"created_since","in":"query","required":false,"description":"ISO 8601 datum of datum-tijd.","schema":{"type":"string"},"example":"2026-01-01"}],"responses":{"200":{"description":"OK.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessEnvelope"},"example":{"success":true,"data":[{"application_uuid":"facade00-0000-4000-8000-0000000000a1","candidate_uuid":"facade00-0000-4000-8000-0000000000c1","vacancy_uuid":"facade00-0000-4000-8000-000000000001","practice_id":"TL-DEMO-001","resolution":"resolved","consent_flag":true,"entrypoint_raw":null,"entrypoint_code":null,"created_at":"2026-01-02T10:00:00+01:00","updated_at":null}],"meta":{"request_id":"facade00-0000-4000-8000-00000000cafe","api_version":"v1","pagination":{"page":1,"per_page":25,"total":1,"total_pages":1}}}}}},"401":{"description":"Geen of ongeldig token.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"example":{"success":false,"error":{"code":"UNAUTHENTICATED","message":"Geen of ongeldig token."},"meta":{"request_id":"facade00-0000-4000-8000-00000000cafe","api_version":"v1"}}}}},"403":{"description":"Token mist de vereiste scope.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"example":{"success":false,"error":{"code":"INSUFFICIENT_SCOPE","message":"Token mist de vereiste scope."},"meta":{"request_id":"facade00-0000-4000-8000-00000000cafe","api_version":"v1"}}}}},"422":{"description":"Ongeldige parameters.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"example":{"success":false,"error":{"code":"VALIDATION_ERROR","message":"Ongeldige parameters."},"meta":{"request_id":"facade00-0000-4000-8000-00000000cafe","api_version":"v1"}}}}},"503":{"description":"Bron tijdelijk onbereikbaar.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"example":{"success":false,"error":{"code":"LEGACY_SOURCE_UNAVAILABLE","message":"Bron tijdelijk onbereikbaar."},"meta":{"request_id":"facade00-0000-4000-8000-00000000cafe","api_version":"v1"}}}}}},"security":[{"oauth2ClientCredentials":["applications:read"]}]},"post":{"operationId":"applicationStore","tags":["Applications"],"summary":"Sollicitatie aanmaken","description":"Resolveert de Candidate-identiteit en legt de Application vast. Ondersteunt `Idempotency-Key`.","parameters":[],"responses":{"201":{"description":"Aangemaakt.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessEnvelope"},"example":{"success":true,"data":{"application_uuid":"facade00-0000-4000-8000-0000000000a1","candidate_uuid":"facade00-0000-4000-8000-0000000000c1","resolution":"resolved","candidate_created":true,"vacancy_uuid":"facade00-0000-4000-8000-000000000001","practice_id":"TL-DEMO-001","consent_flag":true,"entrypoint_raw":null,"entrypoint_code":null,"created_at":"2026-01-02T10:00:00+01:00"},"meta":{"request_id":"facade00-0000-4000-8000-00000000cafe","api_version":"v1"}}}}},"401":{"description":"Geen of ongeldig token.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"example":{"success":false,"error":{"code":"UNAUTHENTICATED","message":"Geen of ongeldig token."},"meta":{"request_id":"facade00-0000-4000-8000-00000000cafe","api_version":"v1"}}}}},"403":{"description":"Token mist de vereiste scope.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"example":{"success":false,"error":{"code":"INSUFFICIENT_SCOPE","message":"Token mist de vereiste scope."},"meta":{"request_id":"facade00-0000-4000-8000-00000000cafe","api_version":"v1"}}}}},"422":{"description":"Ongeldige parameters.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"example":{"success":false,"error":{"code":"VALIDATION_ERROR","message":"Ongeldige parameters."},"meta":{"request_id":"facade00-0000-4000-8000-00000000cafe","api_version":"v1"}}}}},"503":{"description":"Bron tijdelijk onbereikbaar.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"example":{"success":false,"error":{"code":"LEGACY_SOURCE_UNAVAILABLE","message":"Bron tijdelijk onbereikbaar."},"meta":{"request_id":"facade00-0000-4000-8000-00000000cafe","api_version":"v1"}}}}},"409":{"description":"Ambiguïteit, gelijktijdig verzoek of dubbele bronidentiteit.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"example":{"success":false,"error":{"code":"CANDIDATE_IDENTITY_AMBIGUOUS","message":"Ambiguïteit, gelijktijdig verzoek of dubbele bronidentiteit."},"meta":{"request_id":"facade00-0000-4000-8000-00000000cafe","api_version":"v1"}}}}}},"security":[{"oauth2ClientCredentials":["applications:write"]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApplicationIntake"},"example":{"vacancy_uuid":"facade00-0000-4000-8000-000000000001","email":"demo.kandidaat@example.invalid","consent_flag":true}}}}}},"/v1/applications/{application_uuid}":{"get":{"operationId":"applicationShow","tags":["Applications"],"summary":"Eén sollicitatie opvragen","description":"De canonieke Application op UUID.","parameters":[{"name":"application_uuid","in":"path","required":true,"schema":{"type":"string"},"example":"facade00-0000-4000-8000-0000000000a1"}],"responses":{"200":{"description":"OK.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessEnvelope"},"example":{"success":true,"data":{"application_uuid":"facade00-0000-4000-8000-0000000000a1","candidate_uuid":"facade00-0000-4000-8000-0000000000c1","vacancy_uuid":"facade00-0000-4000-8000-000000000001","practice_id":"TL-DEMO-001","resolution":"resolved","consent_flag":true,"entrypoint_raw":null,"entrypoint_code":null,"created_at":"2026-01-02T10:00:00+01:00","updated_at":null},"meta":{"request_id":"facade00-0000-4000-8000-00000000cafe","api_version":"v1"}}}}},"401":{"description":"Geen of ongeldig token.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"example":{"success":false,"error":{"code":"UNAUTHENTICATED","message":"Geen of ongeldig token."},"meta":{"request_id":"facade00-0000-4000-8000-00000000cafe","api_version":"v1"}}}}},"403":{"description":"Token mist de vereiste scope.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"example":{"success":false,"error":{"code":"INSUFFICIENT_SCOPE","message":"Token mist de vereiste scope."},"meta":{"request_id":"facade00-0000-4000-8000-00000000cafe","api_version":"v1"}}}}},"422":{"description":"Ongeldige parameters.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"example":{"success":false,"error":{"code":"VALIDATION_ERROR","message":"Ongeldige parameters."},"meta":{"request_id":"facade00-0000-4000-8000-00000000cafe","api_version":"v1"}}}}},"503":{"description":"Bron tijdelijk onbereikbaar.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"example":{"success":false,"error":{"code":"LEGACY_SOURCE_UNAVAILABLE","message":"Bron tijdelijk onbereikbaar."},"meta":{"request_id":"facade00-0000-4000-8000-00000000cafe","api_version":"v1"}}}}},"404":{"description":"Niet gevonden.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"example":{"success":false,"error":{"code":"NOT_FOUND","message":"Niet gevonden."},"meta":{"request_id":"facade00-0000-4000-8000-00000000cafe","api_version":"v1"}}}}}},"security":[{"oauth2ClientCredentials":["applications:read"]}]}},"/v1/recruitment-cases":{"get":{"operationId":"recruitmentCaseIndex","tags":["Recruitment cases"],"summary":"Recruitment cases opvragen","description":"Technisch identity/link-register. Geen workflow, geen statusbeheer.","parameters":[{"name":"page","in":"query","required":false,"description":"Paginanummer, vanaf 1.","schema":{"type":"integer"},"example":1},{"name":"per_page","in":"query","required":false,"description":"Aantal per pagina, maximaal 100.","schema":{"type":"integer"},"example":25},{"name":"resolution","in":"query","required":false,"description":"resolved, unresolved of ambiguous.","schema":{"type":"string"},"example":"resolved"},{"name":"candidate_uuid","in":"query","required":false,"description":"Filter op Candidate.","schema":{"type":"string"},"example":"facade00-0000-4000-8000-0000000000c1"},{"name":"application_uuid","in":"query","required":false,"description":"Filter op Application.","schema":{"type":"string"},"example":"facade00-0000-4000-8000-0000000000a1"},{"name":"created_since","in":"query","required":false,"description":"ISO 8601 datum of datum-tijd.","schema":{"type":"string"},"example":"2026-01-01"}],"responses":{"200":{"description":"OK.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessEnvelope"},"example":{"success":true,"data":[{"recruitment_uuid":"facade00-0000-4000-8000-0000000000d1","candidate_uuid":"facade00-0000-4000-8000-0000000000c1","application_uuid":"facade00-0000-4000-8000-0000000000a1","resolution":"resolved","link_basis":"strict_email_vacancy_bidirectional","source":{"mederi_source":"VacaturesRecrutering","mederi_key":"1234"},"created_at":"2026-01-03T11:00:00+01:00","updated_at":null}],"meta":{"request_id":"facade00-0000-4000-8000-00000000cafe","api_version":"v1","pagination":{"page":1,"per_page":25,"total":1,"total_pages":1}}}}}},"401":{"description":"Geen of ongeldig token.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"example":{"success":false,"error":{"code":"UNAUTHENTICATED","message":"Geen of ongeldig token."},"meta":{"request_id":"facade00-0000-4000-8000-00000000cafe","api_version":"v1"}}}}},"403":{"description":"Token mist de vereiste scope.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"example":{"success":false,"error":{"code":"INSUFFICIENT_SCOPE","message":"Token mist de vereiste scope."},"meta":{"request_id":"facade00-0000-4000-8000-00000000cafe","api_version":"v1"}}}}},"422":{"description":"Ongeldige parameters.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"example":{"success":false,"error":{"code":"VALIDATION_ERROR","message":"Ongeldige parameters."},"meta":{"request_id":"facade00-0000-4000-8000-00000000cafe","api_version":"v1"}}}}},"503":{"description":"Bron tijdelijk onbereikbaar.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"example":{"success":false,"error":{"code":"LEGACY_SOURCE_UNAVAILABLE","message":"Bron tijdelijk onbereikbaar."},"meta":{"request_id":"facade00-0000-4000-8000-00000000cafe","api_version":"v1"}}}}}},"security":[{"oauth2ClientCredentials":["recruitment-cases:read"]}]}},"/v1/recruitment-cases/{recruitment_uuid}":{"get":{"operationId":"recruitmentCaseShow","tags":["Recruitment cases"],"summary":"Eén recruitment case opvragen","description":"De koppeling tussen legacy dossier, Candidate en Application.","parameters":[{"name":"recruitment_uuid","in":"path","required":true,"schema":{"type":"string"},"example":"facade00-0000-4000-8000-0000000000d1"}],"responses":{"200":{"description":"OK.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessEnvelope"},"example":{"success":true,"data":{"recruitment_uuid":"facade00-0000-4000-8000-0000000000d1","candidate_uuid":"facade00-0000-4000-8000-0000000000c1","application_uuid":"facade00-0000-4000-8000-0000000000a1","resolution":"resolved","link_basis":"strict_email_vacancy_bidirectional","source":{"mederi_source":"VacaturesRecrutering","mederi_key":"1234"},"created_at":"2026-01-03T11:00:00+01:00","updated_at":null},"meta":{"request_id":"facade00-0000-4000-8000-00000000cafe","api_version":"v1"}}}}},"401":{"description":"Geen of ongeldig token.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"example":{"success":false,"error":{"code":"UNAUTHENTICATED","message":"Geen of ongeldig token."},"meta":{"request_id":"facade00-0000-4000-8000-00000000cafe","api_version":"v1"}}}}},"403":{"description":"Token mist de vereiste scope.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"example":{"success":false,"error":{"code":"INSUFFICIENT_SCOPE","message":"Token mist de vereiste scope."},"meta":{"request_id":"facade00-0000-4000-8000-00000000cafe","api_version":"v1"}}}}},"422":{"description":"Ongeldige parameters.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"example":{"success":false,"error":{"code":"VALIDATION_ERROR","message":"Ongeldige parameters."},"meta":{"request_id":"facade00-0000-4000-8000-00000000cafe","api_version":"v1"}}}}},"503":{"description":"Bron tijdelijk onbereikbaar.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"example":{"success":false,"error":{"code":"LEGACY_SOURCE_UNAVAILABLE","message":"Bron tijdelijk onbereikbaar."},"meta":{"request_id":"facade00-0000-4000-8000-00000000cafe","api_version":"v1"}}}}},"404":{"description":"Niet gevonden.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"example":{"success":false,"error":{"code":"NOT_FOUND","message":"Niet gevonden."},"meta":{"request_id":"facade00-0000-4000-8000-00000000cafe","api_version":"v1"}}}}}},"security":[{"oauth2ClientCredentials":["recruitment-cases:read"]}]}},"/v1/webhooks":{"get":{"operationId":"webhookIndex","tags":["Webhooks"],"summary":"Eigen subscriptions opvragen","description":"Uitsluitend de subscriptions van de authenticerende client.","parameters":[{"name":"page","in":"query","required":false,"description":"Paginanummer, vanaf 1.","schema":{"type":"integer"},"example":1},{"name":"per_page","in":"query","required":false,"description":"Aantal per pagina, maximaal 100.","schema":{"type":"integer"},"example":25}],"responses":{"200":{"description":"OK.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessEnvelope"},"example":{"success":true,"data":[{"webhook_uuid":"facade00-0000-4000-8000-0000000000e1","url":"https://consumer.example.invalid/mia/webhooks","event_types":["vacancy.created","vacancy.updated"],"status":"active","created_at":"2026-01-04T12:00:00+01:00","updated_at":null,"last_success_at":null,"last_failure_at":null}],"meta":{"request_id":"facade00-0000-4000-8000-00000000cafe","api_version":"v1","pagination":{"page":1,"per_page":25,"total":1,"total_pages":1}}}}}},"401":{"description":"Geen of ongeldig token.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"example":{"success":false,"error":{"code":"UNAUTHENTICATED","message":"Geen of ongeldig token."},"meta":{"request_id":"facade00-0000-4000-8000-00000000cafe","api_version":"v1"}}}}},"403":{"description":"Token mist de vereiste scope.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"example":{"success":false,"error":{"code":"INSUFFICIENT_SCOPE","message":"Token mist de vereiste scope."},"meta":{"request_id":"facade00-0000-4000-8000-00000000cafe","api_version":"v1"}}}}},"422":{"description":"Ongeldige parameters.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"example":{"success":false,"error":{"code":"VALIDATION_ERROR","message":"Ongeldige parameters."},"meta":{"request_id":"facade00-0000-4000-8000-00000000cafe","api_version":"v1"}}}}},"503":{"description":"Bron tijdelijk onbereikbaar.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"example":{"success":false,"error":{"code":"LEGACY_SOURCE_UNAVAILABLE","message":"Bron tijdelijk onbereikbaar."},"meta":{"request_id":"facade00-0000-4000-8000-00000000cafe","api_version":"v1"}}}}}},"security":[{"oauth2ClientCredentials":["webhooks:read"]}]},"post":{"operationId":"webhookStore","tags":["Webhooks"],"summary":"Subscription aanmaken","description":"Antwoordt eenmalig met het signing secret. Daarna is het nergens meer op te vragen.","parameters":[],"responses":{"201":{"description":"Aangemaakt; bevat eenmalig het signing secret.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessEnvelope"},"example":{"success":true,"data":{"webhook_uuid":"facade00-0000-4000-8000-0000000000e1","url":"https://consumer.example.invalid/mia/webhooks","event_types":["vacancy.created","vacancy.updated"],"status":"active","created_at":"2026-01-04T12:00:00+01:00","updated_at":null,"last_success_at":null,"last_failure_at":null,"secret":"whsec_EXAMPLE-SECRET-NIET-ECHT"},"meta":{"request_id":"facade00-0000-4000-8000-00000000cafe","api_version":"v1"}}}}},"401":{"description":"Geen of ongeldig token.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"example":{"success":false,"error":{"code":"UNAUTHENTICATED","message":"Geen of ongeldig token."},"meta":{"request_id":"facade00-0000-4000-8000-00000000cafe","api_version":"v1"}}}}},"403":{"description":"Token mist de vereiste scope.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"example":{"success":false,"error":{"code":"INSUFFICIENT_SCOPE","message":"Token mist de vereiste scope."},"meta":{"request_id":"facade00-0000-4000-8000-00000000cafe","api_version":"v1"}}}}},"422":{"description":"Ongeldige parameters.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"example":{"success":false,"error":{"code":"VALIDATION_ERROR","message":"Ongeldige parameters."},"meta":{"request_id":"facade00-0000-4000-8000-00000000cafe","api_version":"v1"}}}}},"503":{"description":"Bron tijdelijk onbereikbaar.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"example":{"success":false,"error":{"code":"LEGACY_SOURCE_UNAVAILABLE","message":"Bron tijdelijk onbereikbaar."},"meta":{"request_id":"facade00-0000-4000-8000-00000000cafe","api_version":"v1"}}}}}},"security":[{"oauth2ClientCredentials":["webhooks:write"]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/WebhookIntake"},"example":{"url":"https://consumer.example.invalid/mia/webhooks","event_types":["vacancy.created","vacancy.updated"]}}}}}},"/v1/webhooks/{webhook_uuid}":{"get":{"operationId":"webhookShow","tags":["Webhooks"],"summary":"Eén subscription opvragen","description":"Zonder secret; dat wordt nooit teruggegeven.","parameters":[{"name":"webhook_uuid","in":"path","required":true,"schema":{"type":"string"},"example":"facade00-0000-4000-8000-0000000000e1"}],"responses":{"200":{"description":"OK.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessEnvelope"},"example":{"success":true,"data":{"webhook_uuid":"facade00-0000-4000-8000-0000000000e1","url":"https://consumer.example.invalid/mia/webhooks","event_types":["vacancy.created","vacancy.updated"],"status":"active","created_at":"2026-01-04T12:00:00+01:00","updated_at":null,"last_success_at":null,"last_failure_at":null},"meta":{"request_id":"facade00-0000-4000-8000-00000000cafe","api_version":"v1"}}}}},"401":{"description":"Geen of ongeldig token.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"example":{"success":false,"error":{"code":"UNAUTHENTICATED","message":"Geen of ongeldig token."},"meta":{"request_id":"facade00-0000-4000-8000-00000000cafe","api_version":"v1"}}}}},"403":{"description":"Token mist de vereiste scope.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"example":{"success":false,"error":{"code":"INSUFFICIENT_SCOPE","message":"Token mist de vereiste scope."},"meta":{"request_id":"facade00-0000-4000-8000-00000000cafe","api_version":"v1"}}}}},"422":{"description":"Ongeldige parameters.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"example":{"success":false,"error":{"code":"VALIDATION_ERROR","message":"Ongeldige parameters."},"meta":{"request_id":"facade00-0000-4000-8000-00000000cafe","api_version":"v1"}}}}},"503":{"description":"Bron tijdelijk onbereikbaar.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"example":{"success":false,"error":{"code":"LEGACY_SOURCE_UNAVAILABLE","message":"Bron tijdelijk onbereikbaar."},"meta":{"request_id":"facade00-0000-4000-8000-00000000cafe","api_version":"v1"}}}}},"404":{"description":"Niet gevonden.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"example":{"success":false,"error":{"code":"NOT_FOUND","message":"Niet gevonden."},"meta":{"request_id":"facade00-0000-4000-8000-00000000cafe","api_version":"v1"}}}}}},"security":[{"oauth2ClientCredentials":["webhooks:read"]}]},"patch":{"operationId":"webhookUpdate","tags":["Webhooks"],"summary":"Subscription wijzigen","description":"Url, event_types en status. Alleen de opgegeven velden wijzigen.","parameters":[{"name":"webhook_uuid","in":"path","required":true,"schema":{"type":"string"},"example":"facade00-0000-4000-8000-0000000000e1"}],"responses":{"200":{"description":"OK.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessEnvelope"},"example":{"success":true,"data":{"webhook_uuid":"facade00-0000-4000-8000-0000000000e1","url":"https://consumer.example.invalid/mia/webhooks","event_types":["vacancy.created","vacancy.updated"],"status":"active","created_at":"2026-01-04T12:00:00+01:00","updated_at":null,"last_success_at":null,"last_failure_at":null},"meta":{"request_id":"facade00-0000-4000-8000-00000000cafe","api_version":"v1"}}}}},"401":{"description":"Geen of ongeldig token.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"example":{"success":false,"error":{"code":"UNAUTHENTICATED","message":"Geen of ongeldig token."},"meta":{"request_id":"facade00-0000-4000-8000-00000000cafe","api_version":"v1"}}}}},"403":{"description":"Token mist de vereiste scope.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"example":{"success":false,"error":{"code":"INSUFFICIENT_SCOPE","message":"Token mist de vereiste scope."},"meta":{"request_id":"facade00-0000-4000-8000-00000000cafe","api_version":"v1"}}}}},"422":{"description":"Ongeldige parameters.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"example":{"success":false,"error":{"code":"VALIDATION_ERROR","message":"Ongeldige parameters."},"meta":{"request_id":"facade00-0000-4000-8000-00000000cafe","api_version":"v1"}}}}},"503":{"description":"Bron tijdelijk onbereikbaar.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"example":{"success":false,"error":{"code":"LEGACY_SOURCE_UNAVAILABLE","message":"Bron tijdelijk onbereikbaar."},"meta":{"request_id":"facade00-0000-4000-8000-00000000cafe","api_version":"v1"}}}}},"404":{"description":"Niet gevonden.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"example":{"success":false,"error":{"code":"NOT_FOUND","message":"Niet gevonden."},"meta":{"request_id":"facade00-0000-4000-8000-00000000cafe","api_version":"v1"}}}}}},"security":[{"oauth2ClientCredentials":["webhooks:write"]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/WebhookPatch"},"example":{"status":"disabled"}}}}},"delete":{"operationId":"webhookDestroy","tags":["Webhooks"],"summary":"Subscription uitschakelen","description":"Zet de status op `disabled`. Er wordt niets fysiek verwijderd.","parameters":[{"name":"webhook_uuid","in":"path","required":true,"schema":{"type":"string"},"example":"facade00-0000-4000-8000-0000000000e1"}],"responses":{"200":{"description":"OK.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessEnvelope"},"example":{"success":true,"data":{"webhook_uuid":"facade00-0000-4000-8000-0000000000e1","url":"https://consumer.example.invalid/mia/webhooks","event_types":["vacancy.created","vacancy.updated"],"status":"active","created_at":"2026-01-04T12:00:00+01:00","updated_at":null,"last_success_at":null,"last_failure_at":null},"meta":{"request_id":"facade00-0000-4000-8000-00000000cafe","api_version":"v1"}}}}},"401":{"description":"Geen of ongeldig token.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"example":{"success":false,"error":{"code":"UNAUTHENTICATED","message":"Geen of ongeldig token."},"meta":{"request_id":"facade00-0000-4000-8000-00000000cafe","api_version":"v1"}}}}},"403":{"description":"Token mist de vereiste scope.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"example":{"success":false,"error":{"code":"INSUFFICIENT_SCOPE","message":"Token mist de vereiste scope."},"meta":{"request_id":"facade00-0000-4000-8000-00000000cafe","api_version":"v1"}}}}},"422":{"description":"Ongeldige parameters.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"example":{"success":false,"error":{"code":"VALIDATION_ERROR","message":"Ongeldige parameters."},"meta":{"request_id":"facade00-0000-4000-8000-00000000cafe","api_version":"v1"}}}}},"503":{"description":"Bron tijdelijk onbereikbaar.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"example":{"success":false,"error":{"code":"LEGACY_SOURCE_UNAVAILABLE","message":"Bron tijdelijk onbereikbaar."},"meta":{"request_id":"facade00-0000-4000-8000-00000000cafe","api_version":"v1"}}}}},"404":{"description":"Niet gevonden.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"example":{"success":false,"error":{"code":"NOT_FOUND","message":"Niet gevonden."},"meta":{"request_id":"facade00-0000-4000-8000-00000000cafe","api_version":"v1"}}}}}},"security":[{"oauth2ClientCredentials":["webhooks:write"]}]}},"/v1/webhooks/{webhook_uuid}/rotate-secret":{"post":{"operationId":"webhookRotateSecret","tags":["Webhooks"],"summary":"Signing secret roteren","description":"Nieuw secret, eenmalig getoond. Het oude is onmiddellijk ongeldig.","parameters":[{"name":"webhook_uuid","in":"path","required":true,"schema":{"type":"string"},"example":"facade00-0000-4000-8000-0000000000e1"}],"responses":{"200":{"description":"OK.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessEnvelope"},"example":{"success":true,"data":{"webhook_uuid":"facade00-0000-4000-8000-0000000000e1","url":"https://consumer.example.invalid/mia/webhooks","event_types":["vacancy.created","vacancy.updated"],"status":"active","created_at":"2026-01-04T12:00:00+01:00","updated_at":null,"last_success_at":null,"last_failure_at":null,"secret":"whsec_EXAMPLE-SECRET-NIET-ECHT"},"meta":{"request_id":"facade00-0000-4000-8000-00000000cafe","api_version":"v1"}}}}},"401":{"description":"Geen of ongeldig token.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"example":{"success":false,"error":{"code":"UNAUTHENTICATED","message":"Geen of ongeldig token."},"meta":{"request_id":"facade00-0000-4000-8000-00000000cafe","api_version":"v1"}}}}},"403":{"description":"Token mist de vereiste scope.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"example":{"success":false,"error":{"code":"INSUFFICIENT_SCOPE","message":"Token mist de vereiste scope."},"meta":{"request_id":"facade00-0000-4000-8000-00000000cafe","api_version":"v1"}}}}},"422":{"description":"Ongeldige parameters.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"example":{"success":false,"error":{"code":"VALIDATION_ERROR","message":"Ongeldige parameters."},"meta":{"request_id":"facade00-0000-4000-8000-00000000cafe","api_version":"v1"}}}}},"503":{"description":"Bron tijdelijk onbereikbaar.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"example":{"success":false,"error":{"code":"LEGACY_SOURCE_UNAVAILABLE","message":"Bron tijdelijk onbereikbaar."},"meta":{"request_id":"facade00-0000-4000-8000-00000000cafe","api_version":"v1"}}}}},"404":{"description":"Niet gevonden.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"example":{"success":false,"error":{"code":"NOT_FOUND","message":"Niet gevonden."},"meta":{"request_id":"facade00-0000-4000-8000-00000000cafe","api_version":"v1"}}}}}},"security":[{"oauth2ClientCredentials":["webhooks:write"]}]}},"/v1/webhooks/{webhook_uuid}/test":{"post":{"operationId":"webhookTest","tags":["Webhooks"],"summary":"Testevent versturen","description":"Zet een `system.ping` klaar voor deze subscription. 202: aanvaard, nog niet afgeleverd.","parameters":[{"name":"webhook_uuid","in":"path","required":true,"schema":{"type":"string"},"example":"facade00-0000-4000-8000-0000000000e1"}],"responses":{"202":{"description":"Aanvaard; de dispatcher levert het event af.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessEnvelope"},"example":{"success":true,"data":{"event_uuid":"facade00-0000-4000-8000-00000000beef","event_type":"system.ping","webhook_uuid":"facade00-0000-4000-8000-0000000000e1","status":"queued"},"meta":{"request_id":"facade00-0000-4000-8000-00000000cafe","api_version":"v1"}}}}},"401":{"description":"Geen of ongeldig token.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"example":{"success":false,"error":{"code":"UNAUTHENTICATED","message":"Geen of ongeldig token."},"meta":{"request_id":"facade00-0000-4000-8000-00000000cafe","api_version":"v1"}}}}},"403":{"description":"Token mist de vereiste scope.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"example":{"success":false,"error":{"code":"INSUFFICIENT_SCOPE","message":"Token mist de vereiste scope."},"meta":{"request_id":"facade00-0000-4000-8000-00000000cafe","api_version":"v1"}}}}},"422":{"description":"Ongeldige parameters.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"example":{"success":false,"error":{"code":"VALIDATION_ERROR","message":"Ongeldige parameters."},"meta":{"request_id":"facade00-0000-4000-8000-00000000cafe","api_version":"v1"}}}}},"503":{"description":"Bron tijdelijk onbereikbaar.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"example":{"success":false,"error":{"code":"LEGACY_SOURCE_UNAVAILABLE","message":"Bron tijdelijk onbereikbaar."},"meta":{"request_id":"facade00-0000-4000-8000-00000000cafe","api_version":"v1"}}}}},"404":{"description":"Niet gevonden.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"example":{"success":false,"error":{"code":"NOT_FOUND","message":"Niet gevonden."},"meta":{"request_id":"facade00-0000-4000-8000-00000000cafe","api_version":"v1"}}}}}},"security":[{"oauth2ClientCredentials":["webhooks:write"]}]}},"/v1/webhooks/{webhook_uuid}/deliveries":{"get":{"operationId":"webhookDeliveries","tags":["Webhooks"],"summary":"Leveringen van een subscription","description":"Status per poging. Zonder responsebody: die wordt nooit bewaard.","parameters":[{"name":"webhook_uuid","in":"path","required":true,"schema":{"type":"string"},"example":"facade00-0000-4000-8000-0000000000e1"},{"name":"page","in":"query","required":false,"description":"Paginanummer, vanaf 1.","schema":{"type":"integer"},"example":1},{"name":"per_page","in":"query","required":false,"description":"Aantal per pagina, maximaal 100.","schema":{"type":"integer"},"example":25}],"responses":{"200":{"description":"OK.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessEnvelope"},"example":{"success":true,"data":[{"delivery_uuid":"facade00-0000-4000-8000-00000000dead","event_uuid":"facade00-0000-4000-8000-00000000beef","webhook_uuid":"facade00-0000-4000-8000-0000000000e1","status":"delivered","attempts":1,"last_http_status":200,"last_error_code":null,"next_retry_at":null,"created_at":"2026-01-05T13:00:00+01:00","updated_at":"2026-01-05T13:00:01+01:00","delivered_at":"2026-01-05T13:00:01+01:00"}],"meta":{"request_id":"facade00-0000-4000-8000-00000000cafe","api_version":"v1","pagination":{"page":1,"per_page":25,"total":1,"total_pages":1}}}}}},"401":{"description":"Geen of ongeldig token.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"example":{"success":false,"error":{"code":"UNAUTHENTICATED","message":"Geen of ongeldig token."},"meta":{"request_id":"facade00-0000-4000-8000-00000000cafe","api_version":"v1"}}}}},"403":{"description":"Token mist de vereiste scope.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"example":{"success":false,"error":{"code":"INSUFFICIENT_SCOPE","message":"Token mist de vereiste scope."},"meta":{"request_id":"facade00-0000-4000-8000-00000000cafe","api_version":"v1"}}}}},"422":{"description":"Ongeldige parameters.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"example":{"success":false,"error":{"code":"VALIDATION_ERROR","message":"Ongeldige parameters."},"meta":{"request_id":"facade00-0000-4000-8000-00000000cafe","api_version":"v1"}}}}},"503":{"description":"Bron tijdelijk onbereikbaar.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"example":{"success":false,"error":{"code":"LEGACY_SOURCE_UNAVAILABLE","message":"Bron tijdelijk onbereikbaar."},"meta":{"request_id":"facade00-0000-4000-8000-00000000cafe","api_version":"v1"}}}}},"404":{"description":"Niet gevonden.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"example":{"success":false,"error":{"code":"NOT_FOUND","message":"Niet gevonden."},"meta":{"request_id":"facade00-0000-4000-8000-00000000cafe","api_version":"v1"}}}}}},"security":[{"oauth2ClientCredentials":["webhooks:read"]}]}}},"webhooks":{"vacancy.created":{"post":{"operationId":"webhookVacancyCreated","summary":"M.I.A. stuurt vacancy.created naar jouw endpoint.","description":"Een notificatie, geen datalevering: haal de actuele toestand op bij het endpoint in `links.self`.\n\nVerifieer ALTIJD de signatuur vóór je de payload gebruikt.","parameters":[{"name":"X-MIA-Event-Id","in":"header","required":true,"description":"Het event_uuid.","schema":{"type":"string"}},{"name":"X-MIA-Event-Type","in":"header","required":true,"description":"Het eventtype, bv. vacancy.created.","schema":{"type":"string"}},{"name":"X-MIA-Timestamp","in":"header","required":true,"description":"Unix seconds (UTC) op moment van versturen.","schema":{"type":"string"}},{"name":"X-MIA-Signature","in":"header","required":true,"description":"v1=<hex hmac_sha256(timestamp + \".\" + raw_body, secret)>","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/WebhookEvent"},"example":{"event_uuid":"facade00-0000-4000-8000-00000000beef","event_type":"vacancy.created","event_version":1,"occurred_at":"2026-09-09T10:00:00+02:00","entity":{"type":"vacancy","id":"facade00-0000-4000-8000-000000000001"},"links":{"self":"https://sandbox.mia.e-mederi.be/v1/vacancies/facade00-0000-4000-8000-000000000001"}}}}},"responses":{"2XX":{"description":"Aanvaard. Elke 2xx geldt als geslaagd."},"4XX":{"description":"Afgewezen. Wordt niet opnieuw geprobeerd, behalve 408, 425 en 429."},"5XX":{"description":"Tijdelijke fout. Wordt opnieuw geprobeerd volgens de backoff."}}}},"vacancy.updated":{"post":{"operationId":"webhookVacancyUpdated","summary":"M.I.A. stuurt vacancy.updated naar jouw endpoint.","description":"Een notificatie, geen datalevering: haal de actuele toestand op bij het endpoint in `links.self`.\n\nVerifieer ALTIJD de signatuur vóór je de payload gebruikt.","parameters":[{"name":"X-MIA-Event-Id","in":"header","required":true,"description":"Het event_uuid.","schema":{"type":"string"}},{"name":"X-MIA-Event-Type","in":"header","required":true,"description":"Het eventtype, bv. vacancy.updated.","schema":{"type":"string"}},{"name":"X-MIA-Timestamp","in":"header","required":true,"description":"Unix seconds (UTC) op moment van versturen.","schema":{"type":"string"}},{"name":"X-MIA-Signature","in":"header","required":true,"description":"v1=<hex hmac_sha256(timestamp + \".\" + raw_body, secret)>","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/WebhookEvent"},"example":{"event_uuid":"facade00-0000-4000-8000-00000000beef","event_type":"vacancy.updated","event_version":1,"occurred_at":"2026-09-09T10:00:00+02:00","entity":{"type":"vacancy","id":"facade00-0000-4000-8000-000000000001"},"links":{"self":"https://sandbox.mia.e-mederi.be/v1/vacancies/facade00-0000-4000-8000-000000000001"}}}}},"responses":{"2XX":{"description":"Aanvaard. Elke 2xx geldt als geslaagd."},"4XX":{"description":"Afgewezen. Wordt niet opnieuw geprobeerd, behalve 408, 425 en 429."},"5XX":{"description":"Tijdelijke fout. Wordt opnieuw geprobeerd volgens de backoff."}}}},"vacancy.deleted":{"post":{"operationId":"webhookVacancyDeleted","summary":"M.I.A. stuurt vacancy.deleted naar jouw endpoint.","description":"Een notificatie, geen datalevering: haal de actuele toestand op bij het endpoint in `links.self`.\n\nVerifieer ALTIJD de signatuur vóór je de payload gebruikt.","parameters":[{"name":"X-MIA-Event-Id","in":"header","required":true,"description":"Het event_uuid.","schema":{"type":"string"}},{"name":"X-MIA-Event-Type","in":"header","required":true,"description":"Het eventtype, bv. vacancy.deleted.","schema":{"type":"string"}},{"name":"X-MIA-Timestamp","in":"header","required":true,"description":"Unix seconds (UTC) op moment van versturen.","schema":{"type":"string"}},{"name":"X-MIA-Signature","in":"header","required":true,"description":"v1=<hex hmac_sha256(timestamp + \".\" + raw_body, secret)>","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/WebhookEvent"},"example":{"event_uuid":"facade00-0000-4000-8000-00000000beef","event_type":"vacancy.deleted","event_version":1,"occurred_at":"2026-09-09T10:00:00+02:00","entity":{"type":"vacancy","id":"facade00-0000-4000-8000-000000000001"}}}}},"responses":{"2XX":{"description":"Aanvaard. Elke 2xx geldt als geslaagd."},"4XX":{"description":"Afgewezen. Wordt niet opnieuw geprobeerd, behalve 408, 425 en 429."},"5XX":{"description":"Tijdelijke fout. Wordt opnieuw geprobeerd volgens de backoff."}}}},"practice.created":{"post":{"operationId":"webhookPracticeCreated","summary":"M.I.A. stuurt practice.created naar jouw endpoint.","description":"Een notificatie, geen datalevering: haal de actuele toestand op bij het endpoint in `links.self`.\n\nVerifieer ALTIJD de signatuur vóór je de payload gebruikt.","parameters":[{"name":"X-MIA-Event-Id","in":"header","required":true,"description":"Het event_uuid.","schema":{"type":"string"}},{"name":"X-MIA-Event-Type","in":"header","required":true,"description":"Het eventtype, bv. practice.created.","schema":{"type":"string"}},{"name":"X-MIA-Timestamp","in":"header","required":true,"description":"Unix seconds (UTC) op moment van versturen.","schema":{"type":"string"}},{"name":"X-MIA-Signature","in":"header","required":true,"description":"v1=<hex hmac_sha256(timestamp + \".\" + raw_body, secret)>","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/WebhookEvent"},"example":{"event_uuid":"facade00-0000-4000-8000-00000000beef","event_type":"practice.created","event_version":1,"occurred_at":"2026-09-09T10:00:00+02:00","entity":{"type":"practice","id":"TL-DEMO-001"},"links":{"self":"https://sandbox.mia.e-mederi.be/v1/practices/TL-DEMO-001"}}}}},"responses":{"2XX":{"description":"Aanvaard. Elke 2xx geldt als geslaagd."},"4XX":{"description":"Afgewezen. Wordt niet opnieuw geprobeerd, behalve 408, 425 en 429."},"5XX":{"description":"Tijdelijke fout. Wordt opnieuw geprobeerd volgens de backoff."}}}},"practice.updated":{"post":{"operationId":"webhookPracticeUpdated","summary":"M.I.A. stuurt practice.updated naar jouw endpoint.","description":"Een notificatie, geen datalevering: haal de actuele toestand op bij het endpoint in `links.self`.\n\nVerifieer ALTIJD de signatuur vóór je de payload gebruikt.","parameters":[{"name":"X-MIA-Event-Id","in":"header","required":true,"description":"Het event_uuid.","schema":{"type":"string"}},{"name":"X-MIA-Event-Type","in":"header","required":true,"description":"Het eventtype, bv. practice.updated.","schema":{"type":"string"}},{"name":"X-MIA-Timestamp","in":"header","required":true,"description":"Unix seconds (UTC) op moment van versturen.","schema":{"type":"string"}},{"name":"X-MIA-Signature","in":"header","required":true,"description":"v1=<hex hmac_sha256(timestamp + \".\" + raw_body, secret)>","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/WebhookEvent"},"example":{"event_uuid":"facade00-0000-4000-8000-00000000beef","event_type":"practice.updated","event_version":1,"occurred_at":"2026-09-09T10:00:00+02:00","entity":{"type":"practice","id":"TL-DEMO-001"},"links":{"self":"https://sandbox.mia.e-mederi.be/v1/practices/TL-DEMO-001"}}}}},"responses":{"2XX":{"description":"Aanvaard. Elke 2xx geldt als geslaagd."},"4XX":{"description":"Afgewezen. Wordt niet opnieuw geprobeerd, behalve 408, 425 en 429."},"5XX":{"description":"Tijdelijke fout. Wordt opnieuw geprobeerd volgens de backoff."}}}},"practice.deleted":{"post":{"operationId":"webhookPracticeDeleted","summary":"M.I.A. stuurt practice.deleted naar jouw endpoint.","description":"Een notificatie, geen datalevering: haal de actuele toestand op bij het endpoint in `links.self`.\n\nVerifieer ALTIJD de signatuur vóór je de payload gebruikt.","parameters":[{"name":"X-MIA-Event-Id","in":"header","required":true,"description":"Het event_uuid.","schema":{"type":"string"}},{"name":"X-MIA-Event-Type","in":"header","required":true,"description":"Het eventtype, bv. practice.deleted.","schema":{"type":"string"}},{"name":"X-MIA-Timestamp","in":"header","required":true,"description":"Unix seconds (UTC) op moment van versturen.","schema":{"type":"string"}},{"name":"X-MIA-Signature","in":"header","required":true,"description":"v1=<hex hmac_sha256(timestamp + \".\" + raw_body, secret)>","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/WebhookEvent"},"example":{"event_uuid":"facade00-0000-4000-8000-00000000beef","event_type":"practice.deleted","event_version":1,"occurred_at":"2026-09-09T10:00:00+02:00","entity":{"type":"practice","id":"TL-DEMO-001"}}}}},"responses":{"2XX":{"description":"Aanvaard. Elke 2xx geldt als geslaagd."},"4XX":{"description":"Afgewezen. Wordt niet opnieuw geprobeerd, behalve 408, 425 en 429."},"5XX":{"description":"Tijdelijke fout. Wordt opnieuw geprobeerd volgens de backoff."}}}},"candidate.created":{"post":{"operationId":"webhookCandidateCreated","summary":"M.I.A. stuurt candidate.created naar jouw endpoint.","description":"Een notificatie, geen datalevering: haal de actuele toestand op bij het endpoint in `links.self`.\n\nVerifieer ALTIJD de signatuur vóór je de payload gebruikt.","parameters":[{"name":"X-MIA-Event-Id","in":"header","required":true,"description":"Het event_uuid.","schema":{"type":"string"}},{"name":"X-MIA-Event-Type","in":"header","required":true,"description":"Het eventtype, bv. candidate.created.","schema":{"type":"string"}},{"name":"X-MIA-Timestamp","in":"header","required":true,"description":"Unix seconds (UTC) op moment van versturen.","schema":{"type":"string"}},{"name":"X-MIA-Signature","in":"header","required":true,"description":"v1=<hex hmac_sha256(timestamp + \".\" + raw_body, secret)>","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/WebhookEvent"},"example":{"event_uuid":"facade00-0000-4000-8000-00000000beef","event_type":"candidate.created","event_version":1,"occurred_at":"2026-09-09T10:00:00+02:00","entity":{"type":"candidate","id":"facade00-0000-4000-8000-0000000000c1"},"links":{"self":"https://sandbox.mia.e-mederi.be/v1/candidates/facade00-0000-4000-8000-0000000000c1"}}}}},"responses":{"2XX":{"description":"Aanvaard. Elke 2xx geldt als geslaagd."},"4XX":{"description":"Afgewezen. Wordt niet opnieuw geprobeerd, behalve 408, 425 en 429."},"5XX":{"description":"Tijdelijke fout. Wordt opnieuw geprobeerd volgens de backoff."}}}},"application.created":{"post":{"operationId":"webhookApplicationCreated","summary":"M.I.A. stuurt application.created naar jouw endpoint.","description":"Een notificatie, geen datalevering: haal de actuele toestand op bij het endpoint in `links.self`.\n\nVerifieer ALTIJD de signatuur vóór je de payload gebruikt.","parameters":[{"name":"X-MIA-Event-Id","in":"header","required":true,"description":"Het event_uuid.","schema":{"type":"string"}},{"name":"X-MIA-Event-Type","in":"header","required":true,"description":"Het eventtype, bv. application.created.","schema":{"type":"string"}},{"name":"X-MIA-Timestamp","in":"header","required":true,"description":"Unix seconds (UTC) op moment van versturen.","schema":{"type":"string"}},{"name":"X-MIA-Signature","in":"header","required":true,"description":"v1=<hex hmac_sha256(timestamp + \".\" + raw_body, secret)>","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/WebhookEvent"},"example":{"event_uuid":"facade00-0000-4000-8000-00000000beef","event_type":"application.created","event_version":1,"occurred_at":"2026-09-09T10:00:00+02:00","entity":{"type":"application","id":"facade00-0000-4000-8000-0000000000a1"},"links":{"self":"https://sandbox.mia.e-mederi.be/v1/applications/facade00-0000-4000-8000-0000000000a1"}}}}},"responses":{"2XX":{"description":"Aanvaard. Elke 2xx geldt als geslaagd."},"4XX":{"description":"Afgewezen. Wordt niet opnieuw geprobeerd, behalve 408, 425 en 429."},"5XX":{"description":"Tijdelijke fout. Wordt opnieuw geprobeerd volgens de backoff."}}}},"recruitment_case.created":{"post":{"operationId":"webhookRecruitmentCaseCreated","summary":"M.I.A. stuurt recruitment_case.created naar jouw endpoint.","description":"Een notificatie, geen datalevering: haal de actuele toestand op bij het endpoint in `links.self`.\n\nVerifieer ALTIJD de signatuur vóór je de payload gebruikt.","parameters":[{"name":"X-MIA-Event-Id","in":"header","required":true,"description":"Het event_uuid.","schema":{"type":"string"}},{"name":"X-MIA-Event-Type","in":"header","required":true,"description":"Het eventtype, bv. recruitment_case.created.","schema":{"type":"string"}},{"name":"X-MIA-Timestamp","in":"header","required":true,"description":"Unix seconds (UTC) op moment van versturen.","schema":{"type":"string"}},{"name":"X-MIA-Signature","in":"header","required":true,"description":"v1=<hex hmac_sha256(timestamp + \".\" + raw_body, secret)>","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/WebhookEvent"},"example":{"event_uuid":"facade00-0000-4000-8000-00000000beef","event_type":"recruitment_case.created","event_version":1,"occurred_at":"2026-09-09T10:00:00+02:00","entity":{"type":"recruitment_case","id":"facade00-0000-4000-8000-0000000000d1"},"links":{"self":"https://sandbox.mia.e-mederi.be/v1/recruitment-cases/facade00-0000-4000-8000-0000000000d1"}}}}},"responses":{"2XX":{"description":"Aanvaard. Elke 2xx geldt als geslaagd."},"4XX":{"description":"Afgewezen. Wordt niet opnieuw geprobeerd, behalve 408, 425 en 429."},"5XX":{"description":"Tijdelijke fout. Wordt opnieuw geprobeerd volgens de backoff."}}}},"system.ping":{"post":{"operationId":"webhookSystemPing","summary":"M.I.A. stuurt system.ping naar jouw endpoint.","description":"Een notificatie, geen datalevering: haal de actuele toestand op bij het endpoint in `links.self`.\n\nVerifieer ALTIJD de signatuur vóór je de payload gebruikt.","parameters":[{"name":"X-MIA-Event-Id","in":"header","required":true,"description":"Het event_uuid.","schema":{"type":"string"}},{"name":"X-MIA-Event-Type","in":"header","required":true,"description":"Het eventtype, bv. system.ping.","schema":{"type":"string"}},{"name":"X-MIA-Timestamp","in":"header","required":true,"description":"Unix seconds (UTC) op moment van versturen.","schema":{"type":"string"}},{"name":"X-MIA-Signature","in":"header","required":true,"description":"v1=<hex hmac_sha256(timestamp + \".\" + raw_body, secret)>","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/WebhookEvent"},"example":{"event_uuid":"facade00-0000-4000-8000-00000000beef","event_type":"system.ping","event_version":1,"occurred_at":"2026-09-09T10:00:00+02:00"}}}},"responses":{"2XX":{"description":"Aanvaard. Elke 2xx geldt als geslaagd."},"4XX":{"description":"Afgewezen. Wordt niet opnieuw geprobeerd, behalve 408, 425 en 429."},"5XX":{"description":"Tijdelijke fout. Wordt opnieuw geprobeerd volgens de backoff."}}}}},"components":{"securitySchemes":{"oauth2ClientCredentials":{"type":"oauth2","description":"Server-to-server. Wissel client_id + client_secret om voor een access token.\n\nCredentials horen in de `Authorization: Basic`-header. Er zijn geen refresh tokens:\nvraag gewoon een nieuw token aan wanneer het huidige verloopt.","flows":{"clientCredentials":{"tokenUrl":"https://sandbox.mia.e-mederi.be/oauth/token","scopes":{"practices:read":"Praktijken lezen","vacancies:read":"Vacatures lezen","candidates:read":"Candidate-identiteiten lezen","applications:read":"Sollicitaties lezen","applications:write":"Sollicitaties aanmaken","recruitment-cases:read":"Recruitment cases lezen","webhooks:read":"Eigen webhook subscriptions lezen","webhooks:write":"Eigen webhook subscriptions beheren"}}}}},"schemas":{"SuccessEnvelope":{"type":"object","description":"Elke /v1-respons heeft deze vorm.","required":["success","data","meta"],"properties":{"success":{"type":"boolean","const":true},"data":{"description":"De resource, of een lijst ervan."},"meta":{"$ref":"#/components/schemas/Meta"}}},"ErrorEnvelope":{"type":"object","required":["success","error","meta"],"properties":{"success":{"type":"boolean","const":false},"error":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"array","items":{"type":"object","properties":{"field":{"type":"string"},"issue":{"type":"string"}}}}}},"meta":{"$ref":"#/components/schemas/Meta"}}},"Meta":{"type":"object","required":["request_id","api_version"],"properties":{"request_id":{"type":"string","format":"uuid"},"api_version":{"type":"string","const":"v1"},"pagination":{"$ref":"#/components/schemas/Pagination"}}},"Pagination":{"type":"object","required":["page","per_page","total","total_pages"],"properties":{"page":{"type":"integer","minimum":1},"per_page":{"type":"integer","minimum":1,"maximum":100},"total":{"type":"integer","minimum":0},"total_pages":{"type":"integer","minimum":0}}},"TokenResponse":{"type":"object","required":["access_token","token_type","expires_in","scope"],"properties":{"access_token":{"type":"string"},"token_type":{"type":"string","const":"Bearer"},"expires_in":{"type":"integer"},"scope":{"type":"string"}}},"OAuthError":{"type":"object","required":["error"],"properties":{"error":{"type":"string","enum":["invalid_request","invalid_client","invalid_scope","unsupported_grant_type","server_error"]},"error_description":{"type":"string"}}},"ApplicationIntake":{"type":"object","description":"Nieuwe sollicitatie. Stuur `Idempotency-Key` mee om herhaling veilig te maken.","required":["vacancy_uuid","email"],"properties":{"vacancy_uuid":{"type":"string"},"email":{"type":"string","format":"email"},"consent_flag":{"type":["boolean","null"]},"entrypoint_raw":{"type":["string","null"]},"entrypoint_code":{"type":["string","null"]},"practice_id":{"type":["string","null"]}}},"WebhookIntake":{"type":"object","required":["url","event_types"],"properties":{"url":{"type":"string","format":"uri","description":"Https, publiek bereikbaar. Geen privaat of link-local adres."},"event_types":{"type":"array","items":{"type":"string","enum":["vacancy.created","vacancy.updated","vacancy.deleted","practice.created","practice.updated","practice.deleted","candidate.created","application.created","recruitment_case.created","system.ping"]}}}},"WebhookPatch":{"type":"object","properties":{"url":{"type":"string","format":"uri"},"event_types":{"type":"array","items":{"type":"string","enum":["vacancy.created","vacancy.updated","vacancy.deleted","practice.created","practice.updated","practice.deleted","candidate.created","application.created","recruitment_case.created","system.ping"]}},"status":{"type":"string","enum":["active","disabled"]}}},"WebhookEvent":{"type":"object","description":"De payload van een uitgaande webhook. Notificatie, geen snapshot.","required":["event_uuid","event_type","event_version","occurred_at"],"properties":{"event_uuid":{"type":"string","format":"uuid"},"event_type":{"type":"string","enum":["vacancy.created","vacancy.updated","vacancy.deleted","practice.created","practice.updated","practice.deleted","candidate.created","application.created","recruitment_case.created","system.ping"]},"event_version":{"type":"integer","const":1},"occurred_at":{"type":"string","format":"date-time"},"entity":{"type":"object","properties":{"type":{"type":"string"},"id":{"type":["string","null"]}}},"links":{"type":"object","properties":{"self":{"type":"string","format":"uri"}}}}}}}}