Agreli API 1.0.0. Basis-URL: https:/. OpenAPI 3.1: https:/.
Overzicht
| Methode | Pad | Recht | Wat |
|---|---|---|---|
GET | / | organization:read | Organisaties die deze sleutel mag gebruiken |
GET | / | organization:read | Organisatie, vestigingen, templates en toegestane domeinen |
GET | / | onboardings:read | Onboardings |
POST | / | onboardings:write | Hosted onboarding aanmaken |
GET | / | onboardings:read | Eén onboarding met stappen en documenten |
PATCH | / | onboardings:write | Referentie en metadata bijwerken |
POST | / | onboardings:write | Nieuwe hosted link (de vorige vervalt) |
POST | / | onboardings:write | Annuleren |
POST | / | approvals:write | ID-controle bevestigen (als manager) |
POST | / | approvals:write | Goedkeuren als de eigenaar van de sleutel |
POST | / | contracts:write | Contract maken en ter ondertekening versturen |
GET | / | documents:read | Documenten |
GET | / | documents:read | Document downloaden |
GET | / | employees:read | Medewerkers |
GET | / | approvals:read | Wat jij nu kunt goedkeuren |
GET | / | integrations:read | Koppelingen en synchronisatiestatus |
GET | / | webhooks:manage | Webhookadressen |
POST | / | webhooks:manage | Webhookadres toevoegen |
GET | / | webhooks:manage | Eén webhookadres met recente afleveringen |
DELETE | / | webhooks:manage | Verwijderen |
POST | / | webhooks:manage | Testbericht (ping) sturen |
POST | / | webhooks:manage | Geheim vernieuwen |
GET | / | webhooks:manage | Afleverlog van één adres |
POST | / | webhooks:manage | Aflevering opnieuw versturen |
GET | / | onboardings:read | Gebeurtenissen (om gemiste webhooks na te lopen) |
POST | / | onboardings:write | Sandbox: volgende stap naspelen |
Het onboarding-object
GET / en de schrijfacties op een onboarding geven dit object terug. In lijsten ontbreken steps, documents, email, phone en de arbeidsvoorwaarden. Bij één onboarding staan email, phone en de arbeidsvoorwaarden er alleen in als de sleutel het dossier mag openen.
{
"id": "onb_…",
"object": "onboarding",
"status": "in_review",
"waiting_on": ["payroll_reviewer"],
"returned": false,
"employee": { "id": "emp_…", "first_name": "Sam", "last_name": "Jansen", "email": "sam@example.com", "phone": null },
"employment": { "position": "Bediening", "location_id": "loc_…", "start_date": "2026-12-01", "contract_type": "on_call", "hours_per_week": 16, "hourly_wage_cents": 1450 },
"workflow": { "template_id": "t1", "version": 1 },
"data_version": 2,
"approvals": {
"required": ["manager", "payroll_reviewer"],
"given": [{ "role": "manager", "valid": true, "data_version": 2, "at": "2026-11-20T10:15:00.000Z" }]
},
"contract": { "status": "none" },
"payroll": null,
"hosted_link": { "status": "activated", "expires_at": "2026-10-26T12:00:00.000Z", "activated": true },
"reference": "sollicitant-4711",
"metadata": { "vacature_id": "vac-311" },
"return_url": "https://jouwapp.nl/onboarding/klaar",
"source": "api",
"created_at": "2026-10-12T12:00:00.000Z",
"updated_at": "2026-11-20T10:15:00.000Z",
"steps": [{ "id": "…", "phase": "gegevens", "kind": "document", "title": "…", "applies": true, "done": true }],
"documents": [{ "id": "doc_…", "kind": "passport", "title": null, "uploaded_at": "2026-11-20T09:58:00.000Z", "downloadable": false }]
}contract.:status none,sent,signed_by_employeeofsigned.hosted_link.:status open,activatedofrevoked.payroll:nulltot de verwerking begint; daarnastatus,external_idenerror_code.data_versiongaat omhoog als gegevens of voorwaarden veranderen. Een goedkeuring geldt voor één versie.
Dit object is breder dan het schema Onboarding in de OpenAPI-spec; de velden hierboven komen uit de API zelf.
Statussen
| Status | Betekenis | Aan zet (waiting_on) |
|---|---|---|
pending_employee | Uitgenodigd of bezig met invullen. | employee |
in_review | Gegevens verstuurd; de controle (vierogen) loopt. | de rollen die nog moeten goedkeuren, of manager na terugsturen |
contract_ready | Goedgekeurd; het contract kan worden gemaakt en verstuurd. | manager |
awaiting_employee_signature | Contract verstuurd; wacht op de handtekening van de medewerker. | employee |
awaiting_employer_signature | De medewerker heeft getekend; wacht op de werkgever. | manager |
processing | Getekend; de verwerking in de salarisadministratie loopt. | system |
action_required | De verwerking in de salarisadministratie vraagt om een handeling. | manager, payroll_reviewer |
completed | Afgerond. | niemand |
cancelled | Geannuleerd. | niemand |
Endpoints
GET/v1/organizations
Organisaties die deze sleutel mag gebruiken.
Een werkgeverssleutel: de eigen organisatie. Een sleutel van een API-partner: alle werkgevers die de partner hebben toegelaten, met de rechten die ze gaven. Gebruik het id in de kop Agreli-Organization.
Recht: organization:read
curl https://app.agreli.nl/api/public/v1/organizations \
-H "Authorization: Bearer $AGRELI_API_KEY"Antwoord 200 (OK):
{
"object": "list",
"data": [
{
"id": "org_…",
"object": "organization",
"name": "…",
"permissions": [
"…"
]
}
],
"has_more": false,
"next_cursor": null
}Fouten: 401, 403, 404, 409, 422, 429, in de vaste foutvorm.
GET/v1/organization
Organisatie, vestigingen, templates en toegestane domeinen.
Recht: organization:read
| Parameter | In | Type | Verplicht | Omschrijving |
|---|---|---|---|---|
Agreli-Organization | header | string | nee | Alleen voor sleutels van een API-partner: de werkgever namens wie je werkt. Verplicht als de partner meer dan één werkgever heeft. |
curl https://app.agreli.nl/api/public/v1/organization \
-H "Authorization: Bearer $AGRELI_API_KEY"Antwoord 200 (OK):
{
"id": "org_…",
"name": "Brasserie De Haven",
"locations": [
{
"id": "loc_…",
"name": "De Haven Centrum",
"city": "Amsterdam"
}
],
"templates": [
{
"id": "t1",
"name": "Oproepkracht bediening",
"contract_type": "on_call",
"cao": "Cao Horeca"
}
],
"branding": {
"color": "#0f5132",
"logo_url": null
},
"allowed_origins": [
"https://jouwapp.nl"
]
}Fouten: 401, 403, 404, 409, 422, 429, in de vaste foutvorm.
GET/v1/onboardings
Onboardings.
Nieuwste eerst, ook geannuleerde (filter met status). Een API-partner ziet alleen de onboardings die via zijn eigen sleutels liepen.
Recht: onboardings:read
| Parameter | In | Type | Verplicht | Omschrijving |
|---|---|---|---|---|
status | query | pending_employee, in_review, contract_ready, awaiting_employee_signature, awaiting_employer_signature, processing, action_required, completed, cancelled | nee | — |
reference | query | string | nee | — |
updated_since | query | string (date-time) | nee | — |
limit | query | integer | nee | 1 tot 100. Standaard 25. |
starting_after | query | string | nee | — |
curl https://app.agreli.nl/api/public/v1/onboardings \
-H "Authorization: Bearer $AGRELI_API_KEY"Antwoord 200 (OK):
{
"object": "list",
"data": [
{
"id": "onb_…",
"status": "pending_employee",
"waiting_on": [
"employee"
],
"employee": {},
"employment": {},
"data_version": 1,
"approvals": {},
"contract": {},
"payroll": null,
"hosted_link": null,
"reference": "sollicitant-4711",
"metadata": {
"vacature_id": "vac-311"
},
"return_url": "https://jouwapp.nl/onboarding/klaar",
"source": "api",
"created_at": "2026-10-12T12:00:00.000Z",
"updated_at": "2026-10-12T12:00:00.000Z",
"steps": [],
"documents": [
{
"id": "doc_…",
"kind": "contract_signed",
"title": "Arbeidsovereenkomst",
"uploaded_at": "2026-10-12T12:00:00.000Z",
"downloadable": true
}
]
}
],
"has_more": false,
"next_cursor": null
}Een {} in dit voorbeeld is een object waarvan de spec de velden niet vastlegt.
Fouten: 401, 403, 404, 409, 422, 429, in de vaste foutvorm.
POST/v1/onboardings
Hosted onboarding aanmaken.
Alleen met een lopende proef of een abonnement van wie betaalt (anders 403 subscription_required).
Recht: onboardings:write
| Parameter | In | Type | Verplicht | Omschrijving |
|---|---|---|---|---|
Idempotency-Key | header | string | nee | Zelfde sleutel en inhoud binnen 24 uur geeft hetzelfde antwoord. Loopt het eerste verzoek nog, dan 409 idempotency_in_progress: probeer het zo opnieuw. Hooguit 200 tekens. |
Request body (JSON):
| Veld | Type | Verplicht | Omschrijving |
|---|---|---|---|
reference | string | nee | Je eigen kenmerk; komt terug in de API en in webhooks. Hooguit 200 tekens. |
metadata | object (sleutel → string | number | boolean) | nee | Je eigen kenmerken, bijvoorbeeld een vacature-id (sleutels: letters, cijfers, _ . -, hooguit 40 tekens; tekst hooguit 500). Komt terug in de API en in webhooks. Geen persoonsgegevens: e-mail, IBAN, BSN en telefoonnummers worden geweigerd (metadata_personal_data). Hooguit 20 sleutels. |
employee | object | ja | — |
employee. | string | ja | — |
employee. | string | ja | — |
employee. | string (email) | ja | — |
employee. | string | nee | — |
employment | object | ja | — |
employment. | string | ja | — |
employment. | string (date) | ja | — |
employment. | string | ja | — |
employment. | string | ja | — |
employment. | on_call, fixed_term, permanent | nee | Standaard die van de template. |
employment. | number | ja | 0 tot 60. |
employment. | integer | ja | Minimaal 1. |
options | object | nee | — |
options. | boolean | nee | true: wij mailen de medewerker de link. false: jij stuurt de medewerker naar hosted_url. Standaard false. |
options. | integer | nee | 1 tot 336. Standaard 336. |
options. | string (uri) | nee | Na afronden kan de medewerker hierheen terug. Alleen https, op een domein uit allowed_origins (van de werkgever, of van de API-partner); anders 422 return_url_not_allowed. |
curl -X POST https://app.agreli.nl/api/public/v1/onboardings \
-H "Authorization: Bearer $AGRELI_API_KEY" \
-H "Idempotency-Key: $(uuidgen)" \
-H "Content-Type: application/json" \
-d '{
"reference": "sollicitant-4711",
"metadata": {
"vacature_id": "vac-311"
},
"employee": {
"first_name": "Sam",
"last_name": "Jansen",
"email": "sam@example.com",
"phone": "+31 6 12345678"
},
"employment": {
"position": "Bediening",
"start_date": "2026-12-01",
"location_id": "loc_…",
"template_id": "t1",
"contract_type": "on_call",
"hours_per_week": 16,
"hourly_wage_cents": 1450
},
"options": {
"send_invitation": false,
"expires_in_hours": 336,
"return_url": "https://jouwapp.nl/onboarding/klaar"
}
}'Antwoord 201 (Aangemaakt):
{
"id": "onb_…",
"object": "onboarding",
"status": "pending_employee",
"hosted_url": "https://app.agreli.nl/m/…",
"expires_at": "2026-10-26T12:00:00.000Z",
"invitation_sent": false,
"reference": "sollicitant-4711",
"metadata": {
"vacature_id": "vac-311"
}
}Fouten: 401, 403, 404, 409, 422, 429, in de vaste foutvorm.
GET/v1/onboardings/{id}
Eén onboarding met stappen en documenten.
Recht: onboardings:read
| Parameter | In | Type | Verplicht | Omschrijving |
|---|---|---|---|---|
id | path | string | ja | — |
curl https://app.agreli.nl/api/public/v1/onboardings/onb_… \
-H "Authorization: Bearer $AGRELI_API_KEY"Antwoord 200 (OK):
{
"id": "onb_…",
"status": "pending_employee",
"waiting_on": [
"employee"
],
"employee": {},
"employment": {},
"data_version": 1,
"approvals": {},
"contract": {},
"payroll": null,
"hosted_link": null,
"reference": "sollicitant-4711",
"metadata": {
"vacature_id": "vac-311"
},
"return_url": "https://jouwapp.nl/onboarding/klaar",
"source": "api",
"created_at": "2026-10-12T12:00:00.000Z",
"updated_at": "2026-10-12T12:00:00.000Z",
"steps": [],
"documents": [
{
"id": "doc_…",
"kind": "contract_signed",
"title": "Arbeidsovereenkomst",
"uploaded_at": "2026-10-12T12:00:00.000Z",
"downloadable": true
}
]
}Een {} in dit voorbeeld is een object waarvan de spec de velden niet vastlegt.
Fouten: 401, 403, 404, 409, 422, 429, in de vaste foutvorm.
PATCH/v1/onboardings/{id}
Referentie en metadata bijwerken.
Voegt metadata samen; null verwijdert een sleutel. Gegevens van de medewerker wijzig je niet via de API (field_not_updatable). De data_version blijft gelijk, dus goedkeuringen blijven geldig.
Recht: onboardings:write
| Parameter | In | Type | Verplicht | Omschrijving |
|---|---|---|---|---|
id | path | string | ja | — |
Idempotency-Key | header | string | nee | Zelfde sleutel en inhoud binnen 24 uur geeft hetzelfde antwoord. Loopt het eerste verzoek nog, dan 409 idempotency_in_progress: probeer het zo opnieuw. Hooguit 200 tekens. |
Request body (JSON):
| Veld | Type | Verplicht | Omschrijving |
|---|---|---|---|
reference | string | null | nee | Hooguit 200 tekens. |
metadata | object (sleutel → string | number | boolean | null) | nee | Je eigen kenmerken, bijvoorbeeld een vacature-id (sleutels: letters, cijfers, _ . -, hooguit 40 tekens; tekst hooguit 500). Komt terug in de API en in webhooks. Geen persoonsgegevens: e-mail, IBAN, BSN en telefoonnummers worden geweigerd (metadata_personal_data). Hooguit 20 sleutels. |
curl -X PATCH https://app.agreli.nl/api/public/v1/onboardings/onb_… \
-H "Authorization: Bearer $AGRELI_API_KEY" \
-H "Idempotency-Key: $(uuidgen)" \
-H "Content-Type: application/json" \
-d '{
"reference": "sollicitant-4711",
"metadata": {
"vacature_id": "vac-311"
}
}'Antwoord 200 (OK):
{
"id": "onb_…",
"status": "pending_employee",
"waiting_on": [
"employee"
],
"employee": {},
"employment": {},
"data_version": 1,
"approvals": {},
"contract": {},
"payroll": null,
"hosted_link": null,
"reference": "sollicitant-4711",
"metadata": {
"vacature_id": "vac-311"
},
"return_url": "https://jouwapp.nl/onboarding/klaar",
"source": "api",
"created_at": "2026-10-12T12:00:00.000Z",
"updated_at": "2026-10-12T12:00:00.000Z",
"steps": [],
"documents": [
{
"id": "doc_…",
"kind": "contract_signed",
"title": "Arbeidsovereenkomst",
"uploaded_at": "2026-10-12T12:00:00.000Z",
"downloadable": true
}
]
}Een {} in dit voorbeeld is een object waarvan de spec de velden niet vastlegt.
Fouten: 401, 403, 404, 409, 422, 429, in de vaste foutvorm.
POST/v1/onboardings/{id}/hosted-link
Nieuwe hosted link (de vorige vervalt).
Recht: onboardings:write
| Parameter | In | Type | Verplicht | Omschrijving |
|---|---|---|---|---|
id | path | string | ja | — |
Idempotency-Key | header | string | nee | Zelfde sleutel en inhoud binnen 24 uur geeft hetzelfde antwoord. Loopt het eerste verzoek nog, dan 409 idempotency_in_progress: probeer het zo opnieuw. Hooguit 200 tekens. |
Request body (JSON, optioneel):
| Veld | Type | Verplicht | Omschrijving |
|---|---|---|---|
expires_in_hours | integer | nee | 1 tot 336. |
send_invitation | boolean | nee | Standaard false. |
curl -X POST https://app.agreli.nl/api/public/v1/onboardings/onb_…/hosted-link \
-H "Authorization: Bearer $AGRELI_API_KEY" \
-H "Idempotency-Key: $(uuidgen)" \
-H "Content-Type: application/json" \
-d '{
"expires_in_hours": 336,
"send_invitation": false
}'Antwoord 201 (OK):
{
"onboarding_id": "onb_…",
"hosted_url": "https://app.agreli.nl/m/…",
"expires_at": "2026-10-26T12:00:00.000Z",
"invitation_sent": false
}Fouten: 401, 403, 404, 409, 422, 429, in de vaste foutvorm.
POST/v1/onboardings/{id}/cancel
Annuleren.
Recht: onboardings:write
| Parameter | In | Type | Verplicht | Omschrijving |
|---|---|---|---|---|
id | path | string | ja | — |
Idempotency-Key | header | string | nee | Zelfde sleutel en inhoud binnen 24 uur geeft hetzelfde antwoord. Loopt het eerste verzoek nog, dan 409 idempotency_in_progress: probeer het zo opnieuw. Hooguit 200 tekens. |
curl -X POST https://app.agreli.nl/api/public/v1/onboardings/onb_…/cancel \
-H "Authorization: Bearer $AGRELI_API_KEY" \
-H "Idempotency-Key: $(uuidgen)"Antwoord 200 (OK):
{
"id": "onb_…",
"status": "pending_employee",
"waiting_on": [
"employee"
],
"employee": {},
"employment": {},
"data_version": 1,
"approvals": {},
"contract": {},
"payroll": null,
"hosted_link": null,
"reference": "sollicitant-4711",
"metadata": {
"vacature_id": "vac-311"
},
"return_url": "https://jouwapp.nl/onboarding/klaar",
"source": "api",
"created_at": "2026-10-12T12:00:00.000Z",
"updated_at": "2026-10-12T12:00:00.000Z",
"steps": [],
"documents": [
{
"id": "doc_…",
"kind": "contract_signed",
"title": "Arbeidsovereenkomst",
"uploaded_at": "2026-10-12T12:00:00.000Z",
"downloadable": true
}
]
}Een {} in dit voorbeeld is een object waarvan de spec de velden niet vastlegt.
Fouten: 401, 403, 404, 409, 422, 429, in de vaste foutvorm.
POST/v1/onboardings/{id}/identity-verification
ID-controle bevestigen (als manager).
Staat standaard uit: een eigenaar zet goedkeuren via de API aan bij Instellingen, API en webhooks (anders 403 api_approvals_disabled).
Recht: approvals:write
| Parameter | In | Type | Verplicht | Omschrijving |
|---|---|---|---|---|
id | path | string | ja | — |
Idempotency-Key | header | string | nee | Zelfde sleutel en inhoud binnen 24 uur geeft hetzelfde antwoord. Loopt het eerste verzoek nog, dan 409 idempotency_in_progress: probeer het zo opnieuw. Hooguit 200 tekens. |
curl -X POST https://app.agreli.nl/api/public/v1/onboardings/onb_…/identity-verification \
-H "Authorization: Bearer $AGRELI_API_KEY" \
-H "Idempotency-Key: $(uuidgen)"Antwoord 200 (OK):
{
"id": "onb_…",
"status": "pending_employee",
"waiting_on": [
"employee"
],
"employee": {},
"employment": {},
"data_version": 1,
"approvals": {},
"contract": {},
"payroll": null,
"hosted_link": null,
"reference": "sollicitant-4711",
"metadata": {
"vacature_id": "vac-311"
},
"return_url": "https://jouwapp.nl/onboarding/klaar",
"source": "api",
"created_at": "2026-10-12T12:00:00.000Z",
"updated_at": "2026-10-12T12:00:00.000Z",
"steps": [],
"documents": [
{
"id": "doc_…",
"kind": "contract_signed",
"title": "Arbeidsovereenkomst",
"uploaded_at": "2026-10-12T12:00:00.000Z",
"downloadable": true
}
]
}Een {} in dit voorbeeld is een object waarvan de spec de velden niet vastlegt.
Fouten: 401, 403, 404, 409, 422, 429, in de vaste foutvorm.
POST/v1/onboardings/{id}/approvals
Goedkeuren als de eigenaar van de sleutel.
Vierogen: één persoon kan niet twee rollen vervullen. data_version moet gelijk zijn aan de gecontroleerde versie. Staat standaard uit: een eigenaar zet goedkeuren via de API aan bij Instellingen, API en webhooks (anders 403 api_approvals_disabled).
Recht: approvals:write
| Parameter | In | Type | Verplicht | Omschrijving |
|---|---|---|---|---|
id | path | string | ja | — |
Idempotency-Key | header | string | nee | Zelfde sleutel en inhoud binnen 24 uur geeft hetzelfde antwoord. Loopt het eerste verzoek nog, dan 409 idempotency_in_progress: probeer het zo opnieuw. Hooguit 200 tekens. |
Request body (JSON):
| Veld | Type | Verplicht | Omschrijving |
|---|---|---|---|
role | manager, payroll_reviewer, owner | ja | — |
data_version | integer | ja | — |
curl -X POST https://app.agreli.nl/api/public/v1/onboardings/onb_…/approvals \
-H "Authorization: Bearer $AGRELI_API_KEY" \
-H "Idempotency-Key: $(uuidgen)" \
-H "Content-Type: application/json" \
-d '{
"role": "manager",
"data_version": 1
}'Antwoord 200 (OK):
{
"id": "onb_…",
"status": "pending_employee",
"waiting_on": [
"employee"
],
"employee": {},
"employment": {},
"data_version": 1,
"approvals": {},
"contract": {},
"payroll": null,
"hosted_link": null,
"reference": "sollicitant-4711",
"metadata": {
"vacature_id": "vac-311"
},
"return_url": "https://jouwapp.nl/onboarding/klaar",
"source": "api",
"created_at": "2026-10-12T12:00:00.000Z",
"updated_at": "2026-10-12T12:00:00.000Z",
"steps": [],
"documents": [
{
"id": "doc_…",
"kind": "contract_signed",
"title": "Arbeidsovereenkomst",
"uploaded_at": "2026-10-12T12:00:00.000Z",
"downloadable": true
}
]
}Een {} in dit voorbeeld is een object waarvan de spec de velden niet vastlegt.
Fouten: 401, 403, 404, 409, 422, 429, in de vaste foutvorm.
POST/v1/onboardings/{id}/contract
Contract maken en ter ondertekening versturen.
Recht: contracts:write
| Parameter | In | Type | Verplicht | Omschrijving |
|---|---|---|---|---|
id | path | string | ja | — |
Idempotency-Key | header | string | nee | Zelfde sleutel en inhoud binnen 24 uur geeft hetzelfde antwoord. Loopt het eerste verzoek nog, dan 409 idempotency_in_progress: probeer het zo opnieuw. Hooguit 200 tekens. |
curl -X POST https://app.agreli.nl/api/public/v1/onboardings/onb_…/contract \
-H "Authorization: Bearer $AGRELI_API_KEY" \
-H "Idempotency-Key: $(uuidgen)"Antwoord 200 (OK):
{
"id": "onb_…",
"status": "pending_employee",
"waiting_on": [
"employee"
],
"employee": {},
"employment": {},
"data_version": 1,
"approvals": {},
"contract": {},
"payroll": null,
"hosted_link": null,
"reference": "sollicitant-4711",
"metadata": {
"vacature_id": "vac-311"
},
"return_url": "https://jouwapp.nl/onboarding/klaar",
"source": "api",
"created_at": "2026-10-12T12:00:00.000Z",
"updated_at": "2026-10-12T12:00:00.000Z",
"steps": [],
"documents": [
{
"id": "doc_…",
"kind": "contract_signed",
"title": "Arbeidsovereenkomst",
"uploaded_at": "2026-10-12T12:00:00.000Z",
"downloadable": true
}
]
}Een {} in dit voorbeeld is een object waarvan de spec de velden niet vastlegt.
Fouten: 401, 403, 404, 409, 422, 429, in de vaste foutvorm.
GET/v1/onboardings/{id}/documents
Documenten.
Recht: documents:read
| Parameter | In | Type | Verplicht | Omschrijving |
|---|---|---|---|---|
id | path | string | ja | — |
curl https://app.agreli.nl/api/public/v1/onboardings/onb_…/documents \
-H "Authorization: Bearer $AGRELI_API_KEY"Antwoord 200 (OK):
{
"object": "list",
"data": [
{
"id": "doc_…",
"kind": "contract_signed",
"title": "Arbeidsovereenkomst",
"uploaded_at": "2026-10-12T12:00:00.000Z",
"downloadable": true
}
],
"has_more": false,
"next_cursor": null
}Fouten: 401, 403, 404, 409, 422, 429, in de vaste foutvorm.
GET/v1/onboardings/{id}/documents/{documentId}
Document downloaden.
Kopieën van identiteitsbewijzen alleen voor de salarisadministratie. Elke download staat in de audit.
Recht: documents:read
| Parameter | In | Type | Verplicht | Omschrijving |
|---|---|---|---|---|
id | path | string | ja | — |
documentId | path | string | ja | — |
curl https://app.agreli.nl/api/public/v1/onboardings/onb_…/documents/doc_… \
-H "Authorization: Bearer $AGRELI_API_KEY"Antwoord 200: Het bestand (application/, image/, image/).
Fouten: 401, 403, 404, 409, 422, 429, in de vaste foutvorm.
GET/v1/employees
Medewerkers.
Recht: employees:read
| Parameter | In | Type | Verplicht | Omschrijving |
|---|---|---|---|---|
limit | query | integer | nee | 1 tot 100. |
starting_after | query | string | nee | — |
curl https://app.agreli.nl/api/public/v1/employees \
-H "Authorization: Bearer $AGRELI_API_KEY"Antwoord 200 (OK):
{
"object": "list",
"data": [
{
"id": "emp_…",
"first_name": "Sam",
"last_name": "Jansen",
"position": "Bediening",
"location_id": "loc_…",
"start_date": "2026-12-01",
"onboarding": {}
}
],
"has_more": false,
"next_cursor": null
}Een {} in dit voorbeeld is een object waarvan de spec de velden niet vastlegt.
Fouten: 401, 403, 404, 409, 422, 429, in de vaste foutvorm.
GET/v1/approvals
Wat jij nu kunt goedkeuren.
Recht: approvals:read
curl https://app.agreli.nl/api/public/v1/approvals \
-H "Authorization: Bearer $AGRELI_API_KEY"Antwoord 200 (OK):
{
"object": "list",
"data": [
{
"onboarding_id": "onb_…",
"data_version": 1,
"can_approve_as": [
"payroll_reviewer"
],
"blocked_by": []
}
],
"has_more": false,
"next_cursor": null
}Fouten: 401, 403, 404, 409, 422, 429, in de vaste foutvorm.
GET/v1/integrations
Koppelingen en synchronisatiestatus.
Recht: integrations:read
curl https://app.agreli.nl/api/public/v1/integrations \
-H "Authorization: Bearer $AGRELI_API_KEY"Antwoord 200 (OK): een JSON-object; de velden staan niet in de spec.
Fouten: 401, 403, 404, 409, 422, 429, in de vaste foutvorm.
GET/v1/webhooks
Webhookadressen.
Recht: webhooks:manage
curl https://app.agreli.nl/api/public/v1/webhooks \
-H "Authorization: Bearer $AGRELI_API_KEY"Antwoord 200 (OK):
{
"object": "list",
"data": [
{
"id": "wh_…",
"url": "https://jouwapp.nl/webhooks/agreli",
"events": [
"onboarding.approval_required",
"onboarding.completed"
],
"status": "enabled",
"api_version": "…",
"previous_secret_expires_at": "2026-10-12T12:00:00.000Z",
"secret": "whsec_…",
"recent_deliveries": [
{
"id": "whd_…",
"object": "webhook_delivery",
"event_id": "evt_…",
"event_type": "…",
"status": "pending",
"attempts": 1,
"last_status_code": 1,
"last_error": "…",
"created_at": "2026-10-12T12:00:00.000Z",
"delivered_at": "2026-10-12T12:00:00.000Z",
"next_attempt_at": "2026-10-12T12:00:00.000Z"
}
]
}
],
"has_more": false,
"next_cursor": null
}Fouten: 401, 403, 404, 409, 422, 429, in de vaste foutvorm.
POST/v1/webhooks
Webhookadres toevoegen.
Het geheim (whsec_…) staat alleen in dit antwoord.
Recht: webhooks:manage
| Parameter | In | Type | Verplicht | Omschrijving |
|---|---|---|---|---|
Idempotency-Key | header | string | nee | Zelfde sleutel en inhoud binnen 24 uur geeft hetzelfde antwoord. Loopt het eerste verzoek nog, dan 409 idempotency_in_progress: probeer het zo opnieuw. Hooguit 200 tekens. |
Request body (JSON):
| Veld | Type | Verplicht | Omschrijving |
|---|---|---|---|
url | string (uri) | ja | — |
description | string | nee | — |
events | array van contract., contract., contract., integration., integration., onboarding., onboarding., onboarding., onboarding., onboarding., onboarding., onboarding., onboarding., onboarding., onboarding., onboarding., onboarding., onboarding., onboarding., payroll. | nee | Leeg = alle gebeurtenissen. |
curl -X POST https://app.agreli.nl/api/public/v1/webhooks \
-H "Authorization: Bearer $AGRELI_API_KEY" \
-H "Idempotency-Key: $(uuidgen)" \
-H "Content-Type: application/json" \
-d '{
"url": "https://jouwapp.nl/webhooks/agreli",
"description": "Productie",
"events": [
"onboarding.approval_required",
"onboarding.completed"
]
}'Antwoord 201 (OK):
{
"id": "wh_…",
"url": "https://jouwapp.nl/webhooks/agreli",
"events": [
"onboarding.approval_required",
"onboarding.completed"
],
"status": "enabled",
"api_version": "…",
"previous_secret_expires_at": "2026-10-12T12:00:00.000Z",
"secret": "whsec_…",
"recent_deliveries": [
{
"id": "whd_…",
"object": "webhook_delivery",
"event_id": "evt_…",
"event_type": "…",
"status": "pending",
"attempts": 1,
"last_status_code": 1,
"last_error": "…",
"created_at": "2026-10-12T12:00:00.000Z",
"delivered_at": "2026-10-12T12:00:00.000Z",
"next_attempt_at": "2026-10-12T12:00:00.000Z"
}
]
}Fouten: 401, 403, 404, 409, 422, 429, in de vaste foutvorm.
GET/v1/webhooks/{id}
Eén webhookadres met recente afleveringen.
Recht: webhooks:manage
| Parameter | In | Type | Verplicht | Omschrijving |
|---|---|---|---|---|
id | path | string | ja | — |
curl https://app.agreli.nl/api/public/v1/webhooks/wh_… \
-H "Authorization: Bearer $AGRELI_API_KEY"Antwoord 200 (OK):
{
"id": "wh_…",
"url": "https://jouwapp.nl/webhooks/agreli",
"events": [
"onboarding.approval_required",
"onboarding.completed"
],
"status": "enabled",
"api_version": "…",
"previous_secret_expires_at": "2026-10-12T12:00:00.000Z",
"secret": "whsec_…",
"recent_deliveries": [
{
"id": "whd_…",
"object": "webhook_delivery",
"event_id": "evt_…",
"event_type": "…",
"status": "pending",
"attempts": 1,
"last_status_code": 1,
"last_error": "…",
"created_at": "2026-10-12T12:00:00.000Z",
"delivered_at": "2026-10-12T12:00:00.000Z",
"next_attempt_at": "2026-10-12T12:00:00.000Z"
}
]
}Fouten: 401, 403, 404, 409, 422, 429, in de vaste foutvorm.
DELETE/v1/webhooks/{id}
Verwijderen.
Recht: webhooks:manage
| Parameter | In | Type | Verplicht | Omschrijving |
|---|---|---|---|---|
id | path | string | ja | — |
Idempotency-Key | header | string | nee | Zelfde sleutel en inhoud binnen 24 uur geeft hetzelfde antwoord. Loopt het eerste verzoek nog, dan 409 idempotency_in_progress: probeer het zo opnieuw. Hooguit 200 tekens. |
curl -X DELETE https://app.agreli.nl/api/public/v1/webhooks/wh_… \
-H "Authorization: Bearer $AGRELI_API_KEY" \
-H "Idempotency-Key: $(uuidgen)"Antwoord 200 (OK): een JSON-object; de velden staan niet in de spec.
Fouten: 401, 403, 404, 409, 422, 429, in de vaste foutvorm.
POST/v1/webhooks/{id}/test
Testbericht (ping) sturen.
Recht: webhooks:manage
| Parameter | In | Type | Verplicht | Omschrijving |
|---|---|---|---|---|
id | path | string | ja | — |
Idempotency-Key | header | string | nee | Zelfde sleutel en inhoud binnen 24 uur geeft hetzelfde antwoord. Loopt het eerste verzoek nog, dan 409 idempotency_in_progress: probeer het zo opnieuw. Hooguit 200 tekens. |
curl -X POST https://app.agreli.nl/api/public/v1/webhooks/wh_…/test \
-H "Authorization: Bearer $AGRELI_API_KEY" \
-H "Idempotency-Key: $(uuidgen)"Antwoord 200 (OK): een JSON-object; de velden staan niet in de spec.
Fouten: 401, 403, 404, 409, 422, 429, in de vaste foutvorm.
POST/v1/webhooks/{id}/rotate-secret
Geheim vernieuwen.
Het nieuwe geheim (alleen in dit antwoord) ondertekent direct. Het vorige ondertekent nog overlap_hours mee als tweede v1 in Agreli-Signature, zodat je zonder gemiste webhooks overstapt. 0 = het vorige is direct ongeldig.
Recht: webhooks:manage
| Parameter | In | Type | Verplicht | Omschrijving |
|---|---|---|---|---|
id | path | string | ja | — |
Idempotency-Key | header | string | nee | Zelfde sleutel en inhoud binnen 24 uur geeft hetzelfde antwoord. Loopt het eerste verzoek nog, dan 409 idempotency_in_progress: probeer het zo opnieuw. Hooguit 200 tekens. |
Request body (JSON, optioneel):
| Veld | Type | Verplicht | Omschrijving |
|---|---|---|---|
overlap_hours | integer | nee | 0 tot 168. Standaard 24. |
curl -X POST https://app.agreli.nl/api/public/v1/webhooks/wh_…/rotate-secret \
-H "Authorization: Bearer $AGRELI_API_KEY" \
-H "Idempotency-Key: $(uuidgen)" \
-H "Content-Type: application/json" \
-d '{
"overlap_hours": 24
}'Antwoord 200 (OK):
{
"id": "wh_…",
"url": "https://jouwapp.nl/webhooks/agreli",
"events": [
"onboarding.approval_required",
"onboarding.completed"
],
"status": "enabled",
"api_version": "…",
"previous_secret_expires_at": "2026-10-12T12:00:00.000Z",
"secret": "whsec_…",
"recent_deliveries": [
{
"id": "whd_…",
"object": "webhook_delivery",
"event_id": "evt_…",
"event_type": "…",
"status": "pending",
"attempts": 1,
"last_status_code": 1,
"last_error": "…",
"created_at": "2026-10-12T12:00:00.000Z",
"delivered_at": "2026-10-12T12:00:00.000Z",
"next_attempt_at": "2026-10-12T12:00:00.000Z"
}
]
}Fouten: 401, 403, 404, 409, 422, 429, in de vaste foutvorm.
GET/v1/webhooks/{id}/deliveries
Afleverlog van één adres.
Nieuwste eerst. Afleveringen blijven 30 dagen zichtbaar.
Recht: webhooks:manage
| Parameter | In | Type | Verplicht | Omschrijving |
|---|---|---|---|---|
id | path | string | ja | — |
status | query | pending, in_progress, succeeded, failed, dead | nee | — |
limit | query | integer | nee | 1 tot 100. Standaard 25. |
starting_after | query | string | nee | next_cursor van de vorige pagina. |
curl https://app.agreli.nl/api/public/v1/webhooks/wh_…/deliveries \
-H "Authorization: Bearer $AGRELI_API_KEY"Antwoord 200 (OK):
{
"object": "list",
"data": [
{
"id": "whd_…",
"object": "webhook_delivery",
"event_id": "evt_…",
"event_type": "…",
"status": "pending",
"attempts": 1,
"last_status_code": 1,
"last_error": "…",
"created_at": "2026-10-12T12:00:00.000Z",
"delivered_at": "2026-10-12T12:00:00.000Z",
"next_attempt_at": "2026-10-12T12:00:00.000Z"
}
],
"has_more": false,
"next_cursor": null
}Fouten: 401, 403, 404, 409, 422, 429, in de vaste foutvorm.
POST/v1/webhooks/{id}/deliveries/{deliveryId}/retry
Aflevering opnieuw versturen.
Met hetzelfde event-id en dezelfde inhoud, dus je kunt ontdubbelen. Kan bij geslaagde, mislukte en definitief mislukte afleveringen.
Recht: webhooks:manage
| Parameter | In | Type | Verplicht | Omschrijving |
|---|---|---|---|---|
id | path | string | ja | — |
deliveryId | path | string | ja | — |
Idempotency-Key | header | string | nee | Zelfde sleutel en inhoud binnen 24 uur geeft hetzelfde antwoord. Loopt het eerste verzoek nog, dan 409 idempotency_in_progress: probeer het zo opnieuw. Hooguit 200 tekens. |
curl -X POST https://app.agreli.nl/api/public/v1/webhooks/wh_…/deliveries/{deliveryId}/retry \
-H "Authorization: Bearer $AGRELI_API_KEY" \
-H "Idempotency-Key: $(uuidgen)"Antwoord 200 (OK):
{
"id": "whd_…",
"object": "webhook_delivery",
"event_id": "evt_…",
"event_type": "…",
"status": "pending",
"attempts": 1,
"last_status_code": 1,
"last_error": "…",
"created_at": "2026-10-12T12:00:00.000Z",
"delivered_at": "2026-10-12T12:00:00.000Z",
"next_attempt_at": "2026-10-12T12:00:00.000Z"
}Fouten: 401, 403, 404, 409, 422, 429, in de vaste foutvorm.
GET/v1/events
Gebeurtenissen (om gemiste webhooks na te lopen).
Dezelfde gebeurtenissen als de webhooks, met hetzelfde id en dezelfde inhoud, ook als je geen webhookadres hebt. Oudste eerst; bewaard 30 dagen. Bewaar het laatste id en vraag daarna op met starting_after.
Recht: onboardings:read
| Parameter | In | Type | Verplicht | Omschrijving |
|---|---|---|---|---|
Agreli-Organization | header | string | nee | Alleen voor sleutels van een API-partner: de werkgever namens wie je werkt. Verplicht als de partner meer dan één werkgever heeft. |
since | query | string (date-time) | nee | — |
type | query | contract., contract., contract., integration., integration., onboarding., onboarding., onboarding., onboarding., onboarding., onboarding., onboarding., onboarding., onboarding., onboarding., onboarding., onboarding., onboarding., onboarding., payroll. | nee | — |
limit | query | integer | nee | 1 tot 100. Standaard 50. |
starting_after | query | string | nee | next_cursor van de vorige pagina. |
curl https://app.agreli.nl/api/public/v1/events \
-H "Authorization: Bearer $AGRELI_API_KEY"Antwoord 200 (OK):
{
"object": "list",
"data": [
{
"id": "evt_…",
"object": "event",
"type": "contract.sent",
"api_version": "…",
"created_at": "2026-10-12T12:00:00.000Z",
"organization_id": "org_…",
"data": {
"onboarding_id": "onb_…",
"reference": "sollicitant-4711",
"metadata": {
"vacature_id": "vac-311"
},
"data_version": 1,
"role": "…",
"returned_to": "…",
"kind": "invitation",
"connector": "…",
"error_code": "…"
}
}
],
"has_more": false,
"next_cursor": null
}Fouten: 401, 403, 404, 409, 422, 429, in de vaste foutvorm.
POST/v1/sandbox/onboardings/{id}/advance
Sandbox: volgende stap naspelen.
Alleen met een testsleutel. Vult de gegevens in, keurt goed met testgebruikers, tekent en rondt de gesimuleerde salarisverwerking af.
Recht: onboardings:write
| Parameter | In | Type | Verplicht | Omschrijving |
|---|---|---|---|---|
id | path | string | ja | — |
Idempotency-Key | header | string | nee | Zelfde sleutel en inhoud binnen 24 uur geeft hetzelfde antwoord. Loopt het eerste verzoek nog, dan 409 idempotency_in_progress: probeer het zo opnieuw. Hooguit 200 tekens. |
curl -X POST https://app.agreli.nl/api/public/v1/sandbox/onboardings/onb_…/advance \
-H "Authorization: Bearer $AGRELI_API_KEY" \
-H "Idempotency-Key: $(uuidgen)"Antwoord 200 (OK):
{
"step": "employee_submitted",
"onboarding": {
"id": "onb_…",
"status": "pending_employee",
"waiting_on": [
"employee"
],
"employee": {},
"employment": {},
"data_version": 1,
"approvals": {},
"contract": {},
"payroll": null,
"hosted_link": null,
"reference": "sollicitant-4711",
"metadata": {
"vacature_id": "vac-311"
},
"return_url": "https://jouwapp.nl/onboarding/klaar",
"source": "api",
"created_at": "2026-10-12T12:00:00.000Z",
"updated_at": "2026-10-12T12:00:00.000Z",
"steps": [],
"documents": [
{
"id": "doc_…",
"kind": "contract_signed",
"title": "Arbeidsovereenkomst",
"uploaded_at": "2026-10-12T12:00:00.000Z",
"downloadable": true
}
]
}
}Een {} in dit voorbeeld is een object waarvan de spec de velden niet vastlegt.
Fouten: 401, 403, 404, 409, 422, 429, in de vaste foutvorm.
Rechten
| Recht | Wat het toestaat | Endpoints |
|---|---|---|
approvals:read | Openstaande controles lezen | GET / |
approvals:write | Goedkeuren en de ID-controle bevestigen, als jijzelf | POST /, POST / |
contracts:write | Contract maken en ter ondertekening versturen | POST / |
documents:read | Documenten en toegestane downloads | GET /, GET / |
employees:read | Medewerkers en dienstverbanden lezen | GET / |
integrations:read | Koppelingen en synchronisatiestatus lezen | GET / |
onboardings:read | Onboardings en hun status lezen | GET /, GET /, GET / |
onboardings:write | Onboardings starten, links maken en annuleren | POST /, PATCH /, POST /, POST /, POST / |
organization:read | Organisatie en vestigingen lezen | GET /, GET / |
webhooks:manage | Webhooks beheren | GET /, POST /, GET /, DELETE /, POST /, POST /, GET /, POST / |