Plan · Inicio y búsqueda
Habilitación, la pantalla de inicio en una sola solicitud, mis tareas, favoritos, bandeja de entrada, actividad, línea de tiempo, búsqueda, y etiquetas e hitos de la organización. 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].
Las tareas del usuario que llama
Tus tareas, lo mismo que GET /v1/plan/tasks/?owner=me más la opción scope. Requiere una persona: una key de agente o de la organización recibe 403 insufficient_scope, nunca una lista vacía; una API key personal funciona.
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. |
Filtros
| Nombre | Tipo | Requerido | Descripción |
|---|---|---|---|
| scope | string | Opcional | Qué sentido de "mío": owned es owner = me; participating significa que estás en la tarjeta; involved es la unión de las tareas de las que eres responsable, en las que participas y las que creaste, que es lo que una persona entiende por "mis tareas". |
| state | array | Opcional | Repetible; los valores se combinan con OR. Cada valor es o bien un uuid de estado o bien uno de dos tokens de ciclo de vida:
- open - las categorías de estado que no son terminales: backlog, todo, in_progress.
- done - las categorías terminales: done, canceled.
Los tokens se deciden solo por state.category y nunca consultan completed_at, así que un cliente que clasifica las filas por la categoría del chip de estado coincide con este filtro por construcción.
Se permite mezclar: un uuid y un token en la misma solicitud se combinan con OR como cualquier otro valor repetido. Cualquier otro valor es 400 invalid_filter_value con extra.parameter: "state", incluido overdue, que no es un estado del ciclo de vida. Vencido es una cuestión de fecha de vencimiento: consulta due_before. |
| category | array | Opcional | Las cinco categorías de estado fijas. No existe una categoría blocked: estar bloqueado es una relación; usa blocked=true. |
| 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/. |
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. |
Orden y expansión
| Nombre | Tipo | Requerido | Descripción |
|---|---|---|---|
| sort | string | Opcional | Un campo, opcionalmente con prefijo -. Todo orden agrega un desempate interno estable para que una fila no pueda aparecer en dos páginas. Un valor no admitido es 400 invalid_sort, nunca una alternativa silenciosa. |
Filas archivadas
| 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. |
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 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 ActorRef
Objeto Label
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<Task> | Requerido | Las filas de esta página. Ver Task. |
Errores
| Estado | Cuándo |
|---|---|
| 400 | Un valor de filtro invá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`). |
curl -sS "https://api.dailybot.com/v1/plan/me/tasks/?scope=involved&state=open" \
-H "Authorization: Bearer $DAILYBOT_TOKEN"dailybot plan tasks mine --scope involved --json{
"count": 1,
"next": null,
"previous": null,
"results": [
{
"uuid": "00000000-0000-4000-8000-000000000005",
"key": "ENG-142",
"title": "Ship the delta feed",
"description": null,
"board": "00000000-0000-4000-8000-000000000002",
"state": {
"uuid": "00000000-0000-4000-8000-000000000003",
"name": "In Progress",
"category": "in_progress",
"position": 2
},
"priority": 2,
"estimate": 3,
"owner": {
"uuid": "00000000-0000-4000-8000-00000000000c",
"name": "Ada L."
},
"executor": null,
"participant_count": 1,
"start_date": "2026-09-28",
"due_date": "2026-10-15",
"milestone": null,
"parent_task": null,
"subtask_count": 1,
"subtask_done_count": 1,
"attachment_count": 1,
"open_blocker_count": 1,
"labels": [],
"rank": "aU",
"blocked": false,
"blocked_since": null,
"completed_at": null,
"is_archived": false,
"subscribed": true,
"version": 7,
"created_by": {
"kind": "user",
"uuid": "00000000-0000-4000-8000-00000000000c",
"name": "Ada L."
},
"created_at": "2026-09-25T10:14:02Z",
"updated_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: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`.
Conteos de las pestañas de tareas personales
Conteos con alcance de quien llama para el trabajo del que es responsable, en el que participa, en el que está involucrado y vencido.
Los cuatro enteros de nivel superior son totales de población en todo el ciclo de vida: owned cuenta todas las tareas de las que quien llama es responsable, estén abiertas, terminadas o canceladas. overdue es la excepción y solo cubre owned, excluyendo ya el trabajo archivado y terminal.
by_scope contiene los números calificados por estado, para que una insignia pueda decir "N abiertas" sin una segunda solicitud. open se decide por la CATEGORÍA del estado, exactamente como lo decide ?state=open; overdue significa abierta Y vencida; blocked usa el único predicado de bloqueador activo. Cada número se calcula en el mismo agregado único sobre la misma raíz de visibilidad.
by_scope.<scope>.total es igual, por construcción, al entero de nivel superior con el mismo nombre.
Objeto MyTaskCounts
| Nombre | Tipo | Requerido | Descripción |
|---|---|---|---|
| owned | integer | Requerido | Tareas de las que eres responsable (todos los ciclos de vida). |
| participating | integer | Requerido | Tareas en las que participas. |
| involved | integer | Requerido | Tareas de las que eres responsable, en las que participas o que creaste. |
| overdue | integer | Requerido | Tareas abiertas con la fecha de vencimiento ya pasada. |
| by_scope | object | Requerido | Conteos por estado para cada scope: {total, open, overdue, blocked}. Forma: {owned, participating, involved} — each {total, open, overdue, blocked: integer} (all required). |
Respuesta
| Nombre | Tipo | Requerido | Descripción |
|---|---|---|---|
| (body) | MyTaskCounts | Requerido | Un objeto MyTaskCounts. |
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/me/tasks/counts/" \
-H "Authorization: Bearer $DAILYBOT_TOKEN"dailybot plan tasks counts{
"owned": 1,
"participating": 1,
"involved": 1,
"overdue": 1,
"by_scope": {}
}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`.
Tableros visitados recientemente por quien llama
Tableros que abriste recientemente, los más recientes primero, según lo registrado por POST /v1/plan/boards/{board_id}/visit/. Los tableros ocultos, archivados y de otras organizaciones se omiten en lugar de generar un error. Requiere una persona (una key de agente o de la organización recibe 403; una API key personal funciona).
Objeto RecentBoardList
Respuesta
| Nombre | Tipo | Requerido | Descripción |
|---|---|---|---|
| (body) | RecentBoardList | Requerido | Un objeto RecentBoardList. |
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/me/recents/" \
-H "Authorization: Bearer $DAILYBOT_TOKEN"{
"count": 1,
"limit": 1,
"results": []
}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`.
Eventos de tareas relevantes para notificar a quien llama
Tu bandeja: eventos de tareas que merecen tu atención, del más reciente al más antiguo, en una página. mentioned=true conserva solo los eventos en los que alguien te mencionó; type conserva un tipo de evento. Ambos se combinan, y count y la paginación son exactos, así que no hay páginas vacías.
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. |
| type | string | Opcional | Solo eventos de este tipo, como task.owner_changed (la pestaña Asignadas). Se combina con mentioned (Y). |
| mentioned | boolean | Opcional | true conserva solo los eventos en los que alguien te mencionó. Debe ser true o false. |
Objeto ActivityEvent
| Nombre | Tipo | Requerido | Descripción |
|---|---|---|---|
| uuid | string | Requerido | Identificador público estable. |
| type | string | Requerido | El tipo de evento. Se agregan tipos nuevos con el tiempo: ignora los que no reconozcas. |
| actor | object | Requerido | Quién actuó. |
| 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 | string | Requerido | Cuándo se creó la fila. |
| task | object | Opcional | Forma: {uuid, key, title, board {uuid, key, name} | null} | null. |
| payload | object | Requerido | Solo ids, valores de enum, números, booleanos y fechas; nunca texto escrito por usuarios. |
| changes | array | Requerido | Cambios de campos resueltos, [{field, from, to}]. |
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<ActivityEvent> | Requerido | Las filas de esta página. Ver ActivityEvent. |
Errores
| Estado | Cuándo |
|---|---|
| 400 | Un parámetro no declarado o un valor inválido (`invalid_filter_value`). |
| 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/inbox/" \
-H "Authorization: Bearer $DAILYBOT_TOKEN"dailybot plan tasks inbox --json{
"count": 1,
"next": null,
"previous": null,
"results": [
{
"uuid": "00000000-0000-4000-8000-00000000000f",
"type": "task.moved",
"actor": {},
"created_at": "example",
"task": {},
"payload": {},
"changes": []
}
]
}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`.
Marcar como leídos todos los elementos de la bandeja de entrada
Marca como leídos todos los elementos de la bandeja moviendo tu cursor de lectura a ahora. La respuesta es el nuevo last_seen_at.
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 |
|---|---|---|---|
| last_seen_at | date-time | Requerido | Todo lo ocurrido hasta este momento, inclusive, cuenta como leído. |
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`). |
curl -sS -X POST "https://api.dailybot.com/v1/plan/inbox/read-all/" \
-H "Authorization: Bearer $DAILYBOT_TOKEN"dailybot plan tasks inbox-read-all{
"last_seen_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`.
Ponerse al día hasta una fila de la bandeja de entrada
Marca como leída esta fila y todo lo anterior, y responde con el nuevo unread_count.
La bandeja de entrada no tiene estado de lectura por elemento, por diseño: leído/no leído se deriva de un único cursor en lugar de una marca por fila. Marcar como leída la fila cinco mientras la uno a la cuatro siguen sin leer no tiene representación en ese modelo, y dársela implica una segunda fuente de verdad que debe coincidir con el cursor para siempre. Lo que una marca de agua SÍ puede expresar es "me puse al día hasta aquí", y en un feed ordenado de lo más reciente a lo más antiguo eso es lo que suele significar hacer clic en una fila.
Una fila que este actor no puede ver devuelve 404, así que un uuid de evento de otra organización no puede mover el cursor de otra persona.
Parámetros de ruta
| Nombre | Tipo | Requerido | Descripción |
|---|---|---|---|
| item_uuid | string | Requerido | El uuid de la fila de la bandeja de entrada. |
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 |
|---|---|---|---|
| last_seen_at | date-time | Requerido | Todo lo ocurrido hasta este momento, inclusive, cuenta como leído. |
| unread_count | integer | Requerido | Elementos no leídos. |
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/inbox/00000000-0000-4000-8000-00000000000f/read/" \
-H "Authorization: Bearer $DAILYBOT_TOKEN"dailybot plan tasks inbox-read 00000000-0000-4000-8000-00000000000f{
"last_seen_at": "2026-09-25T10:14:02Z",
"unread_count": 3
}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`.
Conteo de no leídos en la bandeja de entrada de quien llama
Cuántos elementos de la bandeja aún no leíste, para una insignia. Acepta los mismos filtros que la lista de la bandeja, así la insignia de cada pestaña cuenta exactamente sus filas: mentioned=true para Menciones, type=task.owner_changed para Asignadas. Sin parámetros cuenta toda la bandeja. Más barato que listar la bandeja.
Parámetros de consulta
| Nombre | Tipo | Requerido | Descripción |
|---|---|---|---|
| type | string | Opcional | Solo eventos de este tipo, como task.owner_changed (la pestaña Asignadas). Se combina con mentioned (Y). |
| mentioned | boolean | Opcional | true conserva solo los eventos en los que alguien te mencionó. Debe ser true o false. |
Respuesta
| Nombre | Tipo | Requerido | Descripción |
|---|---|---|---|
| unread_count | integer | Requerido | Elementos no leídos. |
Errores
| Estado | Cuándo |
|---|---|
| 400 | Un parámetro no declarado o un valor inválido (`invalid_filter_value`). |
| 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/inbox/unread-count/" \
-H "Authorization: Bearer $DAILYBOT_TOKEN"dailybot plan tasks inbox-unread{
"unread_count": 3
}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`.
Feed de actividad de la organización para Plan Home
Eventos paginados que puedes abrir, enriquecidos con tarjetas de tarea y changes[{field, from, to}] resueltos para mostrar. Las tareas que no puedes ver se omiten aunque su tablero sea visible.
Solo se aceptan los parámetros listados aquí: cualquier otro parámetro de consulta es 400 invalid_filter_value.
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 |
|---|---|---|---|
| type | string | Opcional | Filtra por un tipo de evento. event_type es un alias. |
| actor | uuid | Opcional | Solo eventos de esta persona (uuid de usuario). |
| project | uuid | Opcional | Solo eventos de este proyecto (uuid). |
| board | uuid | Opcional | Solo eventos de este tablero (uuid). |
| task | uuid | Opcional | Solo eventos sobre esta tarea (uuid). |
| since | string | Opcional | Fecha y hora ISO: eventos registrados en ese momento o después (observed_at). |
| until | string | Opcional | Fecha y hora ISO: eventos registrados en ese momento o antes (observed_at). |
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<ActivityEvent> | Requerido | Las filas de esta página. Ver ActivityEvent. |
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]. |
curl -sS "https://api.dailybot.com/v1/plan/activity/" \
-H "X-API-KEY: $DAILYBOT_API_KEY"dailybot plan tasks activity --last-week --json
dailybot plan tasks activity --board 00000000-0000-4000-8000-000000000002 --since 2026-09-20T00:00:00Z --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.
- 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.
Leer el cursor de lectura de actividad de quien llama
Tu cursor de lectura de actividad: el momento hasta el que leíste el feed de actividad. Es null hasta que lo fijes.
Objeto ActivityCursor
Respuesta
| Nombre | Tipo | Requerido | Descripción |
|---|---|---|---|
| (body) | ActivityCursor | Requerido | Un objeto ActivityCursor. |
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]. |
curl -sS "https://api.dailybot.com/v1/plan/me/activity-cursor/" \
-H "Authorization: Bearer $DAILYBOT_TOKEN"dailybot plan tasks cursor{
"last_seen_at": 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.
- 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`.
Marcar la actividad como leída hasta una marca de tiempo
Guarda tu cursor de lectura de actividad en last_seen_at, así otro cliente puede seguir donde lo dejaste.
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 |
|---|---|---|---|
| last_seen_at | date-time | Requerido | Todo lo ocurrido hasta este momento, inclusive, cuenta como leído. |
| 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) | ActivityCursor | Requerido | Un objeto ActivityCursor. |
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]. |
curl -sS -X PUT "https://api.dailybot.com/v1/plan/me/activity-cursor/" \
-H "Authorization: Bearer $DAILYBOT_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"last_seen_at": "2026-09-25T10:14:02Z"
}'dailybot plan tasks cursor --nowProbarlo
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 las etiquetas de la organización
La taxonomía de etiquetas de la organización, compartida con formularios y check-ins. Prefiere este endpoint para las pantallas de configuración; la lista con alcance de tablero es la misma taxonomía tras una verificación de acceso al 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 |
|---|---|---|---|
| next | string|null | Requerido | URL de la página siguiente, o null. |
| previous | string|null | Requerido | URL de la página anterior, o null. |
| 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]. |
| 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/labels/" \
-H "Authorization: Bearer $DAILYBOT_TOKEN"{
"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 en la taxonomía de la organización. Misma forma que POST /boards/{board_id}/labels/.
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]. |
| 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 -X POST "https://api.dailybot.com/v1/plan/labels/" \
-H "Authorization: Bearer $DAILYBOT_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"name": "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`.
Actualizar una etiqueta de la organización
Actualización parcial de nombre, color, descripción o is_archived. Archivar oculta la etiqueta de la lista por defecto sin eliminarla definitivamente. Restaurar es el mismo campo en sentido inverso: {"is_archived": false}. Lee una etiqueta retirada con GET /v1/plan/labels/?include_archived=true.
Parámetros de ruta
| Nombre | Tipo | Requerido | Descripción |
|---|---|---|---|
| label_id | string | Requerido | El uuid de la etiqueta. |
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. |
| color | string | Opcional | Color de visualización (hex). |
| description | string | Opcional | Descripción libre. |
| 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. |
| 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]. |
| 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/labels/00000000-0000-4000-8000-00000000000b/" \
-H "Authorization: Bearer $DAILYBOT_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"is_archived": true
}'Probarlo
Este es un asistente de solo copia — la solicitud no se envía desde tu navegador. Pega el comando en tu terminal para ejecutarlo.
- 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 etiqueta de la organización
Elimina de forma definitiva cuando la etiqueta no está en ninguna tarea. De lo contrario, 409 label_in_use. Prefiere PATCH con is_archived: true para retirar una etiqueta que todavía está en tarjetas.
Parámetros de ruta
| Nombre | Tipo | Requerido | Descripción |
|---|---|---|---|
| label_id | string | Requerido | El uuid de la etiqueta. |
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 | La etiqueta todavía está en tareas (`label_in_use`). Archívala con `PATCH` en su lugar. |
curl -sS -X DELETE "https://api.dailybot.com/v1/plan/labels/00000000-0000-4000-8000-00000000000b/" \
-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: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`.
Si Plan está disponible aquí y los topes del plan
Si Plan está disponible para tu organización y los topes de su plan. Es el único endpoint de Plan que nunca responde 402, así que llámalo antes de decidir si mostrar el producto.
enabled es la misma verificación que aplican todos los demás endpoints. reason es null cuando está habilitado; de lo contrario, rollout (tu organización todavía no está habilitada para la Beta) o usage (un administrador desactivó Plan). boards y projects informan {used, limit}, incluso cuando está deshabilitado; limit es null cuando el plan no tiene tope. El plan gratuito incluye hasta 3 tableros y 1 proyecto. used cuenta solo filas activas, así que archivar libera un lugar, y used > limit puede ocurrir en planes heredados.
Un invitado recibe 403 guest_not_allowed aquí, no 200 con enabled: false, y nunca ve los topes del plan.
Objeto Entitlements
| Nombre | Tipo | Requerido | Descripción |
|---|---|---|---|
| enabled | boolean | Requerido | Si Plan está habilitado para tu organización. |
| reason | enum | null | Requerido | Por qué Tasks no está habilitado: rollout o usage; null cuando está habilitado. Uno de rollout, usage. |
| boards | object | Requerido | Forma: {used: integer, limit: integer|null} (both required). |
| projects | object | Requerido | Proyectos vinculados. Forma: {used: integer, limit: integer|null} (both required). |
| labels | object | Requerido | Etiquetas de la organización en la tarea. Forma: {enabled: boolean}. |
Respuesta
| Nombre | Tipo | Requerido | Descripción |
|---|---|---|---|
| (body) | Entitlements | Requerido | Un objeto Entitlements. |
Errores
| Estado | Cuándo |
|---|---|
| 401 | Credencial ausente, vencida o con formato inválido (`credential_absent`, `credential_expired`, `credential_malformed`). |
| 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/entitlements/" \
-H "X-API-KEY: $DAILYBOT_API_KEY"dailybot plan tasks entitlements{
"enabled": false,
"reason": null,
"boards": {},
"projects": {},
"labels": {}
}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.
El trabajo planificado en una ventana, con sus aristas de dependencia y bandas de objetivos
El mismo conjunto filtrado que la lista de tareas, visto como una pregunta de planificación. rows son las tarjetas que se SUPERPONEN con la ventana; unscheduled cuenta las tarjetas coincidentes sin ninguna fecha; dependencies incluye solo aristas cuyos dos extremos están en rows, porque una flecha hacia una fila que el lector no puede ver es una línea hacia ninguna parte en la pantalla y una filtración fuera de ella.
Selección de la ventana (gana la primera coincidencia):
- from + to (fechas ISO): rango explícito; from puede estar en el pasado (por ejemplo, hoy−7 … hoy+21). Alias: window_from / window_to.
- window_days: ayuda hacia adelante: desde hoy hasta hoy+N (rango inclusivo).
- omitido: ventana predeterminada de 14 días hacia adelante desde hoy (con un filtro de tablero).
Parámetros de consulta
Filtros
| Nombre | Tipo | Requerido | Descripción |
|---|---|---|---|
| from | string | Opcional | Primer día de una ventana explícita (fecha ISO). Puede estar en el pasado. Úsalo junto con to. Alias: window_from. |
| to | string | Opcional | Último día de una ventana explícita (fecha ISO). Debe ser ≥ from. Alias: window_to. |
| window_from | string | Opcional | Alias de from. |
| window_to | string | Opcional | Alias de to. |
| window_days | integer | Opcional | Ayuda hacia adelante desde hoy. Se ignora cuando están presentes from y to (o sus alias). El valor predeterminado sin ventana explícita es 14. |
| board | array | Opcional | uuids de tableros o claves de tableros (ENG). Repetible; los valores se combinan con OR. Las claves se resuelven solo dentro de tu organización; una clave que no corresponde a ninguno de tus tableros no aporta nada y nunca devuelve un 404. Las claves retiradas se siguen resolviendo. |
| project | array | Opcional | uuids de proyectos. Repetible; los valores se combinan con OR. |
| goal | string | Opcional | Repetible. Coincide con el objetivo propio de una tarea, o con el que hereda de su proyecto cuando no tiene uno, la misma regla que usa cada resumen agregado de progreso. |
| team | string | Opcional | Repetible. El equipo del tablero. Reduce lo que ves y nunca lo amplía. |
| 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. |
| category | array | Opcional | Las cinco categorías de estado fijas. No existe una categoría blocked: estar bloqueado es una relación; usa blocked=true. |
| 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. |
| include_unscheduled | string | Opcional | Cuando es 1 o true, unscheduled es {count, results[]} (con tope) en lugar de un simple conteo entero. |
Objeto Timeline
| Nombre | Tipo | Requerido | Descripción |
|---|---|---|---|
| window | object | Requerido | La ventana cubierta. Forma: {from: string, to: string}. |
| bands | array | Opcional | Objetivos vigentes a lo largo de la ventana. Elementos: {uuid, name, status, period_start, period_end}. |
| rows | array | Requerido | Tareas que se superponen con la ventana. Elementos: {uuid, key, title, state (state name), category, owner (UserRef|null), goal (uuid|null), start_date, due_date, completed_at, is_blocked, is_overdue}. |
| dependencies | array | Opcional | Aristas de dependencia cuyos dos extremos están en rows. Elementos: {source (task uuid), target (task uuid), relation_type}. |
| unscheduled | integer | {count: integer, results: array} | Requerido | Tareas coincidentes sin ninguna fecha. |
| truncated | boolean | Opcional | true cuando hay más cambios esperando: consulta de nuevo de inmediato. |
Respuesta
| Nombre | Tipo | Requerido | Descripción |
|---|---|---|---|
| (body) | Timeline | Requerido | Un objeto Timeline. |
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`). |
| 429 | Llegaste al límite de solicitudes. Espera los segundos que indica `Retry-After`. |
curl -sS "https://api.dailybot.com/v1/plan/timeline/?board=ENG&from=2026-09-18&to=2026-10-16" \
-H "X-API-KEY: $DAILYBOT_API_KEY"dailybot plan tasks timeline --today{
"window": {},
"bands": [],
"rows": [],
"dependencies": [],
"unscheduled": 1,
"truncated": false
}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.
Buscar tareas y contenedores visibles para quien llama
Busca tareas (título, clave, descripción) y, con types, proyectos, tableros y objetivos que puedes ver.
La coincidencia es una búsqueda de subcadenas sin distinguir mayúsculas y minúsculas, no un ranking de texto completo. score es una ayuda de orden aproximada entre 0.6 y 1.0 (clave exacta 1.0, coincidencia en título o nombre 0.9 / 0.85, coincidencia en descripción 0.6), no una relevancia calibrada, y snippet es una ventana alrededor de la primera coincidencia. La respuesta lo repite en approximation. Las tareas ocultas y los tableros privados nunca aparecen.
Parámetros de consulta
| Nombre | Tipo | Requerido | Descripción |
|---|---|---|---|
| q | string | Requerido | La cadena de consulta. Menos de 2 caracteres se rechaza con search_query_too_short; más de 256, con search_query_too_long. |
| types | array | Opcional | Tipos de entidad a incluir: task, project, board, goal (por defecto: todos). Repetible o separado por comas: ?types=task,board y ?types=task&types=board son equivalentes. Los valores desconocidos son 400 invalid_filter_value. |
| board | array | Opcional | uuids de tableros o claves de tableros (ENG). Repetible; los valores se combinan con OR. Las claves se resuelven solo dentro de tu organización; una clave que no corresponde a ninguno de tus tableros no aporta nada y nunca devuelve un 404. Las claves retiradas se siguen resolviendo. |
| project | array | Opcional | uuids de proyectos. Repetible; los valores se combinan con OR. |
| limit | integer | Opcional | Alias de page_size, traducido en el servidor. |
Objeto SearchResponse
| Nombre | Tipo | Requerido | Descripción |
|---|---|---|---|
| q | string | Requerido | La consulta que enviaste. |
| limit | integer | Requerido | Tamaño de página aplicado. De 1 a 100. |
| approximation | string | Requerido | Cómo funciona la coincidencia (búsqueda por subcadena, no ranking de texto completo). |
| results | array | Requerido | Las filas de esta página. Elementos: {type: task|project|board|goal, uuid, title (tasks) or name (containers), key? (tasks), score?, snippet?}. |
Respuesta
| Nombre | Tipo | Requerido | Descripción |
|---|---|---|---|
| (body) | SearchResponse | Requerido | Un objeto SearchResponse. |
Errores
| Estado | Cuándo |
|---|---|
| 400 | `q` tiene menos de 2 caracteres (`search_query_too_short`) o más de 256 (`search_query_too_long`), o un valor de `types` es desconocido. |
| 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`). |
| 429 | Llegaste al límite de solicitudes. Espera los segundos que indica `Retry-After`. |
curl -sS "https://api.dailybot.com/v1/plan/search/?q=delta&types=task,board" \
-H "X-API-KEY: $DAILYBOT_API_KEY"dailybot plan tasks search -q "delta" --json{
"q": "delta",
"limit": 1,
"approximation": "substring",
"results": []
}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.
La pantalla de inicio en una sola solicitud (HomePulse), o un agregado de salud del tablero (TaskPulse)
Dos modos, según la presencia de group_by.
HomePulse (sin group_by): el inicio de Plan en una sola solicitud: generated_at, counts enteros, tu my_preview, avances de tableros, objetivos y línea de tiempo, agent_summary y las bandas opcionales de include. La población se indica como scope: "viewer_visible": todas las tareas activas y no terminales que puedes ver, no toda la organización. Cada mosaico indica la consulta que lo reproduce: open → ?state=open, overdue → ?due_before=<today>&state=open, blocked → ?blocked=true&state=open.
TaskPulse (con group_by, p. ej. group_by=state): un agregado de salud del tablero con totales, rendimiento y tiempo de ciclo. Los conteos son solo enteros y no hay desglose por persona. Responde a If-None-Match con 304.
Parámetros de consulta
| Nombre | Tipo | Requerido | Descripción |
|---|---|---|---|
| board | array | Opcional | uuids de tableros o claves de tableros (ENG). Repetible; los valores se combinan con OR. Las claves se resuelven solo dentro de tu organización; una clave que no corresponde a ninguno de tus tableros no aporta nada y nunca devuelve un 404. Las claves retiradas se siguen resolviendo. |
| project | array | Opcional | uuids de proyectos. Repetible; los valores se combinan con OR. |
| window_days | integer | Opcional | La ventana móvil para el rendimiento y el tiempo de ciclo. |
| group_by | string | Opcional | Su presencia selecciona el modo TaskPulse (un agregado de salud del tablero). Omítelo por completo para HomePulse; no hay valor por defecto. El enum es cerrado y no contiene ninguna dimensión de persona: la salida por persona se rechaza por diseño. |
| include | string | Opcional | Solo HomePulse (sin group_by). Bandas opcionales separadas por comas para que una pantalla de inicio se genere con una sola solicitud: projects → projects_preview (proyectos activos visibles, progreso, actualización más reciente), attention → attention (tu trabajo abierto vencido o bloqueado), activity → recent_activity, goal_progress → progress y projects en cada fila de goals_preview. Una banda que no pides no aparece y no cuesta nada. Un token desconocido es 400 invalid_filter_value. |
Encabezados
| Nombre | Tipo | Requerido | Descripción |
|---|---|---|---|
| If-None-Match | string | Opcional | El ETag de tu lectura anterior. Si coincide, responde 304. |
Objeto HomePulse
| Nombre | Tipo | Requerido | Descripción |
|---|---|---|---|
| generated_at | date-time | Requerido | Cuándo se calculó la respuesta. |
| scope | enum | Requerido | La población contada: viewer_visible (todo lo que puedes ver). Uno de viewer_visible. |
| open | integer | Opcional | Tareas en un estado backlog, todo o in_progress. |
| overdue | integer | Opcional | Tareas abiertas con la fecha de vencimiento ya pasada. |
| blocked | integer | Opcional | Tareas con un bloqueo activo. |
| unread_count | integer | Requerido | Elementos no leídos. |
| counts | HomePulseCounts {open_tasks, open_tasks_on_goal_linked_projects, overdue_tasks, blocked_tasks, active_boards, active_projects, active_goals: integer} | Requerido | Conteos enteros sobre lo que puedes ver. Todos los campos están siempre presentes. |
| my_preview | object | Requerido | Tu trabajo vencido y el que vence hoy. Forma: {overdue: integer, due_today: integer, top_tasks: array of {uuid, title, due_date, priority, board (uuid)}} (all required). |
| recent_boards | array | Requerido | Elementos: {uuid, name, key, project (uuid|null), updated_at, viewer{is_member, can_see_content, can_manage}}. |
| featured_boards | array | Requerido | Elementos: {uuid, name, key, project (uuid|null), updated_at, viewer{is_member, can_see_content, can_manage}}. |
| goals_preview | array | Requerido | Elementos: {uuid, name, status, period_start, period_end}; with include=goal_progress also progress (GoalProgress|null) and projects [{uuid, name, …}]. |
| timeline_teaser | object | Requerido | Trabajo que vence pronto. Forma: {window_from: string, window_to: string, due_soon_count: integer, rows: array} (all required). |
| agent_summary | object | Requerido | Tableros donde actúan agentes y aprobaciones pendientes. Forma: {boards_advisory, boards_autonomous, pending_approvals: integer} (all required). |
| projects_preview | array | Opcional | Solo presente con include=projects. Elementos: {uuid, name, health, progress (ProjectProgress|null), latest_update (ProjectUpdate|null)}. |
| attention | array | Opcional | Solo presente con include=attention. Elementos: {uuid, key, title, due_date, priority, board, state{uuid, name, category}, overdue, blocked}. |
| recent_activity | array<ActivityEvent> | Opcional | Solo presente con include=activity. Ver ActivityEvent. |
Objeto TaskPulse
| Nombre | Tipo | Requerido | Descripción |
|---|---|---|---|
| board | Board | null | Opcional | El tablero. Ver Board. |
| window_days | integer | Requerido | — |
| generated_at | date-time | Requerido | Cuándo se calculó la respuesta. |
| group_by | enum | Requerido | La dimensión de agrupación. Uno de state, category, label, priority, board, age. |
| groups | array | Requerido | Una entrada por columna (o grupo), en orden. Siempre presentes: key, count. Elementos: {key: string, name: string|null, count: integer, oldest_age_days: integer|null}. |
| totals | object | Requerido | Forma: {total, blocked, unassigned, overdue , created_in_window, completed_in_window: integer}. |
| throughput | array | Opcional | Todos los campos están siempre presentes. Elementos: {week_start: string, created: integer, completed: integer}. |
| cycle_time_days_p50 | number | null | Opcional | — |
| cycle_time_days_p90 | number | null | Opcional | — |
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 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. |
Errores
| Estado | Cuándo |
|---|---|
| 304 | Sin cambios: el ETag que enviaste en `If-None-Match` sigue coincidiendo. |
| 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]. |
| 404 | No existe o no es visible para ti. Ambos casos devuelven el mismo cuerpo. |
curl -sS "https://api.dailybot.com/v1/plan/pulse/?include=projects,attention,activity,goal_progress" \
-H "X-API-KEY: $DAILYBOT_API_KEY"dailybot plan tasks status --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.
- 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.
Tus tableros y vistas guardadas fijados
Todos tus pines, en orden de rank (1 es el primero). Un pin cuyo destino ya no puedes ver (un tablero archivado u oculto, o una vista guardada que ya no existe o dejó de estar compartida) se omite en lugar de dar error. La lista usa el sobre de lista estándar pero nunca se pagina: next y previous siempre son null, y contiene hasta 50 pines. Requiere una persona: las keys de agente y de la organización se rechazan; una API key personal funciona.
Objeto Favorite
| Nombre | Tipo | Requerido | Descripción |
|---|---|---|---|
| uuid | uuid | Requerido | Identificador público estable. |
| target_type | enum | Requerido | Qué está fijado: board o view. Uno de board, view. |
| target_uuid | uuid | Requerido | El uuid del tablero o de la vista guardada, según target_type. |
| rank | integer | Requerido | Posición en tu lista, empezando en 1. Mínimo 1. |
| created_at | date-time | Requerido | Cuándo se creó la fila. |
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<Favorite> | Requerido | Las filas de esta página. Ver Favorite. |
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/me/favorites/" \
-H "Authorization: Bearer $DAILYBOT_TOKEN"dailybot plan tasks favorites --json{
"count": 1,
"next": null,
"previous": null,
"results": [
{
"uuid": "00000000-0000-4000-8000-000000000012",
"target_type": "board",
"target_uuid": "00000000-0000-4000-8000-000000000012",
"rank": "aU",
"created_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: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`.
Fijar un tablero o una vista guardada
Los pines nuevos quedan al final de tu lista. Fijar algo que ya está fijado devuelve el pin existente en lugar de duplicarlo. Un destino que no puedes ver es 404, nunca 403. Puedes fijar hasta 50 tableros y vistas; uno más es 400 favorite_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 |
|---|---|---|---|
| target_type | enum | Requerido | Qué está fijado: board o view. Uno de board, view. |
| target_uuid | uuid | Requerido | El uuid del tablero o de la vista guardada, según target_type. |
| 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) | Favorite | Requerido | Un objeto Favorite. |
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/me/favorites/" \
-H "Authorization: Bearer $DAILYBOT_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"target_type": "board",
"target_uuid": "00000000-0000-4000-8000-000000000012"
}'dailybot plan board star 00000000-0000-4000-8000-000000000002
dailybot plan tasks view star 00000000-0000-4000-8000-000000000010Probarlo
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`.
Mover un pin dentro de tu lista
Envía uno de after (colócalo justo debajo de ese pin), before (justo encima) o rank (posición empezando en 1, ajustada a la lista). Si envías más de uno, gana after y luego before. Los rangos se renumeran a 1..n. Un vecino que no sea uno de tus pines es 404.
Parámetros de ruta
| Nombre | Tipo | Requerido | Descripción |
|---|---|---|---|
| favorite_id | uuid | Requerido | El uuid del pin. |
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 |
|---|---|---|---|
| rank | integer | Opcional | Posición destino empezando en 1, ajustada al tamaño de la lista. Mínimo 1. |
| before | uuid | Opcional | Coloca el pin justo encima de este pin. |
| after | uuid | Opcional | Coloca el pin justo debajo de este pin. |
| 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) | Favorite | Requerido | Un objeto Favorite. |
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/me/favorites/{favorite_id}/" \
-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: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`.
Quitar un pin
Quita el pin, nunca su destino. Los pines restantes se renumeran a 1..n.
Parámetros de ruta
| Nombre | Tipo | Requerido | Descripción |
|---|---|---|---|
| favorite_id | uuid | Requerido | El uuid del pin. |
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]. |
| 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/me/favorites/{favorite_id}/" \
-H "Authorization: Bearer $DAILYBOT_TOKEN"dailybot plan board unstar 00000000-0000-4000-8000-000000000002
dailybot plan tasks view unstar 00000000-0000-4000-8000-000000000010Probarlo
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`.
Esta página es la referencia de Plan · Inicio y búsqueda. 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.