API y MCP

API de informes

Un informe de IA lee un conjunto de conversaciones completadas y describe el sentimiento, los temas comunes y los problemas. La API devuelve los informes que tu equipo creó en el panel. No puede crear informes nuevos. Para la autenticación, la paginación y los errores, consulta la descripción general de la API.

Listar informes#

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

Devuelve los informes de un proyecto, del más reciente al más antiguo, sin su contenido. Los informes eliminados no se incluyen.

Parámetros de consulta#

ParámetroDescripción
statusUno o varios de generating, completed, failed, separados por comas
limitDe 1 a 100. Valor predeterminado: 25.
cursorEl next_cursor de la página anterior

Ejemplo#

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

Respuesta#

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 del informe#

CampoTipoDescripción
idstringID del informe
project_idstringEl proyecto al que pertenece
statusstringgenerating, completed o failed
titlestring o nullEl título que la IA le puso al informe. null hasta que se completa.
focusstring o nullLa pregunta en la que tu equipo pidió que se centrara el informe, si la hay
selection.modestringdate_range (todas las conversaciones completadas de un periodo) o manual (conversaciones elegidas una a una)
selection.range_start, selection.range_endstring o nullEl periodo para date_range. null significa que no hay límite por ese lado.
conversation_countnumberCuántas conversaciones abarca el informe
first_conversation_at, last_conversation_atstring o nullCuándo se crearon la conversación más antigua y la más reciente que abarca el informe
sentiment_countsobject o nullLas conversaciones que abarca el informe, por sentimiento general. null hasta que el informe se completa.
error_messagestring o nullPor qué falló un informe failed
created_atstringCuándo se pidió el informe
completed_atstring o nullCuándo terminó o falló

Obtener un informe#

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

Devuelve un informe con todos los campos de la lista y, además, conversation_ids y el texto del informe en content.

Ejemplo#

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

Respuesta#

Los campos que comparte con la lista se omiten aquí.

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 del contenido#

content es null mientras el informe está en generating y cuando está en failed.

CampoTipoDescripción
conversation_idsarrayTodas las conversaciones que abarca el informe
content.summarystringEl resumen general del informe
content.focus_answerstring o nullLa respuesta al focus del informe, cuando se definió uno
content.sentiment_explanationstringQué explica el reparto del sentimiento
content.themesarrayTemas que se repiten, de más a menos mencionados
content.themes[].tonestringpositive, negative, mixed o neutral
content.issuesarrayProblemas concretos que resolver
content.issues[].severitystringhigh, medium o low
content.outliersarrayPuntos destacados que plantearon solo unos pocos participantes. No tienen citas.
title, detailstringEn cada tema, problema y caso aislado: un título y una explicación breve
mention_countnumberCuántas conversaciones lo plantearon
conversation_idsarrayEsas conversaciones. Obtén cualquiera de ellas con la API de conversaciones.
quotes[].textstringLas propias palabras del participante
quotes[].translationstring o nullUna traducción al inglés cuando la cita está en otro idioma
quotes[].conversation_idstringLa conversación de la que procede la cita
quotes[].respondent_labelstring o nullQuién lo dijo, cuando se conoce
quotes[].created_atstringCuándo se creó esa conversación

Un informe refleja las conversaciones tal como estaban cuando se escribió. Si después se elimina una conversación, sus citas se quitan del informe.