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}/conversationsRetorna 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âmetro | Descrição |
|---|---|
status | Um ou mais entre invited, opened, started, completed, cancelled, separados por vírgulas. Sem ele, todos os status são retornados, exceto invited. |
sentiment | Um ou mais entre positive, negative, neutral, mixed, separados por vírgulas |
created_after | Só conversas criadas a partir desta data e hora ISO 8601, como 2026-05-01T00:00:00Z |
created_before | Só conversas criadas até esta data e hora |
search | Texto a procurar nos resumos, nas citações e nos dados do respondente. Até 200 caracteres. |
limit | De 1 a 100. Padrão 25. |
cursor | O 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#
| Campo | Tipo | Descrição |
|---|---|---|
id | string | ID da conversa, o mesmo que os webhooks enviam como conversation_id |
project_id | string | O projeto ao qual ela pertence |
status | string | invited, opened, started, completed ou cancelled. O painel mostra started como Em andamento. |
created_at | string | Quando a conversa foi criada. Para convites, é quando o convite foi criado. |
started_at | string ou null | Quando a entrevista começou |
ended_at | string ou null | Quando a conversa foi concluída ou cancelada |
duration_seconds | number ou null | Tempo do início ao fim |
country | string ou null | O código do país do respondente, quando conhecido |
overall_sentiment | string ou null | positive, negative, neutral ou mixed. Igual a summary.overall_sentiment. |
respondent.label | string ou null | O melhor nome para o respondente: o e-mail, depois o nome, depois outra identidade |
respondent.email | string ou null | Campo legado, null para conversas novas. Leia os e-mails em respondent.identities. |
respondent.identities | array | Tudo o que se sabe sobre o respondente. source é owner (você informou), ai (extraído das mensagens dele) ou system (adicionado pelo Diaform). |
metadata | object | Vazio para convites e links diretos. Em conversas incorporadas, guarda dados da incorporação, como "embed": true e embed_parent_origin. |
invite | object ou null | Dados do convite quando a conversa veio de um convite de respondente; caso contrário, null |
summary | object ou null | O resumo da IA. null até a conversa terminar e o resumo ficar pronto. |
Campos do resumo#
| Campo | Tipo | Descrição |
|---|---|---|
overall_sentiment | string | positive, negative, neutral ou mixed |
answers | array | Um item para cada pergunta feita ao respondente |
answers[].question_id | string | O ID da pergunta no projeto |
answers[].question | string | A pergunta como foi feita |
answers[].summary | string | Resumo curto da resposta |
answers[].sentiment | string | positive, negative, neutral ou mixed |
answers[].confidence | string | high, medium ou low: o quanto a pergunta foi respondida por completo |
answers[].quotes | array | Citações de destaque nas palavras do próprio respondente. Muitas vezes vazio. |
urgent_issues | array | Problemas críticos que o respondente levantou, como strings curtas |
additional_insights | string ou null | Feedback ú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?"
}
]
}| Campo | Tipo | Descrição |
|---|---|---|
messages | array | A transcrição em ordem. Vazio quando o respondente não chegou a responder. |
messages[].role | string | interviewer (a IA) ou respondent |
messages[].text | string | O que foi dito. Respostas faladas aparecem como a transcrição delas, e uma escolha ou avaliação como texto, por exemplo Selected answers: Pro. |