Respondentinbjudnings-API
Med respondentinbjudningar kan dina egna system bjuda in kända personer till en intervju. Skapa en personlig länk för en kund med kundens e-postadress eller konto-ID kopplat, skicka den på valfritt sätt, så är svaren kopplade till kunden från början.
Du behöver planen Pro, Business eller Enterprise och en API-nyckel. Läs mer om nycklar och autentisering under API-översikt.
För att läsa resultaten använder du Konversations-API:t: varje konversation innehåller sin invite och de identiteter du kopplade.
De här endpointsen är äldre än resten av API:t och behåller sina ursprungliga namn: de kallar ett projekt för en agent (agentId) och använder parametrar i camelCase.
Skapa en inbjudningslänk#
POST /api/v1/respondent-invitesVarje förfrågan skapar en länk för en respondent i ett projekt. Diaform skapar också konversationen direkt och kopplar de identiteter du skickar, så att resultaten hör ihop med personen från början.
Förfrågans body#
| Fält | Typ | Obligatoriskt | Regler |
|---|---|---|---|
agentId | string | Ja | Projekt-ID (UUID) i nyckelns organisation |
identities | array | Ja | 1 till 10 poster, en per typ. |
identities[].type | string | Ja | Upp till 64 tecken: gemener, siffror, _ och -, och första tecknet måste vara en bokstav eller siffra. Versaler görs om till gemener. |
identities[].value | string | Ja | 1 till 512 tecken efter att inledande och avslutande blanksteg har tagits bort. Ett email-värde måste vara en giltig e-postadress och sparas med gemener. |
organizationId | string | Nej | Om du skickar det måste det matcha nyckelns organisation |
send_email | boolean | Nej | true mejlar länken till inbjudans email-identitet och skickar en påminnelse efter 3 dagar om respondenten inte är klar. Standard false. |
När du skickar send_email innehåller svaret ett email-objekt: { "status": "sent" }, { "status": "failed" } eller { "status": "skipped", "reason": "..." }. Inbjudan skapas i samtliga fall. Orsakerna är no_email, unsubscribed, not_published, no_usage, monthly_limit (din plans inbjudningsmejl för månaden är slut), answered, already_sent, in_progress, plan och not_found. Under Identifiera respondenter ser du vad mejlet innehåller.
Vanliga typer är email, name, identifier, user_id och account_id. Alla typer som följer reglerna fungerar.
Exempel#
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" }
]
}'Svar#
{
"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"
}
}| Fält | Beskrivning |
|---|---|
invite.id | Inbjudnings-ID. Webhooks skickar det som respondent.invite_id. |
invite.status | pending, opened eller completed |
invite.conversation_id | Konversationen som skapades för respondenten |
invite.identities | Identiteterna du skickade, var och en med source: "owner" |
invite.url | Länken som du ska skicka. Den använder din verifierade egna domän om du har en. null när inbjudan är slutförd. |
Så fungerar länken#
- Skapad. Inbjudan är
pendingoch dess konversation ärinvited. - Öppnad. När respondenten öppnar länken blir båda
opened. Konversationen går över tillstartednär respondenten svarar. - Återupptagen. Om respondenten lämnar och kommer tillbaka via samma länk fortsätter hen i samma konversation.
- Avslutad. När konversationen är slut, oavsett om den slutfördes eller avbröts, blir inbjudan
completedoch länken slutar fungera.
Projektet måste vara publicerat för att länken ska gå att öppna. Länkarna fungerar i projekt med både Publik länk och Endast inbjudningslänkar. I publika projekt fortsätter den vanliga länken också att fungera. Läs mer under Identifiera respondenter.
Äldre endpoint för konversationer#
GET /api/v1/respondent-conversationsDen här endpointen listar ett projekts konversationer och fungerar fortfarande, så befintliga integrationer behöver inte ändras. För nya integrationer använder du Lista konversationer, som dessutom har filter, transkriptioner och enklare paginering.
| Parameter | Obligatorisk | Beskrivning |
|---|---|---|
agentId | Ja | Projekt-ID |
limit | Nej | 1 till 100. Standard 50. |
status | Nej | invited, opened, started, completed eller cancelled |
cursor | Nej | nextCursor.created_at från föregående sida |
cursorId | Nej | nextCursor.id från föregående sida |
Den returnerar conversations (var och en med conversation_id, created_at, status, respondent_email, metadata, identities, summary och invite) och nextCursor, ett objekt med created_at och id, eller null på sista sidan. Skicka tillbaka de två värdena som cursor och cursorId.
URL-koda cursor. Tidsstämpeln innehåller ett +, som måste skickas som %2B. Ett okodat + tolkas som ett mellanslag, och förfrågan misslyckas med 400. curl --data-urlencode och URLSearchParams kodar det åt dig.
Fel#
Fel returnerar JSON med ett error-meddelande och en code, precis som i resten av API:t. En 400 innehåller också details.fieldErrors, som anger vilket fält som inte godkändes.
{
"error": "Invalid request",
"code": "invalid_request",
"details": {
"formErrors": [],
"fieldErrors": {
"identities": ["Add at least one respondent identity."]
}
}
}| Status | code | Orsak |
|---|---|---|
400 | invalid_request | Ett fält eller en frågeparameter saknas eller är ogiltig |
401 | unauthorized | Authorization-headern saknas, är inte Bearer dia_org_live_..., eller så har nyckeln återkallats |
403 | forbidden | Din organisation har inte Pro, Business eller Enterprise, eller så matchar organizationId inte nyckeln |
404 | not_found | agentId är inte ett projekt i nyckelns organisation |
500 | internal_error | Ett fel uppstod hos Diaform. Försök igen. |
Gränser#
De här två endpointsen har ingen hastighetsbegränsning. Varje inbjudan tar upp till 10 identiteter (en per typ), och varje organisation kan ha upp till 10 API-nycklar.