Skip to content
ver .md sin procesar

Errores de Plan

Todos los códigos de error que devuelve la API de Dailybot Plan (Beta), con su estado HTTP, qué significan y qué hacer después, incluido el 402 durante la Beta.

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].

Todo error de Plan responde con un estado HTTP y un cuerpo JSON. Decide según el code, pensado para máquinas, nunca según el detail, pensado para personas:

{
  "detail": "This task changed since you loaded it.",
  "code": "version_conflict",
  "extra": { "current_version": 9 }
}

Los errores de validación del cuerpo de una solicitud, en cambio, responden 400 con un mapa de mensajes por campo y sin la clave code. Por ejemplo, un tablero creado sin su proyecto:

{ "project": ["This field is required."] }

Busca primero code; si no está, lee el mapa de campos. Las reglas compartidas por todas las API de Dailybot, incluidos los reintentos, están en Errores.

Durante la Beta, el 402 es lo esperado

Hasta que tu organización tenga habilitada la Beta de Plan, todos los endpoints de Plan responden 402 plan_upgrade_required, sin importar la credencial que uses. Es lo esperado, no un bug: escribe a [email protected] para unirte. GET /v1/plan/entitlements/ es el único endpoint de Plan que nunca responde 402, así que puedes consultar el estado primero.

402 y 503 significan cosas distintas

Respuesta Significado Lecturas Escrituras
402 plan_upgrade_required Plan no está habilitado para tu organización (un tema del plan o de la Beta) Rechazadas Rechazadas
503 feature_temporarily_read_only Plan está temporalmente en solo lectura durante un incidente Siguen funcionando Rechazadas, reintenta más tarde

Manéjalos por separado. Un 503 nunca significa que perdiste el acceso: las lecturas siguen funcionando para que siempre puedas exportar tu trabajo.

El 404 nunca revela qué existe

Una tarea, tablero o proyecto que no existe y uno que pertenece a otra organización devuelven el mismo cuerpo 404. Los filtros se comportan igual: una clave de tablero que no corresponde a nada tuyo simplemente no coincide con nada.

Todos los códigos

400 Bad Request: la solicitud no se pudo aceptar tal como se envió

Código Estado Significado Qué hacer
actor_required 400 La llamada necesita una persona, pero la credencial es una key de agente o de la organización (por ejemplo, owner=me). Usa una sesión iniciada o una API key personal, o envía el uuid de un usuario en lugar de me.
attachment_invalid_type 400 Ese tipo de archivo no es compatible. Se aceptan imágenes PNG, JPEG, GIF y WebP; PDF; texto plano y Markdown; ZIP; y archivos de Word, Excel y PowerPoint. El servidor revisa el contenido real del archivo, no solo el tipo declarado. Sube un archivo de un tipo compatible.
attachment_limit_reached 400 La tarea, el comentario, el objetivo o el proyecto ya tiene 50 adjuntos, el máximo. Quita un adjunto antes de agregar otro.
attachment_too_large 400 El archivo supera el tamaño permitido: 25 MiB con cargas prefirmadas de tareas, 5 MiB en una sola solicitud multipart (la única forma de adjuntar a un comentario, objetivo o proyecto) o en servidores sin almacenamiento de objetos. extra.max_size_bytes indica el límite. En una tarea, usa presign → carga → confirmación; si no, envía un archivo más pequeño.
channel_not_found 400 Un id de canal que la plataforma conectada no conoce, o un canal privado donde se requiere uno público (extra.parameter: "channel"). Elige un external_id de GET /v1/plan/channels/ (type=channel para un destino personal).
comment_body_too_long 400 El comentario supera los 10.000 caracteres. Acórtalo o divídelo en varios comentarios.
delta_window_expired 400 El cursor delta tiene más de 7 días. Vuelve a leer la instantánea del tablero y continúa desde su delta_cursor.
description_too_long 400 La descripción de la tarea supera los 50.000 caracteres. Acórtala o pasa el detalle a un adjunto.
favorite_limit_reached 400 Ya tienes 50 favoritos. Quita uno antes de fijar otro.
idempotency_key_required 400 Se envió una llamada masiva sin Idempotency-Key. Agrega el header; las operaciones masivas siempre lo requieren.
invalid_agent_attribution 400 El nombre del agente supera los 128 caracteres, usa caracteres fuera de letras, números, espacios y . - _ ( ) ' # + / & , :, pertenece a un agente desactivado, o el valor de X-Dailybot-Agent-Name no se puede decodificar como UTF-8 codificado con percent-encoding; o una key de tipo agente envió un nombre de agente. Los nombres nunca se truncan. Acorta el nombre y codifica el header con percent-encoding, o quita el nombre al llamar con una key de agente. Ver Convenciones de Plan.
invalid_date_range 400 Una fecha o un rango de fechas está mal formado (las fechas son YYYY-MM-DD). Corrige el formato de la fecha.
invalid_filter_value 400 No se pudo interpretar un filtro, un token de include o un valor de la consulta (por ejemplo, state=overdue). extra.parameter indica cuál. Corrige el valor; consulta Convenciones de Plan.
invalid_idempotency_key 400 La Idempotency-Key no es una clave válida (de 8 a 128 caracteres). Envía una clave de 8 a 128 caracteres, por ejemplo un UUID.
invalid_label_filter 400 Un valor del filtro label no es un uuid de etiqueta, o hay más de 50. Envía hasta 50 uuids de etiqueta.
invalid_relation 400 El vínculo o la referencia no es válido. Por ejemplo: una tarea relacionada consigo misma o con una tarea de otro espacio de trabajo, una tarea asignada como su propia tarea padre, el límite de blocks de la tarea alcanzado, una respuesta a otra respuesta (los hilos tienen un solo nivel), una respuesta a un comentario de otra tarea o una operación masiva desconocida. detail indica cuál. Lee detail y corrige la referencia.
invalid_schedule 400 Un campo de la programación de un reporte o del resumen no es válido: extra.parameter es weekdays, time, timezone, channel o kind. Envía días ISO 1–7 (exactamente uno para un reporte semanal), HH:MM, una zona horaria IANA, y un canal o destinatarios de correo.
invalid_sort 400 Esta lista no admite el valor de sort. Usa una clave de ordenamiento que el endpoint documente.
last_done_state 400 Un tablero debe conservar al menos una columna activa en la categoría done; se rechaza archivar o cambiar de categoría la última. Agrega primero otra columna done.
milestone_not_on_project 400 El hito pertenece a un proyecto distinto del proyecto del tablero de la tarea. Elige un hito del proyecto del tablero.
move_board_state_invalid 400 Un movimiento a otro tablero indicó un estado de destino (o un mapa de estados) que no corresponde al tablero de destino. Envía un state del tablero de destino, o un state_map válido.
notification_routes_limit_reached 400 La organización ya tiene 10 rutas de canal (extra.limit). Borra o reutiliza una ruta.
participant_cannot_access_board 400 La persona que asignaste como responsable o participante no puede ver el tablero. Dale acceso al tablero primero, o elige a alguien de …/mentionables/.
platform_not_connected 400 La organización no tiene una plataforma de chat donde publicar o buscar canales. Conecta primero Slack, Microsoft Teams, Discord o Google Chat.
reaction_invalid_emoji 400 La reacción debe ser un solo emoji (32 caracteres como máximo). Envía un solo emoji.
reaction_limit_reached 400 Ya tienes el máximo de emojis distintos en este comentario o actualización (extra.limit). Quita primero una de tus reacciones.
report_schedules_limit_reached 400 La organización ya tiene 10 reportes programados (extra.limit). Borra o reutiliza un reporte programado.
route_scope_not_org_visible 400 El alcance de una ruta o reporte nombra un tablero o proyecto solo para miembros (extra.uuids). Los canales solo reciben lo que todo el espacio de trabajo puede ver. Quita esos uuids del alcance.
search_query_too_long 400 El texto de búsqueda supera los 256 caracteres. Acorta la búsqueda.
search_query_too_short 400 El texto de búsqueda tiene menos de 2 caracteres. Envía al menos 2 caracteres.
state_not_on_board 400 El estado que indicaste no pertenece al tablero de la tarea. Usa un uuid de estado de GET …/boards/{board_id}/states/.
states_reorder_invalid 400 La lista de reordenamiento no incluye cada columna activa exactamente una vez. Envía el uuid de cada estado activo una vez, en orden.
subtask_cross_board 400 Una subtarea debe estar en el mismo tablero que su tarea padre. También se devuelve al mover a otro tablero una tarea que todavía tiene subtareas activas, o que es a su vez subtarea de una tarea del tablero de origen. Desvincula o mueve primero las subtareas, o deja la tarea en el tablero de su tarea padre.
subtask_depth_exceeded 400 Las subtareas solo se anidan un nivel. Asígnala a una tarea de primer nivel.
too_many_filter_values 400 Un filtro repetible tiene más de 50 valores (extra.limit da el número exacto). Envía menos valores por solicitud.
too_many_items 400 La llamada masiva tiene más de 100 elementos. Divídela en llamadas de hasta 100 elementos.
unknown_field 400 Un campo del cuerpo que el endpoint no acepta (extra.parameter lo nombra). Se rechaza, nunca se descarta en silencio. Quita el campo.
unknown_notification_kind 400 Un tipo de notificación que no está en el catálogo (extra.parameter: "kind"). Usa una key de GET /v1/plan/notifications/catalog/: tipos personales para tus interruptores, tipos de la organización para una ruta.
update_body_too_long 400 La actualización del proyecto supera los 20.000 caracteres (extra.max_length). Acorta la actualización.
version_precondition_ambiguous 400 Se enviaron If-Match y el campo version del cuerpo, con valores distintos. Envía solo uno de los dos.
view_limit_reached 400 Ya tienes 20 vistas guardadas personales en este tablero, el límite. Elimina una vista antes de guardar otra.

401 Unauthorized: falta la credencial o no es válida

Código Estado Significado Qué hacer
api_key_owner_inactive 401 La persona dueña de la API key fue desactivada. Crea una clave para una persona activa.
credential_absent 401 No se envió ninguna credencial. Envía Authorization: Bearer … o X-API-KEY.
credential_expired 401 La credencial venció. Vuelve a iniciar sesión (dailybot login) o usa una clave vigente.
credential_malformed 401 No se pudo leer la credencial. Revisa el nombre y el valor del header.
invalid_credentials 401 La clave o el token no existe. Usa una credencial válida.
plan_free_api_keys_forbidden 401 Las API keys no están disponibles en el plan gratuito. Usa un token de usuario del CLI, o mejora el plan.
plan_missing_core_api_integrations 401 El plan de la organización no incluye acceso a la API. Cambia a un plan con acceso a la API.

402 Payment Required: Plan no está habilitado, o se alcanzó un límite del plan

Código Estado Significado Qué hacer
plan_upgrade_required 402 Plan todavía no está habilitado para tu organización. Es lo esperado durante la Beta. (Un inicio de sesión del CLI en el plan gratuito recibe 403 con el mismo código). Escribe a [email protected] para unirte a la Beta. GET /v1/plan/entitlements/ muestra el estado.
task_boards_limit_reached 402 Se alcanzó el límite del plan para tableros (el plan gratuito incluye hasta 3 tableros). Archiva un tablero para liberar un lugar, o mejora el plan.
task_projects_limit_reached 402 Se alcanzó el límite del plan para proyectos (el plan gratuito incluye 1 proyecto). Archiva un proyecto para liberar un lugar, o mejora el plan.

403 Forbidden: iniciaste sesión, pero no tienes permiso

Código Estado Significado Qué hacer
attachment_delete_forbidden 403 Solo quien subió el adjunto o quien administra la organización puede quitarlo; en un comentario, también quien lo escribió. Pídeselo a quien lo subió, a quien escribió el comentario o a quien administra la organización.
comment_not_author 403 Solo quien escribió este comentario puede editarlo, eliminarlo o adjuntarle archivos. Pídeselo a quien lo escribió.
guest_not_allowed 403 Las cuentas de invitado no pueden usar Plan. Usa una cuenta de miembro.
insufficient_scope 403 A la credencial le falta el scope que necesita este endpoint (tasks:read, tasks:write o tasks:admin). La sesión iniciada y la API key personal de un miembro no invitado pueden llamar a todos los endpoints, así que esto significa que los scopes de Plan explícitos de la fila de la key no cubren el endpoint, o que una key de agente o de la organización llamó a un endpoint que requiere una persona. Usa una API key personal o una sesión iniciada, o agrega el scope que falta a la key. Consulta Autenticación y scopes para Plan.
task_archived 403 Una tarea archivada no se puede duplicar. Restaura la tarea primero y luego duplícala.
update_not_author 403 Solo la persona autora de una actualización de proyecto puede editarla o adjuntarle archivos; la persona autora o un administrador de la organización puede eliminarla. Pídeselo a quien la escribió, o a un administrador de la organización para eliminarla.
view_visibility_forbidden 403 Solo quien administra el tablero puede hacer una vista shared o board_default, o editarla o eliminarla. Deja la vista como personal, o pídeselo a quien administra el tablero.

404 Not Found: el objeto no existe o no es visible para ti

Código Estado Significado Qué hacer
not_found 404 El objeto no existe, o no es visible para ti (por ejemplo un proyecto o tablero members sin grant). Ambos casos devuelven el mismo cuerpo a propósito. Revisa el identificador. Trátalo como no visible, nunca como “no permitido”.

409 Conflict: la solicitud choca con el estado actual

Código Estado Significado Qué hacer
attachment_not_ready 409 La carga nunca se completó ni se confirmó. Termina la carga y llama a …/confirm/.
board_not_initialized 409 Al tablero le falta una columna que la operación necesita: no hay columna predeterminada donde crear la tarea, o no hay columna done donde cerrarla. Agrega la columna que falta al tablero.
duplicate_board_key 409 Otro tablero ya usa esta clave (las claves retiradas siguen reservadas). Elige otra clave.
goal_name_conflict 409 Ya existe un objetivo activo con este nombre. Cambia el nombre de uno de los objetivos.
idempotency_in_progress 409 Una llamada con la misma Idempotency-Key todavía está en curso (hasta 120 segundos). Espera y reintenta con la misma clave.
idempotency_key_payload_mismatch 409 La Idempotency-Key ya se usó con un cuerpo distinto. Usa una clave nueva para cada operación nueva.
identifier_allocation_failed 409 No se pudo asignar una clave de tarea (KEY-n) porque se estaban creando varias tareas al mismo tiempo. Reintenta la solicitud con la misma Idempotency-Key.
label_in_use 409 La etiqueta todavía está en uso en tareas, así que no se puede eliminar. Archívala con PATCH {"is_archived": true}.
last_grant_cannot_be_removed 409 Es el último miembro de un tablero o proyecto restringido a sus miembros. Agrega otro miembro primero, o hazlo visible para toda la organización.
project_name_conflict 409 Ya existe un proyecto en el espacio de trabajo, activo o archivado, con este nombre. Elige otro nombre, o cambia el nombre del otro proyecto.
rank_neighbor_missing 409 La tarea after / before cambió de lugar. La respuesta indica la primera y la última tarea actuales de la columna. Reintenta con una tarea vecina actual.
relation_cycle 409 El vínculo crearía un ciclo. Vincula las tareas en el sentido contrario, o no las vincules.
relation_exists 409 Las dos tareas ya están vinculadas de esta forma. No hace falta hacer nada.
state_in_use 409 Todavía hay tareas activas en el estado (columna), o una restauración apunta a un estado archivado. Envía migrate_to, o restaura a otro estado.
version_conflict 409 La tarea cambió desde que la cargaste. extra.current_version tiene la versión nueva. Vuelve a leerla, concilia los cambios y reintenta con la versión nueva.

412, 422 y 428: precondiciones y ubicación

Código Estado Significado Qué hacer
column_too_large 422 La columna de destino llegó a su límite de 5.000 tareas. Mueve o archiva tareas, o divide el tablero.
precondition_failed 412 El validador If-Match de una escritura en una vista guardada está desactualizado. Vuelve a leer las vistas y reintenta con el nuevo ETag.
precondition_required 428 Se envió una escritura en una vista guardada sin If-Match. Envía el ETag de tu última lectura.

501 y 503: no disponible por ahora

Código Estado Significado Qué hacer
not_implemented 501 La operación todavía no está disponible. Por ejemplo, definir milestone al crear una tarea: defínelo con PATCH después de crear la tarea. Usa la alternativa documentada, o revisa el changelog de la API.
attachment_storage_unavailable 503 El almacenamiento de archivos no está disponible temporalmente. Reintenta más tarde.
feature_temporarily_read_only 503 Plan está temporalmente en solo lectura durante un incidente. Las lecturas siguen funcionando, así que siempre puedes exportar tu trabajo. No es lo mismo que 402. Reintenta las escrituras más tarde; sigue leyendo con normalidad.

429 Too Many Requests

Si superas un límite de solicitudes (lecturas 120, escrituras 60, masivas 30, feed delta 240 por minuto por actor), la API responde 429 con un header Retry-After. Espera esa cantidad de segundos antes de reintentar. Consulta Convenciones de Plan.

Código Estado Significado Qué hacer
throttled 429 Se alcanzó un límite de solicitudes para este actor. extra.retry_after y el header Retry-After dicen cuántos segundos esperar. Espera ese tiempo y reintenta.