API och MCP

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#

HTTP
POST /api/v1/respondent-invites

Varje 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ältTypObligatorisktRegler
agentIdstringJaProjekt-ID (UUID) i nyckelns organisation
identitiesarrayJa1 till 10 poster, en per typ.
identities[].typestringJaUpp till 64 tecken: gemener, siffror, _ och -, och första tecknet måste vara en bokstav eller siffra. Versaler görs om till gemener.
identities[].valuestringJa1 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.
organizationIdstringNejOm du skickar det måste det matcha nyckelns organisation
send_emailbooleanNejtrue 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#

JSON
{
  "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ältBeskrivning
invite.idInbjudnings-ID. Webhooks skickar det som respondent.invite_id.
invite.statuspending, opened eller completed
invite.conversation_idKonversationen som skapades för respondenten
invite.identitiesIdentiteterna du skickade, var och en med source: "owner"
invite.urlLä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#

  1. Skapad. Inbjudan är pending och dess konversation är invited.
  2. Öppnad. När respondenten öppnar länken blir båda opened. Konversationen går över till started när respondenten svarar.
  3. Återupptagen. Om respondenten lämnar och kommer tillbaka via samma länk fortsätter hen i samma konversation.
  4. Avslutad. När konversationen är slut, oavsett om den slutfördes eller avbröts, blir inbjudan completed och 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#

HTTP
GET /api/v1/respondent-conversations

Den 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.

ParameterObligatoriskBeskrivning
agentIdJaProjekt-ID
limitNej1 till 100. Standard 50.
statusNejinvited, opened, started, completed eller cancelled
cursorNejnextCursor.created_at från föregående sida
cursorIdNejnextCursor.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.

JSON
{
  "error": "Invalid request",
  "code": "invalid_request",
  "details": {
    "formErrors": [],
    "fieldErrors": {
      "identities": ["Add at least one respondent identity."]
    }
  }
}
StatuscodeOrsak
400invalid_requestEtt fält eller en frågeparameter saknas eller är ogiltig
401unauthorizedAuthorization-headern saknas, är inte Bearer dia_org_live_..., eller så har nyckeln återkallats
403forbiddenDin organisation har inte Pro, Business eller Enterprise, eller så matchar organizationId inte nyckeln
404not_foundagentId är inte ett projekt i nyckelns organisation
500internal_errorEtt 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.