Automatizaciones
Gestiona flujos de automatización. La creación, edición y borrado requieren API key — los tokens CLI son solo lectura. Sujeto al plan contratado.
En esta página
Listar workflows (limitado por plan)
Listado paginado de workflows accesibles al llamante. Devuelve el envelope estándar ({count, next, previous, results}). Admite búsqueda por nombre y filtros de rango de fechas.
Parámetros de consulta
| Nombre | Tipo | Requerido | Descripción |
|---|---|---|---|
| search | string | Opcional | Búsqueda de subcadena sin distinción de mayúsculas en el nombre del workflow. Máximo 256 caracteres. |
| start_date | string (YYYY-MM-DD) | Opcional | Fecha de inicio inclusiva (zona horaria del usuario). También aceptado: date_start, date_from. |
| end_date | string (YYYY-MM-DD) | Opcional | Fecha de fin inclusiva, 23:59:59 en la zona horaria del usuario. También aceptado: date_end, date_to. |
| page | integer | Opcional | Número de página (índice base 1). Por defecto: 1. |
| page_size | integer | Opcional | Elementos por página. Por defecto: 25, máximo: 100. Alias: limit. |
| offset | integer | Opcional | Paginación por offset (aceptado por retrocompatibilidad). |
Respuesta
{
"count": "integer",
"next": "string|null",
"previous": "string|null",
"results": "array<{ id, name, description, is_active, created_at, updated_at, ... }>"
}Errores
| Estado | Cuándo |
|---|---|
| 400 | Error de validación (search_query_too_long, invalid_date_range) |
| 401 | Missing/invalid/expired credential |
| 403 | Authenticated but not permitted |
| 429 | Throttled - Retry-After header set |
curl -sS -X GET 'https://api.dailybot.com/v1/workflows/?page=1&page_size=25' -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.
- Requiere el plan con acceso a workflows.
Create a workflow (API-Key only)
Create a workflow (API-Key only)
Errores
| Estado | Cuándo |
|---|---|
| 401 | Missing/invalid/expired credential |
| 403 | Authenticated but not permitted |
| 429 | Throttled - Retry-After header set |
| 400 | Validation error |
curl -sS -X POST 'https://api.dailybot.com/v1/workflows/' -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.
- CLI token is rejected on POST.
Retrieve a workflow
Retrieve a workflow
Parámetros de ruta
| Nombre | Tipo | Requerido | Descripción |
|---|---|---|---|
| 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 GET 'https://api.dailybot.com/v1/workflows/{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.
Update a workflow (API-Key only)
Update a workflow (API-Key only)
Parámetros de ruta
| Nombre | Tipo | Requerido | Descripción |
|---|---|---|---|
| uuid | string (uuid) | Requerido | — |
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/workflows/{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 workflow (API-Key only)
Delete a workflow (API-Key only)
Parámetros de ruta
| Nombre | Tipo | Requerido | Descripción |
|---|---|---|---|
| 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/workflows/{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.
Disparar un workflow activo api_trigger
Dispara manualmente un workflow cuyo tipo de trigger es api_trigger. La ejecución se encola de forma asíncrona (202 Accepted). Un objeto JSON payload opcional (≤ 8 KiB) queda expuesto a los pasos del workflow como contexto del trigger.
Parámetros de ruta
| Nombre | Tipo | Requerido | Descripción |
|---|---|---|---|
| uuid | string (uuid) | Requerido | — |
Cuerpo de la solicitud
{
"payload": "object (optional) — free-form JSON object, max 8 KiB when serialized. Exposed to workflow steps as {{trigger.body.*}} variables."
}Respuesta
{
"detail": "string — human-readable acceptance message",
"workflow_uuid": "string (uuid) — the triggered workflow",
"queued": "boolean — always true on 202; the run is queued, not executed inline"
}Errores
| Estado | Cuándo |
|---|---|
| 400 | workflow_not_triggerable — el tipo de trigger no es api_trigger, o el workflow está inactivo |
| 400 | workflow_trigger_payload_invalid — payload no es un objeto JSON o serializa a > 8 KiB |
| 401 | Credencial ausente, inválida o expirada |
| 403 | workflow_execute_not_allowed — el caller no tiene permiso de ejecución en este workflow; o el plan no incluye workflows |
| 404 | UUID desconocido o workflow fuera de la organización del caller |
| 409 | workflow_frozen — el workflow está congelado (estado de plan/límite) |
| 429 | Rate-limit alcanzado — respeta el header Retry-After |
curl -sS -X POST 'https://api.dailybot.com/v1/workflows/{uuid}/trigger/' \
-H 'X-API-KEY: $DAILYBOT_API_KEY' \
-H 'Content-Type: application/json' \
-d '{"payload": {"env": "production", "requested_by": "release-bot"}}'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.
- Gated por plan: organizaciones sin la feature de workflows reciben 403 en todos los endpoints de workflows, incluido trigger.
- Solo workflows con trigger type api_trigger pueden dispararse vía este endpoint. Otros tipos (scheduled, eventos de form/check-in, commands, …) mantienen sus propias rutas.
- Los mismos workflows api_trigger también pueden dispararse desde un botón interactivo vía buttons[].callback_workflow (opcionalmente con modal_body cuyos campos enviados llegan como {{trigger.fields.<name>}}).
- Variables de trigger disponibles para los pasos: {{trigger.source}}, {{trigger.body.*}}, {{trigger.button_id}}, {{trigger.button_value}}, {{trigger.fields.<name>}}, {{trigger.clicked_at}}, {{trigger.user.*}}, {{trigger.triggered_by_user_uuid}}.
- A diferencia de create/update/delete, trigger acepta tokens CLI con capacidad write — API key o CLI write funcionan.
Workflows
Crea, gestiona, dispara y monitorea workflows automatizados y registros de ejecución.
CLI vs API key: Los tokens CLI son solo lectura para crear, actualizar y eliminar workflows — esas escrituras requieren
X-API-KEY. Trigger es la excepción: acepta una API key o un token CLI con capacidad de escritura. Todos los endpoints de workflows están restringidos por plan; las organizaciones sin la función de workflows pueden recibir403incluso en lecturas.
Resumen de endpoints
| Método | Endpoint | Descripción |
|---|---|---|
| GET | /v1/workflows/ |
Listar todos los workflows |
| GET | /v1/workflows/{uuid}/ |
Obtener un workflow específico |
| POST | /v1/workflows/ |
Crear un workflow |
| PUT | /v1/workflows/{uuid}/ |
Reemplazar un workflow |
| PATCH | /v1/workflows/{uuid}/ |
Actualizar un workflow |
| DELETE | /v1/workflows/{uuid}/ |
Eliminar un workflow |
| POST | /v1/workflows/{uuid}/trigger/ |
Disparar un workflow activo api_trigger |
| GET | /v1/workflows/{uuid}/execution_logs/ |
Obtener registros de ejecución del workflow |
| POST | /v1/workflows/{uuid}/duplicate/ |
Duplicar un workflow |
GET /v1/workflows/
Devuelve todos los workflows de la organización. Paginado con el envelope estándar { count, next, previous, results }.
Parámetros de consulta
| Nombre | Tipo | Requerido | Descripción |
|---|---|---|---|
is_active |
boolean | No | Filtrar por estado activo. |
search |
string | No | Búsqueda de subcadena sin distinción de mayúsculas sobre el campo name del workflow. Máx. 256 chars. Si excede devuelve 400 search_query_too_long. |
start_date |
string (YYYY-MM-DD) |
No | Filtrar workflows creados desde esta fecha (zona horaria del llamante). También: date_start, date_from. |
end_date |
string (YYYY-MM-DD) |
No | Filtrar workflows creados hasta esta fecha (zona horaria del llamante). También: date_end, date_to. Rangos invertidos devuelven 400 invalid_date_range. |
page |
integer | No | Número de página (indexado desde 1). Por defecto: 1. |
page_size |
integer | No | Ítems por página (máx. 100). Por defecto: 25. Alias: limit. |
offset |
integer | No | Paginación por offset (aceptado por retrocompatibilidad). |
curl -X GET "https://api.dailybot.com/v1/workflows/?search=onboarding&start_date=2026-06-01&end_date=2026-06-30&page_size=50" \
-H "X-API-KEY: tu_api_key"
Respuesta (200 OK):
{
"count": 5,
"next": null,
"previous": null,
"results": [
{
"id": "wf-uuid",
"name": "Incorporación de Nuevos Empleados",
"is_active": true,
"trigger_type": "event",
"created_at": "2026-01-15T00:00:00Z"
}
]
}
Identificador: Cada workflow usa
idcomo identificador — el valor es un UUID (ver Identificadores).
GET /v1/workflows/{uuid}/
Devuelve un workflow específico con configuración completa.
curl -X GET "https://api.dailybot.com/v1/workflows/wf-uuid/" \
-H "X-API-KEY: tu_api_key"
Respuesta (200 OK):
{
"uuid": "wf-uuid",
"name": "Incorporación de Nuevos Empleados",
"is_active": true,
"trigger_type": "event",
"trigger_config": {
"event": "organization.user_activated"
},
"actions": [
{
"type": "send_message",
"target_type": "user",
"message": "¡Bienvenido al equipo! Aquí está lo que debes hacer primero..."
}
],
"created_at": "2026-01-15T00:00:00Z"
}
POST /v1/workflows/
Crea un nuevo workflow. Auth: solo API key — los tokens CLI se rechazan en POST.
Parámetros del cuerpo
| Nombre | Tipo | Requerido | Descripción |
|---|---|---|---|
name |
string | Sí | Nombre del workflow. |
is_active |
boolean | No | Si el workflow está activo. Por defecto: true. |
trigger_type |
string | Sí | Tipo de trigger. Usa api_trigger para workflows disparados vía esta API o botones interactivos (seleccionable en el constructor de automatizaciones como When triggered via API or button). Otros tipos integrados incluyen event, schedule y manual. |
trigger_config |
object | Sí | Configuración del trigger (depende de trigger_type). |
actions |
array de objetos | Sí | Lista de acciones a ejecutar. |
curl -X POST "https://api.dailybot.com/v1/workflows/" \
-H "X-API-KEY: tu_api_key" \
-H "Content-Type: application/json" \
-d '{
"name": "Notificación de Despliegue",
"trigger_type": "api_trigger",
"trigger_config": {},
"actions": [
{
"type": "send_message",
"target_type": "channel",
"target_uuid": "channel-uuid",
"message": "Despliegue completado: {{trigger.body.service}} v{{trigger.body.version}}"
}
]
}'
Respuesta (201 Created):
{
"uuid": "wf-new-uuid",
"name": "Notificación de Despliegue",
"is_active": true,
"trigger_type": "api_trigger",
"created_at": "2026-04-06T10:00:00Z"
}
DELETE /v1/workflows/{uuid}/
Elimina un workflow.
curl -X DELETE "https://api.dailybot.com/v1/workflows/wf-uuid/" \
-H "X-API-KEY: tu_api_key"
Respuesta (204 No Content)
POST /v1/workflows/{uuid}/trigger/
Dispara manualmente un workflow cuyo tipo de trigger es api_trigger — el trigger diseñado para disparo externo. Los workflows con cualquier otro tipo de trigger (programados, eventos de formulario/check-in, comandos, …) mantienen sus propias rutas de disparo y devuelven 400 workflow_not_triggerable.
Auth: API key o token CLI con capacidad de escritura. Permisos: restricción por plan + membresía de la org; se aplica el permiso de ejecución por workflow.
Cuerpo de la solicitud
El cuerpo es opcional:
{"payload": {"env": "production", "requested_by": "release-bot"}}
| Campo | Tipo | Requerido | Descripción |
|---|---|---|---|
payload |
object | No | Objeto JSON libre, máx. 8 KiB al serializar. Expuesto a los pasos del workflow como variables {{trigger.body.*}}. |
curl -X POST "https://api.dailybot.com/v1/workflows/wf-uuid/trigger/" \
-H "X-API-KEY: tu_api_key" \
-H "Content-Type: application/json" \
-d '{"payload": {"env": "production"}}'
Respuesta — 202 Accepted (la ejecución se encola, no se ejecuta en línea):
{"detail": "Workflow trigger accepted.", "workflow_uuid": "wf-uuid", "queued": true}
Códigos de error
| Status | code |
Cuándo |
|---|---|---|
400 |
workflow_not_triggerable |
El tipo de trigger no es api_trigger, o el workflow está inactivo. |
400 |
workflow_trigger_payload_invalid |
payload no es un objeto o serializa a > 8 KiB. |
403 |
workflow_execute_not_allowed |
El llamante no tiene permiso de ejecución en este workflow. |
409 |
workflow_frozen |
El workflow está congelado (estado de plan/límite). |
404 |
— | UUID desconocido o fuera de la organización del llamante. |
401 |
— | Credencial ausente, inválida o expirada. |
429 |
— | Limitado por throttling — respeta el header Retry-After. |
Los mismos workflows api_trigger también pueden dispararse desde un botón interactivo de mensaje vía buttons[].callback_workflow (opcionalmente con un modal_body cuyos campos enviados llegan como {{trigger.fields.<name>}}). Consulta Mensajería del bot para los campos de botones.
Disparado vía la API pública, {{trigger.source}} es "api" y las claves de botón/campo son null o vacías.
Variables de trigger
Los pasos del workflow pueden referenciar el contexto de disparo a través del namespace {{trigger.*}}:
| Variable | Descripción |
|---|---|
{{trigger.source}} |
Cómo se disparó el workflow: api, button_click o modal_submit. |
{{trigger.body.*}} |
Claves del objeto payload opcional de la API (ej. {{trigger.body.env}}). |
{{trigger.button_id}} |
Id de botón generado por el servidor ($btn/<uuid4>) cuando se dispara desde un botón de mensaje. |
{{trigger.button_value}} |
El string value del botón pulsado — úsalo para ramificar cuando varios botones apuntan al mismo workflow. |
{{trigger.fields.<name>}} |
Valores de entrada del modal cuando se dispara vía modal_body + callback_workflow (ej. {{trigger.fields.summary}}). |
{{trigger.clicked_at}} |
Marca de tiempo ISO 8601 del clic o envío del modal. |
{{trigger.user.uuid}} |
UUID del usuario que disparó el workflow (clicador o llamante de la API). |
{{trigger.user.full_name}} |
Nombre completo para mostrar del usuario que dispara. |
{{trigger.user.first_name}} |
Nombre del usuario que dispara. |
{{trigger.user.email}} |
Email del usuario que dispara. |
{{trigger.user.role}} |
Rol: ADMIN_ORG, ADMIN, MANAGER, MEMBER o GUEST. |
{{trigger.triggered_by_user_uuid}} |
UUID del usuario que disparó el workflow (alias de {{trigger.user.uuid}} para rutas de botón/modal). |
Recetas
Modal → Workflow
Compón modal_body con callback_workflow en un botón interactivo: el clic abre el modal y, al enviar, los valores de los campos se entregan al workflow como {{trigger.fields.<input.name>}} — sin servidor externo.
curl -X POST "https://api.dailybot.com/v1/send-message/" \
-H "X-API-KEY: $DAILYBOT_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"message": "Reportar un incidente:",
"target_users": ["user-uuid"],
"buttons": [
{
"label": "Reportar",
"button_type": "interactive",
"value": "report",
"callback_workflow": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
"modal_body": {
"title": "Nuevo incidente",
"blocks": [
{
"type": "input",
"name": "summary",
"label": "¿Qué pasó?",
"multiline": true,
"required": true
}
]
}
}
]
}'
El workflow (tipo de trigger api_trigger) puede usar entonces {{trigger.fields.summary}} en cualquier paso — prellenar una respuesta de formulario, componer un mensaje o alimentar un prompt de IA. Un modal con bloques input y sin callback_url ni callback_workflow se rechaza (input_without_callback).
Ramificación por valor — varios botones, un workflow
Apunta varios botones al mismo UUID de workflow con distintos strings value, y ramifica dentro del workflow en {{trigger.button_value}}:
curl -X POST "https://api.dailybot.com/v1/send-message/" \
-H "X-API-KEY: $DAILYBOT_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"message": "El despliegue está listo — elige una acción:",
"target_users": ["user-uuid"],
"buttons": [
{
"label": "Desplegar a staging",
"button_type": "interactive",
"value": "staging",
"callback_workflow": "a1b2c3d4-e5f6-7890-abcd-ef1234567890"
},
{
"label": "Desplegar a producción",
"button_type": "interactive",
"value": "production",
"callback_workflow": "a1b2c3d4-e5f6-7890-abcd-ef1234567890"
},
{
"label": "Cancelar",
"button_type": "interactive",
"value": "cancel",
"callback_workflow": "a1b2c3d4-e5f6-7890-abcd-ef1234567890"
}
]
}'
Dentro del workflow, un paso condicional en {{trigger.button_value}} enruta staging, production o cancel sin mantener tres definiciones de workflow separadas.
Para el esquema completo de botones (label, modal_body, response y más), consulta Mensajería del bot.
GET /v1/workflows/{uuid}/execution_logs/
Devuelve los registros de ejecución de un workflow específico.
Parámetros de consulta
| Nombre | Tipo | Requerido | Descripción |
|---|---|---|---|
date_start |
string | No | Fecha de inicio (AAAA-MM-DD). |
date_end |
string | No | Fecha de fin (AAAA-MM-DD). |
status |
string | No | Filtrar por estado: success, failure o pending. |
limit |
integer | No | Número de resultados. Por defecto: 50. |
curl -X GET "https://api.dailybot.com/v1/workflows/wf-uuid/execution_logs/?limit=10" \
-H "X-API-KEY: tu_api_key"
Respuesta (200 OK):
{
"count": 25,
"results": [
{
"id": "log-uuid",
"workflow_uuid": "wf-uuid",
"status": "success",
"trigger_data": { "source": "api" },
"executed_at": "2026-04-06T09:00:00Z",
"duration_ms": 145
}
]
}
POST /v1/workflows/{uuid}/duplicate/
Duplica un workflow con un nuevo nombre.
curl -X POST "https://api.dailybot.com/v1/workflows/wf-uuid/duplicate/" \
-H "X-API-KEY: tu_api_key" \
-H "Content-Type: application/json" \
-d '{"name": "Notificación de Despliegue (Copia)"}'
Respuesta (201 Created):
{
"uuid": "wf-copy-uuid",
"name": "Notificación de Despliegue (Copia)",
"is_active": false,
"created_at": "2026-04-06T10:05:00Z"
}