API e MCP

API de relatórios

Um relatório de IA lê um conjunto de conversas concluídas e descreve o sentimento, os temas comuns e os problemas. A API retorna os relatórios que sua equipe criou no painel. Ela não cria relatórios novos. Para autenticação, paginação e erros, veja a visão geral da API.

Listar relatórios#

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

Retorna os relatórios de um projeto, dos mais recentes para os mais antigos, sem o conteúdo. Relatórios excluídos ficam de fora.

Parâmetros de consulta#

ParâmetroDescrição
statusUm ou mais entre generating, completed, failed, separados por vírgulas
limitDe 1 a 100. Padrão 25.
cursorO next_cursor da página anterior

Exemplo#

curl -G "https://diaform.io/api/v1/projects/b8acb3ab-1f3d-4a7e-a846-b7f493f86b6d/reports" \
  -H "Authorization: Bearer $DIAFORM_API_KEY" \
  --data-urlencode "status=completed"

Resposta#

JSON
{
  "data": [
    {
      "id": "882f2ed7-07d9-4344-aced-9e523275b196",
      "project_id": "b8acb3ab-1f3d-4a7e-a846-b7f493f86b6d",
      "status": "completed",
      "title": "Support problems overshadow a well-liked product",
      "focus": null,
      "selection": {
        "mode": "date_range",
        "range_start": "2026-05-01T00:00:00+00:00",
        "range_end": "2026-05-31T23:59:59+00:00"
      },
      "conversation_count": 48,
      "first_conversation_at": "2026-05-01T08:12:09.692998+00:00",
      "last_conversation_at": "2026-05-30T13:11:09.628765+00:00",
      "sentiment_counts": {
        "positive": 14,
        "negative": 11,
        "neutral": 8,
        "mixed": 15,
        "unknown": 0
      },
      "error_message": null,
      "created_at": "2026-06-01T09:33:49.465144+00:00",
      "completed_at": "2026-06-01T09:34:07.2+00:00"
    }
  ],
  "has_more": false,
  "next_cursor": null
}

Campos do relatório#

CampoTipoDescrição
idstringID do relatório
project_idstringO projeto ao qual ele pertence
statusstringgenerating, completed ou failed
titlestring ou nullO título que a IA deu ao relatório. null até ele ser concluído.
focusstring ou nullA pergunta em que sua equipe pediu que o relatório se concentrasse, se houver
selection.modestringdate_range (todas as conversas concluídas em um período) ou manual (conversas escolhidas uma a uma)
selection.range_start, selection.range_endstring ou nullO período de date_range. null significa sem limite desse lado.
conversation_countnumberQuantas conversas o relatório cobre
first_conversation_at, last_conversation_atstring ou nullQuando foram criadas a conversa mais antiga e a mais recente cobertas pelo relatório
sentiment_countsobject ou nullAs conversas cobertas pelo relatório, por sentimento geral. null até o relatório ser concluído.
error_messagestring ou nullPor que um relatório failed falhou
created_atstringQuando o relatório foi solicitado
completed_atstring ou nullQuando ele terminou ou falhou

Buscar um relatório#

HTTP
GET /api/v1/reports/{report_id}

Retorna um relatório com todos os campos da lista e mais conversation_ids e o texto do relatório em content.

Exemplo#

curl "https://diaform.io/api/v1/reports/882f2ed7-07d9-4344-aced-9e523275b196" \
  -H "Authorization: Bearer $DIAFORM_API_KEY"

Resposta#

Os campos em comum com a lista foram omitidos aqui.

JSON
{
  "id": "882f2ed7-07d9-4344-aced-9e523275b196",
  "status": "completed",
  "title": "Support problems overshadow a well-liked product",
  "conversation_ids": [
    "0f8d43a2-6df9-49c8-bf5d-fd2b6ec2d9ee",
    "912b8ced-f69d-4f50-b497-9a712fe59359"
  ],
  "content": {
    "summary": "Most respondents like the product and would recommend it, but support wait times came up in a quarter of the interviews.",
    "focus_answer": null,
    "sentiment_explanation": "Praise for the product is offset by frustration with support.",
    "themes": [
      {
        "title": "Customer support is the top complaint",
        "detail": "Twelve respondents described long waits before reaching support.",
        "tone": "negative",
        "mention_count": 12,
        "conversation_ids": ["912b8ced-f69d-4f50-b497-9a712fe59359"],
        "quotes": [
          {
            "conversation_id": "912b8ced-f69d-4f50-b497-9a712fe59359",
            "text": "it took me 25 min to connect last time, which is too long",
            "translation": null,
            "respondent_label": "alex@acme.com",
            "created_at": "2026-05-10T17:52:10.539708+00:00"
          }
        ]
      }
    ],
    "issues": [
      {
        "title": "Invite emails land in spam",
        "detail": "Three respondents never received their teammate invite.",
        "severity": "high",
        "mention_count": 3,
        "conversation_ids": ["0f8d43a2-6df9-49c8-bf5d-fd2b6ec2d9ee"],
        "quotes": []
      }
    ],
    "outliers": [
      {
        "title": "Request for an on-premise version",
        "detail": "One enterprise respondent can't use cloud tools.",
        "mention_count": 1,
        "conversation_ids": ["0f8d43a2-6df9-49c8-bf5d-fd2b6ec2d9ee"]
      }
    ]
  }
}

Campos do conteúdo#

content é null enquanto o relatório está em generating e quando ele está em failed.

CampoTipoDescrição
conversation_idsarrayTodas as conversas que o relatório cobre
content.summarystringO resumo geral do relatório
content.focus_answerstring ou nullA resposta ao focus do relatório, quando um foi definido
content.sentiment_explanationstringO que explica a divisão do sentimento
content.themesarrayTemas recorrentes, começando pelos mais mencionados
content.themes[].tonestringpositive, negative, mixed ou neutral
content.issuesarrayProblemas concretos a resolver
content.issues[].severitystringhigh, medium ou low
content.outliersarrayPontos relevantes levantados por poucos respondentes. Não têm citações.
title, detailstringEm cada tema, problema e caso isolado: um título e uma explicação curta
mention_countnumberQuantas conversas levantaram o ponto
conversation_idsarrayEssas conversas. Busque qualquer uma delas com a API de conversas.
quotes[].textstringAs palavras do próprio respondente
quotes[].translationstring ou nullUma tradução para o inglês quando a citação está em outro idioma
quotes[].conversation_idstringA conversa de onde vem a citação
quotes[].respondent_labelstring ou nullQuem disse, quando conhecido
quotes[].created_atstringQuando essa conversa foi criada

Um relatório é um retrato das conversas no momento em que foi escrito. Se uma conversa for excluída depois, as citações dela são removidas do relatório.