API y MCP

API de proyectos

Un proyecto es un entrevistador de IA con sus propias preguntas. La mayoría de los demás endpoints necesitan un ID de proyecto, así que esta suele ser la primera llamada que haces. Para la autenticación, la paginación y los errores, consulta la descripción general de la API.

Listar proyectos#

HTTP
GET /api/v1/projects

Devuelve todos los proyectos de la organización de la clave, del más reciente al más antiguo, estén publicados o no. No acepta parámetros y devuelve todos los proyectos en una sola página.

Ejemplo#

curl "https://diaform.io/api/v1/projects" \
  -H "Authorization: Bearer $DIAFORM_API_KEY"

Respuesta#

JSON
{
  "data": [
    {
      "id": "b8acb3ab-1f3d-4a7e-a846-b7f493f86b6d",
      "name": "Onboarding interviews",
      "product_name": "Acme",
      "published": true,
      "language": "english",
      "respondent_access": "public",
      "url": "https://acme.diaform.io/c/b8acb3ab-1f3d-4a7e-a846-b7f493f86b6d",
      "created_at": "2026-04-02T09:14:31.402057+00:00",
      "published_at": "2026-04-02T09:41:05.471073+00:00"
    }
  ],
  "has_more": false,
  "next_cursor": null
}

Campos del proyecto#

CampoTipoDescripción
idstringID del proyecto
namestring o nullEl nombre del proyecto tal como aparece en el panel
product_namestring o nullNombre del producto o servicio de la configuración del proyecto
publishedbooleanSi el proyecto está publicado
languagestring o nullIdioma de la entrevista, como english
respondent_accessstringpublic (cualquier persona con el enlace) o invite_only
urlstring o nullEl enlace público de la conversación. Usa tu dominio personalizado verificado si tienes uno.
created_atstringCuándo se creó el proyecto
published_atstring o nullCuándo se publicó por última vez

Obtener un proyecto#

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

Devuelve un proyecto con sus preguntas actuales y su número de conversaciones.

Ejemplo#

curl "https://diaform.io/api/v1/projects/b8acb3ab-1f3d-4a7e-a846-b7f493f86b6d" \
  -H "Authorization: Bearer $DIAFORM_API_KEY"

Respuesta#

JSON
{
  "id": "b8acb3ab-1f3d-4a7e-a846-b7f493f86b6d",
  "name": "Onboarding interviews",
  "product_name": "Acme",
  "published": true,
  "language": "english",
  "respondent_access": "public",
  "url": "https://acme.diaform.io/c/b8acb3ab-1f3d-4a7e-a846-b7f493f86b6d",
  "created_at": "2026-04-02T09:14:31.402057+00:00",
  "published_at": "2026-04-02T09:41:05.471073+00:00",
  "questions": [
    {
      "id": "V1StGXR8_Z5jdHi6B-myT",
      "text": "How did your first week with the product go?",
      "type": "open_text",
      "required": false,
      "options": []
    },
    {
      "id": "tTJUuhijB3m3nvA5horJ6",
      "text": "Which plan are you on?",
      "type": "single_choice",
      "required": true,
      "options": [
        { "id": "fvbfMZcZXZLzZWCa-jXXJ", "label": "Starter" },
        { "id": "nb-XqVVvSICqEQjZ12Mox", "label": "Pro" }
      ]
    }
  ],
  "conversation_counts": {
    "total": 212,
    "completed": 148
  }
}

Tiene todos los campos de la lista y, además:

CampoTipoDescripción
questionsarrayLas preguntas publicadas, en orden
questions[].idstringID de la pregunta. Los resúmenes de las conversaciones se refieren a él como question_id.
questions[].textstringLa pregunta tal como está escrita
questions[].typestringopen_text, single_choice, multiple_choice, nps, star_rating o file_upload
questions[].requiredbooleanSi la pregunta es obligatoria
questions[].optionsarrayLas opciones de una pregunta de opción única o múltiple, cada una con id y label. Vacío en los demás tipos.
conversation_counts.totalnumberConversaciones que, como mínimo, se abrieron
conversation_counts.completednumberConversaciones que llegaron al final

Las preguntas pueden cambiar con el tiempo. El resumen de una conversación conserva el texto de la pregunta tal como se le hizo al participante.