API y MCP

API de conversaciones

Una conversación es una entrevista entre la IA y un participante. La API devuelve quién es el participante, el resumen de IA con una respuesta por pregunta y la transcripción completa. Para la autenticación, la paginación y los errores, consulta la descripción general de la API.

Listar conversaciones#

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

Devuelve las conversaciones de un proyecto, de la más reciente a la más antigua, cada una con su resumen de IA. Las transcripciones no se incluyen en la lista. Obtenlas con Obtener una conversación.

Parámetros de consulta#

ParámetroDescripción
statusUno o varios de invited, opened, started, completed, cancelled, separados por comas. Sin este parámetro, se devuelven todos los estados excepto invited.
sentimentUno o varios de positive, negative, neutral, mixed, separados por comas
created_afterSolo las conversaciones creadas a partir de esta fecha y hora ISO 8601, como 2026-05-01T00:00:00Z
created_beforeSolo las conversaciones creadas hasta esta fecha y hora
searchTexto que buscar en los resúmenes, las citas y los datos del participante. Hasta 200 caracteres.
limitDe 1 a 100. Valor predeterminado: 25.
cursorEl next_cursor de la página anterior

Solo las conversaciones completadas tienen un resumen completo, así que la mayoría de las integraciones envían status=completed.

Ejemplo#

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"

Respuesta#

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 de la conversación#

CampoTipoDescripción
idstringID de la conversación, el mismo que los webhooks envían como conversation_id
project_idstringEl proyecto al que pertenece
statusstringinvited, opened, started, completed o cancelled. El panel muestra started como En curso.
created_atstringCuándo se creó la conversación. En las invitaciones, es cuando se creó la invitación.
started_atstring o nullCuándo empezó la entrevista
ended_atstring o nullCuándo se completó o se canceló la conversación
duration_secondsnumber o nullTiempo desde el inicio hasta el final
countrystring o nullEl código de país del participante, cuando se conoce
overall_sentimentstring o nullpositive, negative, neutral o mixed. Igual que summary.overall_sentiment.
respondent.labelstring o nullEl mejor nombre para el participante: su correo, después su nombre y después otra identidad
respondent.emailstring o nullCampo heredado, null en las conversaciones nuevas. Lee los correos de respondent.identities.
respondent.identitiesarrayTodo lo que se sabe del participante. source es owner (lo aportaste tú), ai (extraído de sus mensajes) o system (añadido por Diaform).
metadataobjectVacío en las invitaciones y los enlaces directos. En las conversaciones insertadas contiene datos de la inserción, como "embed": true y embed_parent_origin.
inviteobject o nullDatos de la invitación cuando la conversación viene de una invitación a un participante; si no, null
summaryobject o nullEl resumen de IA. null hasta que la conversación termina y el resumen está listo.

Campos del resumen#

CampoTipoDescripción
overall_sentimentstringpositive, negative, neutral o mixed
answersarrayUna entrada por cada pregunta que se le hizo al participante
answers[].question_idstringEl ID de la pregunta en el proyecto
answers[].questionstringLa pregunta tal como se hizo
answers[].summarystringResumen breve de la respuesta
answers[].sentimentstringpositive, negative, neutral o mixed
answers[].confidencestringhigh, medium o low: hasta qué punto se respondió la pregunta
answers[].quotesarrayCitas destacadas con las propias palabras del participante. A menudo está vacío.
urgent_issuesarrayProblemas críticos que planteó el participante, como cadenas breves
additional_insightsstring o nullFeedback útil que no encajaba en ninguna pregunta

Obtener una conversación#

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

Devuelve una conversación con todos los campos de la lista y, además, la transcripción en messages.

Ejemplo#

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

Respuesta#

Los campos que comparte con la lista aparecen aquí abreviados.

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?"
    }
  ]
}
CampoTipoDescripción
messagesarrayLa transcripción en orden. Vacío cuando el participante no llegó a responder.
messages[].rolestringinterviewer (la IA) o respondent
messages[].textstringLo que se dijo. Las respuestas habladas aparecen como su transcripción, y una opción o una valoración como texto, por ejemplo Selected answers: Pro.