Plan · Tableros
Tableros y sus estados de flujo, la instantánea del tablero en una sola llamada, el feed de cambios, miembros, etiquetas y vistas guardadas. Parte de la API de Dailybot Plan (Beta).
En esta página
Beta
Plan está en beta. Todo lo que está bajo /plan en la aplicación web, los comandos del CLI y de la agent skill para proyectos, objetivos, tableros y tareas, y la API pública /v1/plan/ puede cambiar antes de la disponibilidad general. ¿Quieres probarlo con tu equipo? Escribe a [email protected].
Listar tableros
Los tableros que puedes ver, en una página. Filtra por project, busca con search, por fechas con start_date / end_date y trae los tableros archivados con include_archived. Una key de agente o de la organización solo ve los tableros visibles para la organización; una key personal ve lo que ve su persona.
Parámetros de consulta
Paginación
| Nombre | Tipo | Requerido | Descripción |
|---|---|---|---|
| page | integer | Opcional | Número de página, empezando en 1. |
| page_size | integer | Opcional | Filas por página. 50 por defecto, máximo 100. Los valores fuera de rango se ajustan, nunca se rechazan: pedir 500 devuelve 100. |
| limit | integer | Opcional | Alias de page_size, traducido en el servidor. |
| offset | integer | Opcional | Alias traducido a page en el servidor. |
Filtros
| Nombre | Tipo | Requerido | Descripción |
|---|---|---|---|
| search | string | Opcional | Coincide con el título y la clave. Más de 256 caracteres es 400 search_query_too_long, no se trunca. q es un alias. |
| project | array | Opcional | uuids de proyectos. Repetible; los valores se combinan con OR. |
Fechas
| Nombre | Tipo | Requerido | Descripción |
|---|---|---|---|
| start_date | string | Opcional | Inicio de la ventana de fecha de creación. Es lo que produce --since del CLI. |
| end_date | string | Opcional | Fin de la ventana de fecha de creación. Es lo que produce --until del CLI. |
Filas archivadas
| Nombre | Tipo | Requerido | Descripción |
|---|---|---|---|
| is_archived | boolean | Opcional | true devuelve solo las filas archivadas; false (por defecto), solo las activas. Archivar es la eliminación, así que las filas archivadas siguen siendo legibles. |
| include_archived | boolean | Opcional | Incluye las filas archivadas junto con las activas. Es distinto de is_archived, que selecciona un conjunto u otro: include_archived=true es la unión. Las listas devuelven filas activas a menos que lo pidas. |
Objeto Board
| Nombre | Tipo | Requerido | Descripción |
|---|---|---|---|
| uuid | uuid | Requerido | Identificador público estable. |
| key | string | Requerido | La clave del tablero: el prefijo de las claves de sus tareas. Al renombrarla, la clave anterior queda reservada y sigue resolviéndose. |
| name | string | Requerido | Nombre visible. Máx. 120 caracteres. |
| project | Project | Opcional | El proyecto. Ver Project. |
| team | uuid | null | Opcional | El equipo. |
| visibility | enum | Requerido | org (todos en la organización) o members (solo miembros explícitos). Uno de org, members. |
| effective_visibility | string | Opcional | Si el tablero es efectivamente visible para toda la organización (org) o solo para los miembros (members). Un tablero dentro de un proyecto members es members aquí, mientras que visibility sigue siendo el ajuste almacenado del propio tablero. |
| estimate_scale | enum | Opcional | Cómo se expresan las estimaciones en este tablero. Uno de none, fibonacci, linear. |
| default_view | SavedView | null | Opcional | La vista guardada predeterminada del tablero, o null. Ver SavedView. |
| archive_after_days | integer | null | Opcional | Archivar automáticamente las tareas terminadas después de esta cantidad de días, o null para conservarlas. |
| task_count | integer | Opcional | Número de tareas activas. |
| wip_limits | object | Opcional | Límites de trabajo en curso por columna. |
| is_archived | boolean | Opcional | Si la fila está archivada. Archivar es la forma de eliminar: las filas archivadas siguen siendo legibles y se pueden restaurar. |
| created_at | date-time | Opcional | Cuándo se creó la fila. |
| updated_at | date-time | Opcional | Cuándo cambió la fila por última vez. |
| viewer | object | Opcional | Lo que puedes hacer con esta fila. Forma: {is_member, can_see_content, can_manage: boolean} (all required). |
| states | array<WorkflowState> | Opcional | Los estados del tablero, en orden de columnas. Ver WorkflowState. |
Objeto Project
| Nombre | Tipo | Requerido | Descripción |
|---|---|---|---|
| uuid | uuid | Requerido | Identificador público estable. |
| name | string | Requerido | Nombre visible. Máx. 120 caracteres. |
| slug | string | Opcional | Nombre apto para URL. Máx. 48 caracteres. |
| description | string | null | Opcional | Descripción libre. |
| lead | UserRef | null | Opcional | El líder del proyecto. Ver UserRef. |
| goals | array | Opcional | Objetivos a los que apunta este proyecto. Un proyecto puede servir a varios objetivos. Siempre presentes: uuid. Elementos: {uuid, name}. |
| goal | object | Opcional | El objetivo, cuando hay exactamente uno. Forma: {uuid, name}|null. |
| board_count | integer | Opcional | Número de tableros activos en el proyecto. |
| health | enum | Opcional | Salud declarada. Uno de not_set, on_track, at_risk, off_track. |
| start_date | date | null | Opcional | Fecha de inicio planificada. |
| target_date | date | null | Opcional | Fecha de fin planificada. |
| progress | ProjectProgress | null | Opcional | Resumen agregado del progreso sobre las tareas que puedes ver. Ver ProjectProgress. |
| is_archived | boolean | Requerido | Si la fila está archivada. Archivar es la forma de eliminar: las filas archivadas siguen siendo legibles y se pueden restaurar. |
| archived_at | date-time | null | Opcional | Cuándo se archivó la fila. |
| created_at | date-time | Opcional | Cuándo se creó la fila. |
| updated_at | date-time | Opcional | Cuándo cambió la fila por última vez. |
| viewer | object | Opcional | Lo que puedes hacer con esta fila. Forma: {can_see_content: boolean, can_manage: boolean} (both required). |
Objeto SavedView
| Nombre | Tipo | Requerido | Descripción |
|---|---|---|---|
| name | string | Requerido | Nombre visible. Máx. 64 caracteres. |
| view_mode | enum | Opcional | Cómo se dibuja el conjunto filtrado. Las lecturas siempre devuelven board para el diseño kanban. Uno de list, board, timeline, calendar. |
| group_by | enum | Opcional | La dimensión de agrupación. Uno de state, owner, priority, category. |
| sort | string | Opcional | Una clave de orden, con prefijo - para orden descendente. |
| filters | object | Requerido | Los filtros de la vista, con la gramática compartida de filtros de tareas. |
| schema_version | integer | Opcional | Versión del formato guardado de la vista. |
| visibility | enum | Opcional | personal (por defecto) es solo tuya. shared y board_default (la vista por defecto de ese tablero o proyecto) las puede leer todo el que ve el tablero o el proyecto. Asignarlas requiere a quien administra el tablero en las vistas de tablero, y supervisión del proyecto (un administrador de la organización o quien gestiona todos sus equipos) en las vistas de proyecto; si no, 403 view_visibility_forbidden. Uno de personal, shared, board_default. |
| collapsed | object | array | string | number | boolean | Opcional | Estado de la interfaz del cliente guardado tal cual (qué grupos están colapsados). Solo se validan el tamaño y la profundidad. |
| columns | object | array | string | number | boolean | Opcional | Estado de la interfaz del cliente guardado tal cual (qué columnas se muestran). Solo se validan el tamaño y la profundidad. |
| uuid | uuid | Opcional | Identificador público estable. |
| scope | enum | Opcional | A qué contenedor pertenece la vista: board o project. Solo lectura. Uno de board, project. |
| board | uuid | null | Opcional | El uuid del tablero cuando scope es board; null para una vista de proyecto. Solo lectura. |
| owner | object | Opcional | Quién es dueño de la vista. Forma: {uuid, name}. |
| created_at | date-time | Opcional | Cuándo se creó la fila. |
| updated_at | date-time | Opcional | Cuándo cambió la fila por última vez. |
Objeto WorkflowState
| Nombre | Tipo | Requerido | Descripción |
|---|---|---|---|
| uuid | uuid | Requerido | Identificador público estable. |
| name | string | Requerido | Nombre visible. Máx. 48 caracteres. |
| category | enum | Requerido | Una de las cinco categorías fijas. Nunca cambia después de crearse. Uno de backlog, todo, in_progress, done, canceled. |
| position | integer | Requerido | Posición de la columna, de izquierda a derecha. Mínimo 0. |
| color | string | Opcional | Color de visualización (hex). |
| is_default | boolean | Opcional | Si las tareas nuevas llegan a este estado de forma predeterminada. |
| is_archived | boolean | Opcional | Si la fila está archivada. Archivar es la forma de eliminar: las filas archivadas siguen siendo legibles y se pueden restaurar. |
| task_count | integer | Opcional | Número de tareas activas. |
Objeto UserRef
Objeto ProjectProgress
| Nombre | Tipo | Requerido | Descripción |
|---|---|---|---|
| total | integer | Requerido | Todas las tareas contadas. |
| completed | integer | Requerido | Tareas en un estado done o canceled. |
| open | integer | Opcional | Tareas en un estado backlog, todo o in_progress. |
| blocked | integer | Opcional | Tareas con un bloqueo activo. |
| overdue | integer | Opcional | Tareas abiertas con la fecha de vencimiento ya pasada. |
| percent_complete | integer | Requerido | completed como porcentaje de total. |
Respuesta
| Nombre | Tipo | Requerido | Descripción |
|---|---|---|---|
| count | integer | Requerido | Número total de filas. |
| next | uri | Requerido | URL de la página siguiente, o null. |
| previous | uri | Requerido | URL de la página anterior, o null. |
| results | array<Board> | Requerido | Las filas de esta página. Ver Board. |
Errores
| Estado | Cuándo |
|---|---|
| 401 | Credencial ausente, vencida o con formato inválido (`credential_absent`, `credential_expired`, `credential_malformed`). |
| 402 | Plan aún no está habilitado para tu organización (`plan_upgrade_required`). Es lo esperado durante la Beta: escribe a [email protected]. |
curl -sS "https://api.dailybot.com/v1/plan/boards/" \
-H "X-API-KEY: $DAILYBOT_API_KEY"dailybot plan board list --json{
"count": 1,
"next": null,
"previous": null,
"results": [
{
"uuid": "00000000-0000-4000-8000-000000000002",
"key": "ENG",
"name": "Engineering",
"project": {
"uuid": "00000000-0000-4000-8000-000000000001",
"name": "Platform",
"is_archived": false
},
"team": null,
"visibility": "org",
"estimate_scale": "fibonacci",
"default_view": null,
"archive_after_days": null,
"task_count": 12,
"wip_limits": {},
"is_archived": false,
"created_at": "2026-09-25T10:14:02Z",
"updated_at": "2026-09-25T10:14:02Z",
"viewer": {},
"states": []
}
]
}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.
- Scope: `tasks:read`.
- Límite de solicitudes: 120 lecturas por minuto por actor.
- Funciona con una sesión iniciada, un token de usuario del CLI, una API key personal, o una key de agente o de la organización. Una key personal ve lo que ve su persona; una key de agente o de la organización actúa como actor del sistema y solo ve los tableros visibles para la organización.
Crear un tablero con sus cinco estados predeterminados
Crea un tablero dentro de un proyecto y siembra sus cinco estados del flujo de trabajo por defecto. La key del tablero es el prefijo de cada clave de tarea (ENG-142) y debe ser única (409 duplicate_board_key). Todo miembro no invitado puede crearlo (con una sesión iniciada o una API key personal); una key de agente o de la organización no puede. El límite de tableros del plan responde 402 task_boards_limit_reached.
Encabezados
| Nombre | Tipo | Requerido | Descripción |
|---|---|---|---|
| Idempotency-Key | string | Opcional | Una clave que generas para esta intención. Una repetición con la misma clave y el mismo cuerpo devuelve la primera respuesta sin un segundo efecto secundario y lleva Idempotency-Replayed: true. Las claves se conservan durante 24 horas. La misma clave con un cuerpo distinto es 409 idempotency_key_payload_mismatch; una repetición mientras la primera llamada sigue en curso recibe 409 idempotency_in_progress durante hasta 120 segundos. |
| X-Dailybot-Agent-Name | string | Opcional | El nombre del agente que ejecutó esta escritura en nombre de la persona. Úsalo en escrituras multipart y sin cuerpo (DELETE, archivar, restaurar); en escrituras JSON envía el campo agent_name del cuerpo, que gana si vienen los dos. Codifica el valor con percent-encoding (UTF-8). Los caracteres de control se eliminan; un valor vacío significa sin agente. Más de 128 caracteres, o un valor que no se puede decodificar, es 400 invalid_agent_attribution (nunca se trunca). Una clave de tipo agente, que no está ligada a una persona, recibe 400 invalid_agent_attribution si lo envía. El sello nunca cambia una respuesta de permisos. Ver Atribución de agente. |
Cuerpo de la solicitud
| Nombre | Tipo | Requerido | Descripción |
|---|---|---|---|
| name | string | Requerido | Nombre visible. Máx. 120 caracteres. |
| key | string | Requerido | La clave del tablero, el prefijo de las claves de sus tareas (por ejemplo ENG). |
| project | uuid | Requerido | El proyecto. |
| team | uuid | null | Opcional | El equipo. |
| visibility | enum | Opcional | org (todos en la organización) o members (solo miembros explícitos). Uno de org, members. |
| estimate_scale | enum | Opcional | Cómo se expresan las estimaciones en este tablero. Uno de none, fibonacci, linear. |
| archive_after_days | integer | null | Opcional | Archivar automáticamente las tareas terminadas después de esta cantidad de días, o null para conservarlas. Mínimo 1. |
| default_view | SavedView | null | Opcional | La vista guardada predeterminada del tablero, o null. Ver SavedView. |
| agent_name | string | Opcional | El nombre del agente que ejecutó esta escritura en nombre de la persona (máx. 128 caracteres, vacío significa sin agente). Tiene prioridad sobre el header X-Dailybot-Agent-Name. Ver Atribución de agente. |
Respuesta
| Nombre | Tipo | Requerido | Descripción |
|---|---|---|---|
| (body) | Board | Requerido | Un objeto Board. |
Errores
| Estado | Cuándo |
|---|---|
| 400 | La validación falló, o no se reconoció un valor de filtro, orden o `include`. El `code` de la respuesta indica cuál. `invalid_agent_attribution` significa que el nombre del agente no es válido. |
| 401 | Credencial ausente, vencida o con formato inválido (`credential_absent`, `credential_expired`, `credential_malformed`). |
| 402 | Plan aún no está habilitado para tu organización (`plan_upgrade_required`), o se alcanzó el tope de tableros del plan (`task_boards_limit_reached`). |
| 409 | Otro tablero ya usa esta clave (`duplicate_board_key`). |
curl -sS -X POST "https://api.dailybot.com/v1/plan/boards/" \
-H "Authorization: Bearer $DAILYBOT_TOKEN" \
-H "Idempotency-Key: $(uuidgen)" \
-H "Content-Type: application/json" \
-d '{
"name": "Engineering",
"key": "ENG",
"project": "00000000-0000-4000-8000-000000000001",
"visibility": "org",
"estimate_scale": "fibonacci"
}'dailybot plan board create --name "Engineering"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.
- Scope: `tasks:admin` — escrituras de contenedores. Un miembro no invitado puede llamarlo con una sesión iniciada o una API key personal (una key con scopes de Plan explícitos necesita `tasks:write`, que lo cubre); una key de agente o de la organización recibe `403 insufficient_scope`.
- Límite de solicitudes: 60 escrituras por minuto por actor.
- Requiere una persona: llámalo con una sesión iniciada, un token de usuario del CLI o una API key personal. Una key de agente o de la organización recibe `403 insufficient_scope`.
Obtener un tablero
Un tablero por su uuid. Un tablero que no puedes ver responde 404, igual que uno que no existe.
Parámetros de ruta
| Nombre | Tipo | Requerido | Descripción |
|---|---|---|---|
| board_id | string | Requerido | El uuid del tablero. |
Respuesta
| Nombre | Tipo | Requerido | Descripción |
|---|---|---|---|
| (body) | Board | Requerido | Un objeto Board. |
Errores
| Estado | Cuándo |
|---|---|
| 401 | Credencial ausente, vencida o con formato inválido (`credential_absent`, `credential_expired`, `credential_malformed`). |
| 402 | Plan aún no está habilitado para tu organización (`plan_upgrade_required`). Es lo esperado durante la Beta: escribe a [email protected]. |
| 404 | No existe o no es visible para ti. Ambos casos devuelven el mismo cuerpo. |
curl -sS "https://api.dailybot.com/v1/plan/boards/00000000-0000-4000-8000-000000000002/" \
-H "X-API-KEY: $DAILYBOT_API_KEY"dailybot plan board get 00000000-0000-4000-8000-000000000002Probarlo
Este es un asistente de solo copia — la solicitud no se envía desde tu navegador. Pega el comando en tu terminal para ejecutarlo.
- Scope: `tasks:read`.
- Límite de solicitudes: 120 lecturas por minuto por actor.
- Funciona con una sesión iniciada, un token de usuario del CLI, una API key personal, o una key de agente o de la organización. Una key personal ve lo que ve su persona; una key de agente o de la organización actúa como actor del sistema y solo ve los tableros visibles para la organización.
Actualizar un tablero, incluido el cambio de nombre de su clave
Renombrar key retira la clave anterior y la mantiene reservada, así que ENG-142 escrito años después sigue resolviéndose. Cambiar visibility a members te agrega como miembro, porque un tablero solo para miembros sin miembros no sería visible para nadie.
Parámetros de ruta
| Nombre | Tipo | Requerido | Descripción |
|---|---|---|---|
| board_id | string | Requerido | El uuid del tablero. |
Encabezados
| Nombre | Tipo | Requerido | Descripción |
|---|---|---|---|
| Idempotency-Key | string | Opcional | Una clave que generas para esta intención. Una repetición con la misma clave y el mismo cuerpo devuelve la primera respuesta sin un segundo efecto secundario y lleva Idempotency-Replayed: true. Las claves se conservan durante 24 horas. La misma clave con un cuerpo distinto es 409 idempotency_key_payload_mismatch; una repetición mientras la primera llamada sigue en curso recibe 409 idempotency_in_progress durante hasta 120 segundos. |
| X-Dailybot-Agent-Name | string | Opcional | El nombre del agente que ejecutó esta escritura en nombre de la persona. Úsalo en escrituras multipart y sin cuerpo (DELETE, archivar, restaurar); en escrituras JSON envía el campo agent_name del cuerpo, que gana si vienen los dos. Codifica el valor con percent-encoding (UTF-8). Los caracteres de control se eliminan; un valor vacío significa sin agente. Más de 128 caracteres, o un valor que no se puede decodificar, es 400 invalid_agent_attribution (nunca se trunca). Una clave de tipo agente, que no está ligada a una persona, recibe 400 invalid_agent_attribution si lo envía. El sello nunca cambia una respuesta de permisos. Ver Atribución de agente. |
Cuerpo de la solicitud
| Nombre | Tipo | Requerido | Descripción |
|---|---|---|---|
| name | string | Opcional | Nombre visible. Máx. 120 caracteres. |
| key | string | Opcional | La clave del tablero, el prefijo de las claves de sus tareas (por ejemplo ENG). |
| project | uuid | Opcional | El proyecto. |
| team | uuid | null | Opcional | El equipo. |
| visibility | enum | Opcional | org (todos en la organización) o members (solo miembros explícitos). Uno de org, members. |
| estimate_scale | enum | Opcional | Cómo se expresan las estimaciones en este tablero. Uno de none, fibonacci, linear. |
| archive_after_days | integer | null | Opcional | Archivar automáticamente las tareas terminadas después de esta cantidad de días, o null para conservarlas. Mínimo 1. |
| default_view | SavedView | null | Opcional | La vista guardada predeterminada del tablero, o null. Ver SavedView. |
| agent_name | string | Opcional | El nombre del agente que ejecutó esta escritura en nombre de la persona (máx. 128 caracteres, vacío significa sin agente). Tiene prioridad sobre el header X-Dailybot-Agent-Name. Ver Atribución de agente. |
Respuesta
| Nombre | Tipo | Requerido | Descripción |
|---|---|---|---|
| (body) | Board | Requerido | Un objeto Board. |
Errores
| Estado | Cuándo |
|---|---|
| 400 | La validación falló, o no se reconoció un valor de filtro, orden o `include`. El `code` de la respuesta indica cuál. `invalid_agent_attribution` significa que el nombre del agente no es válido. |
| 401 | Credencial ausente, vencida o con formato inválido (`credential_absent`, `credential_expired`, `credential_malformed`). |
| 402 | Plan aún no está habilitado para tu organización (`plan_upgrade_required`). Es lo esperado durante la Beta: escribe a [email protected]. |
| 404 | No existe o no es visible para ti. Ambos casos devuelven el mismo cuerpo. |
| 409 | Otro tablero ya usa esta clave (`duplicate_board_key`). |
curl -sS -X PATCH "https://api.dailybot.com/v1/plan/boards/00000000-0000-4000-8000-000000000002/" \
-H "Authorization: Bearer $DAILYBOT_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"key": "PLAT"
}'dailybot plan board update 00000000-0000-4000-8000-000000000002 --key PLATProbarlo
Este es un asistente de solo copia — la solicitud no se envía desde tu navegador. Pega el comando en tu terminal para ejecutarlo.
- Scope: `tasks:admin` — escrituras de contenedores. Un miembro no invitado puede llamarlo con una sesión iniciada o una API key personal (una key con scopes de Plan explícitos necesita `tasks:write`, que lo cubre); una key de agente o de la organización recibe `403 insufficient_scope`.
- Límite de solicitudes: 60 escrituras por minuto por actor.
- Requiere una persona: llámalo con una sesión iniciada, un token de usuario del CLI o una API key personal. Una key de agente o de la organización recibe `403 insufficient_scope`.
Archivar un tablero, en cascada a sus tareas
Archiva el tablero y, con él, sus tareas. La clave del tablero queda reservada, así que nunca se reutiliza. Envía ?dry_run=true antes para ver la consecuencia sin archivar; restaura el tablero con el endpoint de restaurar.
Parámetros de ruta
| Nombre | Tipo | Requerido | Descripción |
|---|---|---|---|
| board_id | string | Requerido | El uuid del tablero. |
Parámetros de consulta
| Nombre | Tipo | Requerido | Descripción |
|---|---|---|---|
| dry_run | boolean | Opcional | Previsualiza la consecuencia sin ejecutarla. La respuesta tiene la misma forma, {operation, dry_run, reversible, restore_path, consequence, affects}, pero no se escribe nada ni se emite ningún evento. Muestra consequence a una persona antes de actuar. |
Encabezados
| Nombre | Tipo | Requerido | Descripción |
|---|---|---|---|
| Idempotency-Key | string | Opcional | Una clave que generas para esta intención. Una repetición con la misma clave y el mismo cuerpo devuelve la primera respuesta sin un segundo efecto secundario y lleva Idempotency-Replayed: true. Las claves se conservan durante 24 horas. La misma clave con un cuerpo distinto es 409 idempotency_key_payload_mismatch; una repetición mientras la primera llamada sigue en curso recibe 409 idempotency_in_progress durante hasta 120 segundos. |
| X-Dailybot-Agent-Name | string | Opcional | El nombre del agente que ejecutó esta escritura en nombre de la persona. Úsalo en escrituras multipart y sin cuerpo (DELETE, archivar, restaurar); en escrituras JSON envía el campo agent_name del cuerpo, que gana si vienen los dos. Codifica el valor con percent-encoding (UTF-8). Los caracteres de control se eliminan; un valor vacío significa sin agente. Más de 128 caracteres, o un valor que no se puede decodificar, es 400 invalid_agent_attribution (nunca se trunca). Una clave de tipo agente, que no está ligada a una persona, recibe 400 invalid_agent_attribution si lo envía. El sello nunca cambia una respuesta de permisos. Ver Atribución de agente. |
Objeto DryRunPreview
Lo que responde la llamada con ?dry_run=true: la consecuencia, sin ejecutarla. No se escribe nada ni se emite ningún evento.
| Nombre | Tipo | Requerido | Descripción |
|---|---|---|---|
| operation | string | Requerido | La operación que se ejecutaría. |
| dry_run | boolean | Requerido | Siempre true. |
| reversible | boolean | Requerido | Si la operación se puede deshacer. |
| restore_path | string | null | Requerido | La ruta que la desharía, o null cuando no hay ninguna. |
| consequence | string | Requerido | Una frase para mostrarle a una persona antes de actuar. Describe el efecto en cascada en lugar de resumirlo. |
| affects | object | Requerido | Lo que tocaría la operación, como conteos (enteros) por tipo. |
| would_refuse | boolean | Opcional | Solo al archivar un estado del flujo de trabajo: true cuando la llamada real se rechazaría. |
| refusal_code | string | Opcional | Solo al archivar un estado del flujo de trabajo: el código de error con el que respondería la llamada real. |
Respuesta
| Nombre | Tipo | Requerido | Descripción |
|---|---|---|---|
| (body) | Board | DryRunPreview | Requerido | Un objeto Board. Con ?dry_run=true, un objeto DryRunPreview en su lugar. |
Errores
| Estado | Cuándo |
|---|---|
| 400 | El nombre del agente no es válido (`invalid_agent_attribution`). |
| 401 | Credencial ausente, vencida o con formato inválido (`credential_absent`, `credential_expired`, `credential_malformed`). |
| 402 | Plan aún no está habilitado para tu organización (`plan_upgrade_required`). Es lo esperado durante la Beta: escribe a [email protected]. |
| 403 | Autenticado pero sin permiso: falta el scope (`insufficient_scope`, que es también lo que recibe una key de agente o de la organización en una operación que requiere una persona, y lo que recibe una key personal cuando sus scopes de Plan explícitos no cubren el endpoint) o es una cuenta de invitado (`guest_not_allowed`). |
| 404 | No existe o no es visible para ti. Ambos casos devuelven el mismo cuerpo. |
curl -sS -X POST "https://api.dailybot.com/v1/plan/boards/00000000-0000-4000-8000-000000000002/archive/" \
-H "Authorization: Bearer $DAILYBOT_TOKEN"dailybot plan board archive 00000000-0000-4000-8000-000000000002 --dry-runProbarlo
Este es un asistente de solo copia — la solicitud no se envía desde tu navegador. Pega el comando en tu terminal para ejecutarlo.
- Scope: `tasks:admin` — escrituras de contenedores. Un miembro no invitado puede llamarlo con una sesión iniciada o una API key personal (una key con scopes de Plan explícitos necesita `tasks:write`, que lo cubre); una key de agente o de la organización recibe `403 insufficient_scope`.
- Límite de solicitudes: 60 escrituras por minuto por actor.
- Requiere una persona: llámalo con una sesión iniciada, un token de usuario del CLI o una API key personal. Una key de agente o de la organización recibe `403 insufficient_scope`.
Restaurar un tablero archivado
Lo inverso de archivar. La clave del tablero nunca se retiró: sigue reservada al archivar y restaurar. Las tareas archivadas en cascada siguen archivadas; restáuralas con POST …/tasks/{task_id}/restore/. Restaurar consume un cupo de creación de tableros (archivar libera uno).
Parámetros de ruta
| Nombre | Tipo | Requerido | Descripción |
|---|---|---|---|
| board_id | string | Requerido | El uuid del tablero. |
Encabezados
| Nombre | Tipo | Requerido | Descripción |
|---|---|---|---|
| Idempotency-Key | string | Opcional | Una clave que generas para esta intención. Una repetición con la misma clave y el mismo cuerpo devuelve la primera respuesta sin un segundo efecto secundario y lleva Idempotency-Replayed: true. Las claves se conservan durante 24 horas. La misma clave con un cuerpo distinto es 409 idempotency_key_payload_mismatch; una repetición mientras la primera llamada sigue en curso recibe 409 idempotency_in_progress durante hasta 120 segundos. |
| X-Dailybot-Agent-Name | string | Opcional | El nombre del agente que ejecutó esta escritura en nombre de la persona. Úsalo en escrituras multipart y sin cuerpo (DELETE, archivar, restaurar); en escrituras JSON envía el campo agent_name del cuerpo, que gana si vienen los dos. Codifica el valor con percent-encoding (UTF-8). Los caracteres de control se eliminan; un valor vacío significa sin agente. Más de 128 caracteres, o un valor que no se puede decodificar, es 400 invalid_agent_attribution (nunca se trunca). Una clave de tipo agente, que no está ligada a una persona, recibe 400 invalid_agent_attribution si lo envía. El sello nunca cambia una respuesta de permisos. Ver Atribución de agente. |
Respuesta
| Nombre | Tipo | Requerido | Descripción |
|---|---|---|---|
| (body) | Board | Requerido | Un objeto Board. |
Errores
| Estado | Cuándo |
|---|---|
| 400 | El nombre del agente no es válido (`invalid_agent_attribution`). |
| 401 | Credencial ausente, vencida o con formato inválido (`credential_absent`, `credential_expired`, `credential_malformed`). |
| 402 | Plan todavía no está habilitado para tu organización (`plan_upgrade_required`), o no hay ningún cupo de tablero libre (`task_boards_limit_reached`). |
| 403 | Autenticado pero sin permiso: falta el scope (`insufficient_scope`, que es también lo que recibe una key de agente o de la organización en una operación que requiere una persona, y lo que recibe una key personal cuando sus scopes de Plan explícitos no cubren el endpoint) o es una cuenta de invitado (`guest_not_allowed`). |
| 404 | No existe o no es visible para ti. Ambos casos devuelven el mismo cuerpo. |
curl -sS -X POST "https://api.dailybot.com/v1/plan/boards/00000000-0000-4000-8000-000000000002/restore/" \
-H "Authorization: Bearer $DAILYBOT_TOKEN"dailybot plan board restore 00000000-0000-4000-8000-000000000002Probarlo
Este es un asistente de solo copia — la solicitud no se envía desde tu navegador. Pega el comando en tu terminal para ejecutarlo.
- Scope: `tasks:admin` — escrituras de contenedores. Un miembro no invitado puede llamarlo con una sesión iniciada o una API key personal (una key con scopes de Plan explícitos necesita `tasks:write`, que lo cubre); una key de agente o de la organización recibe `403 insufficient_scope`.
- Límite de solicitudes: 60 escrituras por minuto por actor.
- Requiere una persona: llámalo con una sesión iniciada, un token de usuario del CLI o una API key personal. Una key de agente o de la organización recibe `403 insufficient_scope`.
Registrar que quien llama abrió un tablero (recent_boards de HomePulse)
Crea o actualiza la marca de tiempo de la última visita de quien llama a este tablero. Los POST repetidos actualizan visited_at y nunca crean filas duplicadas. Requiere una persona: una sesión iniciada o una API key personal (las keys de agente y de la organización se rechazan). La autorización coincide con el acceso de lectura al tablero: los tableros inexistentes y los de otra organización comparten el mismo 404.
Parámetros de ruta
| Nombre | Tipo | Requerido | Descripción |
|---|---|---|---|
| board_id | string | Requerido | El uuid del tablero. |
Encabezados
| Nombre | Tipo | Requerido | Descripción |
|---|---|---|---|
| X-Dailybot-Agent-Name | string | Opcional | El nombre del agente que ejecutó esta escritura en nombre de la persona. Úsalo en escrituras multipart y sin cuerpo (DELETE, archivar, restaurar); en escrituras JSON envía el campo agent_name del cuerpo, que gana si vienen los dos. Codifica el valor con percent-encoding (UTF-8). Los caracteres de control se eliminan; un valor vacío significa sin agente. Más de 128 caracteres, o un valor que no se puede decodificar, es 400 invalid_agent_attribution (nunca se trunca). Una clave de tipo agente, que no está ligada a una persona, recibe 400 invalid_agent_attribution si lo envía. El sello nunca cambia una respuesta de permisos. Ver Atribución de agente. |
Objeto BoardVisit
Respuesta
| Nombre | Tipo | Requerido | Descripción |
|---|---|---|---|
| (body) | BoardVisit | Requerido | Un objeto BoardVisit. |
Errores
| Estado | Cuándo |
|---|---|
| 400 | La validación falló, o no se reconoció un valor de filtro, orden o `include`. El `code` de la respuesta indica cuál. `invalid_agent_attribution` significa que el nombre del agente no es válido. |
| 401 | Credencial ausente, vencida o con formato inválido (`credential_absent`, `credential_expired`, `credential_malformed`). |
| 402 | Plan aún no está habilitado para tu organización (`plan_upgrade_required`). Es lo esperado durante la Beta: escribe a [email protected]. |
| 403 | Autenticado pero sin permiso: falta el scope (`insufficient_scope`, que es también lo que recibe una key de agente o de la organización en una operación que requiere una persona, y lo que recibe una key personal cuando sus scopes de Plan explícitos no cubren el endpoint) o es una cuenta de invitado (`guest_not_allowed`). |
| 404 | No existe o no es visible para ti. Ambos casos devuelven el mismo cuerpo. |
curl -sS -X POST "https://api.dailybot.com/v1/plan/boards/00000000-0000-4000-8000-000000000002/visit/" \
-H "Authorization: Bearer $DAILYBOT_TOKEN"{
"board": "00000000-0000-4000-8000-000000000002",
"visited_at": "2026-09-25T10:14:02Z"
}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.
- Scope: `tasks:write`.
- Límite de solicitudes: 60 escrituras por minuto por actor.
- Requiere una persona: llámalo con una sesión iniciada, un token de usuario del CLI o una API key personal. Una key de agente o de la organización recibe `403 insufficient_scope`.
Listar los estados de un tablero, en orden de columna
Los estados del flujo de trabajo del tablero (sus columnas), ordenados por posición. Cada uno tiene una category (como in_progress) que se mantiene aunque se renombre el estado. Agrega include_archived=true para ver los estados archivados.
Parámetros de ruta
| Nombre | Tipo | Requerido | Descripción |
|---|---|---|---|
| board_id | string | Requerido | El uuid del tablero. |
Parámetros de consulta
| Nombre | Tipo | Requerido | Descripción |
|---|---|---|---|
| include_archived | boolean | Opcional | Incluye las filas archivadas junto con las activas. Es distinto de is_archived, que selecciona un conjunto u otro: include_archived=true es la unión. Las listas devuelven filas activas a menos que lo pidas. |
Respuesta
| Nombre | Tipo | Requerido | Descripción |
|---|---|---|---|
| (body) | array<WorkflowState> | Requerido | Un arreglo JSON de objetos WorkflowState. |
Errores
| Estado | Cuándo |
|---|---|
| 401 | Credencial ausente, vencida o con formato inválido (`credential_absent`, `credential_expired`, `credential_malformed`). |
| 402 | Plan aún no está habilitado para tu organización (`plan_upgrade_required`). Es lo esperado durante la Beta: escribe a [email protected]. |
| 404 | No existe o no es visible para ti. Ambos casos devuelven el mismo cuerpo. |
curl -sS "https://api.dailybot.com/v1/plan/boards/00000000-0000-4000-8000-000000000002/states/" \
-H "X-API-KEY: $DAILYBOT_API_KEY"dailybot plan board states 00000000-0000-4000-8000-000000000002 --include-archived[
{
"uuid": "00000000-0000-4000-8000-000000000003",
"name": "In Progress",
"category": "in_progress",
"position": 2,
"color": "#2563eb",
"is_default": false,
"is_archived": false,
"task_count": 12
}
]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.
- Scope: `tasks:read`.
- Límite de solicitudes: 120 lecturas por minuto por actor.
- Funciona con una sesión iniciada, un token de usuario del CLI, una API key personal, o una key de agente o de la organización. Una key personal ve lo que ve su persona; una key de agente o de la organización actúa como actor del sistema y solo ve los tableros visibles para la organización.
Agregar un estado a un tablero
category es uno de cinco valores fijos y nunca cambia después de crearse; name es libre y se puede renombrar. La categoría es lo que responde "¿esto está terminado?".
position inserta en ese lugar, contando desde 1 entre las columnas activas: la columna que ocupaba esa posición y todas las siguientes se desplazan a la derecha. Una posición más allá del final queda al final.
Parámetros de ruta
| Nombre | Tipo | Requerido | Descripción |
|---|---|---|---|
| board_id | string | Requerido | El uuid del tablero. |
Encabezados
| Nombre | Tipo | Requerido | Descripción |
|---|---|---|---|
| Idempotency-Key | string | Opcional | Una clave que generas para esta intención. Una repetición con la misma clave y el mismo cuerpo devuelve la primera respuesta sin un segundo efecto secundario y lleva Idempotency-Replayed: true. Las claves se conservan durante 24 horas. La misma clave con un cuerpo distinto es 409 idempotency_key_payload_mismatch; una repetición mientras la primera llamada sigue en curso recibe 409 idempotency_in_progress durante hasta 120 segundos. |
| X-Dailybot-Agent-Name | string | Opcional | El nombre del agente que ejecutó esta escritura en nombre de la persona. Úsalo en escrituras multipart y sin cuerpo (DELETE, archivar, restaurar); en escrituras JSON envía el campo agent_name del cuerpo, que gana si vienen los dos. Codifica el valor con percent-encoding (UTF-8). Los caracteres de control se eliminan; un valor vacío significa sin agente. Más de 128 caracteres, o un valor que no se puede decodificar, es 400 invalid_agent_attribution (nunca se trunca). Una clave de tipo agente, que no está ligada a una persona, recibe 400 invalid_agent_attribution si lo envía. El sello nunca cambia una respuesta de permisos. Ver Atribución de agente. |
Cuerpo de la solicitud
| Nombre | Tipo | Requerido | Descripción |
|---|---|---|---|
| name | string | Requerido | Nombre visible. Máx. 48 caracteres. |
| category | enum | Requerido | Una de las cinco categorías fijas. Nunca cambia después de crearse. Uno de backlog, todo, in_progress, done, canceled. |
| position | integer | Opcional | Posición de la columna entre las columnas activas, desde 1, de izquierda a derecha. 0 y 1 significan la primera columna, y un valor más allá del final queda al final. Omítelo para agregar el nuevo estado al final. Mínimo 0. |
| color | string | Opcional | Color de visualización (hex). |
| is_default | boolean | Opcional | Si las tareas nuevas llegan a este estado de forma predeterminada. |
| agent_name | string | Opcional | El nombre del agente que ejecutó esta escritura en nombre de la persona (máx. 128 caracteres, vacío significa sin agente). Tiene prioridad sobre el header X-Dailybot-Agent-Name. Ver Atribución de agente. |
Respuesta
| Nombre | Tipo | Requerido | Descripción |
|---|---|---|---|
| (body) | WorkflowState | Requerido | Un objeto WorkflowState. |
Errores
| Estado | Cuándo |
|---|---|
| 400 | La validación falló, o no se reconoció un valor de filtro, orden o `include`. El `code` de la respuesta indica cuál. `invalid_agent_attribution` significa que el nombre del agente no es válido. |
| 401 | Credencial ausente, vencida o con formato inválido (`credential_absent`, `credential_expired`, `credential_malformed`). |
| 402 | Plan aún no está habilitado para tu organización (`plan_upgrade_required`). Es lo esperado durante la Beta: escribe a [email protected]. |
| 404 | No existe o no es visible para ti. Ambos casos devuelven el mismo cuerpo. |
| 409 | Conflicto. El `code` de la respuesta indica cuál (por ejemplo, `version_conflict`). |
curl -sS -X POST "https://api.dailybot.com/v1/plan/boards/00000000-0000-4000-8000-000000000002/states/" \
-H "Authorization: Bearer $DAILYBOT_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"name": "In review",
"category": "in_progress",
"position": 3
}'dailybot plan board state create 00000000-0000-4000-8000-000000000002 -n "In review" --category in_progress --position 3{
"uuid": "00000000-0000-4000-8000-000000000003",
"name": "In Progress",
"category": "in_progress",
"position": 2,
"color": "#2563eb",
"is_default": false,
"is_archived": false,
"task_count": 12
}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.
- Scope: `tasks:admin` — escrituras de contenedores. Un miembro no invitado puede llamarlo con una sesión iniciada o una API key personal (una key con scopes de Plan explícitos necesita `tasks:write`, que lo cubre); una key de agente o de la organización recibe `403 insufficient_scope`.
- Límite de solicitudes: 60 escrituras por minuto por actor.
- Requiere una persona: llámalo con una sesión iniciada, un token de usuario del CLI o una API key personal. Una key de agente o de la organización recibe `403 insufficient_scope`.
Renombrar, cambiar el color o reordenar un estado
Solo se permiten los campos name, color y position. Los campos desconocidos se rechazan con 400 (nunca se ignoran en silencio). category no puede cambiar después de crearse.
Parámetros de ruta
| Nombre | Tipo | Requerido | Descripción |
|---|---|---|---|
| board_id | string | Requerido | El uuid del tablero. |
| state_id | string | Requerido | El uuid del estado. |
Encabezados
| Nombre | Tipo | Requerido | Descripción |
|---|---|---|---|
| X-Dailybot-Agent-Name | string | Opcional | El nombre del agente que ejecutó esta escritura en nombre de la persona. Úsalo en escrituras multipart y sin cuerpo (DELETE, archivar, restaurar); en escrituras JSON envía el campo agent_name del cuerpo, que gana si vienen los dos. Codifica el valor con percent-encoding (UTF-8). Los caracteres de control se eliminan; un valor vacío significa sin agente. Más de 128 caracteres, o un valor que no se puede decodificar, es 400 invalid_agent_attribution (nunca se trunca). Una clave de tipo agente, que no está ligada a una persona, recibe 400 invalid_agent_attribution si lo envía. El sello nunca cambia una respuesta de permisos. Ver Atribución de agente. |
Cuerpo de la solicitud
| Nombre | Tipo | Requerido | Descripción |
|---|---|---|---|
| name | string | Opcional | Nombre visible. Máx. 48 caracteres. |
| position | integer | Opcional | Posición de la columna entre las columnas activas, desde 1, de izquierda a derecha. 0 y 1 significan la primera columna, y un valor más allá del final queda al final. Mínimo 0. |
| color | string | Opcional | Color de visualización (hex). |
| agent_name | string | Opcional | El nombre del agente que ejecutó esta escritura en nombre de la persona (máx. 128 caracteres, vacío significa sin agente). Tiene prioridad sobre el header X-Dailybot-Agent-Name. Ver Atribución de agente. |
Respuesta
| Nombre | Tipo | Requerido | Descripción |
|---|---|---|---|
| (body) | WorkflowState | Requerido | Un objeto WorkflowState. |
Errores
| Estado | Cuándo |
|---|---|
| 400 | La validación falló, o no se reconoció un valor de filtro, orden o `include`. El `code` de la respuesta indica cuál. `invalid_agent_attribution` significa que el nombre del agente no es válido. |
| 401 | Credencial ausente, vencida o con formato inválido (`credential_absent`, `credential_expired`, `credential_malformed`). |
| 402 | Plan aún no está habilitado para tu organización (`plan_upgrade_required`). Es lo esperado durante la Beta: escribe a [email protected]. |
| 404 | No existe o no es visible para ti. Ambos casos devuelven el mismo cuerpo. |
curl -sS -X PATCH "https://api.dailybot.com/v1/plan/boards/00000000-0000-4000-8000-000000000002/states/00000000-0000-4000-8000-000000000003/" \
-H "Authorization: Bearer $DAILYBOT_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"name": "Code review"
}'dailybot plan board state update 00000000-0000-4000-8000-000000000002 00000000-0000-4000-8000-000000000003 --name "Code review"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.
- Scope: `tasks:admin` — escrituras de contenedores. Un miembro no invitado puede llamarlo con una sesión iniciada o una API key personal (una key con scopes de Plan explícitos necesita `tasks:write`, que lo cubre); una key de agente o de la organización recibe `403 insufficient_scope`.
- Límite de solicitudes: 60 escrituras por minuto por actor.
- Requiere una persona: llámalo con una sesión iniciada, un token de usuario del CLI o una API key personal. Una key de agente o de la organización recibe `403 insufficient_scope`.
Retirar una columna
Se rechaza con 409 state_in_use mientras haya tareas activas en la columna, a menos que el cuerpo indique migrate_to: otro estado activo del mismo tablero que recibe todas las tarjetas en una actualización masiva antes de archivar la columna.
Parámetros de ruta
| Nombre | Tipo | Requerido | Descripción |
|---|---|---|---|
| board_id | string | Requerido | El uuid del tablero. |
| state_id | string | Requerido | El uuid del estado. |
Parámetros de consulta
| Nombre | Tipo | Requerido | Descripción |
|---|---|---|---|
| dry_run | boolean | Opcional | Previsualiza la consecuencia sin ejecutarla. La respuesta tiene la misma forma, {operation, dry_run, reversible, restore_path, consequence, affects}, pero no se escribe nada ni se emite ningún evento. Muestra consequence a una persona antes de actuar. |
Encabezados
| Nombre | Tipo | Requerido | Descripción |
|---|---|---|---|
| X-Dailybot-Agent-Name | string | Opcional | El nombre del agente que ejecutó esta escritura en nombre de la persona. Úsalo en escrituras multipart y sin cuerpo (DELETE, archivar, restaurar); en escrituras JSON envía el campo agent_name del cuerpo, que gana si vienen los dos. Codifica el valor con percent-encoding (UTF-8). Los caracteres de control se eliminan; un valor vacío significa sin agente. Más de 128 caracteres, o un valor que no se puede decodificar, es 400 invalid_agent_attribution (nunca se trunca). Una clave de tipo agente, que no está ligada a una persona, recibe 400 invalid_agent_attribution si lo envía. El sello nunca cambia una respuesta de permisos. Ver Atribución de agente. |
Cuerpo de la solicitud
| Nombre | Tipo | Requerido | Descripción |
|---|---|---|---|
| migrate_to | uuid | Opcional | Otro estado activo del mismo tablero que recibe todas las tareas de la columna antes de archivarla. |
| agent_name | string | Opcional | El nombre del agente que ejecutó esta escritura en nombre de la persona (máx. 128 caracteres, vacío significa sin agente). Tiene prioridad sobre el header X-Dailybot-Agent-Name. Ver Atribución de agente. |
Respuesta
| Nombre | Tipo | Requerido | Descripción |
|---|---|---|---|
| (body) | WorkflowState | DryRunPreview | Requerido | Un objeto WorkflowState. Con ?dry_run=true, un objeto DryRunPreview en su lugar. |
Errores
| Estado | Cuándo |
|---|---|
| 400 | El nombre del agente no es válido (`invalid_agent_attribution`). |
| 401 | Credencial ausente, vencida o con formato inválido (`credential_absent`, `credential_expired`, `credential_malformed`). |
| 402 | Plan aún no está habilitado para tu organización (`plan_upgrade_required`). Es lo esperado durante la Beta: escribe a [email protected]. |
| 404 | No existe o no es visible para ti. Ambos casos devuelven el mismo cuerpo. |
| 409 | Todavía hay tareas activas en la columna (`state_in_use`). Envía `migrate_to` para moverlas primero. |
curl -sS -X POST "https://api.dailybot.com/v1/plan/boards/00000000-0000-4000-8000-000000000002/states/00000000-0000-4000-8000-000000000003/archive/" \
-H "Authorization: Bearer $DAILYBOT_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"migrate_to": "00000000-0000-4000-8000-000000000004"
}'dailybot plan board state archive 00000000-0000-4000-8000-000000000002 00000000-0000-4000-8000-000000000003 --migrate-to 00000000-0000-4000-8000-000000000004 --yesProbarlo
Este es un asistente de solo copia — la solicitud no se envía desde tu navegador. Pega el comando en tu terminal para ejecutarlo.
- Scope: `tasks:admin` — escrituras de contenedores. Un miembro no invitado puede llamarlo con una sesión iniciada o una API key personal (una key con scopes de Plan explícitos necesita `tasks:write`, que lo cubre); una key de agente o de la organización recibe `403 insufficient_scope`.
- Límite de solicitudes: 60 escrituras por minuto por actor.
- Requiere una persona: llámalo con una sesión iniciada, un token de usuario del CLI o una API key personal. Una key de agente o de la organización recibe `403 insufficient_scope`.
Restaurar una columna retirada
Lo inverso de archivar. La columna vuelve después de las columnas activas, y un segundo POST sobre una columna activa es un 200 sin efecto. Léela con GET …/states/?include_archived=true mientras siga retirada.
Parámetros de ruta
| Nombre | Tipo | Requerido | Descripción |
|---|---|---|---|
| board_id | string | Requerido | El uuid del tablero. |
| state_id | string | Requerido | El uuid del estado. |
Encabezados
| Nombre | Tipo | Requerido | Descripción |
|---|---|---|---|
| X-Dailybot-Agent-Name | string | Opcional | El nombre del agente que ejecutó esta escritura en nombre de la persona. Úsalo en escrituras multipart y sin cuerpo (DELETE, archivar, restaurar); en escrituras JSON envía el campo agent_name del cuerpo, que gana si vienen los dos. Codifica el valor con percent-encoding (UTF-8). Los caracteres de control se eliminan; un valor vacío significa sin agente. Más de 128 caracteres, o un valor que no se puede decodificar, es 400 invalid_agent_attribution (nunca se trunca). Una clave de tipo agente, que no está ligada a una persona, recibe 400 invalid_agent_attribution si lo envía. El sello nunca cambia una respuesta de permisos. Ver Atribución de agente. |
Respuesta
| Nombre | Tipo | Requerido | Descripción |
|---|---|---|---|
| (body) | WorkflowState | Requerido | Un objeto WorkflowState. |
Errores
| Estado | Cuándo |
|---|---|
| 400 | El nombre del agente no es válido (`invalid_agent_attribution`). |
| 401 | Credencial ausente, vencida o con formato inválido (`credential_absent`, `credential_expired`, `credential_malformed`). |
| 402 | Plan aún no está habilitado para tu organización (`plan_upgrade_required`). Es lo esperado durante la Beta: escribe a [email protected]. |
| 403 | Autenticado pero sin permiso: falta el scope (`insufficient_scope`, que es también lo que recibe una key de agente o de la organización en una operación que requiere una persona, y lo que recibe una key personal cuando sus scopes de Plan explícitos no cubren el endpoint) o es una cuenta de invitado (`guest_not_allowed`). |
| 404 | No existe o no es visible para ti. Ambos casos devuelven el mismo cuerpo. |
curl -sS -X POST "https://api.dailybot.com/v1/plan/boards/00000000-0000-4000-8000-000000000002/states/00000000-0000-4000-8000-000000000003/restore/" \
-H "Authorization: Bearer $DAILYBOT_TOKEN"dailybot plan board state restore 00000000-0000-4000-8000-000000000002 00000000-0000-4000-8000-000000000003Probarlo
Este es un asistente de solo copia — la solicitud no se envía desde tu navegador. Pega el comando en tu terminal para ejecutarlo.
- Scope: `tasks:admin` — escrituras de contenedores. Un miembro no invitado puede llamarlo con una sesión iniciada o una API key personal (una key con scopes de Plan explícitos necesita `tasks:write`, que lo cubre); una key de agente o de la organización recibe `403 insufficient_scope`.
- Límite de solicitudes: 60 escrituras por minuto por actor.
- Requiere una persona: llámalo con una sesión iniciada, un token de usuario del CLI o una API key personal. Una key de agente o de la organización recibe `403 insufficient_scope`.
Reordenar todas las columnas activas de un tablero en una sola llamada
El cuerpo { "order": [state_uuid, …] } debe incluir cada columna activa del tablero exactamente una vez, en el orden deseado de izquierda a derecha. Las listas parciales, los uuids desconocidos y los duplicados devuelven 400 states_reorder_invalid. Emite state.reordered por cada columna. Para definir una vista por defecto a nivel de tablero (o quitarla), usa PATCH /boards/{board_id}/ con default_view; no existe un endpoint aparte para marcarla por defecto.
Parámetros de ruta
| Nombre | Tipo | Requerido | Descripción |
|---|---|---|---|
| board_id | string | Requerido | El uuid del tablero. |
Encabezados
| Nombre | Tipo | Requerido | Descripción |
|---|---|---|---|
| X-Dailybot-Agent-Name | string | Opcional | El nombre del agente que ejecutó esta escritura en nombre de la persona. Úsalo en escrituras multipart y sin cuerpo (DELETE, archivar, restaurar); en escrituras JSON envía el campo agent_name del cuerpo, que gana si vienen los dos. Codifica el valor con percent-encoding (UTF-8). Los caracteres de control se eliminan; un valor vacío significa sin agente. Más de 128 caracteres, o un valor que no se puede decodificar, es 400 invalid_agent_attribution (nunca se trunca). Una clave de tipo agente, que no está ligada a una persona, recibe 400 invalid_agent_attribution si lo envía. El sello nunca cambia una respuesta de permisos. Ver Atribución de agente. |
Cuerpo de la solicitud
| Nombre | Tipo | Requerido | Descripción |
|---|---|---|---|
| order | array | Requerido | El uuid de cada columna activa exactamente una vez, de izquierda a derecha. Elementos: uuid. |
| agent_name | string | Opcional | El nombre del agente que ejecutó esta escritura en nombre de la persona (máx. 128 caracteres, vacío significa sin agente). Tiene prioridad sobre el header X-Dailybot-Agent-Name. Ver Atribución de agente. |
Respuesta
| Nombre | Tipo | Requerido | Descripción |
|---|---|---|---|
| (body) | array<WorkflowState> | Requerido | Un arreglo JSON de objetos WorkflowState. |
Errores
| Estado | Cuándo |
|---|---|
| 400 | La validación falló, o no se reconoció un valor de filtro, orden o `include`. El `code` de la respuesta indica cuál. `invalid_agent_attribution` significa que el nombre del agente no es válido. |
| 401 | Credencial ausente, vencida o con formato inválido (`credential_absent`, `credential_expired`, `credential_malformed`). |
| 402 | Plan aún no está habilitado para tu organización (`plan_upgrade_required`). Es lo esperado durante la Beta: escribe a [email protected]. |
| 404 | No existe o no es visible para ti. Ambos casos devuelven el mismo cuerpo. |
curl -sS -X POST "https://api.dailybot.com/v1/plan/boards/00000000-0000-4000-8000-000000000002/states/reorder/" \
-H "Authorization: Bearer $DAILYBOT_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"order": [
"00000000-0000-4000-8000-000000000003",
"00000000-0000-4000-8000-000000000004"
]
}'dailybot plan board state reorder 00000000-0000-4000-8000-000000000002 00000000-0000-4000-8000-000000000003 00000000-0000-4000-8000-000000000004Probarlo
Este es un asistente de solo copia — la solicitud no se envía desde tu navegador. Pega el comando en tu terminal para ejecutarlo.
- Scope: `tasks:admin` — escrituras de contenedores. Un miembro no invitado puede llamarlo con una sesión iniciada o una API key personal (una key con scopes de Plan explícitos necesita `tasks:write`, que lo cubre); una key de agente o de la organización recibe `403 insufficient_scope`.
- Límite de solicitudes: 60 escrituras por minuto por actor.
- Requiere una persona: llámalo con una sesión iniciada, un token de usuario del CLI o una API key personal. Una key de agente o de la organización recibe `403 insufficient_scope`.
El tablero completo, con sus estados y sus tareas, en un solo viaje de ida y vuelta
Una llamada renderiza un tablero: una entrada en groups por columna, en orden de columnas, cada una con sus primeras tareas en orden de rank, el task_count real de la columna y has_more. Pagina el resto de una columna con GET /v1/plan/tasks/?board=…&state=….
Guarda delta_cursor y cambia al feed de cambios para cada lectura posterior. Responde If-None-Match con 304. …/snapshot/ es un alias con la misma respuesta. Los parámetros de consulta desconocidos y los valores de filtro no válidos devuelven 400 invalid_filter_value.
Parámetros de ruta
| Nombre | Tipo | Requerido | Descripción |
|---|---|---|---|
| board_id | string | Requerido | El uuid del tablero. |
Parámetros de consulta
Filtros
| Nombre | Tipo | Requerido | Descripción |
|---|---|---|---|
| group_by | string | Opcional | Agrupa la instantánea por otra dimensión en lugar del estado. La agrupación existe solo en la instantánea: agrupar una lista paginada bifurcaría su envoltura. |
| tasks_per_state | integer | Opcional | Cuántas tareas incluir por columna. Máximo 50, más ajustado que el habitual de 100 porque esta lectura incluye las etiquetas de cada tarjeta. |
| owner | array | Opcional | Un uuid de usuario, me o unowned. Repetible; los valores se combinan con OR, incluidos los tokens: owner=me&owner=unowned devuelve tus tareas y las que no tienen responsable. me con una key de agente o de la organización es 400 actor_required. |
| label | array | Opcional | uuids de etiquetas: solo v4, como máximo 50, igual que el límite existente del filtro de etiquetas compartido. Un valor que no es v4 es 400 invalid_label_filter. |
| priority | array | Opcional | 1=urgente, 2=alta, 3=media, 4=baja, 5=ninguna. Repetible. |
| blocked | boolean | Opcional | Derivado de las relaciones, no de un estado. Es la consulta que el producto responde con un vínculo en lugar de un estado.
blocked=true significa un bloqueador activo: una relación blocks cuya tarea de origen no está archivada ni en una categoría terminal. Un bloqueador que a su vez está done o canceled no bloquea nada y no coincide.
Independiente del ciclo de vida. Una tarea terminada puede seguir teniendo un bloqueador activo, así que blocked=true por sí solo también devuelve filas terminales. El trabajo sobre el que una persona puede actuar es blocked=true&state=open: esa combinación es la que reproduce el mosaico blocked de GET /v1/plan/pulse/. |
| search | string | Opcional | Coincide con el título y la clave. Más de 256 caracteres es 400 search_query_too_long, no se trunca. q es un alias. |
Fechas
| Nombre | Tipo | Requerido | Descripción |
|---|---|---|---|
| due_before | string | Opcional | Inclusivo. Por sí solo, significa vencido o con vencimiento hasta esa fecha; no excluye el trabajo que ya está terminado.
Vencido se escribe due_before=<today>&state=open. Esa combinación es la forma admitida, es la que reproduce el mosaico overdue de GET /v1/plan/pulse/, y deliberadamente no existe el atajo state=overdue: state es una dimensión del ciclo de vida y vencido es una dimensión de fecha, así que una única forma evita que ambas se desalineen. state=overdue responde 400 invalid_filter_value, lo que dice algo sobre esa forma de escribirlo y no sobre la capacidad. |
| due_after | string | Opcional | Inclusivo. |
Encabezados
| Nombre | Tipo | Requerido | Descripción |
|---|---|---|---|
| If-None-Match | string | Opcional | El ETag de tu lectura anterior. Si coincide, responde 304. |
Objeto BoardSnapshot
| Nombre | Tipo | Requerido | Descripción |
|---|---|---|---|
| board | Board | Requerido | El tablero. Ver Board. |
| generated_at | date-time | Requerido | Cuándo se calculó la respuesta. |
| delta_cursor | date-time | Requerido | Pásalo como updated_since al feed de cambios. |
| group_by | string | Opcional | La dimensión de agrupación. |
| groups | array | Requerido | Una entrada por columna (o grupo), en orden. Siempre presentes: key, task_count, has_more, tasks. Elementos: {key: string, name: string, category: string|null, position: integer|null, color: string|null, task_count: integer, has_more: boolean, tasks: array}. |
| viewer | object | Opcional | Lo que puedes hacer con esta fila. Forma: {is_member, can_see_content, can_manage} (all required). |
Respuesta
| Nombre | Tipo | Requerido | Descripción |
|---|---|---|---|
| (body) | BoardSnapshot | Requerido | Un objeto BoardSnapshot. |
Errores
| Estado | Cuándo |
|---|---|
| 304 | Sin cambios: el ETag que enviaste en `If-None-Match` sigue coincidiendo. |
| 401 | Credencial ausente, vencida o con formato inválido (`credential_absent`, `credential_expired`, `credential_malformed`). |
| 402 | Plan aún no está habilitado para tu organización (`plan_upgrade_required`). Es lo esperado durante la Beta: escribe a [email protected]. |
| 404 | No existe o no es visible para ti. Ambos casos devuelven el mismo cuerpo. |
curl -sS "https://api.dailybot.com/v1/plan/boards/00000000-0000-4000-8000-000000000002/board/?tasks_per_state=25" \
-H "X-API-KEY: $DAILYBOT_API_KEY"dailybot plan board snapshot 00000000-0000-4000-8000-000000000002 --json{
"board": {
"uuid": "00000000-0000-4000-8000-000000000100",
"key": "ENG",
"name": "Engineering",
"visibility": "org",
"estimate_scale": "fibonacci",
"project": {
"uuid": "00000000-0000-4000-8000-000000000101",
"name": "Platform"
}
},
"generated_at": "2026-08-29T10:14:02.113954Z",
"delta_cursor": "2026-08-29T10:14:02.113954Z",
"group_by": "state",
"groups": [
{
"key": "00000000-0000-4000-8000-000000000102",
"name": "In Progress",
"category": "in_progress",
"position": 2,
"color": "#f59e0b",
"task_count": 137,
"has_more": true,
"tasks": [
{
"uuid": "00000000-0000-4000-8000-000000000103",
"key": "ENG-142",
"title": "Ship the delta feed",
"state": {
"uuid": "00000000-0000-4000-8000-000000000102",
"name": "In Progress",
"category": "in_progress"
},
"priority": 2,
"estimate": 3,
"rank": "aU",
"version": 7,
"open_blocker_count": 1,
"participant_count": 3,
"owner": {
"uuid": "00000000-0000-4000-8000-000000000104",
"name": "Ada L."
},
"executor": null,
"due_date": "2026-09-04",
"labels": [
{
"uuid": "00000000-0000-4000-8000-000000000105",
"name": "backend",
"color": "#2563eb"
}
],
"is_archived": false,
"updated_at": "2026-08-29T10:12:44.201113Z"
}
]
}
]
}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.
- Scope: `tasks:read`.
- Límite de solicitudes: 120 lecturas por minuto por actor.
- Funciona con una sesión iniciada, un token de usuario del CLI, una API key personal, o una key de agente o de la organización. Una key personal ve lo que ve su persona; una key de agente o de la organización actúa como actor del sistema y solo ve los tableros visibles para la organización.
Qué cambió en este tablero desde una marca de tiempo. NO es paginación
Un feed de cambios, no una página: sin count, next ni previous. Envía el cursor de tu respuesta anterior (o el delta_cursor de la instantánea) tal cual como updated_since; nunca lo calcules con tu propio reloj.
La entrega es al menos una vez, así que una fila escrita en el mismo instante que tu cursor se envía de nuevo en lugar de perderse. Las entradas se compactan a una por tarea (gana la fila actual). states es null a menos que se haya creado, renombrado, reordenado o archivado una columna; cuando viene definido, reemplaza toda tu lista de columnas.
Consulta de nuevo después de poll_after_seconds (15 s, duplicándose hasta 120 s mientras el tablero está inactivo, y se reinicia con cualquier cambio). Pausa mientras la página está oculta y actualiza cuando vuelve a ser visible. Si truncated es true, consulta de nuevo de inmediato. Los cursores de más de 7 días devuelven 400 delta_window_expired: vuelve a leer la instantánea. El polling es el transporte de v1.
Parámetros de ruta
| Nombre | Tipo | Requerido | Descripción |
|---|---|---|---|
| board_id | string | Requerido | El uuid del tablero. |
Parámetros de consulta
| Nombre | Tipo | Requerido | Descripción |
|---|---|---|---|
| updated_since | string | Requerido | El cursor de tu consulta de cambios anterior, o el delta_cursor de una instantánea del tablero. Si tiene más de 7 días se rechaza con delta_window_expired. since se acepta como alias obsoleto para clientes antiguos; envía updated_since. |
| limit | integer | Opcional | Máximo de entradas en changed. |
Objeto BoardDelta
| Nombre | Tipo | Requerido | Descripción |
|---|---|---|---|
| since | date-time | Requerido | El updated_since que enviaste. |
| cursor | date-time | Requerido | Envíalo como updated_since en tu próxima consulta. |
| changed | array<Task> | Requerido | Tareas que cambiaron, una entrada por tarea. Ver Task. |
| removed | array | Requerido | Tareas que salieron del tablero, con un reason como archived. Elementos: {uuid, key, reason}. |
| states | array | null | Opcional | Los estados del tablero, en orden de columnas. |
| truncated | boolean | Requerido | true cuando hay más cambios esperando: consulta de nuevo de inmediato. |
| poll_after_seconds | integer | Requerido | Cuándo consultar de nuevo, sugerido por el servidor (15 a 120 segundos). Es una sugerencia, no se impone. De 15 a 120. |
Objeto Task
| Nombre | Tipo | Requerido | Descripción |
|---|---|---|---|
| uuid | uuid | Requerido | Identificador público estable. |
| key | string | Requerido | Clave legible KEY-n, por ejemplo ENG-142. Las claves retiradas siguen resolviéndose. |
| title | string | Requerido | El título de la tarea. Máx. 255 caracteres. |
| description | string | null | Opcional | Descripción libre. |
| board | uuid | Opcional | El tablero. |
| state | WorkflowState | Requerido | El estado de la tarea (su columna). Ver WorkflowState. |
| priority | integer | Opcional | 1 urgente, 2 alta, 3 media, 4 baja, 5 ninguna. De 1 a 5. |
| estimate | integer | null | Opcional | Estimación en la escala del tablero. |
| owner | UserRef | null | Opcional | La persona responsable de la tarea. Ver UserRef. |
| executor | ActorRef | null | Opcional | El actor que hace el trabajo, cuando es distinto del responsable (por ejemplo, un agente). Ver ActorRef. |
| executors | object[] | Opcional | Cada agente que ejecutó una escritura en esta tarea en nombre de alguien, del más reciente al más antiguo: {uuid, name, username, avatar, first_at, last_at}. Es distinto de executor, que sigue siendo quien tiene la pelota ahora. Solo en el detalle de la tarea y en las respuestas de escritura de una sola tarea; no viene en las filas de listas. |
| participant_count | integer | Opcional | Número de participantes. |
| start_date | date | null | Opcional | Fecha de inicio planificada. |
| due_date | date | null | Opcional | Fecha de vencimiento. |
| milestone | null | {uuid, name, date} | Opcional | El hito al que cuenta esta tarea. Todos los campos están siempre presentes. |
| parent_task | null | {uuid, key, title} | Opcional | La tarea padre, para una subtarea. Solo un nivel de anidación. Todos los campos están siempre presentes. |
| subtask_count | integer | Opcional | Número de subtareas. |
| subtask_done_count | integer | Opcional | Número de subtareas terminadas. |
| attachment_count | integer | Opcional | Número de adjuntos. |
| open_blocker_count | integer | Opcional | Número de bloqueos activos. |
| labels | array<Label> | Opcional | Etiquetas de la organización en la tarea. Ver Label. |
| rank | string | null | Opcional | Orden opaco dentro de la columna. Nunca lo calcules: mueve con after / before. |
| blocked | boolean | Opcional | Tareas con un bloqueo activo. |
| blocked_since | date-time | null | Opcional | Cuándo se bloqueó la tarea. |
| completed_at | date-time | null | Opcional | Cuándo se completó, o null. |
| is_archived | boolean | Requerido | Si la fila está archivada. Archivar es la forma de eliminar: las filas archivadas siguen siendo legibles y se pueden restaurar. |
| subscribed | boolean | Opcional | Si observas esta tarea. |
| version | integer | Requerido | Se incrementa en cada escritura. Devuélvelo como If-Match para rechazar una actualización desactualizada. |
| created_by | ActorRef | null | Opcional | Quién creó la fila. Ver ActorRef. |
| created_at | date-time | Opcional | Cuándo se creó la fila. |
| updated_at | date-time | Opcional | Cuándo cambió la fila por última vez. |
Objeto ActorRef
Objeto Label
Respuesta
| Nombre | Tipo | Requerido | Descripción |
|---|---|---|---|
| (body) | BoardDelta | Requerido | Un objeto BoardDelta. |
Errores
| Estado | Cuándo |
|---|---|
| 400 | El cursor tiene más de 7 días (`delta_window_expired`): vuelve a leer la instantánea del tablero. También se devuelve para un `updated_since` mal formado. |
| 401 | Credencial ausente, vencida o con formato inválido (`credential_absent`, `credential_expired`, `credential_malformed`). |
| 402 | Plan aún no está habilitado para tu organización (`plan_upgrade_required`). Es lo esperado durante la Beta: escribe a [email protected]. |
| 404 | No existe o no es visible para ti. Ambos casos devuelven el mismo cuerpo. |
curl -sS "https://api.dailybot.com/v1/plan/boards/00000000-0000-4000-8000-000000000002/delta/?updated_since=2026-09-25T10:14:02.113954Z" \
-H "X-API-KEY: $DAILYBOT_API_KEY"dailybot plan tasks changes 00000000-0000-4000-8000-000000000002 --updated-since 2026-09-25T10:14:02.113954Z --json{
"since": "2026-08-29T10:14:02.113954Z",
"cursor": "2026-08-29T10:19:44.902311Z",
"changed": [
{
"uuid": "00000000-0000-4000-8000-000000000100",
"key": "ENG-142",
"title": "Ship the delta feed",
"state": {
"uuid": "00000000-0000-4000-8000-000000000101",
"name": "Done",
"category": "done"
},
"priority": 2,
"rank": "b0",
"version": 9,
"is_archived": false,
"updated_at": "2026-08-29T10:19:44.902311Z"
}
],
"removed": [
{
"uuid": "00000000-0000-4000-8000-000000000102",
"key": "ENG-77",
"reason": "archived"
}
],
"states": null,
"truncated": false,
"poll_after_seconds": 15
}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.
- Scope: `tasks:read`.
- Límite de solicitudes: 240 consultas al feed de cambios por minuto por actor.
- Funciona con una sesión iniciada, un token de usuario del CLI, una API key personal, o una key de agente o de la organización. Una key personal ve lo que ve su persona; una key de agente o de la organización actúa como actor del sistema y solo ve los tableros visibles para la organización.
Las vistas guardadas de quien llama para este tablero
Tus vistas guardadas de este tablero. Las vistas son personales. Requiere una persona: las keys de agente y de la organización se rechazan; una API key personal funciona.
Parámetros de ruta
| Nombre | Tipo | Requerido | Descripción |
|---|---|---|---|
| board_id | string | Requerido | El uuid del tablero. |
Respuesta
| Nombre | Tipo | Requerido | Descripción |
|---|---|---|---|
| count | integer | Requerido | Número total de filas. |
| next | uri | Requerido | URL de la página siguiente, o null. |
| previous | uri | Requerido | URL de la página anterior, o null. |
| results | array<SavedView> | Requerido | Las filas de esta página. Ver SavedView. |
Errores
| Estado | Cuándo |
|---|---|
| 400 | La validación falló, o no se reconoció un valor de filtro, orden o `include`. El `code` de la respuesta indica cuál. |
| 401 | Credencial ausente, vencida o con formato inválido (`credential_absent`, `credential_expired`, `credential_malformed`). |
| 402 | Plan aún no está habilitado para tu organización (`plan_upgrade_required`). Es lo esperado durante la Beta: escribe a [email protected]. |
| 403 | Autenticado pero sin permiso: falta el scope (`insufficient_scope`, que es también lo que recibe una key de agente o de la organización en una operación que requiere una persona, y lo que recibe una key personal cuando sus scopes de Plan explícitos no cubren el endpoint) o es una cuenta de invitado (`guest_not_allowed`). |
curl -sS "https://api.dailybot.com/v1/plan/boards/00000000-0000-4000-8000-000000000002/views/" \
-H "Authorization: Bearer $DAILYBOT_TOKEN"dailybot plan board views 00000000-0000-4000-8000-000000000002 --etag{
"count": 1,
"next": null,
"previous": null,
"results": [
{
"name": "My open work",
"view_mode": "list",
"group_by": "state",
"sort": "-updated_at",
"filters": {},
"schema_version": 1,
"visibility": "personal",
"collapsed": {},
"columns": {}
}
]
}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.
- Scope: `tasks:read`.
- Límite de solicitudes: 120 lecturas por minuto por actor.
- Requiere una persona: llámalo con una sesión iniciada, un token de usuario del CLI o una API key personal. Una key de agente o de la organización recibe `403 insufficient_scope`.
Reemplazar las vistas guardadas de quien llama para este tablero
Reemplaza todo tu arreglo de vistas guardadas, por eso If-Match es obligatorio: sin él, dos guardados simultáneos descartarían en silencio la vista del otro.
Parámetros de ruta
| Nombre | Tipo | Requerido | Descripción |
|---|---|---|---|
| board_id | string | Requerido | El uuid del tablero. |
Encabezados
| Nombre | Tipo | Requerido | Descripción |
|---|---|---|---|
| If-Match | string | Requerido | El ETag que recibiste de GET .../views/, entre comillas. Obligatorio, porque este PUT reemplaza todo el arreglo: sin una precondición, dos guardados simultáneos descartan en silencio la vista del otro. Un validador desactualizado es 412 precondition_failed; uno ausente es 428 precondition_required. |
| X-Dailybot-Agent-Name | string | Opcional | El nombre del agente que ejecutó esta escritura en nombre de la persona. Úsalo en escrituras multipart y sin cuerpo (DELETE, archivar, restaurar); en escrituras JSON envía el campo agent_name del cuerpo, que gana si vienen los dos. Codifica el valor con percent-encoding (UTF-8). Los caracteres de control se eliminan; un valor vacío significa sin agente. Más de 128 caracteres, o un valor que no se puede decodificar, es 400 invalid_agent_attribution (nunca se trunca). Una clave de tipo agente, que no está ligada a una persona, recibe 400 invalid_agent_attribution si lo envía. El sello nunca cambia una respuesta de permisos. Ver Atribución de agente. |
Respuesta
| Nombre | Tipo | Requerido | Descripción |
|---|---|---|---|
| (body) | array<SavedView> | Requerido | Un arreglo JSON de objetos SavedView. |
Errores
| Estado | Cuándo |
|---|---|
| 400 | La validación falló, o no se reconoció un valor de filtro, orden o `include`. El `code` de la respuesta indica cuál. `invalid_agent_attribution` significa que el nombre del agente no es válido. |
| 401 | Credencial ausente, vencida o con formato inválido (`credential_absent`, `credential_expired`, `credential_malformed`). |
| 402 | Plan aún no está habilitado para tu organización (`plan_upgrade_required`). Es lo esperado durante la Beta: escribe a [email protected]. |
| 403 | Autenticado pero sin permiso: falta el scope (`insufficient_scope`, que es también lo que recibe una key de agente o de la organización en una operación que requiere una persona, y lo que recibe una key personal cuando sus scopes de Plan explícitos no cubren el endpoint) o es una cuenta de invitado (`guest_not_allowed`). |
| 404 | No existe o no es visible para ti. Ambos casos devuelven el mismo cuerpo. |
| 412 | El validador `If-Match` está desactualizado (`precondition_failed`). Vuelve a leer e inténtalo de nuevo. |
| 428 | `If-Match` es obligatorio (`precondition_required`). |
curl -sS -X PUT "https://api.dailybot.com/v1/plan/boards/00000000-0000-4000-8000-000000000002/views/" \
-H "Authorization: Bearer $DAILYBOT_TOKEN" \
-H "If-Match: $VIEWS_ETAG" \
-H "Content-Type: application/json" \
-d '[
{
"name": "My open work",
"view_mode": "board",
"group_by": "state",
"sort": "-updated_at",
"filters": {
"owner": [
"me"
],
"state": [
"open"
]
}
}
]'dailybot plan board view save 00000000-0000-4000-8000-000000000002 -f views.json --fetch-etag[
{
"name": "My open work",
"view_mode": "list",
"group_by": "state",
"sort": "-updated_at",
"filters": {},
"schema_version": 1,
"visibility": "personal",
"collapsed": {},
"columns": {}
}
]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.
- Scope: `tasks:write`.
- Límite de solicitudes: 60 escrituras por minuto por actor.
- Requiere una persona: llámalo con una sesión iniciada, un token de usuario del CLI o una API key personal. Una key de agente o de la organización recibe `403 insufficient_scope`.
Buscar personas que se pueden mencionar en un tablero
La lista para los selectores de responsable y participantes, con búsqueda por q (nombre, handle o id externo, nunca una dirección de correo completa). No uses la lista de miembros para los selectores: solo muestra permisos explícitos y suele estar vacía en tableros visibles para toda la organización.
Las personas que no pueden ver el tablero nunca aparecen, aunque coincidan con q, igual que la regla que las rechaza como responsables o participantes (participant_cannot_access_board). limit (25 por defecto) y offset recorren toda la lista en un orden estable.
Las filas son {uuid, name, handle, avatar_url, has_photo, kind}, sin correo. avatar_url y has_photo significan lo mismo que en el responsable de una tarea: cuando has_photo es false, muestra las iniciales; en una fila agent son null y false. Identifica los chips de mención por uuid, nunca por handle: handle no es único dentro de una organización, así que muestra name para distinguir. kinds=agent lista los agentes del espacio de trabajo, pero todavía no se puede mencionar a un agente; no construyas una mención a partir de una fila agent.
Parámetros de ruta
| Nombre | Tipo | Requerido | Descripción |
|---|---|---|---|
| board_id | string | Requerido | El uuid del tablero. |
Parámetros de consulta
| Nombre | Tipo | Requerido | Descripción |
|---|---|---|---|
| q | string | Opcional | Coincide con el nombre, el handle o un id externo, nunca con una dirección de correo completa. |
| limit | integer | Opcional | Tamaño de página. Se ajusta al máximo que devuelve la respuesta; los valores inválidos se ignoran en lugar de rechazarse, porque es un control de autocompletado y un 400 aquí rompería el selector por una tecla accidental. |
| offset | integer | Opcional | Filas que se omiten, sobre el orden determinista full_name, id, para que un límite de página no pueda omitir ni repetir a nadie. |
| kinds | string | Opcional | user, agent separados por comas. Si se omite, solo usuarios, así que quien llama sin pedir agentes ve exactamente lo mismo que antes. Un token no reconocido se descarta, no se rechaza. |
Objeto MentionableList
| Nombre | Tipo | Requerido | Descripción |
|---|---|---|---|
| limit | integer | Requerido | Tamaño de página aplicado. |
| results | array<Mentionable> | Requerido | Las filas de esta página. Ver Mentionable. |
Objeto Mentionable
| Nombre | Tipo | Requerido | Descripción |
|---|---|---|---|
| uuid | uuid | Requerido | El uuid de la persona. Identifica los chips de mención con él. |
| name | string | Requerido | Nombre visible. Muéstralo para distinguir a personas con el mismo handle. |
| handle | string | null | Requerido | Handle, si la persona tiene uno. No es único dentro de una organización. |
| avatar_url | string | null | Requerido | URL de la imagen de avatar, igual que en el responsable de una tarea. null en una fila de agente. |
| has_photo | boolean | Requerido | false significa que no hay foto: muestra las iniciales. Siempre false en una fila de agente. |
| kind | enum | Requerido | Si la fila es una persona o un agente. Uno de user, agent. |
Respuesta
| Nombre | Tipo | Requerido | Descripción |
|---|---|---|---|
| (body) | MentionableList | Requerido | Un objeto MentionableList. |
Errores
| Estado | Cuándo |
|---|---|
| 401 | Credencial ausente, vencida o con formato inválido (`credential_absent`, `credential_expired`, `credential_malformed`). |
| 402 | Plan aún no está habilitado para tu organización (`plan_upgrade_required`). Es lo esperado durante la Beta: escribe a [email protected]. |
| 403 | Autenticado pero sin permiso: falta el scope (`insufficient_scope`, que es también lo que recibe una key de agente o de la organización en una operación que requiere una persona, y lo que recibe una key personal cuando sus scopes de Plan explícitos no cubren el endpoint) o es una cuenta de invitado (`guest_not_allowed`). |
| 404 | No existe o no es visible para ti. Ambos casos devuelven el mismo cuerpo. |
curl -sS "https://api.dailybot.com/v1/plan/boards/00000000-0000-4000-8000-000000000002/mentionables/" \
-H "Authorization: Bearer $DAILYBOT_TOKEN"dailybot plan board mentionables 00000000-0000-4000-8000-000000000002 -q ada{
"limit": 25,
"results": [
{
"uuid": "00000000-0000-4000-8000-00000000000c",
"name": "Ada L.",
"handle": "ada",
"avatar_url": "https://example.com/avatars/ada.png",
"has_photo": true,
"kind": "user"
},
{
"uuid": "00000000-0000-4000-8000-000000000012",
"name": "Grace H.",
"handle": null,
"avatar_url": null,
"has_photo": false,
"kind": "user"
}
]
}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.
- Scope: `tasks:read`.
- Límite de solicitudes: 120 lecturas por minuto por actor.
- Requiere una persona: llámalo con una sesión iniciada, un token de usuario del CLI o una API key personal. Una key de agente o de la organización recibe `403 insufficient_scope`.
Miembros de un tablero
Solo los permisos de membresía explícitos, nunca la lista completa de la organización, por lo que los tableros visibles para la organización suelen devolver una lista vacía. Úsalo para gestionar quién puede ver un tablero solo para miembros; para los selectores usa …/mentionables/. Un administrador de la organización puede leer esta lista sin obtener visibilidad de las tareas del tablero.
Parámetros de ruta
| Nombre | Tipo | Requerido | Descripción |
|---|---|---|---|
| board_id | string | Requerido | El uuid del tablero. |
Parámetros de consulta
| Nombre | Tipo | Requerido | Descripción |
|---|---|---|---|
| page | integer | Opcional | Número de página, empezando en 1. |
| page_size | integer | Opcional | Filas por página. 50 por defecto, máximo 100. Los valores fuera de rango se ajustan, nunca se rechazan: pedir 500 devuelve 100. |
Objeto BoardMember
| Nombre | Tipo | Requerido | Descripción |
|---|---|---|---|
| subject_type | enum | Requerido | Uno de user, team. |
| user_uuid | uuid | null | Opcional | El uuid de usuario de la persona. |
| uuid | uuid | null | Opcional | Identificador público estable. |
| full_name | string | Opcional | — |
| name | string | Opcional | Nombre visible. |
| role | enum | null | Opcional | Rol del participante. Uno de admin, member, guest. |
| team_uuid | uuid | null | Opcional | El uuid de un equipo, en lugar de user_uuid. Crea un único permiso de equipo vivo: quien se una al equipo después queda dentro y quien salga queda fuera. |
| team_name | string | Opcional | — |
| added_at | date-time | Requerido | — |
| added_by_uuid | uuid | null | Opcional | — |
Respuesta
| Nombre | Tipo | Requerido | Descripción |
|---|---|---|---|
| count | integer | Requerido | Número total de filas. |
| next | uri | Requerido | URL de la página siguiente, o null. |
| previous | uri | Requerido | URL de la página anterior, o null. |
| results | array<BoardMember> | Requerido | Las filas de esta página. Ver BoardMember. |
Errores
| Estado | Cuándo |
|---|---|
| 401 | Credencial ausente, vencida o con formato inválido (`credential_absent`, `credential_expired`, `credential_malformed`). |
| 402 | Plan aún no está habilitado para tu organización (`plan_upgrade_required`). Es lo esperado durante la Beta: escribe a [email protected]. |
| 404 | No existe o no es visible para ti. Ambos casos devuelven el mismo cuerpo. |
curl -sS "https://api.dailybot.com/v1/plan/boards/00000000-0000-4000-8000-000000000002/members/" \
-H "X-API-KEY: $DAILYBOT_API_KEY"dailybot plan board members 00000000-0000-4000-8000-000000000002{
"count": 1,
"next": null,
"previous": null,
"results": [
{
"subject_type": "user",
"user_uuid": "00000000-0000-4000-8000-00000000000c",
"uuid": "00000000-0000-4000-8000-00000000000c",
"full_name": "Ada L.",
"name": "Ada L.",
"role": "admin",
"team_uuid": null,
"team_name": "example",
"added_at": "2026-09-25T10:14:02Z",
"added_by_uuid": null
}
]
}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.
- Scope: `tasks:read`.
- Límite de solicitudes: 120 lecturas por minuto por actor.
- Funciona con una sesión iniciada, un token de usuario del CLI, una API key personal, o una key de agente o de la organización. Una key personal ve lo que ve su persona; una key de agente o de la organización actúa como actor del sistema y solo ve los tableros visibles para la organización.
Agregar un miembro a un tablero
La forma deliberada y visible de dar a una persona (user_uuid) o a un equipo (team_uuid) acceso a un tablero solo para miembros: envía exactamente uno de los dos; ambos o ninguno es 400 invalid_filter_value. Un permiso de equipo es vivo: quien se una al equipo después queda dentro y quien salga queda fuera. Escribe un evento board.member_added que los miembros del tablero pueden ver. Agregar a un miembro existente devuelve 200 con la fila existente. No hay roles a nivel de tablero. Todo miembro no invitado puede llamarlo (con una sesión iniciada o una API key personal); una key de agente o de la organización recibe 403 insufficient_scope.
Parámetros de ruta
| Nombre | Tipo | Requerido | Descripción |
|---|---|---|---|
| board_id | string | Requerido | El uuid del tablero. |
Encabezados
| Nombre | Tipo | Requerido | Descripción |
|---|---|---|---|
| Idempotency-Key | string | Opcional | Una clave que generas para esta intención. Una repetición con la misma clave y el mismo cuerpo devuelve la primera respuesta sin un segundo efecto secundario y lleva Idempotency-Replayed: true. Las claves se conservan durante 24 horas. La misma clave con un cuerpo distinto es 409 idempotency_key_payload_mismatch; una repetición mientras la primera llamada sigue en curso recibe 409 idempotency_in_progress durante hasta 120 segundos. |
| X-Dailybot-Agent-Name | string | Opcional | El nombre del agente que ejecutó esta escritura en nombre de la persona. Úsalo en escrituras multipart y sin cuerpo (DELETE, archivar, restaurar); en escrituras JSON envía el campo agent_name del cuerpo, que gana si vienen los dos. Codifica el valor con percent-encoding (UTF-8). Los caracteres de control se eliminan; un valor vacío significa sin agente. Más de 128 caracteres, o un valor que no se puede decodificar, es 400 invalid_agent_attribution (nunca se trunca). Una clave de tipo agente, que no está ligada a una persona, recibe 400 invalid_agent_attribution si lo envía. El sello nunca cambia una respuesta de permisos. Ver Atribución de agente. |
Cuerpo de la solicitud
| Nombre | Tipo | Requerido | Descripción |
|---|---|---|---|
| user_uuid | uuid | Opcional | El uuid de usuario de la persona. |
| team_uuid | uuid | Opcional | El uuid de un equipo, en lugar de user_uuid. Crea un único permiso de equipo vivo: quien se una al equipo después queda dentro y quien salga queda fuera. |
| agent_name | string | Opcional | El nombre del agente que ejecutó esta escritura en nombre de la persona (máx. 128 caracteres, vacío significa sin agente). Tiene prioridad sobre el header X-Dailybot-Agent-Name. Ver Atribución de agente. |
Respuesta
| Nombre | Tipo | Requerido | Descripción |
|---|---|---|---|
| (body) | BoardMember | Requerido | Un objeto BoardMember. |
Errores
| Estado | Cuándo |
|---|---|
| 400 | Envía exactamente uno de `user_uuid` y `team_uuid`; ambos o ninguno es `invalid_filter_value`. `invalid_agent_attribution` significa que el nombre del agente no es válido. |
| 401 | Credencial ausente, vencida o con formato inválido (`credential_absent`, `credential_expired`, `credential_malformed`). |
| 402 | Plan aún no está habilitado para tu organización (`plan_upgrade_required`). Es lo esperado durante la Beta: escribe a [email protected]. |
| 403 | Autenticado pero sin permiso: falta el scope (`insufficient_scope`, que es también lo que recibe una key de agente o de la organización en una operación que requiere una persona, y lo que recibe una key personal cuando sus scopes de Plan explícitos no cubren el endpoint) o es una cuenta de invitado (`guest_not_allowed`). |
| 404 | No existe o no es visible para ti. Ambos casos devuelven el mismo cuerpo. |
curl -sS -X POST "https://api.dailybot.com/v1/plan/boards/00000000-0000-4000-8000-000000000002/members/" \
-H "Authorization: Bearer $DAILYBOT_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"user_uuid": "00000000-0000-4000-8000-00000000000c"
}'dailybot plan board member add 00000000-0000-4000-8000-000000000002 00000000-0000-4000-8000-00000000000cProbarlo
Este es un asistente de solo copia — la solicitud no se envía desde tu navegador. Pega el comando en tu terminal para ejecutarlo.
- Scope: `tasks:admin` — escrituras de contenedores. Un miembro no invitado puede llamarlo con una sesión iniciada o una API key personal (una key con scopes de Plan explícitos necesita `tasks:write`, que lo cubre); una key de agente o de la organización recibe `403 insufficient_scope`.
- Límite de solicitudes: 60 escrituras por minuto por actor.
- Requiere una persona: llámalo con una sesión iniciada, un token de usuario del CLI o una API key personal. Una key de agente o de la organización recibe `403 insufficient_scope`.
Quitar a un miembro de un tablero
Emite board.member_removed. Quitar al último miembro de un tablero solo para miembros se rechaza con 409 last_grant_cannot_be_removed, porque un tablero privado sin miembros no podría leerlo nadie. Requiere una persona: las keys de agente y de la organización se rechazan; una API key personal funciona.
Parámetros de ruta
| Nombre | Tipo | Requerido | Descripción |
|---|---|---|---|
| board_id | string | Requerido | El uuid del tablero. |
| user_id | string | Requerido | El uuid de usuario del miembro. |
Encabezados
| Nombre | Tipo | Requerido | Descripción |
|---|---|---|---|
| X-Dailybot-Agent-Name | string | Opcional | El nombre del agente que ejecutó esta escritura en nombre de la persona. Úsalo en escrituras multipart y sin cuerpo (DELETE, archivar, restaurar); en escrituras JSON envía el campo agent_name del cuerpo, que gana si vienen los dos. Codifica el valor con percent-encoding (UTF-8). Los caracteres de control se eliminan; un valor vacío significa sin agente. Más de 128 caracteres, o un valor que no se puede decodificar, es 400 invalid_agent_attribution (nunca se trunca). Una clave de tipo agente, que no está ligada a una persona, recibe 400 invalid_agent_attribution si lo envía. El sello nunca cambia una respuesta de permisos. Ver Atribución de agente. |
Errores
| Estado | Cuándo |
|---|---|
| 400 | El nombre del agente no es válido (`invalid_agent_attribution`). |
| 401 | Credencial ausente, vencida o con formato inválido (`credential_absent`, `credential_expired`, `credential_malformed`). |
| 402 | Plan aún no está habilitado para tu organización (`plan_upgrade_required`). Es lo esperado durante la Beta: escribe a [email protected]. |
| 403 | Autenticado pero sin permiso: falta el scope (`insufficient_scope`, que es también lo que recibe una key de agente o de la organización en una operación que requiere una persona, y lo que recibe una key personal cuando sus scopes de Plan explícitos no cubren el endpoint) o es una cuenta de invitado (`guest_not_allowed`). |
| 404 | No existe o no es visible para ti. Ambos casos devuelven el mismo cuerpo. |
| 409 | Es el último miembro de un tablero solo para miembros (`last_grant_cannot_be_removed`). |
curl -sS -X DELETE "https://api.dailybot.com/v1/plan/boards/00000000-0000-4000-8000-000000000002/members/00000000-0000-4000-8000-00000000000c/" \
-H "Authorization: Bearer $DAILYBOT_TOKEN"dailybot plan board member remove 00000000-0000-4000-8000-000000000002 00000000-0000-4000-8000-00000000000c --yesProbarlo
Este es un asistente de solo copia — la solicitud no se envía desde tu navegador. Pega el comando en tu terminal para ejecutarlo.
- Scope: `tasks:admin` — escrituras de contenedores. Un miembro no invitado puede llamarlo con una sesión iniciada o una API key personal (una key con scopes de Plan explícitos necesita `tasks:write`, que lo cubre); una key de agente o de la organización recibe `403 insufficient_scope`.
- Límite de solicitudes: 60 escrituras por minuto por actor.
- Requiere una persona: llámalo con una sesión iniciada, un token de usuario del CLI o una API key personal. Una key de agente o de la organización recibe `403 insufficient_scope`.
Consultar un permiso de membresía del tablero (el rol es de solo lectura)
La membresía del tablero no tiene columna de rol: los roles de la organización más la visibilidad del tablero son el modelo de acceso. Enviar role devuelve 400. Un PATCH vacío devuelve la fila de permiso actual.
Parámetros de ruta
| Nombre | Tipo | Requerido | Descripción |
|---|---|---|---|
| board_id | string | Requerido | El uuid del tablero. |
| user_id | string | Requerido | El uuid de usuario del miembro. |
Encabezados
| Nombre | Tipo | Requerido | Descripción |
|---|---|---|---|
| X-Dailybot-Agent-Name | string | Opcional | El nombre del agente que ejecutó esta escritura en nombre de la persona. Úsalo en escrituras multipart y sin cuerpo (DELETE, archivar, restaurar); en escrituras JSON envía el campo agent_name del cuerpo, que gana si vienen los dos. Codifica el valor con percent-encoding (UTF-8). Los caracteres de control se eliminan; un valor vacío significa sin agente. Más de 128 caracteres, o un valor que no se puede decodificar, es 400 invalid_agent_attribution (nunca se trunca). Una clave de tipo agente, que no está ligada a una persona, recibe 400 invalid_agent_attribution si lo envía. El sello nunca cambia una respuesta de permisos. Ver Atribución de agente. |
Respuesta
| Nombre | Tipo | Requerido | Descripción |
|---|---|---|---|
| (body) | BoardMember | Requerido | Un objeto BoardMember. |
Errores
| Estado | Cuándo |
|---|---|
| 400 | La validación falló, o no se reconoció un valor de filtro, orden o `include`. El `code` de la respuesta indica cuál. `invalid_agent_attribution` significa que el nombre del agente no es válido. |
| 401 | Credencial ausente, vencida o con formato inválido (`credential_absent`, `credential_expired`, `credential_malformed`). |
| 402 | Plan aún no está habilitado para tu organización (`plan_upgrade_required`). Es lo esperado durante la Beta: escribe a [email protected]. |
| 404 | No existe o no es visible para ti. Ambos casos devuelven el mismo cuerpo. |
curl -sS -X PATCH "https://api.dailybot.com/v1/plan/boards/00000000-0000-4000-8000-000000000002/members/00000000-0000-4000-8000-00000000000c/" \
-H "Authorization: Bearer $DAILYBOT_TOKEN"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.
- Scope: `tasks:admin` — escrituras de contenedores. Un miembro no invitado puede llamarlo con una sesión iniciada o una API key personal (una key con scopes de Plan explícitos necesita `tasks:write`, que lo cubre); una key de agente o de la organización recibe `403 insufficient_scope`.
- Límite de solicitudes: 60 escrituras por minuto por actor.
- Requiere una persona: llámalo con una sesión iniciada, un token de usuario del CLI o una API key personal. Una key de agente o de la organización recibe `403 insufficient_scope`.
Listar las etiquetas de la organización (verificación de acceso al tablero)
Las etiquetas de la organización, tras la verificación de acceso de este tablero, para que la configuración del tablero pueda gestionarlas sin salir de la API de Plan. Aplica etiquetas a las tarjetas con el PATCH de la tarea, el endpoint de lote de etiquetas o el set_labels masivo.
Parámetros de ruta
| Nombre | Tipo | Requerido | Descripción |
|---|---|---|---|
| board_id | string | Requerido | El uuid del tablero. |
Parámetros de consulta
| Nombre | Tipo | Requerido | Descripción |
|---|---|---|---|
| page | integer | Opcional | Número de página, empezando en 1. |
| page_size | integer | Opcional | Filas por página. 50 por defecto, máximo 100. Los valores fuera de rango se ajustan, nunca se rechazan: pedir 500 devuelve 100. |
| search | string | Opcional | Coincidencia de subcadena sin distinguir mayúsculas y minúsculas, solo en el nombre de la etiqueta. Vacío significa sin filtro; un valor sin coincidencias devuelve una lista vacía. |
| include_archived | boolean | Opcional | Incluye las filas archivadas junto con las activas. Es distinto de is_archived, que selecciona un conjunto u otro: include_archived=true es la unión. Las listas devuelven filas activas a menos que lo pidas. |
Respuesta
| Nombre | Tipo | Requerido | Descripción |
|---|---|---|---|
| results | array<Label> | Requerido | Las filas de esta página. |
Errores
| Estado | Cuándo |
|---|---|
| 401 | Credencial ausente, vencida o con formato inválido (`credential_absent`, `credential_expired`, `credential_malformed`). |
| 402 | Plan aún no está habilitado para tu organización (`plan_upgrade_required`). Es lo esperado durante la Beta: escribe a [email protected]. |
| 404 | No existe o no es visible para ti. Ambos casos devuelven el mismo cuerpo. |
curl -sS "https://api.dailybot.com/v1/plan/boards/00000000-0000-4000-8000-000000000002/labels/" \
-H "Authorization: Bearer $DAILYBOT_TOKEN"dailybot plan board labels 00000000-0000-4000-8000-000000000002{
"count": 1,
"next": null,
"previous": null,
"results": [
{
"uuid": "00000000-0000-4000-8000-00000000000b",
"name": "backend",
"color": "#2563eb"
}
]
}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.
- Scope: `tasks:read`.
- Límite de solicitudes: 120 lecturas por minuto por actor.
- Requiere una persona: llámalo con una sesión iniciada, un token de usuario del CLI o una API key personal. Una key de agente o de la organización recibe `403 insufficient_scope`.
Crear una etiqueta de la organización
Crea una etiqueta de la organización desde la configuración de un tablero, detrás del control de acceso de ese tablero. La etiqueta pertenece a la organización, así que todos los tableros pueden usarla.
Parámetros de ruta
| Nombre | Tipo | Requerido | Descripción |
|---|---|---|---|
| board_id | string | Requerido | El uuid del tablero. |
Encabezados
| Nombre | Tipo | Requerido | Descripción |
|---|---|---|---|
| X-Dailybot-Agent-Name | string | Opcional | El nombre del agente que ejecutó esta escritura en nombre de la persona. Úsalo en escrituras multipart y sin cuerpo (DELETE, archivar, restaurar); en escrituras JSON envía el campo agent_name del cuerpo, que gana si vienen los dos. Codifica el valor con percent-encoding (UTF-8). Los caracteres de control se eliminan; un valor vacío significa sin agente. Más de 128 caracteres, o un valor que no se puede decodificar, es 400 invalid_agent_attribution (nunca se trunca). Una clave de tipo agente, que no está ligada a una persona, recibe 400 invalid_agent_attribution si lo envía. El sello nunca cambia una respuesta de permisos. Ver Atribución de agente. |
Cuerpo de la solicitud
| Nombre | Tipo | Requerido | Descripción |
|---|---|---|---|
| name | string | Requerido | Nombre visible. |
| color | string | Opcional | Color de visualización (hex). |
| description | string | Opcional | Descripción libre. |
| agent_name | string | Opcional | El nombre del agente que ejecutó esta escritura en nombre de la persona (máx. 128 caracteres, vacío significa sin agente). Tiene prioridad sobre el header X-Dailybot-Agent-Name. Ver Atribución de agente. |
Respuesta
| Nombre | Tipo | Requerido | Descripción |
|---|---|---|---|
| (body) | Label | Requerido | Un objeto Label. |
Errores
| Estado | Cuándo |
|---|---|
| 400 | La validación falló, o no se reconoció un valor de filtro, orden o `include`. El `code` de la respuesta indica cuál. `invalid_agent_attribution` significa que el nombre del agente no es válido. |
| 401 | Credencial ausente, vencida o con formato inválido (`credential_absent`, `credential_expired`, `credential_malformed`). |
| 402 | Plan aún no está habilitado para tu organización (`plan_upgrade_required`). Es lo esperado durante la Beta: escribe a [email protected]. |
| 404 | No existe o no es visible para ti. Ambos casos devuelven el mismo cuerpo. |
curl -sS -X POST "https://api.dailybot.com/v1/plan/boards/00000000-0000-4000-8000-000000000002/labels/" \
-H "Authorization: Bearer $DAILYBOT_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"name": "backend",
"color": "#2563eb"
}'dailybot plan board label create 00000000-0000-4000-8000-000000000002 -n backend --color "#2563eb"{
"uuid": "00000000-0000-4000-8000-00000000000b",
"name": "backend",
"color": "#2563eb"
}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.
- Scope: `tasks:write`.
- Límite de solicitudes: 60 escrituras por minuto por actor.
- Requiere una persona: llámalo con una sesión iniciada, un token de usuario del CLI o una API key personal. Una key de agente o de la organización recibe `403 insufficient_scope`.
Una vista guardada por uuid
Se puede leer cuando es tu propia vista, o una vista shared o board_default de un tablero que puedes ver. Cualquier otra, incluida la vista personal de otra persona, es 404, nunca 403.
Parámetros de ruta
| Nombre | Tipo | Requerido | Descripción |
|---|---|---|---|
| view_id | uuid | Requerido | El uuid de la vista guardada. |
Respuesta
| Nombre | Tipo | Requerido | Descripción |
|---|---|---|---|
| (body) | SavedView | Requerido | Un objeto SavedView. |
Errores
| Estado | Cuándo |
|---|---|
| 401 | Credencial ausente, vencida o con formato inválido (`credential_absent`, `credential_expired`, `credential_malformed`). |
| 402 | Plan aún no está habilitado para tu organización (`plan_upgrade_required`). Es lo esperado durante la Beta: escribe a [email protected]. |
| 404 | No existe o no es visible para ti. Ambos casos devuelven el mismo cuerpo. |
curl -sS "https://api.dailybot.com/v1/plan/views/{view_id}/" \
-H "Authorization: Bearer $DAILYBOT_TOKEN"dailybot plan tasks view get 00000000-0000-4000-8000-000000000010 --jsonProbarlo
Este es un asistente de solo copia — la solicitud no se envía desde tu navegador. Pega el comando en tu terminal para ejecutarlo.
- Scope: `tasks:read`.
- Límite de solicitudes: 120 lecturas por minuto por actor.
- Requiere una persona: llámalo con una sesión iniciada, un token de usuario del CLI o una API key personal. Una key de agente o de la organización recibe `403 insufficient_scope`.
Editar una vista guardada
Parcial: solo cambian los campos que envías; los campos desconocidos se rechazan. Hacer una vista shared o board_default, o editar una que ya lo es, requiere a quien administra el tablero; de lo contrario, 403 view_visibility_forbidden.
Parámetros de ruta
| Nombre | Tipo | Requerido | Descripción |
|---|---|---|---|
| view_id | uuid | Requerido | El uuid de la vista guardada. |
Encabezados
| Nombre | Tipo | Requerido | Descripción |
|---|---|---|---|
| X-Dailybot-Agent-Name | string | Opcional | El nombre del agente que ejecutó esta escritura en nombre de la persona. Úsalo en escrituras multipart y sin cuerpo (DELETE, archivar, restaurar); en escrituras JSON envía el campo agent_name del cuerpo, que gana si vienen los dos. Codifica el valor con percent-encoding (UTF-8). Los caracteres de control se eliminan; un valor vacío significa sin agente. Más de 128 caracteres, o un valor que no se puede decodificar, es 400 invalid_agent_attribution (nunca se trunca). Una clave de tipo agente, que no está ligada a una persona, recibe 400 invalid_agent_attribution si lo envía. El sello nunca cambia una respuesta de permisos. Ver Atribución de agente. |
Cuerpo de la solicitud
| Nombre | Tipo | Requerido | Descripción |
|---|---|---|---|
| name | string | Opcional | Nombre visible. Máx. 64 caracteres. |
| view_mode | enum | Opcional | Cómo se dibuja el conjunto filtrado. kanban se acepta como alias de board. Uno de list, board, kanban, timeline, calendar. |
| group_by | enum | Opcional | La dimensión de agrupación. Uno de state, owner, priority, category. |
| sort | string | Opcional | Una clave de orden, con prefijo - para orden descendente. |
| filters | object | Opcional | Los filtros de la vista, con la gramática compartida de filtros de tareas. |
| schema_version | integer | Opcional | Versión del formato guardado de la vista. |
| visibility | enum | Opcional | personal, shared o board_default. shared y board_default requieren a quien administra el tablero en las vistas de tablero, y supervisión del proyecto (un administrador de la organización o quien gestiona todos sus equipos) en las vistas de proyecto; si no, 403 view_visibility_forbidden. Uno de personal, shared, board_default. |
| collapsed | object | array | string | number | boolean | Opcional | Estado de la interfaz del cliente guardado tal cual (qué grupos están colapsados). Solo se validan el tamaño y la profundidad. |
| columns | object | array | string | number | boolean | Opcional | Estado de la interfaz del cliente guardado tal cual (qué columnas se muestran). Solo se validan el tamaño y la profundidad. |
| agent_name | string | Opcional | El nombre del agente que ejecutó esta escritura en nombre de la persona (máx. 128 caracteres, vacío significa sin agente). Tiene prioridad sobre el header X-Dailybot-Agent-Name. Ver Atribución de agente. |
Respuesta
| Nombre | Tipo | Requerido | Descripción |
|---|---|---|---|
| (body) | SavedView | Requerido | Un objeto SavedView. |
Errores
| Estado | Cuándo |
|---|---|
| 400 | La validación falló, o no se reconoció un valor de filtro, orden o `include`. El `code` de la respuesta indica cuál. `invalid_agent_attribution` significa que el nombre del agente no es válido. |
| 401 | Credencial ausente, vencida o con formato inválido (`credential_absent`, `credential_expired`, `credential_malformed`). |
| 402 | Plan aún no está habilitado para tu organización (`plan_upgrade_required`). Es lo esperado durante la Beta: escribe a [email protected]. |
| 403 | Autenticado pero sin permiso: falta el scope (`insufficient_scope`, que es también lo que recibe una key de agente o de la organización en una operación que requiere una persona, y lo que recibe una key personal cuando sus scopes de Plan explícitos no cubren el endpoint) o es una cuenta de invitado (`guest_not_allowed`). |
| 404 | No existe o no es visible para ti. Ambos casos devuelven el mismo cuerpo. |
curl -sS -X PATCH "https://api.dailybot.com/v1/plan/views/{view_id}/" \
-H "Authorization: Bearer $DAILYBOT_TOKEN"dailybot plan tasks view update 00000000-0000-4000-8000-000000000010 --view-mode kanban --group-by ownerProbarlo
Este es un asistente de solo copia — la solicitud no se envía desde tu navegador. Pega el comando en tu terminal para ejecutarlo.
- Scope: `tasks:write`.
- Límite de solicitudes: 60 escrituras por minuto por actor.
- Requiere una persona: llámalo con una sesión iniciada, un token de usuario del CLI o una API key personal. Una key de agente o de la organización recibe `403 insufficient_scope`.
Eliminar una vista guardada
Permanente. Eliminar una vista shared o board_default requiere a quien administra el tablero; de lo contrario, 403 view_visibility_forbidden.
Parámetros de ruta
| Nombre | Tipo | Requerido | Descripción |
|---|---|---|---|
| view_id | uuid | Requerido | El uuid de la vista guardada. |
Encabezados
| Nombre | Tipo | Requerido | Descripción |
|---|---|---|---|
| X-Dailybot-Agent-Name | string | Opcional | El nombre del agente que ejecutó esta escritura en nombre de la persona. Úsalo en escrituras multipart y sin cuerpo (DELETE, archivar, restaurar); en escrituras JSON envía el campo agent_name del cuerpo, que gana si vienen los dos. Codifica el valor con percent-encoding (UTF-8). Los caracteres de control se eliminan; un valor vacío significa sin agente. Más de 128 caracteres, o un valor que no se puede decodificar, es 400 invalid_agent_attribution (nunca se trunca). Una clave de tipo agente, que no está ligada a una persona, recibe 400 invalid_agent_attribution si lo envía. El sello nunca cambia una respuesta de permisos. Ver Atribución de agente. |
Errores
| Estado | Cuándo |
|---|---|
| 400 | El nombre del agente no es válido (`invalid_agent_attribution`). |
| 401 | Credencial ausente, vencida o con formato inválido (`credential_absent`, `credential_expired`, `credential_malformed`). |
| 402 | Plan aún no está habilitado para tu organización (`plan_upgrade_required`). Es lo esperado durante la Beta: escribe a [email protected]. |
| 403 | Autenticado pero sin permiso: falta el scope (`insufficient_scope`, que es también lo que recibe una key de agente o de la organización en una operación que requiere una persona, y lo que recibe una key personal cuando sus scopes de Plan explícitos no cubren el endpoint) o es una cuenta de invitado (`guest_not_allowed`). |
| 404 | No existe o no es visible para ti. Ambos casos devuelven el mismo cuerpo. |
curl -sS -X DELETE "https://api.dailybot.com/v1/plan/views/{view_id}/" \
-H "Authorization: Bearer $DAILYBOT_TOKEN"dailybot plan tasks view delete 00000000-0000-4000-8000-000000000010 --yesProbarlo
Este es un asistente de solo copia — la solicitud no se envía desde tu navegador. Pega el comando en tu terminal para ejecutarlo.
- Scope: `tasks:write`.
- Límite de solicitudes: 60 escrituras por minuto por actor.
- Requiere una persona: llámalo con una sesión iniciada, un token de usuario del CLI o una API key personal. Una key de agente o de la organización recibe `403 insufficient_scope`.
Listar los adjuntos del tablero
Los adjuntos listos del tablero, ordenados por posición, como una página. Cualquiera que pueda ver el tablero puede listarlos; un tablero que no puedes ver es 404. Cada url es un enlace de descarga: no lo guardes, conserva el uuid del adjunto y vuelve a leerlo cuando necesites el archivo.
Parámetros de ruta
| Nombre | Tipo | Requerido | Descripción |
|---|---|---|---|
| board_id | string | Requerido | El uuid del tablero. |
Parámetros de consulta
| Nombre | Tipo | Requerido | Descripción |
|---|---|---|---|
| page | integer | Opcional | Número de página, empezando en 1. |
| page_size | integer | Opcional | Filas por página. 50 por defecto, máximo 100. Los valores fuera de rango se ajustan, nunca se rechazan: pedir 500 devuelve 100. |
Objeto TaskAttachment
| Nombre | Tipo | Requerido | Descripción |
|---|---|---|---|
| uuid | uuid | Requerido | Identificador público estable. |
| filename | string | Requerido | Nombre del archivo. |
| content_type | string | Requerido | Tipo MIME. |
| size | integer | Requerido | Tamaño en bytes. |
| url | string | Requerido | Dónde descargar el archivo. |
| thumbnail_url | uri | null | Opcional | Miniatura para imágenes. |
| width | integer | null | Opcional | — |
| height | integer | null | Opcional | — |
| status | enum | Requerido | Estado actual. Uno de pending, ready, scanning, rejected. |
| uploaded_by | ActorRef | null | Opcional | Quién subió el archivo. Ver ActorRef. |
| executed_by_agent | object | null | Opcional | El agente que ejecutó esto en nombre de la persona, o null si no se nombró a ninguno: un objeto con uuid, name, username y avatar. La persona del campo de autor sigue siendo la autora; el agente se muestra como quien lo ejecutó. |
| created_at | date-time | Requerido | Cuándo se creó la fila. |
Objeto ActorRef
Respuesta
| Nombre | Tipo | Requerido | Descripción |
|---|---|---|---|
| count | integer | Requerido | Número total de filas. |
| next | uri | Requerido | URL de la página siguiente, o null. |
| previous | uri | Requerido | URL de la página anterior, o null. |
| results | array<TaskAttachment> | Requerido | La página de objetos TaskAttachment. |
Errores
| Estado | Cuándo |
|---|---|
| 401 | Credencial ausente, vencida o con formato inválido (`credential_absent`, `credential_expired`, `credential_malformed`). |
| 402 | Plan aún no está habilitado para tu organización (`plan_upgrade_required`). Es lo esperado durante la Beta: escribe a [email protected]. |
| 404 | El tablero no existe o no puedes verlo (`not_found`), nunca un 403. |
curl -sS "https://api.dailybot.com/v1/plan/boards/00000000-0000-4000-8000-000000000002/attachments/" \
-H "X-API-KEY: $DAILYBOT_API_KEY"{
"count": 1,
"next": null,
"previous": null,
"results": [
{
"uuid": "00000000-0000-4000-8000-000000000009",
"filename": "roadmap.pdf",
"content_type": "application/pdf",
"size": 48213,
"url": "https://media.dailybot.com/\u2026",
"url_expires_at": null,
"content_url": "/v1/plan/boards/00000000-0000-4000-8000-000000000002/attachments/00000000-0000-4000-8000-000000000009/content/",
"thumbnail_url": null,
"width": null,
"height": null,
"status": "ready",
"uploaded_by": {
"kind": "user",
"uuid": "00000000-0000-4000-8000-000000000001",
"name": "Ana"
},
"created_at": "2026-09-30T14:00:00Z"
}
]
}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.
- Scope: `tasks:read`.
- Límite de solicitudes: 120 lecturas por minuto por actor.
- Funciona con una sesión iniciada, un token de usuario del CLI, una API key personal, o una key de agente o de la organización. Una key personal ve lo que ve su persona; una key de agente o de la organización actúa como actor del sistema y solo ve los tableros visibles para la organización.
Subir un adjunto al tablero
Adjunta un archivo al tablero en una sola solicitud. Envía multipart/form-data con el campo file y un caption opcional; aquí no hay flujo de presign. El límite es 5 MiB: un archivo más grande es 400 attachment_too_large, con extra.max_size_bytes. El tipo de archivo se verifica a partir de su contenido, con la misma política que los adjuntos de proyecto (400 attachment_invalid_type).
Parámetros de ruta
| Nombre | Tipo | Requerido | Descripción |
|---|---|---|---|
| board_id | string | Requerido | El uuid del tablero. |
Encabezados
| Nombre | Tipo | Requerido | Descripción |
|---|---|---|---|
| X-Dailybot-Agent-Name | string | Opcional | El nombre del agente que ejecutó esta escritura en nombre de la persona. Úsalo en escrituras multipart y sin cuerpo (DELETE, archivar, restaurar); en escrituras JSON envía el campo agent_name del cuerpo, que gana si vienen los dos. Codifica el valor con percent-encoding (UTF-8). Los caracteres de control se eliminan; un valor vacío significa sin agente. Más de 128 caracteres, o un valor que no se puede decodificar, es 400 invalid_agent_attribution (nunca se trunca). Una clave de tipo agente, que no está ligada a una persona, recibe 400 invalid_agent_attribution si lo envía. El sello nunca cambia una respuesta de permisos. Ver Atribución de agente. |
Cuerpo de la solicitud
| Nombre | Tipo | Requerido | Descripción |
|---|---|---|---|
| file | binary | Requerido | El archivo, como parte multipart. |
| caption | string | Opcional | Descripción opcional, máx. 255 caracteres. |
Respuesta
| Nombre | Tipo | Requerido | Descripción |
|---|---|---|---|
| (body) | TaskAttachment | Requerido | Un objeto TaskAttachment. |
Errores
| Estado | Cuándo |
|---|---|
| 400 | Falta el archivo, es demasiado grande (`attachment_too_large`) o de un tipo rechazado (`attachment_invalid_type`), o el tablero ya tiene el máximo de adjuntos (`attachment_limit_reached`). `invalid_agent_attribution` significa que el nombre del agente no es válido. |
| 401 | Credencial ausente, vencida o con formato inválido (`credential_absent`, `credential_expired`, `credential_malformed`). |
| 402 | Plan aún no está habilitado para tu organización (`plan_upgrade_required`). Es lo esperado durante la Beta: escribe a [email protected]. |
| 403 | No eres administrador de la organización (`insufficient_scope`), o eres invitado (`guest_not_allowed`). Una key de agente o de la organización también se rechaza aquí. |
| 404 | El tablero no existe o no puedes verlo (`not_found`), nunca un 403. |
curl -sS -X POST "https://api.dailybot.com/v1/plan/boards/00000000-0000-4000-8000-000000000002/attachments/" \
-H "Authorization: Bearer $DAILYBOT_TOKEN" \
-F "file=@./roadmap.pdf" \
-F "caption=Q4 roadmap"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.
- Scope: `tasks:admin` — escrituras de contenedores. Un miembro no invitado puede llamarlo con una sesión iniciada o una API key personal (una key con scopes de Plan explícitos necesita `tasks:write`, que lo cubre); una key de agente o de la organización recibe `403 insufficient_scope`.
- Límite de solicitudes: 60 escrituras por minuto por actor.
- Requiere una persona: llámalo con una sesión iniciada, un token de usuario del CLI o una API key personal. Una key de agente o de la organización recibe `403 insufficient_scope`.
Obtener un adjunto del tablero
Un adjunto del tablero. Cualquiera que pueda ver el tablero puede leerlo.
Parámetros de ruta
| Nombre | Tipo | Requerido | Descripción |
|---|---|---|---|
| board_id | string | Requerido | El uuid del tablero. |
| attachment_id | uuid | Requerido | El uuid del adjunto. |
Respuesta
| Nombre | Tipo | Requerido | Descripción |
|---|---|---|---|
| (body) | TaskAttachment | Requerido | Un objeto TaskAttachment. |
Errores
| Estado | Cuándo |
|---|---|
| 401 | Credencial ausente, vencida o con formato inválido (`credential_absent`, `credential_expired`, `credential_malformed`). |
| 402 | Plan aún no está habilitado para tu organización (`plan_upgrade_required`). Es lo esperado durante la Beta: escribe a [email protected]. |
| 404 | El tablero o el adjunto no existe o no puedes verlo (`not_found`), nunca un 403. |
curl -sS "https://api.dailybot.com/v1/plan/boards/00000000-0000-4000-8000-000000000002/attachments/00000000-0000-4000-8000-000000000009/" \
-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.
- Scope: `tasks:read`.
- Límite de solicitudes: 120 lecturas por minuto por actor.
- Funciona con una sesión iniciada, un token de usuario del CLI, una API key personal, o una key de agente o de la organización. Una key personal ve lo que ve su persona; una key de agente o de la organización actúa como actor del sistema y solo ve los tableros visibles para la organización.
Descargar los bytes de un adjunto del tablero
Los bytes del archivo, con el tipo de contenido registrado, a través de la API en vez del enlace de medios. Un adjunto cuya subida aún no terminó es 409 attachment_not_ready.
Parámetros de ruta
| Nombre | Tipo | Requerido | Descripción |
|---|---|---|---|
| board_id | string | Requerido | El uuid del tablero. |
| attachment_id | uuid | Requerido | El uuid del adjunto. |
Respuesta
| Nombre | Tipo | Requerido | Descripción |
|---|---|---|---|
| (body) | binary | Requerido | Los bytes del archivo; Content-Type es el del adjunto. |
Errores
| Estado | Cuándo |
|---|---|
| 401 | Credencial ausente, vencida o con formato inválido (`credential_absent`, `credential_expired`, `credential_malformed`). |
| 402 | Plan aún no está habilitado para tu organización (`plan_upgrade_required`). Es lo esperado durante la Beta: escribe a [email protected]. |
| 404 | El tablero o el adjunto no existe o no puedes verlo (`not_found`), nunca un 403. |
| 409 | El adjunto todavía no está listo (`attachment_not_ready`). |
curl -sS "https://api.dailybot.com/v1/plan/boards/00000000-0000-4000-8000-000000000002/attachments/00000000-0000-4000-8000-000000000009/content/" \
-H "X-API-KEY: $DAILYBOT_API_KEY" \
-o roadmap.pdfProbarlo
Este es un asistente de solo copia — la solicitud no se envía desde tu navegador. Pega el comando en tu terminal para ejecutarlo.
- Scope: `tasks:read`.
- Límite de solicitudes: 120 lecturas por minuto por actor.
- Funciona con una sesión iniciada, un token de usuario del CLI, una API key personal, o una key de agente o de la organización. Una key personal ve lo que ve su persona; una key de agente o de la organización actúa como actor del sistema y solo ve los tableros visibles para la organización.
Renombrar un adjunto del tablero
Cambia el nombre visible del archivo; los bytes guardados no cambian.
Parámetros de ruta
| Nombre | Tipo | Requerido | Descripción |
|---|---|---|---|
| board_id | string | Requerido | El uuid del tablero. |
| attachment_id | uuid | Requerido | El uuid del adjunto. |
Encabezados
| Nombre | Tipo | Requerido | Descripción |
|---|---|---|---|
| X-Dailybot-Agent-Name | string | Opcional | El nombre del agente que ejecutó esta escritura en nombre de la persona. Úsalo en escrituras multipart y sin cuerpo (DELETE, archivar, restaurar); en escrituras JSON envía el campo agent_name del cuerpo, que gana si vienen los dos. Codifica el valor con percent-encoding (UTF-8). Los caracteres de control se eliminan; un valor vacío significa sin agente. Más de 128 caracteres, o un valor que no se puede decodificar, es 400 invalid_agent_attribution (nunca se trunca). Una clave de tipo agente, que no está ligada a una persona, recibe 400 invalid_agent_attribution si lo envía. El sello nunca cambia una respuesta de permisos. Ver Atribución de agente. |
Cuerpo de la solicitud
| Nombre | Tipo | Requerido | Descripción |
|---|---|---|---|
| filename | string | Requerido | El nuevo nombre del archivo (1–255 caracteres). Los bytes guardados no cambian. |
| agent_name | string | Opcional | El nombre del agente que ejecutó esta escritura en nombre de la persona (máx. 128 caracteres, vacío significa sin agente). Tiene prioridad sobre el header X-Dailybot-Agent-Name. Ver Atribución de agente. |
Respuesta
| Nombre | Tipo | Requerido | Descripción |
|---|---|---|---|
| (body) | TaskAttachment | Requerido | Un objeto TaskAttachment. |
Errores
| Estado | Cuándo |
|---|---|
| 400 | La validación falló; el `code` de la respuesta indica qué campo. `invalid_agent_attribution` significa que el nombre del agente no es válido. |
| 401 | Credencial ausente, vencida o con formato inválido (`credential_absent`, `credential_expired`, `credential_malformed`). |
| 402 | Plan aún no está habilitado para tu organización (`plan_upgrade_required`). Es lo esperado durante la Beta: escribe a [email protected]. |
| 403 | No eres administrador de la organización (`insufficient_scope`), o eres invitado (`guest_not_allowed`). Una key de agente o de la organización también se rechaza aquí. |
| 404 | El tablero o el adjunto no existe o no puedes verlo (`not_found`), nunca un 403. |
curl -sS -X PATCH "https://api.dailybot.com/v1/plan/boards/00000000-0000-4000-8000-000000000002/attachments/00000000-0000-4000-8000-000000000009/" \
-H "Authorization: Bearer $DAILYBOT_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"filename": "roadmap-q4.pdf"
}'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.
- Scope: `tasks:admin` — escrituras de contenedores. Un miembro no invitado puede llamarlo con una sesión iniciada o una API key personal (una key con scopes de Plan explícitos necesita `tasks:write`, que lo cubre); una key de agente o de la organización recibe `403 insufficient_scope`.
- Límite de solicitudes: 60 escrituras por minuto por actor.
- Requiere una persona: llámalo con una sesión iniciada, un token de usuario del CLI o una API key personal. Una key de agente o de la organización recibe `403 insufficient_scope`.
Quitar un adjunto del tablero
Quita el adjunto del tablero. Responde 204.
Parámetros de ruta
| Nombre | Tipo | Requerido | Descripción |
|---|---|---|---|
| board_id | string | Requerido | El uuid del tablero. |
| attachment_id | uuid | Requerido | El uuid del adjunto. |
Encabezados
| Nombre | Tipo | Requerido | Descripción |
|---|---|---|---|
| X-Dailybot-Agent-Name | string | Opcional | El nombre del agente que ejecutó esta escritura en nombre de la persona. Úsalo en escrituras multipart y sin cuerpo (DELETE, archivar, restaurar); en escrituras JSON envía el campo agent_name del cuerpo, que gana si vienen los dos. Codifica el valor con percent-encoding (UTF-8). Los caracteres de control se eliminan; un valor vacío significa sin agente. Más de 128 caracteres, o un valor que no se puede decodificar, es 400 invalid_agent_attribution (nunca se trunca). Una clave de tipo agente, que no está ligada a una persona, recibe 400 invalid_agent_attribution si lo envía. El sello nunca cambia una respuesta de permisos. Ver Atribución de agente. |
Errores
| Estado | Cuándo |
|---|---|
| 400 | La validación falló; el `code` de la respuesta indica qué campo. `invalid_agent_attribution` significa que el nombre del agente no es válido. |
| 401 | Credencial ausente, vencida o con formato inválido (`credential_absent`, `credential_expired`, `credential_malformed`). |
| 402 | Plan aún no está habilitado para tu organización (`plan_upgrade_required`). Es lo esperado durante la Beta: escribe a [email protected]. |
| 403 | No eres administrador de la organización (`insufficient_scope`), o eres invitado (`guest_not_allowed`). Una key de agente o de la organización también se rechaza aquí. |
| 404 | El tablero o el adjunto no existe o no puedes verlo (`not_found`), nunca un 403. |
curl -sS -X DELETE "https://api.dailybot.com/v1/plan/boards/00000000-0000-4000-8000-000000000002/attachments/00000000-0000-4000-8000-000000000009/" \
-H "Authorization: Bearer $DAILYBOT_TOKEN"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.
- Scope: `tasks:admin` — escrituras de contenedores. Un miembro no invitado puede llamarlo con una sesión iniciada o una API key personal (una key con scopes de Plan explícitos necesita `tasks:write`, que lo cubre); una key de agente o de la organización recibe `403 insufficient_scope`.
- Límite de solicitudes: 60 escrituras por minuto por actor.
- Requiere una persona: llámalo con una sesión iniciada, un token de usuario del CLI o una API key personal. Una key de agente o de la organización recibe `403 insufficient_scope`.
Esta página es la referencia de Plan · Tableros. Todos los endpoints viven bajo https://api.dailybot.com/v1/plan/ y responden JSON.
Autentícate con una sesión iniciada o un token de usuario del CLI (Authorization: Bearer …), o con una API key (X-API-KEY). Una API key personal actúa como su persona y puede hacer todo lo que esa persona puede hacer en Dailybot; una key de agente o de la organización nunca actúa como una persona y se rechaza en los endpoints que la requieren. En un endpoint, la insignia API key significa que también se acepta una key de agente o de la organización. Consulta Autenticación para Plan, Autenticación y Errores para las reglas comunes a todas las APIs de Dailybot.
Si es tu primera vez con Plan, lee la introducción para entender el modelo: proyectos, tableros, estados, claves, orden, versiones y archivado.