{"openapi":"3.1.0","info":{"title":"Sjel API","version":"1.0.0","description":"API voor Sjel accounts en aangesloten dienstverleners. Account keys geven toegang tot eigen gegevens; provider keys geven toegang tot dienstverlener-opdrachten."},"servers":[{"url":"https:\/\/sjel.nl\/api\/v1","description":"Production"}],"security":[{"ProviderApiKey":[]},{"CustomerApiKey":[]}],"paths":{"\/account\/me":{"get":{"tags":["Account API"],"summary":"Eigen accountgegevens ophalen","description":"Geeft de basisgegevens terug van het account dat hoort bij de account API key. Dit endpoint gebruikt een account API key, geen provider API key.","security":[{"CustomerApiKey":[]}],"responses":{"200":{"$ref":"#\/components\/responses\/AccountMe"},"401":{"$ref":"#\/components\/responses\/Unauthorized"}}}},"\/account\/kyc":{"get":{"tags":["Account API"],"summary":"Accountverificatie bekijken","description":"Geeft de KYC\/accountverificatie-status terug voor het account dat hoort bij de account API key. Vereist scope kyc:read.","security":[{"CustomerApiKey":[]}],"responses":{"200":{"$ref":"#\/components\/responses\/AccountKycDetail"},"401":{"$ref":"#\/components\/responses\/Unauthorized"},"403":{"$ref":"#\/components\/responses\/Forbidden"}}}},"\/account\/kyc\/evidence":{"post":{"tags":["Account API"],"summary":"Accountverificatiebewijs uploaden","description":"Upload een verificatiedocument voor het eigen account. Toegestaan: pdf, jpg, jpeg, png of webp tot 8 MB. Vereist scope kyc:write.","security":[{"CustomerApiKey":[]}],"requestBody":{"required":true,"content":{"multipart\/form-data":{"schema":{"$ref":"#\/components\/schemas\/AccountKycEvidenceUploadRequest"}}}},"responses":{"201":{"$ref":"#\/components\/responses\/AccountKycEvidenceUploaded"},"401":{"$ref":"#\/components\/responses\/Unauthorized"},"403":{"$ref":"#\/components\/responses\/Forbidden"},"422":{"$ref":"#\/components\/responses\/ValidationError"}}}},"\/account\/workflows\/{id}\/provider-profile":{"get":{"tags":["Account API"],"summary":"Gekoppeld dienstverlenerprofiel bekijken","description":"Geeft het klantzichtbare profiel terug van de dienstverlener die aan de eigen workflow\/opdracht is gekoppeld. Toont alleen de relevante dienstinformatie voor deze workflow.","security":[{"CustomerApiKey":[]}],"parameters":[{"$ref":"#\/components\/parameters\/WorkflowId"}],"responses":{"200":{"$ref":"#\/components\/responses\/CustomerProviderProfile"},"401":{"$ref":"#\/components\/responses\/Unauthorized"},"403":{"$ref":"#\/components\/responses\/Forbidden"},"404":{"$ref":"#\/components\/responses\/NotFound"}}}},"\/account\/objects":{"get":{"tags":["Account API"],"summary":"Eigen objecten tonen","description":"Toon woningen\/objecten die bij het account of de actieve workspace horen, inclusief huurcontractstatus en workflow-samenvatting.","security":[{"CustomerApiKey":[]}],"parameters":[{"name":"status","in":"query","required":false,"schema":{"type":"string"}},{"name":"purpose","in":"query","required":false,"schema":{"type":"string","enum":["sale","rent"]}},{"name":"city","in":"query","required":false,"schema":{"type":"string"}},{"$ref":"#\/components\/parameters\/LimitFilter"}],"responses":{"200":{"$ref":"#\/components\/responses\/AccountObjectList"},"401":{"$ref":"#\/components\/responses\/Unauthorized"},"403":{"$ref":"#\/components\/responses\/Forbidden"},"422":{"$ref":"#\/components\/responses\/ValidationError"}}},"post":{"tags":["Account API"],"summary":"Object aanmaken","description":"Maak een nieuw eigen object aan. Gebruik scope objects:write. Workflows worden niet automatisch gestart door alleen een object aan te maken.","security":[{"CustomerApiKey":[]}],"requestBody":{"required":true,"content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/AccountObjectWriteRequest"},"examples":{"rental_object":{"summary":"Huurwoning toevoegen","value":{"title":"Appartement aan de Markt","type":"apartment","purpose":"rent","status":"draft","address":"Markt","house_number":12,"postal_code":"3901AB","city":"Veenendaal","price":1450,"price_type":"per_month","living_area":82,"rooms":3}}}}}},"responses":{"201":{"$ref":"#\/components\/responses\/AccountObjectDetail"},"401":{"$ref":"#\/components\/responses\/Unauthorized"},"403":{"$ref":"#\/components\/responses\/Forbidden"},"422":{"$ref":"#\/components\/responses\/ValidationError"}}}},"\/account\/objects\/{id}":{"get":{"tags":["Account API"],"summary":"Eigen object bekijken","description":"Bekijk \u00e9\u00e9n object met adres, status, prijs, energielabel, workflow-samenvatting en huurcontract\/einddatum indien aanwezig.","security":[{"CustomerApiKey":[]}],"parameters":[{"$ref":"#\/components\/parameters\/PropertyId"}],"responses":{"200":{"$ref":"#\/components\/responses\/AccountObjectDetail"},"401":{"$ref":"#\/components\/responses\/Unauthorized"},"403":{"$ref":"#\/components\/responses\/Forbidden"},"404":{"$ref":"#\/components\/responses\/NotFound"}}},"patch":{"tags":["Account API"],"summary":"Eigen object wijzigen","description":"Wijzig veilige objectvelden. Belangrijke wijzigingen zetten het object op controle nodig binnen Sjel.","security":[{"CustomerApiKey":[]}],"parameters":[{"$ref":"#\/components\/parameters\/PropertyId"}],"requestBody":{"required":true,"content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/AccountObjectWriteRequest"}}}},"responses":{"200":{"$ref":"#\/components\/responses\/AccountObjectDetail"},"401":{"$ref":"#\/components\/responses\/Unauthorized"},"403":{"$ref":"#\/components\/responses\/Forbidden"},"404":{"$ref":"#\/components\/responses\/NotFound"},"422":{"$ref":"#\/components\/responses\/ValidationError"}}}},"\/account\/objects\/{id}\/kyc":{"get":{"tags":["Account API"],"summary":"Eigenaarscontrole voor eigen object bekijken","description":"Geeft de objectgebonden eigenaarscontrole\/compliance-status terug, inclusief open documentverzoeken. Vereist scope kyc:read en eigenaarschap op het object.","security":[{"CustomerApiKey":[]}],"parameters":[{"$ref":"#\/components\/parameters\/PropertyId"}],"responses":{"200":{"$ref":"#\/components\/responses\/AccountObjectKycDetail"},"401":{"$ref":"#\/components\/responses\/Unauthorized"},"403":{"$ref":"#\/components\/responses\/Forbidden"},"404":{"$ref":"#\/components\/responses\/NotFound"}}}},"\/account\/objects\/{id}\/kyc\/requirements\/{requirement_id}\/documents":{"post":{"tags":["Account API"],"summary":"Document uploaden voor eigenaarscontrole","description":"Upload een document voor een open eigenaarscontrole-documentverzoek van een eigen object. Vereist scope kyc:write.","security":[{"CustomerApiKey":[]}],"parameters":[{"$ref":"#\/components\/parameters\/PropertyId"},{"$ref":"#\/components\/parameters\/KycRequirementId"}],"requestBody":{"required":true,"content":{"multipart\/form-data":{"schema":{"$ref":"#\/components\/schemas\/ComplianceDocumentUploadRequest"}}}},"responses":{"201":{"$ref":"#\/components\/responses\/ComplianceDocumentUploaded"},"401":{"$ref":"#\/components\/responses\/Unauthorized"},"403":{"$ref":"#\/components\/responses\/Forbidden"},"404":{"$ref":"#\/components\/responses\/NotFound"},"422":{"$ref":"#\/components\/responses\/ValidationError"}}}},"\/account\/objects\/{id}\/workflows":{"get":{"tags":["Account API"],"summary":"Object-workflows uitlezen","description":"Geeft lopende, beschikbare, vergrendelde en afgeronde workflows terug voor \u00e9\u00e9n object, inclusief huidige stap en voortgang.","security":[{"CustomerApiKey":[]}],"parameters":[{"$ref":"#\/components\/parameters\/PropertyId"}],"responses":{"200":{"$ref":"#\/components\/responses\/AccountObjectWorkflowList"},"401":{"$ref":"#\/components\/responses\/Unauthorized"},"403":{"$ref":"#\/components\/responses\/Forbidden"},"404":{"$ref":"#\/components\/responses\/NotFound"}}},"post":{"tags":["Account API"],"summary":"Workflow voor object starten","description":"Start een beschikbare workflow voor een eigen object. Als betaling nodig is, wordt de workflow klaargezet en geeft de API status waiting_for_payment terug met een Mijn Sjel betaallink. De API start nog geen directe checkout of tegoedbetaling.","security":[{"CustomerApiKey":[]}],"parameters":[{"$ref":"#\/components\/parameters\/PropertyId"}],"requestBody":{"required":true,"content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/StartObjectWorkflowRequest"},"examples":{"energy_label":{"summary":"Energielabel workflow starten","value":{"workflow_type":"energielabel","mode":"order_service"}}}}}},"responses":{"201":{"$ref":"#\/components\/responses\/StartObjectWorkflowResult"},"202":{"$ref":"#\/components\/responses\/StartObjectWorkflowResult"},"401":{"$ref":"#\/components\/responses\/Unauthorized"},"403":{"$ref":"#\/components\/responses\/Forbidden"},"404":{"$ref":"#\/components\/responses\/NotFound"},"422":{"$ref":"#\/components\/responses\/ValidationError"}}}},"\/account\/documents":{"get":{"tags":["Account API"],"summary":"Eigen documenten tonen","description":"Toon alleen documenten die voor dit account zichtbaar zijn. Interne documenten en documenten van andere dossiers worden nooit teruggegeven.","security":[{"CustomerApiKey":[]}],"parameters":[{"name":"object_id","in":"query","required":false,"schema":{"type":"integer"}},{"name":"workflow_id","in":"query","required":false,"schema":{"type":"integer"}},{"name":"status","in":"query","required":false,"schema":{"type":"string"}},{"$ref":"#\/components\/parameters\/LimitFilter"}],"responses":{"200":{"$ref":"#\/components\/responses\/AccountDocumentList"},"401":{"$ref":"#\/components\/responses\/Unauthorized"},"403":{"$ref":"#\/components\/responses\/Forbidden"},"422":{"$ref":"#\/components\/responses\/ValidationError"}}}},"\/account\/documents\/{id}":{"get":{"tags":["Account API"],"summary":"Eigen document bekijken","description":"Bekijk metadata van een klantzichtbaar document. Downloaden loopt via een bestaande geautoriseerde Mijn Sjel-link.","security":[{"CustomerApiKey":[]}],"parameters":[{"$ref":"#\/components\/parameters\/DocumentId"}],"responses":{"200":{"$ref":"#\/components\/responses\/AccountDocumentDetail"},"401":{"$ref":"#\/components\/responses\/Unauthorized"},"403":{"$ref":"#\/components\/responses\/Forbidden"},"404":{"$ref":"#\/components\/responses\/NotFound"}}}},"\/account\/invoices":{"get":{"tags":["Account API"],"summary":"Eigen facturen tonen","description":"Toon alleen facturen die aan het account gekoppeld zijn.","security":[{"CustomerApiKey":[]}],"parameters":[{"name":"status","in":"query","required":false,"schema":{"type":"string"}},{"$ref":"#\/components\/parameters\/LimitFilter"}],"responses":{"200":{"$ref":"#\/components\/responses\/AccountInvoiceList"},"401":{"$ref":"#\/components\/responses\/Unauthorized"},"403":{"$ref":"#\/components\/responses\/Forbidden"},"422":{"$ref":"#\/components\/responses\/ValidationError"}}}},"\/account\/invoices\/{id}":{"get":{"tags":["Account API"],"summary":"Eigen factuur bekijken","security":[{"CustomerApiKey":[]}],"parameters":[{"$ref":"#\/components\/parameters\/InvoiceId"}],"responses":{"200":{"$ref":"#\/components\/responses\/AccountInvoiceDetail"},"401":{"$ref":"#\/components\/responses\/Unauthorized"},"403":{"$ref":"#\/components\/responses\/Forbidden"},"404":{"$ref":"#\/components\/responses\/NotFound"}}}},"\/account\/appointments":{"get":{"tags":["Account API"],"summary":"Eigen afspraken tonen","description":"Toon afspraken waar het account kandidaat, eigenaar of eigenaar van het gekoppelde object is.","security":[{"CustomerApiKey":[]}],"parameters":[{"name":"object_id","in":"query","required":false,"schema":{"type":"integer"}},{"name":"workflow_id","in":"query","required":false,"schema":{"type":"integer"}},{"name":"status","in":"query","required":false,"schema":{"type":"string"}},{"name":"from","in":"query","required":false,"schema":{"type":"string","format":"date"}},{"$ref":"#\/components\/parameters\/LimitFilter"}],"responses":{"200":{"$ref":"#\/components\/responses\/AccountAppointmentList"},"401":{"$ref":"#\/components\/responses\/Unauthorized"},"403":{"$ref":"#\/components\/responses\/Forbidden"},"422":{"$ref":"#\/components\/responses\/ValidationError"}}}},"\/account\/tickets":{"get":{"tags":["Account API"],"summary":"Eigen tickets en gesprekken tonen","description":"Toon alleen gesprekken die direct aan het account, een eigen object, eigen workflow of eigen taxatie gekoppeld zijn. Ticket-id in de API is een UUID.","security":[{"CustomerApiKey":[]}],"parameters":[{"name":"status","in":"query","required":false,"schema":{"type":"string"}},{"$ref":"#\/components\/parameters\/LimitFilter"}],"responses":{"200":{"$ref":"#\/components\/responses\/AccountTicketList"},"401":{"$ref":"#\/components\/responses\/Unauthorized"},"403":{"$ref":"#\/components\/responses\/Forbidden"},"422":{"$ref":"#\/components\/responses\/ValidationError"}}},"post":{"tags":["Account API"],"summary":"Nieuw ticket aanmaken","description":"Maak een nieuw ticket aan, eventueel gekoppeld aan een eigen object en\/of workflow. Koppelingen naar dossiers van anderen worden server-side geweigerd.","security":[{"CustomerApiKey":[]}],"requestBody":{"required":true,"content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/AccountTicketCreateRequest"}}}},"responses":{"201":{"$ref":"#\/components\/responses\/AccountTicketCreated"},"401":{"$ref":"#\/components\/responses\/Unauthorized"},"403":{"$ref":"#\/components\/responses\/Forbidden"},"422":{"$ref":"#\/components\/responses\/ValidationError"}}}},"\/account\/tickets\/{id}":{"get":{"tags":["Account API"],"summary":"Eigen ticket bekijken","security":[{"CustomerApiKey":[]}],"parameters":[{"$ref":"#\/components\/parameters\/TicketId"}],"responses":{"200":{"$ref":"#\/components\/responses\/AccountTicketDetail"},"401":{"$ref":"#\/components\/responses\/Unauthorized"},"403":{"$ref":"#\/components\/responses\/Forbidden"},"404":{"$ref":"#\/components\/responses\/NotFound"}}}},"\/account\/tickets\/{id}\/messages":{"post":{"tags":["Account API"],"summary":"Bericht toevoegen aan eigen ticket","description":"Voeg een dashboardbericht toe aan een gesprek waar het account toegang toe heeft.","security":[{"CustomerApiKey":[]}],"parameters":[{"$ref":"#\/components\/parameters\/TicketId"}],"requestBody":{"required":true,"content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/AccountTicketMessageCreateRequest"}}}},"responses":{"201":{"$ref":"#\/components\/responses\/AccountTicketMessageCreated"},"401":{"$ref":"#\/components\/responses\/Unauthorized"},"403":{"$ref":"#\/components\/responses\/Forbidden"},"404":{"$ref":"#\/components\/responses\/NotFound"},"422":{"$ref":"#\/components\/responses\/ValidationError"}}}},"\/energy-labels\/lookup":{"get":{"tags":["Energy Labels"],"summary":"Energielabel controleren","description":"Controleer gratis of er een energielabel bekend is voor een adres of BAG-id. Sjel zoekt eerst in de lokale energielabel-registry die met EP-Online totaalbestanden en mutaties wordt bijgewerkt. Alleen als lokaal niets gevonden wordt, gebruikt Sjel de offici\u00eble EP-Online API als fallback en slaat een gevonden resultaat lokaal op.","servers":[{"url":"https:\/\/sjel.nl\/api","description":"Production public API"}],"security":[],"parameters":[{"name":"postcode","in":"query","required":false,"schema":{"type":"string","example":"3905TE"},"description":"Nederlandse postcode. Gebruik postcode met house_number of gebruik bag_id."},{"name":"postal_code","in":"query","required":false,"schema":{"type":"string","example":"3905 TE"},"description":"Alias voor postcode."},{"name":"house_number","in":"query","required":false,"schema":{"type":"string","example":"27"},"description":"Huisnummer. Verplicht als postcode\/postal_code wordt gebruikt."},{"name":"addition","in":"query","required":false,"schema":{"type":"string","example":"A"},"description":"Huisnummertoevoeging of letter."},{"name":"house_letter","in":"query","required":false,"schema":{"type":"string","example":"A"}},{"name":"house_number_addition","in":"query","required":false,"schema":{"type":"string","example":"bis"}},{"name":"detail_designation","in":"query","required":false,"schema":{"type":"string","example":"appartement 2"}},{"name":"bag_id","in":"query","required":false,"schema":{"type":"string","example":"0345010000123456"},"description":"BAG verblijfsobject- of adresseerbaarobject-id. Kan zonder postcode worden gebruikt."}],"responses":{"200":{"$ref":"#\/components\/responses\/EnergyLabelLookupFound"},"404":{"$ref":"#\/components\/responses\/EnergyLabelLookupNotFound"},"422":{"$ref":"#\/components\/responses\/ValidationError"}}}},"\/provider\/assignments":{"get":{"tags":["Provider API"],"summary":"Lijst provideropdrachten","parameters":[{"$ref":"#\/components\/parameters\/StatusFilter"},{"$ref":"#\/components\/parameters\/LimitFilter"}],"responses":{"200":{"$ref":"#\/components\/responses\/AssignmentList"},"401":{"$ref":"#\/components\/responses\/Unauthorized"},"422":{"$ref":"#\/components\/responses\/ValidationError"}}}},"\/provider\/services":{"get":{"tags":["Provider API"],"summary":"Dienstprofielen tonen","description":"Toon de diensten die dit dienstverlener-account aanbiedt, inclusief reviewstatus en werkgebied per dienst.","responses":{"200":{"$ref":"#\/components\/responses\/ProviderServiceList"},"401":{"$ref":"#\/components\/responses\/Unauthorized"}}},"post":{"tags":["Provider API"],"summary":"Dienstprofiel toevoegen","description":"Voeg een diensttype toe aan het dienstverlenerprofiel. De dienst start als concept of pending review en moet door Sjel worden goedgekeurd voordat opdrachten zichtbaar worden.","requestBody":{"required":true,"content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/ProviderServiceWriteRequest"},"examples":{"energy_label":{"summary":"Energielabel toevoegen","value":{"service_type":"energy_label","customer_facing_title":"Energieadviseur woningen","customer_intro":"Ik neem vooraf contact op om de afspraak te bevestigen.","regions":["3905","Veenendaal","Ede"],"certifications":["EP-W adviseur"]}}}}}},"responses":{"201":{"$ref":"#\/components\/responses\/ProviderServiceDetail"},"401":{"$ref":"#\/components\/responses\/Unauthorized"},"422":{"$ref":"#\/components\/responses\/ValidationError"}}}},"\/provider\/services\/{id}":{"patch":{"tags":["Provider API"],"summary":"Dienstprofiel wijzigen","description":"Wijzig service-specifieke informatie zoals titel, introductie, werkgebied en certificeringen. Wijzigingen zetten de dienst opnieuw op review als deze al was goedgekeurd.","parameters":[{"$ref":"#\/components\/parameters\/ProviderServiceId"}],"requestBody":{"required":true,"content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/ProviderServiceWriteRequest"}}}},"responses":{"200":{"$ref":"#\/components\/responses\/ProviderServiceDetail"},"401":{"$ref":"#\/components\/responses\/Unauthorized"},"403":{"$ref":"#\/components\/responses\/Forbidden"},"404":{"$ref":"#\/components\/responses\/NotFound"},"422":{"$ref":"#\/components\/responses\/ValidationError"}}}},"\/provider\/services\/{id}\/submit-review":{"post":{"tags":["Provider API"],"summary":"Dienstprofiel indienen ter controle","description":"Zet een dienstprofiel op pending_review zodat Sjel deze dienst afzonderlijk kan goedkeuren of afwijzen.","parameters":[{"$ref":"#\/components\/parameters\/ProviderServiceId"}],"responses":{"200":{"$ref":"#\/components\/responses\/ProviderServiceDetail"},"401":{"$ref":"#\/components\/responses\/Unauthorized"},"403":{"$ref":"#\/components\/responses\/Forbidden"},"404":{"$ref":"#\/components\/responses\/NotFound"}}}},"\/provider\/assignments\/{id}":{"get":{"summary":"Details van \u00e9\u00e9n opdracht","parameters":[{"$ref":"#\/components\/parameters\/AssignmentId"}],"responses":{"200":{"$ref":"#\/components\/responses\/AssignmentDetail"},"403":{"$ref":"#\/components\/responses\/Forbidden"},"404":{"$ref":"#\/components\/responses\/NotFound"}}}},"\/provider\/assignments\/{id}\/offer":{"post":{"summary":"Opdracht accepteren of weigeren","description":"Gebruik dit endpoint zodra een opdracht aan je dienstprofiel is aangeboden. Bij weigeren is een korte reden verplicht.","parameters":[{"$ref":"#\/components\/parameters\/AssignmentId"}],"requestBody":{"required":true,"content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/OfferResponseRequest"},"examples":{"accept":{"summary":"Opdracht accepteren","value":{"action":"accepted","note":"Wij nemen contact op om een afspraak te plannen."}},"decline":{"summary":"Opdracht weigeren","value":{"action":"declined","decline_reason":"Buiten ons werkgebied","note":"Deze postcode valt niet binnen onze planning."}}}}}},"responses":{"200":{"$ref":"#\/components\/responses\/AssignmentDetail"},"401":{"$ref":"#\/components\/responses\/Unauthorized"},"403":{"$ref":"#\/components\/responses\/Forbidden"},"404":{"$ref":"#\/components\/responses\/NotFound"},"422":{"$ref":"#\/components\/responses\/ValidationError"}}}},"\/provider\/assignments\/{id}\/status":{"patch":{"summary":"Opdrachtstatus bijwerken","description":"Werk de operationele status van een opdracht bij. Gebruik scheduled_at alleen wanneer de status een afspraak bevestigt.","parameters":[{"$ref":"#\/components\/parameters\/AssignmentId"}],"requestBody":{"required":true,"content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/AssignmentStatusUpdateRequest"},"examples":{"site_visit_done":{"summary":"Opname afgerond","value":{"status":"site_visit_done","note":"Opname is uitgevoerd. Label wordt verwerkt."}},"appointment_confirmed":{"summary":"Afspraak bevestigd","value":{"status":"appointment_confirmed","scheduled_at":"2026-06-18T09:30:00+02:00","note":"Afspraak bevestigd met de klant."}}}}}},"responses":{"200":{"$ref":"#\/components\/responses\/AssignmentDetail"},"401":{"$ref":"#\/components\/responses\/Unauthorized"},"403":{"$ref":"#\/components\/responses\/Forbidden"},"404":{"$ref":"#\/components\/responses\/NotFound"},"422":{"$ref":"#\/components\/responses\/ValidationError"}}}},"\/provider\/assignments\/{id}\/appointments":{"post":{"summary":"Afspraakmomenten voorstellen","description":"Stel maximaal vijf toekomstige afspraakmomenten voor. Sjel maakt per starttijd een keuzeoptie voor de klant aan. Tijden moeten ISO 8601 datum\/tijd strings zijn, inclusief timezone.","parameters":[{"$ref":"#\/components\/parameters\/AssignmentId"}],"requestBody":{"required":true,"content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/AppointmentProposalRequest"},"examples":{"multiple_options":{"summary":"Meerdere afspraakopties","value":{"starts_at":["2026-06-18T09:30:00+02:00","2026-06-18T13:00:00+02:00","2026-06-19T10:00:00+02:00"],"duration_minutes":60,"note":"Kies een moment dat het beste past. De opname duurt ongeveer een uur."}}}}}},"responses":{"200":{"$ref":"#\/components\/responses\/AssignmentDetail"},"401":{"$ref":"#\/components\/responses\/Unauthorized"},"403":{"$ref":"#\/components\/responses\/Forbidden"},"404":{"$ref":"#\/components\/responses\/NotFound"},"422":{"$ref":"#\/components\/responses\/ValidationError"}}}},"\/provider\/assignments\/{id}\/documents":{"post":{"summary":"Resultaatdocument uploaden","description":"Upload het resultaatdocument bij de opdracht. Toegestaan: pdf, jpg, jpeg, png of webp tot 20 MB.","parameters":[{"$ref":"#\/components\/parameters\/AssignmentId"}],"requestBody":{"required":true,"content":{"multipart\/form-data":{"schema":{"$ref":"#\/components\/schemas\/DocumentUploadRequest"}}}},"responses":{"201":{"$ref":"#\/components\/responses\/DocumentUploaded"},"401":{"$ref":"#\/components\/responses\/Unauthorized"},"403":{"$ref":"#\/components\/responses\/Forbidden"},"404":{"$ref":"#\/components\/responses\/NotFound"},"422":{"$ref":"#\/components\/responses\/ValidationError"}}}},"\/provider\/assignments\/{id}\/customer-invoice":{"post":{"summary":"Klantfactuur uploaden","description":"Upload de factuur die de dienstverlener aan de klant heeft gestuurd. Dit is verplicht bij marketplace-diensten waar de dienstverlener de formele leverancier is.","parameters":[{"$ref":"#\/components\/parameters\/AssignmentId"}],"requestBody":{"required":true,"content":{"multipart\/form-data":{"schema":{"$ref":"#\/components\/schemas\/CustomerInvoiceUploadRequest"}}}},"responses":{"201":{"$ref":"#\/components\/responses\/CustomerInvoiceUploaded"},"401":{"$ref":"#\/components\/responses\/Unauthorized"},"403":{"$ref":"#\/components\/responses\/Forbidden"},"404":{"$ref":"#\/components\/responses\/NotFound"},"422":{"$ref":"#\/components\/responses\/ValidationError"}}}},"\/provider\/webhook-endpoints":{"get":{"summary":"Webhook endpoints tonen","responses":{"200":{"$ref":"#\/components\/responses\/WebhookEndpointList"},"401":{"$ref":"#\/components\/responses\/Unauthorized"}}},"post":{"summary":"Webhook endpoint registreren","description":"Registreer een HTTPS endpoint voor provider-webhooks. Als events leeg blijft, gebruikt Sjel de standaard events.","requestBody":{"required":true,"content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/WebhookEndpointCreateRequest"},"examples":{"default_events":{"summary":"Endpoint met standaard events","value":{"url":"https:\/\/provider.example.com\/sjel\/webhooks"}},"specific_events":{"summary":"Endpoint met specifieke events","value":{"url":"https:\/\/provider.example.com\/sjel\/webhooks","events":["assignment.updated","document.uploaded"]}}}}}},"responses":{"201":{"$ref":"#\/components\/responses\/WebhookEndpointCreated"},"401":{"$ref":"#\/components\/responses\/Unauthorized"},"422":{"$ref":"#\/components\/responses\/ValidationError"}}}},"\/provider\/webhook-endpoints\/{endpoint}":{"delete":{"summary":"Webhook endpoint uitschakelen","parameters":[{"name":"endpoint","in":"path","required":true,"schema":{"type":"integer"}}],"responses":{"200":{"$ref":"#\/components\/responses\/WebhookEndpointCreated"},"401":{"$ref":"#\/components\/responses\/Unauthorized"},"403":{"$ref":"#\/components\/responses\/Forbidden"},"404":{"$ref":"#\/components\/responses\/NotFound"}}}},"\/voice\/calls":{"post":{"tags":["Voice Internal API"],"summary":"Inbound call registreren","description":"Intern endpoint voor telefonie\/AI adapters. Registreert een inkomend gesprek en probeert klant, dienstverlener en opdracht te herkennen.","servers":[{"url":"https:\/\/sjel.nl\/api","description":"Production voice API"}],"security":[{"VoiceInternalToken":[]}],"requestBody":{"required":true,"content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/VoiceInboundCallRequest"},"examples":{"customer_call":{"summary":"Klant belt Sjel","value":{"provider":"custom_http","provider_call_id":"call_123","caller_phone":"+31612345678","actor_type":"customer"}}}}}},"responses":{"201":{"$ref":"#\/components\/responses\/VoiceCallCreated"},"403":{"$ref":"#\/components\/responses\/Forbidden"},"422":{"$ref":"#\/components\/responses\/ValidationError"},"503":{"$ref":"#\/components\/responses\/VoiceNotConfigured"}}}},"\/voice\/events":{"post":{"tags":["Voice Internal API"],"summary":"Voice provider event loggen","description":"Logt een event van LiveKit\/Voys\/agent worker en kan optioneel de callstatus bijwerken. Idempotentie blijft bij provider_event_id en de onderliggende Sjel calllog.","servers":[{"url":"https:\/\/sjel.nl\/api","description":"Production voice API"}],"security":[{"VoiceInternalToken":[]}],"requestBody":{"required":true,"content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/VoiceEventRequest"}}}},"responses":{"200":{"$ref":"#\/components\/responses\/VoiceEventLogged"},"403":{"$ref":"#\/components\/responses\/Forbidden"},"422":{"$ref":"#\/components\/responses\/ValidationError"},"503":{"$ref":"#\/components\/responses\/VoiceNotConfigured"}}}},"\/voice\/calls\/{voice_call_id}\/intent":{"post":{"tags":["Voice Internal API"],"summary":"Transcript routeren naar intentie","description":"Laat Sjel de transcripttekst classificeren en bepalen of self-service veilig is, een callback nodig is of handmatige opvolging moet starten.","servers":[{"url":"https:\/\/sjel.nl\/api","description":"Production voice API"}],"security":[{"VoiceInternalToken":[]}],"parameters":[{"$ref":"#\/components\/parameters\/VoiceCallId"}],"requestBody":{"required":true,"content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/VoiceIntentRequest"}}}},"responses":{"200":{"$ref":"#\/components\/responses\/VoiceIntentRouted"},"403":{"$ref":"#\/components\/responses\/Forbidden"},"404":{"$ref":"#\/components\/responses\/NotFound"},"422":{"$ref":"#\/components\/responses\/ValidationError"},"503":{"$ref":"#\/components\/responses\/VoiceNotConfigured"}}}},"\/voice\/calls\/{voice_call_id}\/direct-forwarding":{"post":{"tags":["Voice Internal API"],"summary":"Direct doorschakelbeleid ophalen","description":"Laat de voice-agent bij start van een gesprek controleren of Sjel het hoofdnummer tijdelijk direct wil doorschakelen. Sjel blijft de bron van waarheid; de agent voert alleen de transfer uit.","servers":[{"url":"https:\/\/sjel.nl\/api","description":"Production voice API"}],"security":[{"VoiceInternalToken":[]}],"parameters":[{"$ref":"#\/components\/parameters\/VoiceCallId"}],"requestBody":{"required":false,"content":{"application\/json":{"schema":{"type":"object","properties":{"language":{"type":"string","enum":["nl","en"],"default":"nl"}}}}}},"responses":{"200":{"description":"Direct-forwarding policy voor de agent","content":{"application\/json":{"schema":{"type":"object","properties":{"voice_call_id":{"type":"integer"},"enabled":{"type":"boolean"},"configured":{"type":"boolean"},"should_transfer":{"type":"boolean"},"transfer_mode":{"type":"string","example":"agent_outbound_transfer"},"target_phone":{"type":"string","nullable":true,"example":"+31612345678"},"language":{"type":"string","example":"nl"},"greeting":{"type":"string","nullable":true},"agent_instruction":{"type":"string","example":"say_greeting_then_transfer"},"reason":{"type":"string","example":"direct_forwarding_enabled"}}}}}},"403":{"$ref":"#\/components\/responses\/Forbidden"},"404":{"$ref":"#\/components\/responses\/NotFound"},"422":{"$ref":"#\/components\/responses\/ValidationError"},"503":{"$ref":"#\/components\/responses\/VoiceNotConfigured"}}}},"\/voice\/calls\/{voice_call_id}\/safe-status":{"get":{"tags":["Voice Internal API"],"summary":"Veilige status voor beller ophalen","description":"Geeft alleen door SafeStatusService toegestane informatie terug. De agent mag geen eigen statuslogica toepassen.","servers":[{"url":"https:\/\/sjel.nl\/api","description":"Production voice API"}],"security":[{"VoiceInternalToken":[]}],"parameters":[{"$ref":"#\/components\/parameters\/VoiceCallId"}],"responses":{"200":{"$ref":"#\/components\/responses\/VoiceSafeStatus"},"403":{"$ref":"#\/components\/responses\/Forbidden"},"404":{"$ref":"#\/components\/responses\/NotFound"},"503":{"$ref":"#\/components\/responses\/VoiceNotConfigured"}}}},"\/voice\/calls\/{voice_call_id}\/transcript":{"post":{"tags":["Voice Internal API"],"summary":"Transcript opslaan","servers":[{"url":"https:\/\/sjel.nl\/api","description":"Production voice API"}],"security":[{"VoiceInternalToken":[]}],"parameters":[{"$ref":"#\/components\/parameters\/VoiceCallId"}],"requestBody":{"required":true,"content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/VoiceTranscriptRequest"}}}},"responses":{"200":{"$ref":"#\/components\/responses\/VoiceTranscriptSaved"},"403":{"$ref":"#\/components\/responses\/Forbidden"},"404":{"$ref":"#\/components\/responses\/NotFound"},"422":{"$ref":"#\/components\/responses\/ValidationError"},"503":{"$ref":"#\/components\/responses\/VoiceNotConfigured"}}}},"\/voice\/calls\/{voice_call_id}\/summary":{"post":{"tags":["Voice Internal API"],"summary":"Callsamenvatting opslaan","servers":[{"url":"https:\/\/sjel.nl\/api","description":"Production voice API"}],"security":[{"VoiceInternalToken":[]}],"parameters":[{"$ref":"#\/components\/parameters\/VoiceCallId"}],"requestBody":{"required":true,"content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/VoiceSummaryRequest"}}}},"responses":{"200":{"$ref":"#\/components\/responses\/VoiceSummarySaved"},"403":{"$ref":"#\/components\/responses\/Forbidden"},"404":{"$ref":"#\/components\/responses\/NotFound"},"422":{"$ref":"#\/components\/responses\/ValidationError"},"503":{"$ref":"#\/components\/responses\/VoiceNotConfigured"}}}},"\/voice\/calls\/{voice_call_id}\/verification-status":{"get":{"tags":["Voice Internal API"],"summary":"Verificatiestatus van call ophalen","servers":[{"url":"https:\/\/sjel.nl\/api","description":"Production voice API"}],"security":[{"VoiceInternalToken":[]}],"parameters":[{"$ref":"#\/components\/parameters\/VoiceCallId"}],"responses":{"200":{"$ref":"#\/components\/responses\/VoiceVerificationStatus"},"403":{"$ref":"#\/components\/responses\/Forbidden"},"404":{"$ref":"#\/components\/responses\/NotFound"},"503":{"$ref":"#\/components\/responses\/VoiceNotConfigured"}}}},"\/voice\/verification-sessions":{"post":{"tags":["Voice Internal API"],"summary":"Nieuwe Mijn Sjel verificatiecode starten","servers":[{"url":"https:\/\/sjel.nl\/api","description":"Production voice API"}],"security":[{"VoiceInternalToken":[]}],"requestBody":{"required":true,"content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/VoiceVerificationSessionCreateRequest"}}}},"responses":{"201":{"$ref":"#\/components\/responses\/VoiceVerificationSessionCreated"},"403":{"$ref":"#\/components\/responses\/Forbidden"},"422":{"$ref":"#\/components\/responses\/ValidationError"},"503":{"$ref":"#\/components\/responses\/VoiceNotConfigured"}}}},"\/voice\/verification-sessions\/verify":{"post":{"tags":["Voice Internal API"],"summary":"Mijn Sjel telefonische verificatiecode controleren","servers":[{"url":"https:\/\/sjel.nl\/api","description":"Production voice API"}],"security":[{"VoiceInternalToken":[]}],"requestBody":{"required":true,"content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/VoiceVerificationVerifyRequest"}}}},"responses":{"200":{"$ref":"#\/components\/responses\/VoiceVerificationVerified"},"403":{"$ref":"#\/components\/responses\/Forbidden"},"422":{"$ref":"#\/components\/responses\/ValidationError"},"503":{"$ref":"#\/components\/responses\/VoiceNotConfigured"}}}},"\/voice\/support-sessions":{"post":{"tags":["Voice Internal API"],"summary":"Veilige telefonische hulpsessie aanmaken","description":"Maakt een Mijn Sjel hulpsessie aan waarmee de beller na verificatie direct naar de juiste veilige stap kan worden gestuurd.","servers":[{"url":"https:\/\/sjel.nl\/api","description":"Production voice API"}],"security":[{"VoiceInternalToken":[]}],"requestBody":{"required":true,"content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/VoiceSupportSessionCreateRequest"}}}},"responses":{"201":{"$ref":"#\/components\/responses\/VoiceSupportSessionCreated"},"403":{"$ref":"#\/components\/responses\/Forbidden"},"422":{"$ref":"#\/components\/responses\/ValidationError"},"503":{"$ref":"#\/components\/responses\/VoiceNotConfigured"}}}},"\/voice\/support-sessions\/{support_session_id}":{"get":{"tags":["Voice Internal API"],"summary":"Telefonische hulpsessie ophalen","servers":[{"url":"https:\/\/sjel.nl\/api","description":"Production voice API"}],"security":[{"VoiceInternalToken":[]}],"parameters":[{"$ref":"#\/components\/parameters\/VoiceSupportSessionId"}],"responses":{"200":{"$ref":"#\/components\/responses\/VoiceSupportSessionTargetSet"},"403":{"$ref":"#\/components\/responses\/Forbidden"},"404":{"$ref":"#\/components\/responses\/NotFound"},"503":{"$ref":"#\/components\/responses\/VoiceNotConfigured"}}}},"\/voice\/support-sessions\/{support_session_id}\/set-target":{"post":{"tags":["Voice Internal API"],"summary":"Hulpsessie naar veilige Mijn Sjel stap sturen","servers":[{"url":"https:\/\/sjel.nl\/api","description":"Production voice API"}],"security":[{"VoiceInternalToken":[]}],"parameters":[{"$ref":"#\/components\/parameters\/VoiceSupportSessionId"}],"requestBody":{"required":true,"content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/VoiceSupportSetTargetRequest"}}}},"responses":{"200":{"$ref":"#\/components\/responses\/VoiceSupportSessionTargetSet"},"403":{"$ref":"#\/components\/responses\/Forbidden"},"404":{"$ref":"#\/components\/responses\/NotFound"},"422":{"$ref":"#\/components\/responses\/ValidationError"},"503":{"$ref":"#\/components\/responses\/VoiceNotConfigured"}}}},"\/voice\/support-sessions\/{support_session_id}\/complete":{"post":{"tags":["Voice Internal API"],"summary":"Hulpsessie afronden","servers":[{"url":"https:\/\/sjel.nl\/api","description":"Production voice API"}],"security":[{"VoiceInternalToken":[]}],"parameters":[{"$ref":"#\/components\/parameters\/VoiceSupportSessionId"}],"responses":{"200":{"$ref":"#\/components\/responses\/VoiceSupportSessionCompleted"},"403":{"$ref":"#\/components\/responses\/Forbidden"},"404":{"$ref":"#\/components\/responses\/NotFound"},"503":{"$ref":"#\/components\/responses\/VoiceNotConfigured"}}}},"\/voice\/support-tickets":{"post":{"tags":["Voice Internal API"],"summary":"Supportticket maken vanuit voice","servers":[{"url":"https:\/\/sjel.nl\/api","description":"Production voice API"}],"security":[{"VoiceInternalToken":[]}],"requestBody":{"required":true,"content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/VoiceSupportTicketRequest"}}}},"responses":{"201":{"$ref":"#\/components\/responses\/VoiceSupportTicketCreated"},"403":{"$ref":"#\/components\/responses\/Forbidden"},"422":{"$ref":"#\/components\/responses\/ValidationError"},"503":{"$ref":"#\/components\/responses\/VoiceNotConfigured"}}}},"\/voice\/callback-requests":{"post":{"tags":["Voice Internal API"],"summary":"Terugbelverzoek maken vanuit voice","servers":[{"url":"https:\/\/sjel.nl\/api","description":"Production voice API"}],"security":[{"VoiceInternalToken":[]}],"requestBody":{"required":true,"content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/VoiceSupportTicketRequest"}}}},"responses":{"201":{"$ref":"#\/components\/responses\/VoiceSupportTicketCreated"},"403":{"$ref":"#\/components\/responses\/Forbidden"},"422":{"$ref":"#\/components\/responses\/ValidationError"},"503":{"$ref":"#\/components\/responses\/VoiceNotConfigured"}}}},"\/voice\/audit-events":{"post":{"tags":["Voice Internal API"],"summary":"Audit event schrijven","servers":[{"url":"https:\/\/sjel.nl\/api","description":"Production voice API"}],"security":[{"VoiceInternalToken":[]}],"requestBody":{"required":true,"content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/VoiceAuditEventRequest"}}}},"responses":{"200":{"$ref":"#\/components\/responses\/VoiceAuditEventLogged"},"403":{"$ref":"#\/components\/responses\/Forbidden"},"422":{"$ref":"#\/components\/responses\/ValidationError"},"503":{"$ref":"#\/components\/responses\/VoiceNotConfigured"}}}}},"components":{"securitySchemes":{"ProviderApiKey":{"type":"http","scheme":"bearer","bearerFormat":"Sjel provider API key"},"CustomerApiKey":{"type":"http","scheme":"bearer","bearerFormat":"Sjel account API key"},"VoiceInternalToken":{"type":"http","scheme":"bearer","bearerFormat":"VOICE_INTERNAL_API_TOKEN","description":"Interne bearer token voor telefonieproviders en voice\/AI adapters. Niet gebruiken in browser\/frontends."}},"parameters":{"AssignmentId":{"name":"id","in":"path","required":true,"schema":{"type":"integer"}},"WorkflowId":{"name":"id","in":"path","required":true,"schema":{"type":"integer"}},"PropertyId":{"name":"id","in":"path","required":true,"schema":{"type":"integer"}},"KycRequirementId":{"name":"requirement_id","in":"path","required":true,"schema":{"type":"integer"}},"DocumentId":{"name":"id","in":"path","required":true,"schema":{"type":"integer"}},"InvoiceId":{"name":"id","in":"path","required":true,"schema":{"type":"integer"}},"TicketId":{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}},"ProviderServiceId":{"name":"id","in":"path","required":true,"schema":{"type":"integer"}},"OpenJobId":{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}},"VoiceCallId":{"name":"voice_call_id","in":"path","required":true,"schema":{"type":"integer"}},"VoiceSupportSessionId":{"name":"support_session_id","in":"path","required":true,"schema":{"type":"integer"}},"StatusFilter":{"name":"status","in":"query","required":false,"schema":{"type":"string"}},"LimitFilter":{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":25,"maximum":100}}},"schemas":{"AccountMe":{"type":"object","properties":{"id":{"type":"integer","nullable":true},"name":{"type":"string","nullable":true},"email":{"type":"string","format":"email","nullable":true},"customer_number":{"type":"string","nullable":true},"locale":{"type":"string","nullable":true,"example":"nl"},"api_key":{"$ref":"#\/components\/schemas\/AccountApiKeyInfo"},"links":{"$ref":"#\/components\/schemas\/AccountLinks"}}},"AccountApiKeyInfo":{"type":"object","properties":{"name":{"type":"string","nullable":true},"prefix":{"type":"string","nullable":true},"abilities":{"type":"array","items":{"type":"string"}}}},"AccountLinks":{"type":"object","properties":{"developers":{"type":"string","format":"uri"},"openapi":{"type":"string","format":"uri"}}},"AccountKyc":{"type":"object","properties":{"id":{"type":"integer"},"status":{"type":"string","enum":["unverified","in_review","verified","rejected","expired"]},"status_label":{"type":"string"},"description":{"type":"string"},"profile_type":{"type":"string","enum":["person","organization"]},"verification_method":{"type":"string"},"risk_level":{"type":"string"},"reusable_for_workflows":{"type":"boolean"},"customer_message":{"type":"string","nullable":true},"submitted_at":{"type":"string","format":"date-time","nullable":true},"verified_at":{"type":"string","format":"date-time","nullable":true},"rejected_at":{"type":"string","format":"date-time","nullable":true},"expires_at":{"type":"string","format":"date-time","nullable":true},"requirements":{"type":"array","items":{"$ref":"#\/components\/schemas\/AccountVerificationRequirement"}},"evidence":{"type":"array","items":{"$ref":"#\/components\/schemas\/AccountKycEvidence"}},"links":{"type":"object"}}},"AccountVerificationRequirement":{"type":"object","properties":{"id":{"type":"integer"},"requirement_key":{"type":"string","example":"identity_document"},"evidence_type":{"type":"string","nullable":true,"example":"id_copy"},"label":{"type":"string"},"description":{"type":"string"},"account_context":{"type":"string","nullable":true},"status":{"type":"string","enum":["required","received","in_review","approved","rejected","waived"]},"status_label":{"type":"string"},"required":{"type":"boolean"},"completed":{"type":"boolean"},"evidence_id":{"type":"integer","nullable":true},"completed_at":{"type":"string","format":"date-time","nullable":true},"reviewed_at":{"type":"string","format":"date-time","nullable":true},"rejected_at":{"type":"string","format":"date-time","nullable":true}}},"AccountKycSummary":{"type":"object","properties":{"id":{"type":"integer"},"status":{"type":"string"},"status_label":{"type":"string"},"reusable_for_workflows":{"type":"boolean"},"verified_at":{"type":"string","format":"date-time","nullable":true}}},"AccountKycEvidence":{"type":"object","properties":{"id":{"type":"integer"},"evidence_type":{"type":"string","example":"id_copy"},"status":{"type":"string","example":"received"},"visibility":{"type":"string","example":"admin_only"},"file_name":{"type":"string","nullable":true},"mime_type":{"type":"string","nullable":true},"size":{"type":"integer","nullable":true},"received_at":{"type":"string","format":"date-time","nullable":true},"reviewed_at":{"type":"string","format":"date-time","nullable":true}}},"AccountKycEvidenceUploadRequest":{"type":"object","required":["evidence_type","document"],"properties":{"evidence_type":{"type":"string","enum":["id_copy","kvk_extract","ubo_document","bank_verification"]},"document":{"type":"string","format":"binary"},"account_verification_requirement_id":{"type":"integer","nullable":true}}},"AccountObjectKyc":{"type":"object","properties":{"object":{"type":"object"},"account_kyc":{"$ref":"#\/components\/schemas\/AccountKycSummary"},"summary":{"type":"object","properties":{"status":{"type":"string","example":"waiting_for_customer"},"who_is_next":{"type":"string","enum":["none","customer","sjel","done"]},"needs_account_verification":{"type":"boolean"},"open_requirements_count":{"type":"integer"},"uploaded_requirements_count":{"type":"integer"}}},"reviews":{"type":"array","items":{"$ref":"#\/components\/schemas\/ComplianceReview"}},"links":{"type":"object"}}},"ComplianceReview":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"review_type":{"type":"string","example":"owner_authority"},"status":{"type":"string"},"identity_status":{"type":"string"},"authority_status":{"type":"string"},"owner_match_status":{"type":"string"},"customer_message":{"type":"string","nullable":true},"workflow":{"type":"object","nullable":true},"requirements":{"type":"array","items":{"$ref":"#\/components\/schemas\/ComplianceRequirement"}},"documents":{"type":"array","items":{"$ref":"#\/components\/schemas\/ComplianceDocument"}},"requested_at":{"type":"string","format":"date-time","nullable":true},"approved_at":{"type":"string","format":"date-time","nullable":true},"rejected_at":{"type":"string","format":"date-time","nullable":true}}},"ComplianceRequirement":{"type":"object","properties":{"id":{"type":"integer"},"document_type":{"type":"string","example":"ownership_proof"},"label":{"type":"string"},"status":{"type":"string","enum":["requested","uploaded","accepted","rejected","cancelled"]},"reason":{"type":"string"},"uploaded_document":{"$ref":"#\/components\/schemas\/ComplianceDocument"}}},"ComplianceDocument":{"type":"object","properties":{"id":{"type":"integer"},"document_type":{"type":"string"},"status":{"type":"string"},"visibility":{"type":"string"},"file_name":{"type":"string"},"mime_type":{"type":"string","nullable":true},"size":{"type":"integer","nullable":true},"customer_note":{"type":"string","nullable":true},"rejection_reason":{"type":"string","nullable":true},"uploaded_at":{"type":"string","format":"date-time","nullable":true},"reviewed_at":{"type":"string","format":"date-time","nullable":true}}},"ComplianceDocumentUploadRequest":{"type":"object","required":["document"],"properties":{"document":{"type":"string","format":"binary"},"note":{"type":"string","nullable":true,"maxLength":1200}}},"AccountObject":{"type":"object","properties":{"id":{"type":"integer"},"slug":{"type":"string"},"title":{"type":"string"},"type":{"type":"string","example":"apartment"},"type_label":{"type":"string","example":"Appartement"},"purpose":{"type":"string","example":"rent"},"purpose_label":{"type":"string","example":"Te huur"},"status":{"type":"string","example":"draft"},"status_label":{"type":"string","example":"Concept"},"city":{"type":"string","nullable":true},"address":{"$ref":"#\/components\/schemas\/AccountObjectAddress"},"pricing":{"$ref":"#\/components\/schemas\/AccountObjectPricing"},"details":{"$ref":"#\/components\/schemas\/AccountObjectDetails"},"energy_label":{"$ref":"#\/components\/schemas\/AccountObjectEnergyLabel"},"lease":{"$ref":"#\/components\/schemas\/AccountObjectLease"},"workflow_summary":{"$ref":"#\/components\/schemas\/AccountObjectWorkflowSummary"},"links":{"$ref":"#\/components\/schemas\/AccountObjectLinks"},"updated_at":{"type":"string","format":"date-time","nullable":true}}},"AccountObjectAddress":{"type":"object","properties":{"street":{"type":"string","nullable":true},"house_number":{"type":"integer","nullable":true},"house_number_addition":{"type":"string","nullable":true},"postal_code":{"type":"string","nullable":true},"city":{"type":"string","nullable":true},"country":{"type":"string","example":"NL"},"municipality":{"type":"string","nullable":true},"province":{"type":"string","nullable":true},"latitude":{"type":"number","format":"float","nullable":true},"longitude":{"type":"number","format":"float","nullable":true},"lookup_source":{"type":"string","nullable":true},"lookup_status":{"type":"string","nullable":true},"verified_at":{"type":"string","format":"date-time","nullable":true}}},"AccountObjectPricing":{"type":"object","properties":{"price":{"type":"integer","nullable":true,"description":"Objectprijs in euro\u2019s zoals in Sjel opgeslagen, niet in centen."},"price_type":{"type":"string","nullable":true,"example":"per_month"},"price_label":{"type":"string","nullable":true},"service_costs":{"type":"integer","nullable":true},"heating_advance":{"type":"integer","nullable":true,"description":"Maandelijks voorschot voor gas of blokverwarming in euro\u2019s."}}},"AccountObjectDetails":{"type":"object","properties":{"living_area":{"type":"integer","nullable":true},"plot_area":{"type":"integer","nullable":true},"rooms":{"type":"integer","nullable":true},"bedrooms":{"type":"integer","nullable":true},"bathrooms":{"type":"integer","nullable":true},"construction_year":{"type":"integer","nullable":true},"house_type_detail":{"type":"string","nullable":true},"summary":{"type":"string","nullable":true},"description":{"type":"string","nullable":true},"available_from":{"type":"string","format":"date","nullable":true},"acceptance":{"type":"string","nullable":true}}},"AccountObjectEnergyLabel":{"type":"object","properties":{"label":{"type":"string","nullable":true,"example":"A"},"source":{"type":"string","nullable":true},"reference":{"type":"string","nullable":true},"registered_at":{"type":"string","format":"date","nullable":true},"valid_until":{"type":"string","format":"date","nullable":true},"checked_at":{"type":"string","format":"date-time","nullable":true}}},"AccountObjectLease":{"type":"object","description":"Alleen gevuld wanneer het object een huurcontract heeft.","properties":{"has_contract":{"type":"boolean"},"has_active_lease":{"type":"boolean"},"id":{"type":"string","format":"uuid","nullable":true},"status":{"type":"string","nullable":true},"status_label":{"type":"string","nullable":true},"starts_at":{"type":"string","format":"date","nullable":true},"ends_at":{"type":"string","format":"date","nullable":true},"notice_deadline_at":{"type":"string","format":"date","nullable":true},"renewal_decision_due_at":{"type":"string","format":"date","nullable":true},"renewal_decision_status":{"type":"string","nullable":true},"renewal_decision_label":{"type":"string","nullable":true},"is_renewable":{"type":"boolean","nullable":true},"days_until_end":{"type":"integer","nullable":true},"days_until_notice_deadline":{"type":"integer","nullable":true},"days_until_renewal_decision":{"type":"integer","nullable":true}}},"AccountObjectWorkflowSummary":{"type":"object","properties":{"active_count":{"type":"integer"},"completed_count":{"type":"integer"}}},"AccountObjectLinks":{"type":"object","properties":{"dashboard":{"type":"string","format":"uri"},"workflows":{"type":"string","format":"uri"},"api":{"type":"string","format":"uri"}}},"AccountObjectWriteRequest":{"type":"object","required":["title","city"],"properties":{"title":{"type":"string","maxLength":255},"type":{"type":"string","enum":["house","apartment","room","commercial","studio"]},"purpose":{"type":"string","enum":["sale","rent"]},"status":{"type":"string","enum":["draft","published","reserved","sold","rented"]},"address":{"type":"string","nullable":true},"postal_code":{"type":"string","nullable":true},"house_number":{"type":"integer","nullable":true},"house_number_addition":{"type":"string","nullable":true},"city":{"type":"string"},"price":{"type":"integer","nullable":true},"price_type":{"type":"string","nullable":true,"example":"per_month"},"service_costs":{"type":"integer","nullable":true},"heating_advance":{"type":"integer","nullable":true},"living_area":{"type":"integer","nullable":true},"plot_area":{"type":"integer","nullable":true},"rooms":{"type":"integer","nullable":true},"bedrooms":{"type":"integer","nullable":true},"bathrooms":{"type":"integer","nullable":true},"energy_label":{"type":"string","nullable":true},"construction_year":{"type":"integer","nullable":true},"summary":{"type":"string","nullable":true},"description":{"type":"string","nullable":true},"available_from":{"type":"string","format":"date","nullable":true}}},"AccountObjectWorkflowState":{"type":"object","properties":{"type":{"type":"string","example":"energielabel"},"label":{"type":"string","example":"Energielabel regelen"},"short_label":{"type":"string","nullable":true},"state":{"type":"string","enum":["active","available","locked","completed","hidden"]},"reason":{"type":"string","nullable":true},"workflow_number":{"type":"string","nullable":true},"progress":{"type":"integer"},"current_step":{"$ref":"#\/components\/schemas\/AccountWorkflowStep"},"steps":{"type":"array","items":{"$ref":"#\/components\/schemas\/AccountWorkflowStep"}},"commercial":{"type":"object","nullable":true},"action_label":{"type":"string","nullable":true},"links":{"type":"object"}}},"AccountWorkflowStep":{"type":"object","nullable":true,"properties":{"key":{"type":"string","nullable":true},"label":{"type":"string","nullable":true},"status":{"type":"string","nullable":true},"raw_status":{"type":"string","nullable":true},"action_required_by":{"type":"string","nullable":true},"action_label":{"type":"string","nullable":true},"started_at":{"type":"string","format":"date-time","nullable":true},"completed_at":{"type":"string","format":"date-time","nullable":true},"links":{"type":"object"}}},"StartObjectWorkflowRequest":{"type":"object","required":["workflow_type"],"properties":{"workflow_type":{"type":"string","description":"Bijvoorbeeld sale, rent, valuation, energielabel, property_website of funda_publication."},"mode":{"type":"string","enum":["start_only","order_service"],"default":"order_service","description":"order_service zet een betaalde workflow klaar op betaling; betaling blijft via Mijn Sjel lopen."}}},"StartObjectWorkflowResponse":{"type":"object","properties":{"status":{"type":"string","enum":["started","waiting_for_payment"]},"payment_required":{"type":"boolean"},"message":{"type":"string"},"workflow":{"type":"object"},"payment":{"type":"object","properties":{"status":{"type":"string","example":"waiting_for_payment"},"amount_cents":{"type":"integer","nullable":true},"label":{"type":"string","nullable":true},"detail":{"type":"string","nullable":true},"next_action_url":{"type":"string","format":"uri","nullable":true}}},"links":{"type":"object"}}},"CustomerProviderProfile":{"type":"object","nullable":true,"properties":{"name":{"type":"string","nullable":true,"example":"Jan de Vries"},"company_name":{"type":"string","nullable":true,"example":"EnergieLabel Advies Midden-Nederland"},"role":{"type":"string","nullable":true,"example":"Energieadviseur woningen"},"intro":{"type":"string","nullable":true},"service_type":{"type":"string","example":"energy_label"},"service_label":{"type":"string","example":"Energielabel adviseur"},"verified_by_sjel":{"type":"boolean"},"work_area":{"type":"array","items":{"type":"string"}},"photo_url":{"type":"string","format":"uri","nullable":true},"contact":{"type":"object","properties":{"phone":{"type":"string","nullable":true},"email":{"type":"string","format":"email","nullable":true}}}}},"AccountDocument":{"type":"object","properties":{"id":{"type":"integer"},"type":{"type":"string"},"title":{"type":"string","nullable":true},"file_name":{"type":"string"},"mime_type":{"type":"string","nullable":true},"size":{"type":"integer","nullable":true},"status":{"type":"string"},"status_label":{"type":"string"},"visibility":{"type":"string"},"customer_note":{"type":"string","nullable":true},"rejection_reason":{"type":"string","nullable":true},"has_file":{"type":"boolean"},"workflow":{"type":"object","nullable":true},"object":{"type":"object","nullable":true},"links":{"type":"object"},"created_at":{"type":"string","format":"date-time","nullable":true}}},"AccountInvoice":{"type":"object","properties":{"id":{"type":"integer"},"invoice_number":{"type":"string"},"status":{"type":"string"},"status_label":{"type":"string"},"currency":{"type":"string","example":"EUR"},"subtotal_cents":{"type":"integer"},"vat_cents":{"type":"integer"},"total_cents":{"type":"integer"},"paid_cents":{"type":"integer"},"amount_label":{"type":"string"},"paid_label":{"type":"string"},"customer":{"type":"object"},"billing":{"type":"object"},"lines":{"type":"array","items":{"type":"object"}},"issued_on":{"type":"string","format":"date","nullable":true},"due_on":{"type":"string","format":"date","nullable":true},"paid_at":{"type":"string","format":"date-time","nullable":true},"links":{"type":"object"}}},"AccountAppointment":{"type":"object","properties":{"id":{"type":"integer"},"status":{"type":"string"},"status_label":{"type":"string"},"type":{"type":"string"},"type_label":{"type":"string"},"starts_at":{"type":"string","format":"date-time","nullable":true},"ends_at":{"type":"string","format":"date-time","nullable":true},"timezone":{"type":"string","example":"Europe\/Amsterdam"},"proposed_by_role":{"type":"string","nullable":true},"response_required_by":{"type":"string","nullable":true},"proposal_round":{"type":"integer"},"customer_note":{"type":"string","nullable":true},"rejection_reason":{"type":"string","nullable":true},"confirmed_at":{"type":"string","format":"date-time","nullable":true},"object":{"type":"object","nullable":true},"workflow":{"type":"object","nullable":true},"candidate":{"type":"object","nullable":true}}},"AccountTicket":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"subject":{"type":"string"},"reference":{"type":"string","nullable":true},"status":{"type":"string"},"status_label":{"type":"string"},"priority":{"type":"string","nullable":true},"channel":{"type":"string","nullable":true},"target_party":{"type":"string","nullable":true},"contexts":{"type":"array","items":{"type":"object"}},"latest_message":{"$ref":"#\/components\/schemas\/AccountTicketMessage"},"messages":{"type":"array","items":{"$ref":"#\/components\/schemas\/AccountTicketMessage"}},"last_message_at":{"type":"string","format":"date-time","nullable":true},"links":{"type":"object"}}},"AccountTicketMessage":{"type":"object","nullable":true,"properties":{"id":{"type":"integer"},"direction":{"type":"string","example":"dashboard"},"visibility":{"type":"string","example":"customer"},"message_type":{"type":"string"},"sender":{"type":"object"},"subject":{"type":"string","nullable":true},"body_text":{"type":"string","nullable":true},"sent_at":{"type":"string","format":"date-time","nullable":true},"received_at":{"type":"string","format":"date-time","nullable":true},"created_at":{"type":"string","format":"date-time","nullable":true}}},"AccountTicketCreateRequest":{"type":"object","required":["subject","message"],"properties":{"target_party":{"type":"string","enum":["sjel","provider","appraiser","owner","billing","customer"],"default":"sjel"},"property_id":{"type":"integer","nullable":true},"workflow_instance_id":{"type":"integer","nullable":true},"subject":{"type":"string","maxLength":160},"message":{"type":"string","maxLength":5000}}},"AccountTicketMessageCreateRequest":{"type":"object","required":["message"],"properties":{"message":{"type":"string","maxLength":5000}}},"Assignment":{"type":"object","properties":{"id":{"type":"integer"},"service_type":{"type":"string"},"status":{"type":"string"},"status_label":{"type":"string"},"customer_status":{"type":"string"},"customer_status_label":{"type":"string"},"workflow":{"$ref":"#\/components\/schemas\/AssignmentWorkflow"},"property":{"$ref":"#\/components\/schemas\/AssignmentProperty"},"scheduled_at":{"type":"string","format":"date-time","nullable":true},"partner_action_due_at":{"type":"string","format":"date-time","nullable":true},"updated_at":{"type":"string","format":"date-time","nullable":true},"events":{"type":"array","items":{"$ref":"#\/components\/schemas\/AssignmentEvent"},"description":"Alleen aanwezig bij detail endpoints."}}},"AssignmentWorkflow":{"type":"object","properties":{"id":{"type":"integer","nullable":true},"number":{"type":"string","nullable":true,"example":"EL-2026-000001"},"type":{"type":"string","nullable":true,"example":"energielabel"}}},"AssignmentProperty":{"type":"object","properties":{"id":{"type":"integer","nullable":true},"title":{"type":"string","nullable":true},"address":{"type":"string","nullable":true},"city":{"type":"string","nullable":true},"postal_code":{"type":"string","nullable":true}}},"AssignmentEvent":{"type":"object","properties":{"event":{"type":"string"},"source":{"type":"string"},"note":{"type":"string","nullable":true},"occurred_at":{"type":"string","format":"date-time","nullable":true}}},"ProviderService":{"type":"object","properties":{"id":{"type":"integer"},"service_type":{"type":"string","example":"energy_label"},"service_label":{"type":"string","example":"Energielabel adviseur"},"status":{"type":"string","example":"active"},"approval_status":{"type":"string","example":"pending_review"},"certification_status":{"type":"string","example":"valid"},"customer_facing_title":{"type":"string","nullable":true,"example":"Energieadviseur woningen"},"customer_intro":{"type":"string","nullable":true},"regions":{"type":"array","items":{"type":"string"},"example":["3905","Veenendaal"]},"postcode_areas":{"type":"array","items":{"type":"string"},"example":["3905"]},"certifications":{"type":"array","items":{"type":"string"},"example":["EP-W adviseur"]},"rejection_reason":{"type":"string","nullable":true},"submitted_for_review_at":{"type":"string","format":"date-time","nullable":true},"approved_at":{"type":"string","format":"date-time","nullable":true}}},"ProviderServiceWriteRequest":{"type":"object","required":["service_type"],"properties":{"service_type":{"type":"string","enum":["energy_label","appraiser","photographer","building_inspector","measurement_report","maintenance","cleaning"]},"status":{"type":"string","enum":["active","paused","disabled"],"default":"active"},"customer_facing_title":{"type":"string","nullable":true,"maxLength":255},"customer_intro":{"type":"string","nullable":true,"maxLength":1000},"regions":{"type":"array","items":{"type":"string"},"maxItems":100},"postcode_areas":{"type":"array","items":{"type":"string"},"maxItems":100},"certifications":{"type":"array","items":{"type":"string"},"maxItems":50},"certification_notes":{"type":"string","nullable":true,"maxLength":2000}}},"DocumentUploadResponse":{"type":"object","properties":{"id":{"type":"integer"},"status":{"type":"string"},"filename":{"type":"string","nullable":true},"uploaded_at":{"type":"string","format":"date-time","nullable":true}}},"CustomerInvoiceUploadResponse":{"type":"object","properties":{"id":{"type":"integer"},"status":{"type":"string"},"invoice_number":{"type":"string","nullable":true},"uploaded_at":{"type":"string","format":"date-time","nullable":true}}},"WebhookEndpoint":{"type":"object","properties":{"id":{"type":"integer"},"url":{"type":"string","format":"uri"},"events":{"type":"array","items":{"type":"string"}},"status":{"type":"string"},"secret_hint":{"type":"string","nullable":true},"signing_secret":{"type":"string","nullable":true,"description":"Alleen zichtbaar bij aanmaken."},"last_success_at":{"type":"string","format":"date-time","nullable":true},"last_failure_at":{"type":"string","format":"date-time","nullable":true},"created_at":{"type":"string","format":"date-time","nullable":true}}},"OpenJob":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"number":{"type":"string","nullable":true,"example":"OJ-2026-000001"},"status":{"type":"string","example":"open"},"provider_type":{"type":"string","example":"energy_label"},"service":{"type":"string","nullable":true,"example":"Energielabel aanvragen"},"property":{"$ref":"#\/components\/schemas\/OpenJobProperty"},"amounts":{"$ref":"#\/components\/schemas\/OpenJobAmounts"},"suggested_start_at":{"type":"string","format":"date-time","nullable":true},"suggested_end_at":{"type":"string","format":"date-time","nullable":true},"accept_window_ends_at":{"type":"string","format":"date-time","nullable":true},"allow_counterproposal":{"type":"boolean"}}},"OpenJobProperty":{"type":"object","properties":{"city":{"type":"string","nullable":true},"postcode_area":{"type":"string","nullable":true},"property_type":{"type":"string","nullable":true},"living_area":{"type":"integer","nullable":true}}},"OpenJobAmounts":{"type":"object","properties":{"currency":{"type":"string","example":"EUR"},"provider_payout_cents":{"type":"integer","example":27500}}},"OpenJobAcceptRequest":{"type":"object","properties":{"message":{"type":"string","nullable":true,"maxLength":2000}}},"OpenJobDeclineRequest":{"type":"object","properties":{"reason":{"type":"string","nullable":true,"enum":["no_capacity","outside_region","timing","other"]},"message":{"type":"string","nullable":true,"maxLength":2000}}},"OpenJobCounterProposalRequest":{"type":"object","required":["proposed_start_at"],"properties":{"proposed_start_at":{"type":"string","format":"date-time"},"proposed_end_at":{"type":"string","format":"date-time","nullable":true},"message":{"type":"string","nullable":true,"maxLength":2000}}},"VoiceInboundCallRequest":{"type":"object","properties":{"provider":{"type":"string","nullable":true,"example":"custom_http"},"provider_call_id":{"type":"string","nullable":true,"example":"call_123456"},"caller_phone":{"type":"string","nullable":true,"example":"+31612345678"},"matched_customer_id":{"type":"integer","nullable":true},"matched_provider_id":{"type":"integer","nullable":true},"matched_provider_assignment_id":{"type":"integer","nullable":true},"actor_type":{"type":"string","nullable":true,"enum":["customer","provider","tenant_candidate","partner","admin","guest","ambiguous"]}}},"VoiceIntentRequest":{"type":"object","required":["transcript_text"],"properties":{"transcript_text":{"type":"string","maxLength":12000,"example":"Ik wil weten welke documenten ik nog moet uploaden."}}},"VoiceEventRequest":{"type":"object","required":["event_type"],"properties":{"voice_call_id":{"type":"integer","nullable":true},"event_type":{"type":"string","example":"livekit.participant_joined"},"provider_event_id":{"type":"string","nullable":true,"example":"evt_123"},"status":{"type":"string","nullable":true,"example":"answered"},"payload":{"type":"object","nullable":true,"additionalProperties":true},"note":{"type":"string","nullable":true}}},"VoiceTranscriptRequest":{"type":"object","required":["transcript_text"],"properties":{"transcript_text":{"type":"string","maxLength":50000},"append":{"type":"boolean","default":true},"speaker":{"type":"string","nullable":true,"example":"caller"},"metadata":{"type":"object","nullable":true,"additionalProperties":true}}},"VoiceSummaryRequest":{"type":"object","required":["summary"],"properties":{"summary":{"type":"string","maxLength":4000},"outcome":{"type":"string","nullable":true},"status":{"type":"string","nullable":true,"example":"ended"},"metadata":{"type":"object","nullable":true,"additionalProperties":true}}},"VoiceVerificationSessionCreateRequest":{"type":"object","required":["customer_id"],"properties":{"customer_id":{"type":"integer"},"voice_call_id":{"type":"integer","nullable":true}}},"VoiceVerificationVerifyRequest":{"type":"object","required":["voice_call_id","code"],"properties":{"voice_call_id":{"type":"integer"},"code":{"type":"string","pattern":"^\\d{6}$","example":"123456"}}},"VoiceSupportSessionCreateRequest":{"type":"object","properties":{"voice_call_id":{"type":"integer","nullable":true},"customer_id":{"type":"integer","nullable":true},"actor_type":{"type":"string","nullable":true,"enum":["customer","provider","tenant_candidate","partner","admin","guest","ambiguous"]},"provider_id":{"type":"integer","nullable":true},"provider_assignment_id":{"type":"integer","nullable":true}}},"VoiceSupportSetTargetRequest":{"type":"object","required":["target_route_key"],"properties":{"target_route_key":{"type":"string","example":"workflow_open_task","description":"Veilige route key uit de Sjel voice route registry."},"current_target_type":{"type":"string","nullable":true,"example":"workflow"},"current_target_id":{"type":"integer","nullable":true},"instruction_title":{"type":"string","nullable":true,"maxLength":190},"instruction_body":{"type":"string","nullable":true,"maxLength":2000},"instruction_action_label":{"type":"string","nullable":true,"maxLength":80}}},"VoiceSupportTicketRequest":{"type":"object","required":["voice_support_session_id","reason"],"properties":{"voice_support_session_id":{"type":"integer"},"reason":{"type":"string","maxLength":4000},"wants_callback":{"type":"boolean","default":false},"callback_phone":{"type":"string","nullable":true},"callback_preferred_time":{"type":"string","nullable":true}}},"VoiceAuditEventRequest":{"type":"object","required":["voice_call_id","event"],"properties":{"voice_call_id":{"type":"integer"},"event":{"type":"string","example":"agent_tool_called"},"note":{"type":"string","nullable":true},"old_value":{"type":"object","nullable":true,"additionalProperties":true},"new_value":{"type":"object","nullable":true,"additionalProperties":true},"metadata":{"type":"object","nullable":true,"additionalProperties":true}}},"VoiceSupportSessionPayload":{"type":"object","properties":{"id":{"type":"integer"},"status":{"type":"string","example":"guiding"},"actor_type":{"type":"string","nullable":true},"verification_level":{"type":"string","nullable":true},"target_route_key":{"type":"string","nullable":true},"title":{"type":"string","nullable":true},"body":{"type":"string","nullable":true},"action_label":{"type":"string","nullable":true},"action_url":{"type":"string","nullable":true},"expires_at":{"type":"string","format":"date-time","nullable":true}}},"Error":{"type":"object","properties":{"message":{"type":"string"}}},"ValidationError":{"type":"object","properties":{"message":{"type":"string","example":"The starts_at field is required."},"errors":{"type":"object","additionalProperties":{"type":"array","items":{"type":"string"}}}}},"OfferResponseRequest":{"type":"object","required":["action"],"properties":{"action":{"type":"string","enum":["accepted","declined"]},"decline_reason":{"type":"string","nullable":true,"maxLength":120,"description":"Verplicht als action=declined."},"note":{"type":"string","nullable":true,"maxLength":3000}}},"AssignmentStatusUpdateRequest":{"type":"object","required":["status"],"properties":{"status":{"type":"string","enum":["appointment_proposed","appointment_confirmed","site_visit_done","completed"]},"scheduled_at":{"type":"string","format":"date-time","nullable":true},"note":{"type":"string","nullable":true,"maxLength":3000}}},"AppointmentProposalRequest":{"type":"object","required":["starts_at"],"properties":{"starts_at":{"type":"array","minItems":1,"maxItems":5,"items":{"type":"string","format":"date-time"},"description":"Toekomstige ISO 8601 startmomenten met timezone, bijvoorbeeld 2026-06-18T09:30:00+02:00."},"duration_minutes":{"type":"integer","minimum":15,"maximum":240,"default":60},"note":{"type":"string","nullable":true,"maxLength":3000}}},"DocumentUploadRequest":{"type":"object","required":["document"],"properties":{"document":{"type":"string","format":"binary","description":"PDF\/afbeelding, maximaal 20 MB."},"note":{"type":"string","nullable":true,"maxLength":3000}}},"CustomerInvoiceUploadRequest":{"type":"object","required":["invoice"],"properties":{"invoice":{"type":"string","format":"binary","description":"PDF\/afbeelding, maximaal 20 MB."},"invoice_number":{"type":"string","nullable":true,"maxLength":120}}},"WebhookEndpointCreateRequest":{"type":"object","required":["url"],"properties":{"url":{"type":"string","format":"uri","maxLength":1000},"events":{"type":"array","maxItems":20,"items":{"type":"string","maxLength":120},"description":"Bijvoorbeeld assignment.updated, assignment.completed, document.uploaded, payout.updated of *."}}},"EnergyLabelLookupResult":{"type":"object","properties":{"found":{"type":"boolean"},"source":{"type":"string","nullable":true,"enum":["local_registry","ep_online_api",null],"description":"local_registry betekent dat Sjel de lokale registry gebruikte. ep_online_api betekent dat de offici\u00eble API als fallback is gebruikt."},"fallback_used":{"type":"boolean"},"message":{"type":"string","nullable":true},"data":{"type":"object","nullable":true,"properties":{"label":{"type":"string","nullable":true,"example":"A++"},"postcode":{"type":"string","nullable":true,"example":"3905TE"},"house_number":{"type":"string","nullable":true,"example":"27"},"house_letter":{"type":"string","nullable":true,"example":"A"},"house_number_addition":{"type":"string","nullable":true},"street":{"type":"string","nullable":true},"city":{"type":"string","nullable":true},"building_type":{"type":"string","nullable":true},"construction_year":{"type":"integer","nullable":true,"example":1998},"registered_at":{"type":"string","format":"date","nullable":true},"valid_until":{"type":"string","format":"date","nullable":true},"bag_residence_object_id":{"type":"string","nullable":true},"bag_addressable_object_id":{"type":"string","nullable":true},"registry_record_id":{"type":"integer","nullable":true}}}}}},"responses":{"AccountMe":{"description":"Eigen accountgegevens","content":{"application\/json":{"schema":{"type":"object","properties":{"data":{"$ref":"#\/components\/schemas\/AccountMe"}}}}}},"AccountKycDetail":{"description":"Eigen accountverificatie","content":{"application\/json":{"schema":{"type":"object","properties":{"data":{"$ref":"#\/components\/schemas\/AccountKyc"}}}}}},"AccountKycEvidenceUploaded":{"description":"Accountverificatiebewijs ontvangen","content":{"application\/json":{"schema":{"type":"object","properties":{"data":{"type":"object","properties":{"message":{"type":"string"},"evidence":{"$ref":"#\/components\/schemas\/AccountKycEvidence"},"kyc":{"$ref":"#\/components\/schemas\/AccountKyc"}}}}}}}},"CustomerProviderProfile":{"description":"Klantzichtbaar dienstverlenerprofiel of null als er nog geen dienstverlener gekoppeld is.","content":{"application\/json":{"schema":{"type":"object","properties":{"data":{"$ref":"#\/components\/schemas\/CustomerProviderProfile"}}}}}},"AccountObjectList":{"description":"Eigen objecten","content":{"application\/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#\/components\/schemas\/AccountObject"}},"meta":{"type":"object","properties":{"limit":{"type":"integer"},"count":{"type":"integer"}}}}}}}},"AccountObjectDetail":{"description":"Eigen object","content":{"application\/json":{"schema":{"type":"object","properties":{"data":{"$ref":"#\/components\/schemas\/AccountObject"}}}}}},"AccountObjectKycDetail":{"description":"Eigenaarscontrole voor eigen object","content":{"application\/json":{"schema":{"type":"object","properties":{"data":{"$ref":"#\/components\/schemas\/AccountObjectKyc"}}}}}},"ComplianceDocumentUploaded":{"description":"Compliance-document ontvangen","content":{"application\/json":{"schema":{"type":"object","properties":{"data":{"type":"object","properties":{"message":{"type":"string"},"document":{"$ref":"#\/components\/schemas\/ComplianceDocument"},"review":{"$ref":"#\/components\/schemas\/ComplianceReview"}}}}}}}},"AccountObjectWorkflowList":{"description":"Object-workflows","content":{"application\/json":{"schema":{"type":"object","properties":{"data":{"type":"object","properties":{"object":{"$ref":"#\/components\/schemas\/AccountObject"},"current":{"$ref":"#\/components\/schemas\/AccountObjectWorkflowState"},"active":{"type":"array","items":{"$ref":"#\/components\/schemas\/AccountObjectWorkflowState"}},"available":{"type":"array","items":{"$ref":"#\/components\/schemas\/AccountObjectWorkflowState"}},"locked":{"type":"array","items":{"$ref":"#\/components\/schemas\/AccountObjectWorkflowState"}},"completed":{"type":"array","items":{"$ref":"#\/components\/schemas\/AccountObjectWorkflowState"}},"next_actions":{"type":"array","items":{"$ref":"#\/components\/schemas\/AccountObjectWorkflowState"}}}}}}}}},"StartObjectWorkflowResult":{"description":"Workflow gestart of wacht op betaling","content":{"application\/json":{"schema":{"type":"object","properties":{"data":{"$ref":"#\/components\/schemas\/StartObjectWorkflowResponse"}}}}}},"AccountDocumentList":{"description":"Eigen klantzichtbare documenten","content":{"application\/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#\/components\/schemas\/AccountDocument"}},"meta":{"type":"object"}}}}}},"AccountDocumentDetail":{"description":"Eigen klantzichtbaar document","content":{"application\/json":{"schema":{"type":"object","properties":{"data":{"$ref":"#\/components\/schemas\/AccountDocument"}}}}}},"AccountInvoiceList":{"description":"Eigen facturen","content":{"application\/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#\/components\/schemas\/AccountInvoice"}},"meta":{"type":"object"}}}}}},"AccountInvoiceDetail":{"description":"Eigen factuur","content":{"application\/json":{"schema":{"type":"object","properties":{"data":{"$ref":"#\/components\/schemas\/AccountInvoice"}}}}}},"AccountAppointmentList":{"description":"Eigen afspraken","content":{"application\/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#\/components\/schemas\/AccountAppointment"}},"meta":{"type":"object"}}}}}},"AccountTicketList":{"description":"Eigen tickets","content":{"application\/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#\/components\/schemas\/AccountTicket"}},"meta":{"type":"object"}}}}}},"AccountTicketDetail":{"description":"Eigen ticket met klantzichtbare berichten","content":{"application\/json":{"schema":{"type":"object","properties":{"data":{"$ref":"#\/components\/schemas\/AccountTicket"}}}}}},"AccountTicketCreated":{"description":"Ticket aangemaakt","content":{"application\/json":{"schema":{"type":"object","properties":{"data":{"$ref":"#\/components\/schemas\/AccountTicket"}}}}}},"AccountTicketMessageCreated":{"description":"Bericht toegevoegd","content":{"application\/json":{"schema":{"type":"object","properties":{"data":{"$ref":"#\/components\/schemas\/AccountTicketMessage"}}}}}},"AssignmentList":{"description":"Opdrachtenlijst","content":{"application\/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#\/components\/schemas\/Assignment"}},"meta":{"type":"object","properties":{"limit":{"type":"integer"},"provider":{"type":"integer"}}}}}}}},"AssignmentDetail":{"description":"Opdracht","content":{"application\/json":{"schema":{"type":"object","properties":{"data":{"$ref":"#\/components\/schemas\/Assignment"}}}}}},"ProviderServiceList":{"description":"Dienstprofielen","content":{"application\/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#\/components\/schemas\/ProviderService"}}}}}}},"ProviderServiceDetail":{"description":"Dienstprofiel","content":{"application\/json":{"schema":{"type":"object","properties":{"data":{"$ref":"#\/components\/schemas\/ProviderService"}}}}}},"OpenJobList":{"description":"Open opdrachten","content":{"application\/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#\/components\/schemas\/OpenJob"}}}}}}},"OpenJobDetail":{"description":"Open opdracht","content":{"application\/json":{"schema":{"type":"object","properties":{"data":{"$ref":"#\/components\/schemas\/OpenJob"}}}}}},"OpenJobAccepted":{"description":"Open opdracht geaccepteerd","content":{"application\/json":{"schema":{"type":"object","properties":{"data":{"type":"object","properties":{"status":{"type":"string","example":"accepted"},"assignment_id":{"type":"integer"},"assignment_status":{"type":"string"}}}}}}}},"OpenJobDeclined":{"description":"Open opdracht geweigerd","content":{"application\/json":{"schema":{"type":"object","properties":{"data":{"type":"object","properties":{"status":{"type":"string","example":"declined"}}}}}}}},"DocumentUploaded":{"description":"Document geupload","content":{"application\/json":{"schema":{"type":"object","properties":{"data":{"$ref":"#\/components\/schemas\/DocumentUploadResponse"}}}}}},"CustomerInvoiceUploaded":{"description":"Klantfactuur geupload","content":{"application\/json":{"schema":{"type":"object","properties":{"data":{"$ref":"#\/components\/schemas\/CustomerInvoiceUploadResponse"}}}}}},"WebhookEndpointList":{"description":"Webhook endpoints","content":{"application\/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#\/components\/schemas\/WebhookEndpoint"}}}}}}},"WebhookEndpointCreated":{"description":"Webhook endpoint","content":{"application\/json":{"schema":{"type":"object","properties":{"data":{"$ref":"#\/components\/schemas\/WebhookEndpoint"}}}}}},"EnergyLabelLookupFound":{"description":"Energielabel gevonden in de Sjel registry of via EP-Online fallback.","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/EnergyLabelLookupResult"},"examples":{"local_registry":{"summary":"Lokale registry hit","value":{"found":true,"source":"local_registry","fallback_used":false,"data":{"label":"A++","postcode":"3905TE","house_number":"27","house_letter":"A","construction_year":1998,"registered_at":"2026-01-10","valid_until":"2036-01-10"}}}}}}},"EnergyLabelLookupNotFound":{"description":"Geen energielabel gevonden.","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/EnergyLabelLookupResult"}}}},"VoiceCallCreated":{"description":"Inbound call geregistreerd","content":{"application\/json":{"schema":{"type":"object","properties":{"voice_call_id":{"type":"integer"},"uuid":{"type":"string","format":"uuid"}}}}}},"VoiceIntentRouted":{"description":"Transcript gerouteerd naar veilige intentie","content":{"application\/json":{"schema":{"type":"object","properties":{"voice_call_id":{"type":"integer"},"category":{"type":"string","nullable":true},"urgency":{"type":"string","nullable":true},"confidence_score":{"type":"integer","nullable":true},"recommended_action":{"type":"string","nullable":true},"handoff_required":{"type":"boolean"},"callback_allowed":{"type":"boolean"},"safe_response":{"type":"string","nullable":true}}}}}},"VoiceEventLogged":{"description":"Voice event opgeslagen","content":{"application\/json":{"schema":{"type":"object","properties":{"voice_call_id":{"type":"integer"},"event_logged":{"type":"boolean"},"status":{"type":"string","nullable":true}}}}}},"VoiceSafeStatus":{"description":"Veilige status voor voice-agent","content":{"application\/json":{"schema":{"type":"object","properties":{"voice_call_id":{"type":"integer"},"safe_status":{"type":"object","additionalProperties":true},"verification_level":{"type":"string","nullable":true},"actor_type":{"type":"string","nullable":true}}}}}},"VoiceTranscriptSaved":{"description":"Transcript opgeslagen","content":{"application\/json":{"schema":{"type":"object","properties":{"voice_call_id":{"type":"integer"},"transcript_saved":{"type":"boolean"}}}}}},"VoiceSummarySaved":{"description":"Samenvatting opgeslagen","content":{"application\/json":{"schema":{"type":"object","properties":{"voice_call_id":{"type":"integer"},"summary_saved":{"type":"boolean"}}}}}},"VoiceVerificationStatus":{"description":"Verificatiestatus van een gesprek","content":{"application\/json":{"schema":{"type":"object","properties":{"voice_call_id":{"type":"integer"},"verification_level":{"type":"string","nullable":true},"verified_at":{"type":"string","format":"date-time","nullable":true},"actor_type":{"type":"string","nullable":true},"matched_customer_id":{"type":"integer","nullable":true},"matched_provider_id":{"type":"integer","nullable":true},"matched_provider_assignment_id":{"type":"integer","nullable":true}}}}}},"VoiceVerificationSessionCreated":{"description":"Telefonische verificatiesessie aangemaakt","content":{"application\/json":{"schema":{"type":"object","properties":{"verification_session_id":{"type":"integer"},"expires_at":{"type":"string","format":"date-time","nullable":true}}}}}},"VoiceVerificationVerified":{"description":"Telefonische verificatie gelukt","content":{"application\/json":{"schema":{"type":"object","properties":{"verified":{"type":"boolean"},"customer_id":{"type":"integer","nullable":true},"actor_type":{"type":"string","nullable":true},"provider_id":{"type":"integer","nullable":true},"verification_level":{"type":"string","nullable":true}}}}}},"VoiceSupportSessionCreated":{"description":"Telefonische hulpsessie aangemaakt","content":{"application\/json":{"schema":{"type":"object","properties":{"voice_support_session_id":{"type":"integer"}}}}}},"VoiceSupportSessionTargetSet":{"description":"Hulpsessie gekoppeld aan veilige route","content":{"application\/json":{"schema":{"type":"object","properties":{"session":{"$ref":"#\/components\/schemas\/VoiceSupportSessionPayload"}}}}}},"VoiceSupportSessionCompleted":{"description":"Hulpsessie afgerond","content":{"application\/json":{"schema":{"type":"object","properties":{"session_id":{"type":"integer"},"resolution_status":{"type":"string","nullable":true}}}}}},"VoiceSupportTicketCreated":{"description":"Ticket en eventueel callback aangemaakt","content":{"application\/json":{"schema":{"type":"object","properties":{"ticket_id":{"type":"integer"},"callback_request_id":{"type":"integer","nullable":true},"resolution_status":{"type":"string","nullable":true}}}}}},"VoiceAuditEventLogged":{"description":"Audit event opgeslagen","content":{"application\/json":{"schema":{"type":"object","properties":{"event_logged":{"type":"boolean"}}}}}},"VoiceNotConfigured":{"description":"Voice interne API-token is nog niet geconfigureerd","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/Error"}}}},"Unauthorized":{"description":"API key ontbreekt of is ongeldig","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/Error"}}}},"Forbidden":{"description":"Geen toegang tot deze opdracht","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/Error"}}}},"NotFound":{"description":"Niet gevonden","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/Error"}}}},"ValidationError":{"description":"Validatiefout","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/ValidationError"}}}}}}}