Formularios
Crea, configura y archiva formularios por API; gestiona preguntas con lógica condicional; envía respuestas y transita estados en la máquina de flujo.
En esta página
Listar formularios
Devuelve todos los formularios de la organización del llamante (archivados excluidos por defecto). Soporta filtrado por alcance, propietario, búsqueda por nombre, ordenamiento por nombre/fecha/total de respuestas, rangos de fecha e inclusión opcional de preguntas. Las capacidades — edición, visibilidad de respuestas, cambios de estado — están gobernadas por los permisos del formulario; el propietario y los administradores siempre tienen acceso completo.
Parámetros de consulta
| Nombre | Tipo | Requerido | Descripción |
|---|---|---|---|
| search | string | Opcional | Búsqueda sin distinción de mayúsculas en nombre del formulario. Coincide con formularios del sistema y creados por el usuario. Máx. 200 caracteres. |
| filter | string | Opcional | Filtro de alcance. Uno de: all, public, approval, workflow, archived. Por defecto: todos los formularios de la organización. Valor obsoleto: me — usa owner_user_ids con tu propio UUID. |
| owner_user_ids | string (CSV) | Opcional | Filtra por UUIDs de propietarios de formularios. Separados por comas (máx. 50), semántica OR. AND con todos los demás parámetros (search, filter, paginación, ordenamiento). UUIDs de otras organizaciones nunca coinciden. Reemplaza el obsoleto filter=me. |
| order | string | Opcional | Campo de ordenamiento. Uno de: alphabetical, recent, total. Por defecto: recent. |
| is_ascend | boolean | Opcional | Dirección de ordenamiento. true para ascendente, false para descendente. Por defecto: false. |
| include | string | Opcional | Lista separada por comas de campos adicionales a incluir. Actualmente soporta: questions (devuelve las preguntas de cada formulario con UUID, label, type, options). |
| include_archived | boolean | Opcional | Si es true, incluye formularios archivados en los resultados. No es necesario con filter=archived. Por defecto: false. |
| start_date | string (YYYY-MM-DD) | Opcional | Filtra formularios creados en o después de esta fecha. Inclusivo, zona horaria del llamante. |
| end_date | string (YYYY-MM-DD) | Opcional | Filtra formularios creados en o antes de esta fecha. Inclusivo, zona horaria del llamante. |
| offset | integer | Opcional | Offset de paginación. Por defecto: 0. |
| limit | integer | Opcional | Tamaño de página. Por defecto: 25, máximo: 50. |
Respuesta
{
"count": "integer",
"next": "string | null",
"previous": "string | null",
"results": "array<{ uuid, name, is_active, collect_responses_anonymously, privacy, shortcut, start_on, end_on, is_archived, workflow_enabled, approval_flow_enabled, created_at, questions? }>"
}Errores
| Estado | Cuándo |
|---|---|
| 400 | Error de validación (invalid_filter, invalid_order, search_query_too_long, invalid_date_range, invalid_owner_user_id, too_many_owner_user_ids) |
| 401 | Credencial ausente, inválida o expirada |
| 403 | Autenticado pero sin permiso |
| 429 | Limitado — encabezado Retry-After presente |
curl -sS 'https://api.dailybot.com/v1/forms/?filter=workflow&order=alphabetical&is_ascend=true' \
-H 'X-API-KEY: $DAILYBOT_API_KEY'Probarlo
Este es un asistente de solo copia — la solicitud no se envía desde tu navegador. Pega el comando en tu terminal para ejecutarlo.
- Cuando include=questions está configurado, cada objeto de formulario incluye un array questions con UUID, label, type, flag required y options de cada pregunta.
- Obsoleto: filter=me — usa owner_user_ids con tu propio UUID de usuario. Los clientes legacy siguen funcionando: me aún resuelve al alcance del propietario del llamante y se intersecta con cualquier owner_user_ids explícito. El alcance me en endpoints de respuestas de formulario no está relacionado y NO está obsoleto. Tanto filter=me como available_on_list_view se aceptan indefinidamente; la remoción se anunciará como una entrada de changelog separada con su propia ventana de migración.
- Obsoleto: available_on_list_view — todavía aceptado en POST /v1/forms/create/ y PATCH /v1/forms/{uuid}/config/ pero ignorado del lado del servidor. La visibilidad en la lista ahora es organizacional. Para ocultar un formulario, archívelo.
Crear un formulario con preguntas inline
Crea un formulario nuevo con al menos una pregunta y configuración opcional. Requiere rol admin o manager.
Cuerpo de la solicitud
{
"name": "string (required, min 3)",
"questions": "array (required, min 1)",
"report_channels": "string[] (max 3)",
"generate_short_question": "boolean (optional, top-level)"
}Respuesta
{
"uuid": "string (uuid)",
"name": "string",
"questions": "array",
"report_channels": "array",
"public_url": "string|null"
}Errores
| Estado | Cuándo |
|---|---|
| 401 | Credencial faltante o inválida |
| 403 | Permisos insuficientes (se requiere admin/manager para escritura) |
| 429 | Límite de tasa — encabezado Retry-After presente |
| 400 | questions_required, unknown_field, etc. |
curl -sS -X POST 'https://api.dailybot.com/v1/forms/create/' -H 'X-API-KEY: $DAILYBOT_API_KEY' -H 'Content-Type: application/json' -d '{"name":"Incident Report","questions":[{"type":"text","label":"What happened?","short_question":"Description"}]}'Probarlo
Este es un asistente de solo copia — la solicitud no se envía desde tu navegador. Pega el comando en tu terminal para ejecutarlo.
- Alias: question_type por type, question por label. short_question obligatorio salvo generate_short_question: true.
Listar propietarios de formularios
Selector paginado y buscable de miembros de la organización que poseen al menos un formulario no archivado. Solo aparecen miembros activos y aprobados. Ordenado por full_name ascendente. Diseñado para selectores de UI: una organización de 1000 miembros devuelve solo sus (típicamente pocos) propietarios de formularios, no todo el directorio.
Parámetros de consulta
| Nombre | Tipo | Requerido | Descripción |
|---|---|---|---|
| search | string | Opcional | Búsqueda sin distinción de mayúsculas en nombre y email del miembro. El email se compara del lado del servidor para todos los llamantes pero el valor solo se devuelve a llamantes con visibilidad de email (admins, managers, team admins). |
| offset | integer | Opcional | Offset de paginación. Por defecto: 0. |
| limit | integer | Opcional | Tamaño de página. Por defecto: 20, máximo: 50. |
Respuesta
{
"count": "integer",
"next": "string | null",
"previous": "string | null",
"results": "array<{ uuid, full_name, image, role, email (conditional — present only for admin/manager/team-admin-scoped callers) }>"
}Errores
| Estado | Cuándo |
|---|---|
| 400 | Error de validación (search_query_too_long) |
| 401 | Credencial ausente, inválida o expirada |
| 403 | Autenticado pero sin permiso |
| 429 | Limitado — encabezado Retry-After presente |
curl -sS 'https://api.dailybot.com/v1/forms/form-owners/?search=serg&limit=20' \
-H 'X-API-KEY: $DAILYBOT_API_KEY'Probarlo
Este es un asistente de solo copia — la solicitud no se envía desde tu navegador. Pega el comando en tu terminal para ejecutarlo.
- Los emails de miembros están ocultos en los payloads del selector. El campo email aparece SOLO cuando el llamante tiene visibilidad de email — admins de organización, managers y admins de equipo. Los llamantes con alcance de miembro reciben filas sin la clave email (omitida, nunca null). Las API keys heredan el rol del propietario de la clave. search aún coincide con el email del lado del servidor para todos, pero el valor nunca se devuelve a llamantes sin visibilidad.
- El campo role contiene el slug del rol organizacional: ADMIN_ORG, MANAGER, ADMIN, MEMBER o GUEST.
Obtener un formulario
Obtiene un formulario por UUID. La puerta de lectura es membresía organizacional — cualquier miembro autenticado de la organización puede leer cualquier formulario. Los campos privacy y available_on_list_view no afectan quién puede leer el formulario; las capacidades como editar, ver respuestas y cambiar estados de workflow están gobernadas por los permisos por alcance del formulario (el propietario y los admins siempre tienen acceso completo).
Parámetros de ruta
| Nombre | Tipo | Requerido | Descripción |
|---|---|---|---|
| uuid | string (uuid) | Requerido | — |
Respuesta
{
"uuid": "string (uuid)",
"name": "string",
"is_active": "boolean",
"collect_responses_anonymously": "boolean",
"privacy": "string",
"questions": "array",
"workflow": "object",
"created_at": "string (ISO 8601)"
}Errores
| Estado | Cuándo |
|---|---|
| 401 | Credencial ausente, inválida o expirada |
| 403 | Autenticado pero sin permiso |
| 429 | Limitado — encabezado Retry-After presente |
| 404 | Formulario no encontrado o el llamante no es miembro de la organización |
curl -sS -X GET 'https://api.dailybot.com/v1/forms/{uuid}/' -H 'X-API-KEY: $DAILYBOT_API_KEY'Probarlo
Este es un asistente de solo copia — la solicitud no se envía desde tu navegador. Pega el comando en tu terminal para ejecutarlo.
- La puerta de lectura del detalle es la membresía organizacional. El campo privacy refleja el alcance de envío del formulario (OWNER, TEAM, EVERYONE), no quién puede leer la definición del formulario. El campo available_on_list_view está obsoleto y no tiene efecto — todos los formularios de la organización ahora aparecen en el endpoint de lista.
Actualizar configuración del formulario
Actualización parcial. Campos desconocidos devuelven 400 unknown_field.
Parámetros de ruta
| Nombre | Tipo | Requerido | Descripción |
|---|---|---|---|
| uuid | string (uuid) | Requerido | — |
Cuerpo de la solicitud
{
"name": "string?",
"workflow": "object?",
"who_can_edit": "object?",
"report_channels": "string[]?"
}Respuesta
{
"id": "uuid",
"name": "string",
"questions": "array",
"workflow": "object"
}Errores
| Estado | Cuándo |
|---|---|
| 401 | Credencial faltante o inválida |
| 403 | Permisos insuficientes (se requiere admin/manager para escritura) |
| 429 | Límite de tasa — encabezado Retry-After presente |
| 400 | unknown_field, etc. |
| 404 | form_not_found |
curl -sS -X PATCH 'https://api.dailybot.com/v1/forms/{uuid}/config/' -H 'X-API-KEY: $DAILYBOT_API_KEY' -H 'Content-Type: application/json' -d '{"allow_public_responses":true}'Probarlo
Este es un asistente de solo copia — la solicitud no se envía desde tu navegador. Pega el comando en tu terminal para ejecutarlo.
- report_channels reemplaza el conjunto completo (máx. 3).
Archivar (desactivar) un formulario
Marca el formulario como inactivo y archivado. Idempotente.
Parámetros de ruta
| Nombre | Tipo | Requerido | Descripción |
|---|---|---|---|
| uuid | string (uuid) | Requerido | — |
Errores
| Estado | Cuándo |
|---|---|
| 401 | Credencial faltante o inválida |
| 403 | Permisos insuficientes (se requiere admin/manager para escritura) |
| 429 | Límite de tasa — encabezado Retry-After presente |
| 404 | form_not_found |
curl -sS -X DELETE 'https://api.dailybot.com/v1/forms/{uuid}/archive/' -H 'X-API-KEY: $DAILYBOT_API_KEY'Probarlo
Este es un asistente de solo copia — la solicitud no se envía desde tu navegador. Pega el comando en tu terminal para ejecutarlo.
Add a question to a form
Add a question to a form
Parámetros de ruta
| Nombre | Tipo | Requerido | Descripción |
|---|---|---|---|
| uuid | string (uuid) | Requerido | — |
Cuerpo de la solicitud
{
"type": "string",
"label": "string",
"short_question": "string (required unless generate_short_question)"
}Errores
| Estado | Cuándo |
|---|---|
| 401 | Credencial faltante o inválida |
| 403 | Permisos insuficientes (se requiere admin/manager para escritura) |
| 429 | Límite de tasa — encabezado Retry-After presente |
| 400 | Errores de validación |
curl -sS -X POST 'https://api.dailybot.com/v1/forms/{uuid}/questions/' -H 'X-API-KEY: $DAILYBOT_API_KEY' -H 'Content-Type: application/json'Probarlo
Este es un asistente de solo copia — la solicitud no se envía desde tu navegador. Pega el comando en tu terminal para ejecutarlo.
Update a form question
Update a form question
Parámetros de ruta
| Nombre | Tipo | Requerido | Descripción |
|---|---|---|---|
| uuid | string (uuid) | Requerido | — |
| q_uuid | string (uuid) | Requerido | — |
Cuerpo de la solicitud
{
"type": "string",
"label": "string",
"short_question": "string (required unless generate_short_question)"
}Errores
| Estado | Cuándo |
|---|---|
| 401 | Credencial faltante o inválida |
| 403 | Permisos insuficientes (se requiere admin/manager para escritura) |
| 429 | Límite de tasa — encabezado Retry-After presente |
| 400 | Errores de validación |
curl -sS -X PATCH 'https://api.dailybot.com/v1/forms/{uuid}/questions/{q_uuid}/' -H 'X-API-KEY: $DAILYBOT_API_KEY' -H 'Content-Type: application/json'Probarlo
Este es un asistente de solo copia — la solicitud no se envía desde tu navegador. Pega el comando en tu terminal para ejecutarlo.
Delete a form question
Delete a form question
Parámetros de ruta
| Nombre | Tipo | Requerido | Descripción |
|---|---|---|---|
| uuid | string (uuid) | Requerido | — |
| q_uuid | string (uuid) | Requerido | — |
Cuerpo de la solicitud
{
"type": "string",
"label": "string",
"short_question": "string (required unless generate_short_question)"
}Errores
| Estado | Cuándo |
|---|---|
| 401 | Credencial faltante o inválida |
| 403 | Permisos insuficientes (se requiere admin/manager para escritura) |
| 429 | Límite de tasa — encabezado Retry-After presente |
| 400 | Errores de validación |
curl -sS -X DELETE 'https://api.dailybot.com/v1/forms/{uuid}/questions/{q_uuid}/delete/' -H 'X-API-KEY: $DAILYBOT_API_KEY' -H 'Content-Type: application/json'Probarlo
Este es un asistente de solo copia — la solicitud no se envía desde tu navegador. Pega el comando en tu terminal para ejecutarlo.
Reorder all form questions
Reorder all form questions
Parámetros de ruta
| Nombre | Tipo | Requerido | Descripción |
|---|---|---|---|
| uuid | string (uuid) | Requerido | — |
Cuerpo de la solicitud
{
"question_uuids": "uuid[] (required, complete set)"
}Errores
| Estado | Cuándo |
|---|---|
| 401 | Credencial faltante o inválida |
| 403 | Permisos insuficientes (se requiere admin/manager para escritura) |
| 429 | Límite de tasa — encabezado Retry-After presente |
| 400 | Errores de validación |
curl -sS -X PUT 'https://api.dailybot.com/v1/forms/{uuid}/questions/reorder/' -H 'X-API-KEY: $DAILYBOT_API_KEY' -H 'Content-Type: application/json'Probarlo
Este es un asistente de solo copia — la solicitud no se envía desde tu navegador. Pega el comando en tu terminal para ejecutarlo.
- question_uuids debe incluir todos los UUIDs.
Listar respuestas de un formulario
Lista paginada de respuestas del formulario. Por defecto devuelve solo las respuestas del llamante. Con all=true o cualquier filtro avanzado (submission_sources, submitter_user_ids, flow_status), devuelve todas las respuestas y requiere permiso VIEW_REPORTS. Soporta búsqueda de texto completo, filtrado por origen de envío, estado de workflow, estado de aprobación, rangos de fecha y ordenamiento.
Parámetros de ruta
| Nombre | Tipo | Requerido | Descripción |
|---|---|---|---|
| uuid | string (uuid) | Requerido | — |
Parámetros de consulta
| Nombre | Tipo | Requerido | Descripción |
|---|---|---|---|
| all | boolean | Opcional | Devuelve todas las respuestas. Requiere permiso VIEW_REPORTS en el formulario. Por defecto: false (solo respuestas propias). |
| user | string (uuid) | Opcional | Filtra por UUID de autor específico. Requiere permiso VIEW_REPORTS. UUIDs inválidos devuelven 400 invalid_user_identifier. |
| search | string | Opcional | Búsqueda de texto completo en contenido de respuesta, nombre del autor y email del autor. Las identidades anónimas no son buscables (privacidad). Máx. 256 caracteres. |
| submission_sources | string (CSV) | Opcional | Filtra por origen de envío. Separados por comas, semántica OR. Valores: member, anonymous, automation, public. Requiere permiso VIEW_REPORTS. |
| submitter_user_ids | string (CSV) | Opcional | Filtra por UUIDs de autores. Separados por comas (máx. 50), semántica OR. Requiere permiso VIEW_REPORTS. |
| flow_status | string | Opcional | Estado de flujo de aprobación. Uno de: pending, approved, denied. Ignorado silenciosamente si el formulario no tiene flujo de aprobación. Requiere permiso VIEW_REPORTS. |
| state | string | Opcional | Clave de estado de workflow (ej. draft, in_review, done). Devuelve 400 invalid_workflow_state si el formulario no tiene workflow. |
| order | string | Opcional | Dirección de ordenamiento. Uno de: recent (más reciente primero), oldest. Por defecto: recent. |
| is_ascend | boolean | Opcional | Cuando es true, equivalente a order=oldest. Por defecto: false. |
| start_date | string (YYYY-MM-DD) | Opcional | Filtra por inicio de rango de fecha de creación. Inclusivo, zona horaria del llamante. |
| end_date | string (YYYY-MM-DD) | Opcional | Filtra por fin de rango de fecha de creación. Inclusivo, zona horaria del llamante. |
| offset | integer | Opcional | Offset de paginación. Por defecto: 0. |
| limit | integer | Opcional | Tamaño de página. Por defecto: 25, máximo: 50. |
Respuesta
{
"count": "integer",
"next": "string | null",
"previous": "string | null",
"results": "array<{ uuid, user, is_dailybot_bot, is_guest_user, is_anonymous, guest_user, submission_source, flow_status, current_state, content, response_completed, has_issue, created_at, updated_at }>"
}Errores
| Estado | Cuándo |
|---|---|
| 400 | Error de validación (invalid_submission_sources, invalid_submitter_user_id, too_many_submitter_user_ids, invalid_flow_status, invalid_workflow_state, invalid_user_identifier, search_query_too_long, invalid_date_range) |
| 401 | Credencial ausente, inválida o expirada |
| 403 | El llamante carece de permiso VIEW_REPORTS para filtros avanzados (form_response_view_all_forbidden) |
| 429 | Limitado — encabezado Retry-After presente |
curl -sS 'https://api.dailybot.com/v1/forms/{uuid}/responses/?all=true&submission_sources=automation,public&order=recent' \
-H 'X-API-KEY: $DAILYBOT_API_KEY'Probarlo
Este es un asistente de solo copia — la solicitud no se envía desde tu navegador. Pega el comando en tu terminal para ejecutarlo.
- Todos los filtros se componen con AND entre grupos y OR dentro de cada grupo. Ejemplo: submission_sources=member,automation AND flow_status=pending devuelve respuestas de miembros O automación que están pendientes de aprobación.
- Usar cualquier filtro avanzado (submission_sources, submitter_user_ids, flow_status) implica automáticamente all=true y requiere permiso VIEW_REPORTS.
Crear una respuesta de formulario
Envía una nueva respuesta a un formulario. El campo content mapea cada UUID de pregunta a su valor de respuesta. Opcionalmente usa modo automación (sin atribución de autor), modo anónimo (nombre aleatorio), identidad de invitado (metadatos de persona externa) o una etiqueta de origen de envío para trazabilidad.
Parámetros de ruta
| Nombre | Tipo | Requerido | Descripción |
|---|---|---|---|
| uuid | string (uuid) | Requerido | — |
Cuerpo de la solicitud
{
"content": "object (required) — answers keyed by question UUID. Values can be strings, booleans, numbers, or arrays of scalars for multiple-choice.",
"automation": "boolean (optional, default: false) — submit as automation; channel notifications show no submitter. Response marked with is_dailybot_bot=true.",
"anonymous": "boolean (optional, default: false) — submit anonymously; channel notifications show a random generated name.",
"guest_user": "object (optional) — guest identity for the submission: { full_name: string (max 255), email: string (max 254) }. Only accepted when automation=true; silently ignored otherwise. Required when form has email_and_name_mandatory enabled.",
"submission_source": "string (optional, max 512) — free-text provenance label stored in response metadata (e.g. \"github-actions:deploy-pipeline\", \"zapier:feedback-sync\")"
}Respuesta
{
"uuid": "string (uuid)",
"form": "string (uuid)",
"content": "object — question UUID → answer value",
"response_completed": "boolean",
"has_issue": "boolean",
"blockers_status": "string | null",
"is_anonymous": "boolean",
"is_dailybot_bot": "boolean — true when submitted as automation",
"is_guest_user": "boolean — true when guest identity was recorded",
"guest_user": "object | null — { full_name, email } when guest identity exists",
"submission_source": "string | null — provenance label from metadata",
"created_at": "string (ISO 8601)"
}Errores
| Estado | Cuándo |
|---|---|
| 400 | Error de validación (content ausente, UUIDs de pregunta inválidos, preguntas requeridas sin responder, guest_user_required cuando el form exige nombre+email, formato de email inválido, submission_source excede 512 caracteres) |
| 401 | Credencial ausente, inválida o expirada |
| 403 | Autenticado pero sin permiso |
| 404 | Formulario no encontrado o no visible |
| 413 | El cuerpo de la solicitud excede el límite de 64 KB |
| 429 | Limitado — encabezado Retry-After presente |
curl -s -X POST \
-H 'X-API-KEY: $DAILYBOT_API_KEY' \
-H 'Content-Type: application/json' \
'https://api.dailybot.com/v1/forms/{uuid}/responses/' \
-d '{
"content": {"<question-uuid>": "Approved"},
"automation": true,
"guest_user": {"full_name": "Ops Bot", "email": "ops@company.com"},
"submission_source": "workflow:on-call-handoff"
}'Probarlo
Este es un asistente de solo copia — la solicitud no se envía desde tu navegador. Pega el comando en tu terminal para ejecutarlo.
- Cuando automation es true, la respuesta aparece sin atribución de usuario en las notificaciones de canal — ideal para pipelines CI/CD, puentes de formularios web o reenvío de webhooks. El campo is_dailybot_bot en la respuesta confirma el modo automación.
- Cuando anonymous es true, un nombre generado aleatoriamente (ej., "Purple Elephant") reemplaza al autor real en las notificaciones de canal. Si tanto automation como anonymous son true, automation tiene precedencia.
- Usa guest_user para adjuntar identidad externa (nombre + email) a envíos de automación. Requerido cuando el form tiene email_and_name_mandatory habilitado. Usa submission_source para etiquetar qué integración o workflow produjo la respuesta.
Obtener una respuesta de formulario
Obtiene una respuesta de formulario identificada por uuid. Devuelve current_state, allowed_transitions y content.
Parámetros de ruta
| Nombre | Tipo | Requerido | Descripción |
|---|---|---|---|
| uuid | string (uuid) | Requerido | — |
| response_uuid | string (uuid) | Requerido | — |
Respuesta
{
"uuid": "string (uuid)",
"form": "string (uuid)",
"content": "array",
"current_state": "string",
"allowed_transitions": "array<string>",
"response_completed": "boolean",
"has_issue": "boolean",
"blockers_status": "string | null",
"is_anonymous": "boolean",
"is_dailybot_bot": "boolean",
"is_guest_user": "boolean",
"guest_user": "object | null — { full_name, email }",
"submission_source": "string | null",
"flow_status": "string | null — approval status: approved, denied, or null (pending/no flow)",
"created_at": "string (ISO 8601)",
"updated_at": "string (ISO 8601)"
}Errores
| Estado | Cuándo |
|---|---|
| 401 | Missing/invalid/expired credential |
| 403 | Authenticated but not permitted |
| 429 | Throttled - Retry-After header set |
| 404 | Not found or not visible |
curl -sS -X GET 'https://api.dailybot.com/v1/forms/{uuid}/responses/{response_uuid}/' -H 'X-API-KEY: $DAILYBOT_API_KEY'Probarlo
Este es un asistente de solo copia — la solicitud no se envía desde tu navegador. Pega el comando en tu terminal para ejecutarlo.
Actualizar una respuesta de formulario
Actualiza una respuesta de formulario identificada por uuid. La respuesta devuelve el recurso actualizado, incluidos current_state y allowed_transitions.
Parámetros de ruta
| Nombre | Tipo | Requerido | Descripción |
|---|---|---|---|
| uuid | string (uuid) | Requerido | — |
| response_uuid | string (uuid) | Requerido | — |
Cuerpo de la solicitud
{
"content": "array (optional)",
"response_completed": "boolean (optional)"
}Respuesta
{
"uuid": "string (uuid)",
"form": "string (uuid)",
"content": "array",
"current_state": "string",
"allowed_transitions": "array<string>",
"response_completed": "boolean",
"updated_at": "string (ISO 8601)"
}Errores
| Estado | Cuándo |
|---|---|
| 401 | Missing/invalid/expired credential |
| 403 | Authenticated but not permitted |
| 429 | Throttled - Retry-After header set |
| 400 | Validation error |
| 404 | Not found or not visible |
curl -sS -X PATCH 'https://api.dailybot.com/v1/forms/{uuid}/responses/{response_uuid}/' -H 'X-API-KEY: $DAILYBOT_API_KEY'Probarlo
Este es un asistente de solo copia — la solicitud no se envía desde tu navegador. Pega el comando en tu terminal para ejecutarlo.
Delete a form response
Delete a form response
Parámetros de ruta
| Nombre | Tipo | Requerido | Descripción |
|---|---|---|---|
| uuid | string (uuid) | Requerido | — |
| response_uuid | string (uuid) | Requerido | — |
Errores
| Estado | Cuándo |
|---|---|
| 401 | Missing/invalid/expired credential |
| 403 | Authenticated but not permitted |
| 429 | Throttled - Retry-After header set |
| 404 | Not found or not visible |
curl -sS -X DELETE 'https://api.dailybot.com/v1/forms/{uuid}/responses/{response_uuid}/' -H 'X-API-KEY: $DAILYBOT_API_KEY'Probarlo
Este es un asistente de solo copia — la solicitud no se envía desde tu navegador. Pega el comando en tu terminal para ejecutarlo.
Transition a form response state
Runs the state machine transition. Body: to_state, optional note.
Parámetros de ruta
| Nombre | Tipo | Requerido | Descripción |
|---|---|---|---|
| uuid | string (uuid) | Requerido | — |
| response_uuid | string (uuid) | Requerido | — |
Cuerpo de la solicitud
{
"to_state": "string (required)",
"note": "string (optional)"
}Respuesta
{
"uuid": "string (uuid)",
"form": "string (uuid)",
"current_state": "string",
"allowed_transitions": "array<string>",
"content": "array",
"updated_at": "string (ISO 8601)"
}Errores
| Estado | Cuándo |
|---|---|
| 401 | Missing/invalid/expired credential |
| 403 | Authenticated but not permitted |
| 429 | Throttled - Retry-After header set |
| 400 | Validation error |
| 404 | Not found or not visible |
| 409 | State-machine conflict |
curl -sS -X POST 'https://api.dailybot.com/v1/forms/{uuid}/responses/{response_uuid}/transition/' -H 'X-API-KEY: $DAILYBOT_API_KEY'Probarlo
Este es un asistente de solo copia — la solicitud no se envía desde tu navegador. Pega el comando en tu terminal para ejecutarlo.
Formularios
Acceso programático a los formularios de Dailybot — listar, filtrar, ordenar, buscar, enviar respuestas con modos de automación o anónimo, adjuntar identidades de invitado, transitar estados de workflow y gestionar flujos de aprobación.
Ver la referencia completa de endpoints — con parámetros, schemas de request/response, códigos de error y ejemplos — en la página interactiva: /es/developers/api/forms.
Cada endpoint de este grupo acepta tanto API key (X-API-KEY) como token Bearer del CLI (Authorization: Bearer …), salvo excepción explícita, según la matriz de métodos de autenticación en /es/developers/authentication#parity-matrix.
Identificador
Los recursos Form y Form Response usan un campo uuid dedicado (RFC 4122 v4) como identificador canónico en toda solicitud y respuesta. Los parámetros de ruta como /v1/forms/{uuid}/responses/{response_uuid}/ también usan el valor uuid.
Paginación
Todos los endpoints de lista devuelven el envelope de paginación estándar:
{
"count": 42,
"next": "https://api.dailybot.com/v1/forms/?offset=25&limit=25",
"previous": null,
"results": [...]
}
| Parámetro | Tipo | Default | Máx. | Descripción |
|---|---|---|---|---|
offset |
integer | 0 | — | Offset de paginación |
limit |
integer | 25 | 50 | Tamaño de página |
Ver /es/developers/conventions#pagination para la especificación completa.
Listar formularios
GET /v1/forms/ devuelve todos los formularios de la organización del llamante (archivados excluidos por defecto). Las capacidades — edición, visibilidad de respuestas, cambios de estado — están gobernadas por los permisos del formulario; el propietario y los administradores siempre tienen acceso completo.
Soporta filtrado por alcance, propietario, búsqueda por nombre, ordenamiento y rangos de fecha.
Filtros de alcance (?filter=):
| Valor | Descripción |
|---|---|
all |
Todos los formularios de la organización (por defecto) |
public |
Solo formularios con privacidad = EVERYONE |
approval |
Solo formularios con flujo de aprobación habilitado |
workflow |
Solo formularios con estados de workflow habilitados |
archived |
Solo formularios archivados |
me |
Obsoleto — usa owner_user_ids con tu propio UUID. Sigue funcionando por retrocompatibilidad. |
Filtro por propietario (?owner_user_ids=): UUIDs de usuarios separados por comas (máx. 50). Devuelve solo formularios de esos propietarios. AND con todos los demás parámetros (search, filter, paginación, ordenamiento). UUIDs de otras organizaciones nunca coinciden (devuelve 0 resultados, no un error). Reemplaza el obsoleto filter=me.
Ordenamiento (?order=):
| Valor | Descripción |
|---|---|
recent |
Por fecha de creación, más reciente primero (por defecto) |
alphabetical |
Por nombre del formulario |
total |
Por total de respuestas |
Usa ?is_ascend=true para invertir la dirección de ordenamiento.
# Formularios con workflow, ordenados alfabéticamente ascendente
curl -H "X-API-KEY: $DAILYBOT_API_KEY" \
"https://api.dailybot.com/v1/forms/?filter=workflow&order=alphabetical&is_ascend=true"
# Buscar por nombre
curl -H "X-API-KEY: $DAILYBOT_API_KEY" \
"https://api.dailybot.com/v1/forms/?search=Solicitud%20de%20Acceso"
# Formularios ordenados por más respuestas
curl -H "X-API-KEY: $DAILYBOT_API_KEY" \
"https://api.dailybot.com/v1/forms/?order=total"
Incluir preguntas — pasa ?include=questions para incluir las preguntas de cada formulario:
{
"uuid": "...",
"name": "Retro de Sprint",
"questions": [
{
"uuid": "q-uuid-1",
"label": "¿Qué lograste?",
"type": "text",
"required": true,
"options": null
}
]
}
Descubrir propietarios de formularios
GET /v1/forms/form-owners/ devuelve una lista paginada y buscable de miembros de la organización que poseen al menos un formulario no archivado. Solo aparecen miembros activos y aprobados. Ordenado por full_name ascendente.
Diseñado para selectores de UI: una organización de 1000 miembros devuelve solo sus (típicamente pocos) propietarios de formularios, no todo el directorio.
| Parámetro | Tipo | Default | Máx. | Descripción |
|---|---|---|---|---|
search |
string | — | — | Búsqueda sin distinción de mayúsculas en nombre y email |
offset |
integer | 0 | — | Offset de paginación |
limit |
integer | 20 | 50 | Tamaño de página |
Cada resultado contiene uuid, full_name, image y role (slug del rol: ADMIN_ORG, MANAGER, ADMIN, MEMBER, GUEST).
Visibilidad del email: el campo email aparece solo cuando el llamante tiene visibilidad de email — admins de organización, managers y admins de equipo. Los llamantes con alcance de miembro reciben filas sin la clave email (omitida, nunca null). Las API keys heredan el rol del propietario de la clave. El parámetro search aún coincide con el email del lado del servidor para todos, pero el valor nunca se devuelve a llamantes sin visibilidad. Los integradores no deben asumir que email está presente en las filas del selector.
# Buscar propietarios de formularios por nombre
curl -H "X-API-KEY: $DAILYBOT_API_KEY" \
"https://api.dailybot.com/v1/forms/form-owners/?search=serg&limit=20"
# Filtrar lista de formularios por propietario
curl -H "X-API-KEY: $DAILYBOT_API_KEY" \
"https://api.dailybot.com/v1/forms/?owner_user_ids=<uuid-1>,<uuid-2>"
Campos obsoletos:
available_on_list_view— todavía aceptado enPOST /v1/forms/create/yPATCH /v1/forms/{uuid}/config/pero es un no-op del lado del servidor. La visibilidad en la lista ahora es organizacional. Para ocultar un formulario, archívelo.filter=me— sigue funcionando por retrocompatibilidad pero está obsoleto. Usaowner_user_idscon tu propio UUID. Cuando ambos se envían, se intersectan. El alcancemeen endpoints de respuestas de formulario no está relacionado y no está obsoleto.
Ambos campos obsoletos se aceptan indefinidamente; la remoción (y la eventual eliminación de la columna) se anunciará como una entrada de changelog separada con su propia ventana de migración. Los integradores deberían migrar ahora pero nada se rompe el día del deploy.
Nota de migración para integradores: reemplaza filter=me con owner_user_ids=<tu-uuid>. Los clientes que dependían de available_on_list_view para ocultar formularios ahora deben filtrar del lado del cliente o archivar el formulario.
Listar respuestas de formulario
GET /v1/forms/{uuid}/responses/ devuelve las respuestas del llamante por defecto. Pasa ?all=true o cualquier filtro avanzado para ver todas las respuestas (requiere permiso VIEW_REPORTS en el formulario).
Modelo de permisos:
| Escenario | Permiso requerido |
|---|---|
| Solo respuestas propias (por defecto) | Cualquier usuario autenticado con acceso al formulario |
all=true o submission_sources, submitter_user_ids, flow_status |
VIEW_REPORTS en el formulario |
Filtro de origen de envío (?submission_sources=):
Cada respuesta pertenece exactamente a una de estas cuatro categorías mutuamente excluyentes:
| Valor | Descripción |
|---|---|
member |
Envío normal de miembro de la organización identificado |
anonymous |
Miembro de la organización en formulario anónimo (identidad oculta) |
automation |
Enviado vía API/CLI con flag de automación |
public |
Enviado vía URL pública del formulario por un invitado externo |
Valores separados por comas usan semántica OR: ?submission_sources=automation,public devuelve respuestas de automación O públicas.
Filtro de flujo de aprobación (?flow_status=): Uno de pending, approved, denied. Ignorado silenciosamente si el formulario no tiene flujo de aprobación.
Filtro de estado de workflow (?state=): Filtra por clave de estado de workflow (ej. draft, in_review, done). Devuelve 400 invalid_workflow_state si el formulario no tiene workflow.
Ordenamiento (?order=): Uno de recent (por defecto, más reciente primero) o oldest.
Composición de filtros — todos los filtros se componen con AND entre grupos y OR dentro de cada grupo:
Resultados = (submission_sources OR)
AND (submitter_user_ids OR)
AND flow_status
AND state
AND search
AND rango_de_fechas
Comportamiento de búsqueda — el parámetro search busca en contenido de respuesta, nombre/email del miembro y nombre/email del invitado. Las identidades de miembros anónimos nunca son buscables (protección de privacidad).
FORM_UUID="96bd8829-1d2a-40fe-8acf-7edb08f742dd"
# Todas las respuestas
curl -H "X-API-KEY: $DAILYBOT_API_KEY" \
"https://api.dailybot.com/v1/forms/$FORM_UUID/responses/?all=true"
# Solo envíos de automación
curl -H "X-API-KEY: $DAILYBOT_API_KEY" \
"https://api.dailybot.com/v1/forms/$FORM_UUID/responses/?all=true&submission_sources=automation"
# Aprobación pendiente + origen miembro + búsqueda
curl -H "X-API-KEY: $DAILYBOT_API_KEY" \
"https://api.dailybot.com/v1/forms/$FORM_UUID/responses/?all=true&submission_sources=member&flow_status=pending&search=bug"
# Más antiguo primero con rango de fechas
curl -H "X-API-KEY: $DAILYBOT_API_KEY" \
"https://api.dailybot.com/v1/forms/$FORM_UUID/responses/?all=true&order=oldest&start_date=2026-07-01&end_date=2026-07-10"
Enviar una respuesta de formulario
POST /v1/forms/{uuid}/responses/ crea una nueva respuesta. El campo content mapea cada UUID de pregunta a su valor de respuesta (strings, booleanos, números o arrays de escalares para opción múltiple).
Modos de envío:
| Modo | Flags | Notificación de canal | Caso de uso |
|---|---|---|---|
| Normal | (ninguno) | Nombre + avatar del autor | Persona llenando un formulario |
| Anónimo | anonymous: true |
Nombre generado aleatoriamente | Feedback honesto sin atribución |
| Automación | automation: true |
Sin autor visible | Pipeline CI/CD, integración, workflow |
| Automación + Invitado | automation: true + guest_user |
Sin autor en canal; identidad de invitado en dashboard | Envíos externos reenviados vía API |
Identidad de invitado — usa guest_user para adjuntar la identidad de una persona externa (nombre y email) a envíos de automación. Solo se acepta cuando automation: true; se ignora en caso contrario. Requerido cuando el formulario tiene email_and_name_mandatory habilitado. guest_user.full_name máx. 255 caracteres; guest_user.email email válido, máx. 254 caracteres.
Origen de envío — usa submission_source (máx. 512 caracteres) para etiquetar qué automación o integración produjo la respuesta. Se almacena en los metadatos de la respuesta y se devuelve en vistas de lista y detalle. Valores sugeridos: "github-actions:deploy-pipeline", "zapier:feedback-sync", "cli:ci-release-bot", "make:onboarding-flow".
Reglas de validación:
contentes requerido y debe contener respuestas que coincidan con las preguntas del formularioguest_userrequiereautomation: true— se ignora en caso contrario- Si el formulario tiene
email_and_name_mandatory=trueyautomation=true, tantoguest_user.full_namecomoguest_user.emaildeben proporcionarse - Límite de tamaño del payload: 64 KB máximo
- Los valores de respuesta no pueden ser objetos anidados — las listas deben contener solo escalares
# Modo automación con identidad de invitado y origen
curl -s -X POST \
-H "X-API-KEY: $DAILYBOT_API_KEY" \
-H "Content-Type: application/json" \
"https://api.dailybot.com/v1/forms/{uuid}/responses/" \
-d '{
"content": {"<question-uuid>": "Aprobado"},
"automation": true,
"guest_user": {"full_name": "Ops Bot", "email": "ops@company.com"},
"submission_source": "workflow:on-call-handoff"
}'
# Envío anónimo
curl -s -X POST \
-H "X-API-KEY: $DAILYBOT_API_KEY" \
-H "Content-Type: application/json" \
"https://api.dailybot.com/v1/forms/{uuid}/responses/" \
-d '{
"content": {"<question-uuid>": "Feedback honesto sobre el proceso"},
"anonymous": true
}'
URLs de la aplicación web para integradores
| URL | Propósito |
|---|---|
https://app.dailybot.com/forms/{form_uuid}/responses/create/ |
Enlace público para llenar (compartir con respondientes) |
https://app.dailybot.com/forms/{form_uuid}/responses/{response_uuid} |
Enlace directo a una respuesta en el dashboard |