Respondentuitnodigingen-API
Met respondentuitnodigingen kunnen je eigen systemen bekende mensen uitnodigen voor een interview. Maak een persoonlijke link voor een klant met diens e-mailadres of account-ID erin en verstuur die zoals je wilt. De antwoorden zijn dan vanaf het begin aan die klant gekoppeld.
Je hebt een Pro-, Business- of Enterprise-abonnement en een API-sleutel nodig. Zie het API-overzicht voor sleutels en authenticatie.
Gebruik de Gesprekken-API om de resultaten te lezen: elk gesprek bevat zijn invite en de identiteiten die je hebt gekoppeld.
Deze endpoints zijn ouder dan de rest van de API en houden hun oorspronkelijke namen: ze noemen een project een agent (agentId) en gebruiken parameters in camelCase.
Een uitnodigingslink maken#
POST /api/v1/respondent-invitesElk request maakt één link voor één respondent in één project. Diaform maakt ook meteen het gesprek aan en koppelt de identiteiten die je meestuurt, zodat de resultaten vanaf het begin aan die persoon gekoppeld zijn.
Request-body#
| Veld | Type | Verplicht | Regels |
|---|---|---|---|
agentId | string | Ja | Project-ID (UUID) in de organisatie van de sleutel |
identities | array | Ja | 1 tot 10 items, één per type. |
identities[].type | string | Ja | Maximaal 64 tekens: kleine letters, cijfers, _ en -, beginnend met een letter of cijfer. Hoofdletters worden omgezet in kleine letters. |
identities[].value | string | Ja | 1 tot 512 tekens na het weghalen van spaties aan begin en eind. Een email-waarde moet een geldig e-mailadres zijn en wordt in kleine letters opgeslagen. |
organizationId | string | Nee | Als je het meestuurt, moet het overeenkomen met de organisatie van de sleutel |
send_email | boolean | Nee | true mailt de link naar de email-identiteit van de uitnodiging en stuurt één herinnering na 3 dagen als de respondent nog niet klaar is. Standaard false. |
Stuur je send_email mee, dan bevat de response een email-object: { "status": "sent" }, { "status": "failed" } of { "status": "skipped", "reason": "..." }. De uitnodiging wordt in alle gevallen gemaakt. De redenen zijn no_email, unsubscribed, not_published, no_usage, monthly_limit (de maandelijkse uitnodigingsmails van je abonnement zijn op), answered, already_sent, in_progress, plan en not_found. Zie Respondenten identificeren voor wat er in de e-mail staat.
Veelgebruikte types zijn email, name, identifier, user_id en account_id. Elk type dat aan de regels voldoet, werkt.
Voorbeeld#
curl -X POST "https://diaform.io/api/v1/respondent-invites" \
-H "Authorization: Bearer $DIAFORM_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"agentId": "b8acb3ab-1f3d-4a7e-a846-b7f493f86b6d",
"identities": [
{ "type": "email", "value": "alex@acme.com" },
{ "type": "account_id", "value": "acct_4821" }
]
}'Response#
{
"organization_id": "4d6ecdb4-8543-4adf-ae65-1f24106d5474",
"agent_id": "b8acb3ab-1f3d-4a7e-a846-b7f493f86b6d",
"agent_name": "Onboarding interviews",
"invite": {
"id": "3a4f49c7-b8f4-4c44-8f74-fd8e4277c3e4",
"created_at": "2026-05-07T12:00:00.123456+00:00",
"status": "pending",
"opened_at": null,
"completed_at": null,
"conversation_id": "0f8d43a2-6df9-49c8-bf5d-fd2b6ec2d9ee",
"identities": [
{
"id": "71138f36-d16a-41f8-8a1f-65b9b8d483e3",
"created_at": "2026-05-07T12:00:00.123456+00:00",
"conversation_id": "0f8d43a2-6df9-49c8-bf5d-fd2b6ec2d9ee",
"source": "owner",
"identity_type": "email",
"value": "alex@acme.com",
"metadata": {}
},
{
"id": "120feee2-a10e-4b9a-af8e-a54d4dd672a1",
"created_at": "2026-05-07T12:00:00.123456+00:00",
"conversation_id": "0f8d43a2-6df9-49c8-bf5d-fd2b6ec2d9ee",
"source": "owner",
"identity_type": "account_id",
"value": "acct_4821",
"metadata": {}
}
],
"url": "https://acme.diaform.io/c/b8acb3ab-1f3d-4a7e-a846-b7f493f86b6d?invite=dia_resp_pCaJHykjUYBKZdkbVUtbyZRMC3yFzm246SK2K8lw"
}
}| Veld | Beschrijving |
|---|---|
invite.id | ID van de uitnodiging. Webhooks sturen die mee als respondent.invite_id. |
invite.status | pending, opened of completed |
invite.conversation_id | Het gesprek dat voor deze respondent is aangemaakt |
invite.identities | De identiteiten die je hebt meegestuurd, elk met source: "owner" |
invite.url | De link om te versturen. Gebruikt je geverifieerde eigen domein als je dat hebt. null zodra de uitnodiging is afgerond. |
Hoe de link werkt#
- Aangemaakt. De uitnodiging is
pendingen het gesprek isinvited. - Geopend. Als de respondent de link opent, worden beide
opened. Het gesprek gaat naarstartedzodra hij antwoordt. - Hervat. Gaat de respondent weg en komt hij terug via dezelfde link, dan gaat hij verder in hetzelfde gesprek.
- Beëindigd. Als het gesprek eindigt, afgerond of geannuleerd, wordt de uitnodiging
completeden werkt de link niet meer.
Het project moet gepubliceerd zijn om de link te kunnen openen. Links werken zowel bij projecten met Openbare link als met Alleen uitnodigingslinks. Bij openbare projecten blijft de gewone link ook werken. Zie Respondenten identificeren.
Ouder endpoint voor gesprekken#
GET /api/v1/respondent-conversationsDit endpoint haalt de gesprekken van een project op en werkt nog steeds, dus bestaande integraties hoeven niet te veranderen. Gebruik voor nieuw werk Gesprekken ophalen. Dat voegt filters, transcripten en eenvoudigere paginering toe.
| Parameter | Verplicht | Beschrijving |
|---|---|---|
agentId | Ja | Project-ID |
limit | Nee | 1 tot 100. Standaard 50. |
status | Nee | invited, opened, started, completed of cancelled |
cursor | Nee | nextCursor.created_at van de vorige pagina |
cursorId | Nee | nextCursor.id van de vorige pagina |
Het geeft conversations terug (elk met conversation_id, created_at, status, respondent_email, metadata, identities, summary en invite) en nextCursor, een object met created_at en id, of null op de laatste pagina. Stuur die twee waarden terug als cursor en cursorId.
Pas URL-encoding toe op cursor. De tijdstempel erin bevat een +, die je als %2B moet versturen. Een niet-gecodeerde + wordt gelezen als een spatie, en dan mislukt het request met 400. curl --data-urlencode en URLSearchParams doen dat voor je.
Fouten#
Fouten geven JSON terug met een error-melding en een code, net als in de rest van de API. Een 400 bevat ook details.fieldErrors, dat het veld noemt waar het misging.
{
"error": "Invalid request",
"code": "invalid_request",
"details": {
"formErrors": [],
"fieldErrors": {
"identities": ["Add at least one respondent identity."]
}
}
}| Status | code | Oorzaak |
|---|---|---|
400 | invalid_request | Een veld of queryparameter ontbreekt of is ongeldig |
401 | unauthorized | De Authorization-header ontbreekt, is niet Bearer dia_org_live_..., of de sleutel is ingetrokken |
403 | forbidden | Je organisatie heeft geen Pro-, Business- of Enterprise-abonnement, of organizationId komt niet overeen met de sleutel |
404 | not_found | agentId is geen project in de organisatie van de sleutel |
500 | internal_error | Er ging iets mis aan de kant van Diaform. Probeer het opnieuw. |
Limieten#
Deze twee endpoints hebben geen ratelimit. Elke uitnodiging kan maximaal 10 identiteiten bevatten (één per type), en elke organisatie kan maximaal 10 API-sleutels hebben.