Skip to content
ver .md sin procesar

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.

GET/v1/forms/API keyCLI AuthPaginación limit-offset

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

NombreTipoRequeridoDescripción
searchstringOpcionalBú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.
filterstringOpcionalFiltro 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_idsstring (CSV)OpcionalFiltra 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.
orderstringOpcionalCampo de ordenamiento. Uno de: alphabetical, recent, total. Por defecto: recent.
is_ascendbooleanOpcionalDirección de ordenamiento. true para ascendente, false para descendente. Por defecto: false.
includestringOpcionalLista separada por comas de campos adicionales a incluir. Actualmente soporta: questions (devuelve las preguntas de cada formulario con UUID, label, type, options).
include_archivedbooleanOpcionalSi es true, incluye formularios archivados en los resultados. No es necesario con filter=archived. Por defecto: false.
start_datestring (YYYY-MM-DD)OpcionalFiltra formularios creados en o después de esta fecha. Inclusivo, zona horaria del llamante.
end_datestring (YYYY-MM-DD)OpcionalFiltra formularios creados en o antes de esta fecha. Inclusivo, zona horaria del llamante.
offsetintegerOpcionalOffset de paginación. Por defecto: 0.
limitintegerOpcionalTamañ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

EstadoCuándo
400Error de validación (invalid_filter, invalid_order, search_query_too_long, invalid_date_range, invalid_owner_user_id, too_many_owner_user_ids)
401Credencial ausente, inválida o expirada
403Autenticado pero sin permiso
429Limitado — 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.
POST/v1/forms/create/API keyCLI Auth

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

EstadoCuándo
401Credencial faltante o inválida
403Permisos insuficientes (se requiere admin/manager para escritura)
429Límite de tasa — encabezado Retry-After presente
400questions_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.
GET/v1/forms/form-owners/API keyCLI AuthPaginación limit-offset

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

NombreTipoRequeridoDescripción
searchstringOpcionalBú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).
offsetintegerOpcionalOffset de paginación. Por defecto: 0.
limitintegerOpcionalTamañ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

EstadoCuándo
400Error de validación (search_query_too_long)
401Credencial ausente, inválida o expirada
403Autenticado pero sin permiso
429Limitado — 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.
GET/v1/forms/{uuid}/API keyCLI Auth

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

NombreTipoRequeridoDescripción
uuidstring (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

EstadoCuándo
401Credencial ausente, inválida o expirada
403Autenticado pero sin permiso
429Limitado — encabezado Retry-After presente
404Formulario 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.
PATCH/v1/forms/{uuid}/config/API keyCLI Auth

Actualizar configuración del formulario

Actualización parcial. Campos desconocidos devuelven 400 unknown_field.

Parámetros de ruta

NombreTipoRequeridoDescripción
uuidstring (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

EstadoCuándo
401Credencial faltante o inválida
403Permisos insuficientes (se requiere admin/manager para escritura)
429Límite de tasa — encabezado Retry-After presente
400unknown_field, etc.
404form_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).
DELETE/v1/forms/{uuid}/archive/API keyCLI Auth

Archivar (desactivar) un formulario

Marca el formulario como inactivo y archivado. Idempotente.

Parámetros de ruta

NombreTipoRequeridoDescripción
uuidstring (uuid)Requerido

Errores

EstadoCuándo
401Credencial faltante o inválida
403Permisos insuficientes (se requiere admin/manager para escritura)
429Límite de tasa — encabezado Retry-After presente
404form_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.

POST/v1/forms/{uuid}/questions/API keyCLI Auth

Add a question to a form

Add a question to a form

Parámetros de ruta

NombreTipoRequeridoDescripción
uuidstring (uuid)Requerido

Cuerpo de la solicitud

{
  "type": "string",
  "label": "string",
  "short_question": "string (required unless generate_short_question)"
}

Errores

EstadoCuándo
401Credencial faltante o inválida
403Permisos insuficientes (se requiere admin/manager para escritura)
429Límite de tasa — encabezado Retry-After presente
400Errores 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.

PATCH/v1/forms/{uuid}/questions/{q_uuid}/API keyCLI Auth

Update a form question

Update a form question

Parámetros de ruta

NombreTipoRequeridoDescripción
uuidstring (uuid)Requerido
q_uuidstring (uuid)Requerido

Cuerpo de la solicitud

{
  "type": "string",
  "label": "string",
  "short_question": "string (required unless generate_short_question)"
}

Errores

EstadoCuándo
401Credencial faltante o inválida
403Permisos insuficientes (se requiere admin/manager para escritura)
429Límite de tasa — encabezado Retry-After presente
400Errores 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/v1/forms/{uuid}/questions/{q_uuid}/delete/API keyCLI Auth

Delete a form question

Delete a form question

Parámetros de ruta

NombreTipoRequeridoDescripción
uuidstring (uuid)Requerido
q_uuidstring (uuid)Requerido

Cuerpo de la solicitud

{
  "type": "string",
  "label": "string",
  "short_question": "string (required unless generate_short_question)"
}

Errores

EstadoCuándo
401Credencial faltante o inválida
403Permisos insuficientes (se requiere admin/manager para escritura)
429Límite de tasa — encabezado Retry-After presente
400Errores 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.

PUT/v1/forms/{uuid}/questions/reorder/API keyCLI Auth

Reorder all form questions

Reorder all form questions

Parámetros de ruta

NombreTipoRequeridoDescripción
uuidstring (uuid)Requerido

Cuerpo de la solicitud

{
  "question_uuids": "uuid[] (required, complete set)"
}

Errores

EstadoCuándo
401Credencial faltante o inválida
403Permisos insuficientes (se requiere admin/manager para escritura)
429Límite de tasa — encabezado Retry-After presente
400Errores 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.
GET/v1/forms/{uuid}/responses/API keyCLI AuthPaginación limit-offset

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

NombreTipoRequeridoDescripción
uuidstring (uuid)Requerido

Parámetros de consulta

NombreTipoRequeridoDescripción
allbooleanOpcionalDevuelve todas las respuestas. Requiere permiso VIEW_REPORTS en el formulario. Por defecto: false (solo respuestas propias).
userstring (uuid)OpcionalFiltra por UUID de autor específico. Requiere permiso VIEW_REPORTS. UUIDs inválidos devuelven 400 invalid_user_identifier.
searchstringOpcionalBú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_sourcesstring (CSV)OpcionalFiltra por origen de envío. Separados por comas, semántica OR. Valores: member, anonymous, automation, public. Requiere permiso VIEW_REPORTS.
submitter_user_idsstring (CSV)OpcionalFiltra por UUIDs de autores. Separados por comas (máx. 50), semántica OR. Requiere permiso VIEW_REPORTS.
flow_statusstringOpcionalEstado 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.
statestringOpcionalClave de estado de workflow (ej. draft, in_review, done). Devuelve 400 invalid_workflow_state si el formulario no tiene workflow.
orderstringOpcionalDirección de ordenamiento. Uno de: recent (más reciente primero), oldest. Por defecto: recent.
is_ascendbooleanOpcionalCuando es true, equivalente a order=oldest. Por defecto: false.
start_datestring (YYYY-MM-DD)OpcionalFiltra por inicio de rango de fecha de creación. Inclusivo, zona horaria del llamante.
end_datestring (YYYY-MM-DD)OpcionalFiltra por fin de rango de fecha de creación. Inclusivo, zona horaria del llamante.
offsetintegerOpcionalOffset de paginación. Por defecto: 0.
limitintegerOpcionalTamañ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

EstadoCuándo
400Error 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)
401Credencial ausente, inválida o expirada
403El llamante carece de permiso VIEW_REPORTS para filtros avanzados (form_response_view_all_forbidden)
429Limitado — 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.
POST/v1/forms/{uuid}/responses/API keyCLI Authform_responses

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

NombreTipoRequeridoDescripción
uuidstring (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

EstadoCuándo
400Error 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)
401Credencial ausente, inválida o expirada
403Autenticado pero sin permiso
404Formulario no encontrado o no visible
413El cuerpo de la solicitud excede el límite de 64 KB
429Limitado — 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.
GET/v1/forms/{uuid}/responses/{response_uuid}/API keyCLI Auth

Obtener una respuesta de formulario

Obtiene una respuesta de formulario identificada por uuid. Devuelve current_state, allowed_transitions y content.

Parámetros de ruta

NombreTipoRequeridoDescripción
uuidstring (uuid)Requerido
response_uuidstring (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

EstadoCuándo
401Missing/invalid/expired credential
403Authenticated but not permitted
429Throttled - Retry-After header set
404Not 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.

PATCH/v1/forms/{uuid}/responses/{response_uuid}/API keyCLI Authform_responses

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

NombreTipoRequeridoDescripción
uuidstring (uuid)Requerido
response_uuidstring (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

EstadoCuándo
401Missing/invalid/expired credential
403Authenticated but not permitted
429Throttled - Retry-After header set
400Validation error
404Not 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/v1/forms/{uuid}/responses/{response_uuid}/API keyCLI Auth

Delete a form response

Delete a form response

Parámetros de ruta

NombreTipoRequeridoDescripción
uuidstring (uuid)Requerido
response_uuidstring (uuid)Requerido

Errores

EstadoCuándo
401Missing/invalid/expired credential
403Authenticated but not permitted
429Throttled - Retry-After header set
404Not 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.

POST/v1/forms/{uuid}/responses/{response_uuid}/transition/API keyCLI Auth

Transition a form response state

Runs the state machine transition. Body: to_state, optional note.

Parámetros de ruta

NombreTipoRequeridoDescripción
uuidstring (uuid)Requerido
response_uuidstring (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

EstadoCuándo
401Missing/invalid/expired credential
403Authenticated but not permitted
429Throttled - Retry-After header set
400Validation error
404Not found or not visible
409State-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 en POST /v1/forms/create/ y PATCH /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. Usa owner_user_ids con tu propio UUID. Cuando ambos se envían, se intersectan. El alcance me en 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:

  • content es requerido y debe contener respuestas que coincidan con las preguntas del formulario
  • guest_user requiere automation: true — se ignora en caso contrario
  • Si el formulario tiene email_and_name_mandatory=true y automation=true, tanto guest_user.full_name como guest_user.email deben 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