API e MCP

API de conversas

Uma conversa é uma entrevista entre a IA e um respondente. A API retorna quem é o respondente, o resumo da IA com uma resposta por pergunta e a transcrição completa. Para autenticação, paginação e erros, veja a visão geral da API.

Listar conversas#

HTTP
GET /api/v1/projects/{project_id}/conversations

Retorna as conversas de um projeto, das mais recentes para as mais antigas, cada uma com o resumo da IA. As transcrições ficam de fora da lista. Busque-as com Buscar uma conversa.

Parâmetros de consulta#

ParâmetroDescrição
statusUm ou mais entre invited, opened, started, completed, cancelled, separados por vírgulas. Sem ele, todos os status são retornados, exceto invited.
sentimentUm ou mais entre positive, negative, neutral, mixed, separados por vírgulas
created_afterSó conversas criadas a partir desta data e hora ISO 8601, como 2026-05-01T00:00:00Z
created_beforeSó conversas criadas até esta data e hora
searchTexto a procurar nos resumos, nas citações e nos dados do respondente. Até 200 caracteres.
limitDe 1 a 100. Padrão 25.
cursorO next_cursor da página anterior

Só as conversas concluídas têm um resumo completo, então a maioria das integrações envia status=completed.

Exemplo#

curl -G "https://diaform.io/api/v1/projects/b8acb3ab-1f3d-4a7e-a846-b7f493f86b6d/conversations" \
  -H "Authorization: Bearer $DIAFORM_API_KEY" \
  --data-urlencode "status=completed" \
  --data-urlencode "sentiment=negative,mixed" \
  --data-urlencode "created_after=2026-05-01T00:00:00Z" \
  --data-urlencode "limit=50"

Resposta#

JSON
{
  "data": [
    {
      "id": "0f8d43a2-6df9-49c8-bf5d-fd2b6ec2d9ee",
      "project_id": "b8acb3ab-1f3d-4a7e-a846-b7f493f86b6d",
      "status": "completed",
      "created_at": "2026-05-07T12:00:00.123456+00:00",
      "started_at": "2026-05-07T12:01:11.482913+00:00",
      "ended_at": "2026-05-07T12:15:41.204+00:00",
      "duration_seconds": 870,
      "country": "DE",
      "overall_sentiment": "mixed",
      "respondent": {
        "label": "alex@acme.com",
        "email": null,
        "identities": [
          { "type": "email", "value": "alex@acme.com", "source": "owner" },
          { "type": "name", "value": "Alex", "source": "ai" }
        ]
      },
      "metadata": {},
      "invite": {
        "id": "3a4f49c7-b8f4-4c44-8f74-fd8e4277c3e4",
        "status": "completed",
        "created_at": "2026-05-07T12:00:00.123456+00:00",
        "opened_at": "2026-05-07T12:01:11.482913+00:00",
        "completed_at": "2026-05-07T12:15:41.204+00:00"
      },
      "summary": {
        "overall_sentiment": "mixed",
        "answers": [
          {
            "question_id": "V1StGXR8_Z5jdHi6B-myT",
            "question": "How did your first week with the product go?",
            "summary": "Setup was quick, but inviting teammates was confusing.",
            "sentiment": "mixed",
            "confidence": "high",
            "quotes": ["I had no idea where the invite button was"]
          }
        ],
        "urgent_issues": [],
        "additional_insights": "Would pay more for a Slack integration."
      }
    }
  ],
  "has_more": true,
  "next_cursor": "WyIyMDI2LTA1LTA3VDEyOjAwOjAwLjEyMzQ1NiswMDowMCIsIjBmOGQ0M2EyIl0"
}

Campos da conversa#

CampoTipoDescrição
idstringID da conversa, o mesmo que os webhooks enviam como conversation_id
project_idstringO projeto ao qual ela pertence
statusstringinvited, opened, started, completed ou cancelled. O painel mostra started como Em andamento.
created_atstringQuando a conversa foi criada. Para convites, é quando o convite foi criado.
started_atstring ou nullQuando a entrevista começou
ended_atstring ou nullQuando a conversa foi concluída ou cancelada
duration_secondsnumber ou nullTempo do início ao fim
countrystring ou nullO código do país do respondente, quando conhecido
overall_sentimentstring ou nullpositive, negative, neutral ou mixed. Igual a summary.overall_sentiment.
respondent.labelstring ou nullO melhor nome para o respondente: o e-mail, depois o nome, depois outra identidade
respondent.emailstring ou nullCampo legado, null para conversas novas. Leia os e-mails em respondent.identities.
respondent.identitiesarrayTudo o que se sabe sobre o respondente. source é owner (você informou), ai (extraído das mensagens dele) ou system (adicionado pelo Diaform).
metadataobjectVazio para convites e links diretos. Em conversas incorporadas, guarda dados da incorporação, como "embed": true e embed_parent_origin.
inviteobject ou nullDados do convite quando a conversa veio de um convite de respondente; caso contrário, null
summaryobject ou nullO resumo da IA. null até a conversa terminar e o resumo ficar pronto.

Campos do resumo#

CampoTipoDescrição
overall_sentimentstringpositive, negative, neutral ou mixed
answersarrayUm item para cada pergunta feita ao respondente
answers[].question_idstringO ID da pergunta no projeto
answers[].questionstringA pergunta como foi feita
answers[].summarystringResumo curto da resposta
answers[].sentimentstringpositive, negative, neutral ou mixed
answers[].confidencestringhigh, medium ou low: o quanto a pergunta foi respondida por completo
answers[].quotesarrayCitações de destaque nas palavras do próprio respondente. Muitas vezes vazio.
urgent_issuesarrayProblemas críticos que o respondente levantou, como strings curtas
additional_insightsstring ou nullFeedback útil que não se encaixou em nenhuma pergunta

Buscar uma conversa#

HTTP
GET /api/v1/conversations/{conversation_id}

Retorna uma conversa com todos os campos da lista e mais a transcrição em messages.

Exemplo#

curl "https://diaform.io/api/v1/conversations/0f8d43a2-6df9-49c8-bf5d-fd2b6ec2d9ee" \
  -H "Authorization: Bearer $DIAFORM_API_KEY"

Resposta#

Os campos em comum com a lista aparecem abreviados aqui.

JSON
{
  "id": "0f8d43a2-6df9-49c8-bf5d-fd2b6ec2d9ee",
  "project_id": "b8acb3ab-1f3d-4a7e-a846-b7f493f86b6d",
  "status": "completed",
  "overall_sentiment": "mixed",
  "summary": {},
  "messages": [
    {
      "role": "interviewer",
      "text": "Hi! Thanks for taking the time. How did your first week with the product go?"
    },
    {
      "role": "respondent",
      "text": "Setup was fast. But I had no idea where the invite button was."
    },
    {
      "role": "interviewer",
      "text": "Where did you expect to find it?"
    }
  ]
}
CampoTipoDescrição
messagesarrayA transcrição em ordem. Vazio quando o respondente não chegou a responder.
messages[].rolestringinterviewer (a IA) ou respondent
messages[].textstringO que foi dito. Respostas faladas aparecem como a transcrição delas, e uma escolha ou avaliação como texto, por exemplo Selected answers: Pro.