Errores y Códigos de Estado · Developers
Códigos HTTP retornados por la API pública de Dailybot, códigos de error legibles por máquinas y cómo recuperarte.
La API de Dailybot retorna códigos HTTP estándar en cada respuesta. Las respuestas exitosas están en el rango 2xx; los errores de cliente en 4xx; los errores del servidor en 5xx. Todo error sigue el mismo formato: un string detail de alto nivel, un code legible por máquina y errores de validación opcionales por campo bajo errors.
Envelope de respuesta de error
Todo respuesta non-2xx es un objeto JSON con al menos un campo detail y code. Los errores de validación (respuestas 400 en endpoints de escritura) incluyen además un mapa errors por campo.
{
"detail": "Explicación legible por humanos",
"code": "codigo_legible_por_maquina"
}
Algunos errores incluyen campos adicionales:
upgrade_url— presente en respuestasplan_upgrade_required, enlazando directamente a la página de upgrade de facturación- Header
Retry-After— presente en respuestas429, indicando segundos hasta que el límite se reinicia
Siempre despachá sobre
code, nunca sobredetail. El stringdetailes para humanos; puede cambiar. Los valores decodeestán congelados.
Códigos de estado de la API pública
| Estado | Cuándo lo recibes | Cómo recuperarte |
|---|---|---|
| 200 OK | GET, PATCH o POST exitoso que retorna el recurso. | Nada — éxito. |
| 201 Created | POST exitoso que crea un nuevo recurso. | El recurso está en el cuerpo; nota el uuid. |
| 202 Accepted | Solicitud aceptada para procesamiento asíncrono. | Sondea o suscríbete a un webhook. |
| 204 No Content | DELETE o PATCH exitoso sin cuerpo de respuesta. | Sin cuerpo — éxito. |
| 400 Bad Request | Error de validación. El campo code tiene detalles. |
Corrige el payload y reintenta. Nunca reintentes a ciegas. |
| 401 Unauthorized | Credencial faltante, expirada o inválida. | Confirma tu API key o refresca tu sesión CLI con dailybot login. |
| 403 Forbidden | La credencial es válida pero el llamante no tiene permiso. Ver code. |
Revisa el campo code y la matriz de autenticación. |
| 404 Not Found | El recurso no existe o el llamante no puede verlo. | Verifica el UUID y el alcance de la credencial. |
| 409 Conflict | El write entra en conflicto con el estado actual. | Relee el recurso, elige el siguiente estado correcto, reintenta. |
| 422 Unprocessable Entity | El payload es sintácticamente válido pero semánticamente inválido. | Lee detail — identifica el campo ofensivo. |
| 429 Too Many Requests | Límite de rate excedido. | Respeta el header Retry-After. Ver /es/developers/rate-limits. |
| 500 Internal Server Error | Error inesperado del lado de Dailybot. | Reintenta con backoff exponencial. |
| 502 / 503 / 504 | Interrupción upstream o ventana de mantenimiento. | Reintenta con backoff exponencial. |
Política de reintentos
Reintenta solo en 429, 502, 503, 504 y 5xx idempotentes. Nunca reintentes un 4xx a ciegas — el error es de tu lado. Para 429, respeta Retry-After; para 5xx, usa backoff exponencial (empieza en 250 ms, máximo 30 s, añade jitter).
Códigos de error legibles por máquina
Toda respuesta de plan-gate, capability-gate o rate-limit lleva un campo code estable junto al detail legible por humanos. Despachá sobre code, nunca parsees la prosa.
Garantía de estabilidad: Los valores de
codelistados aquí están congelados — los valores existentes nunca cambiarán de significado ni serán reutilizados.
Códigos de autenticación y plan
code |
HTTP | Cuándo lo recibes |
|---|---|---|
invalid_credentials |
403 | Las credenciales no resuelven a una key o token válido |
api_key_owner_inactive |
403 | El propietario de la API key está desactivado |
plan_free_api_keys_forbidden |
403 | La organización de la API key está en el plan gratuito |
plan_missing_core_api_integrations |
403 | El plan de la org no incluye acceso a la API |
plan_upgrade_required |
403 | Token CLI Bearer de plan gratuito en endpoint no allowlisted |
free_plan_daily_limit_exceeded |
429 | Límite diario del plan gratuito alcanzado |
org_admin_required |
403 | La acción requiere rol de admin de la organización |
member_in_scope_required |
403 | El usuario destino no está en la misma organización |
Códigos de gestión de API keys
code |
HTTP | Cuándo lo recibes |
|---|---|---|
agent_key_admin_only |
400 | Un no-admin intentó crear una agent key |
target_user_inactive |
400 | El usuario destino para la creación de key está desactivado |
target_user_not_found |
400 | UUID de usuario destino no encontrado en la organización |
Códigos de mensajería
code |
HTTP | Cuándo lo recibes |
|---|---|---|
send_as_user_conflict |
400 | send_as_user combinado con bot_username, bot_icon_url o bot_icon_emoji |
send_as_user_invalid_uuid |
400 | Formato UUID inválido en send_as_user |
send_as_user_not_found |
400 | Usuario no encontrado, inactivo o en una org diferente |
cli_send_message_target_not_allowed |
403 | Llamante CLI intentó enviar mensaje a un destino fuera de alcance |
Códigos de filtros y query
code |
HTTP | Cuándo lo recibes |
|---|---|---|
search_query_too_long |
400 | ?search= excede 256 caracteres. Aplica de forma uniforme a /v1/forms/, /v1/checkins/, /v1/forms/{uuid}/responses/, /v1/checkins/{uuid}/responses/, /v1/kudos/, /v1/workflows/, /v1/users/. |
invalid_date_range |
400 | ?start_date o ?end_date no es una fecha válida YYYY-MM-DD, o start_date > end_date. Aplica a todo endpoint que acepta start_date / end_date. |
invalid_user_identifier |
400 | ?user= no es un UUID válido. Usa el UUID del usuario de GET /v1/users/. Aplica a /v1/checkins/{uuid}/responses/ y /v1/forms/{uuid}/responses/. |
not_valid_kudos_filter |
400 | Alias deprecado — usa invalid_kudos_filter. |
invalid_kudos_filter |
400 | ?filter= no es uno de kudos_received / kudos_given (sin distinción de mayúsculas). Aplica a /v1/kudos/ y /v1/kudos/organization/. |
invalid_sender_uuid |
400 | ?sender_uuid= no es un UUID válido. Aplica a /v1/kudos/ y /v1/kudos/organization/. |
invalid_receiver_uuid |
400 | ?receiver_uuid= no es un UUID válido. Aplica a /v1/kudos/ y /v1/kudos/organization/. |
invalid_workflow_state |
400 | ?state= no es un estado de workflow válido para el form. Aplica a /v1/forms/{uuid}/responses/. |
form_response_view_all_forbidden |
403 | Un miembro usó ?all=true en un form del que no puede ver todas las respuestas. |
Respuestas de error en JSON: Toda respuesta de error de
/v1/**está garantizada comoapplication/json— la API nunca devuelve páginas HTML de error para fallas de validación de entrada del cliente.
Códigos de autoría (forms y check-ins)
code |
HTTP | Cuándo lo recibes |
|---|---|---|
unknown_field |
400 | El cuerpo contiene una clave no reconocida en endpoints de configuración |
questions_required |
400 | Create llamado sin al menos una pregunta |
short_question_required |
400 | Pregunta sin short_question y sin generate_short_question |
checkin_requires_participant |
400 | Crear check-in con cero participantes |
anonymous_irreversible |
400 | Intento de deshabilitar anonimato en un check-in anónimo |
report_channel_not_found |
400 | report_channels contiene un ID no en GET /v1/report-channels/ |
too_many_report_channels |
400 | Más de 3 canales de reporte provistos |
question_uuids_incomplete |
400 | Reorder sin todos los UUIDs de preguntas |
Endpoints solo para admin
Los miembros que no son admin reciben 403 con code: "org_admin_required" en estos endpoints:
| Endpoint | Métodos |
|---|---|
/v1/kudos/organization/ |
GET |
/v1/webhook-subscription/ |
POST, DELETE |
/v1/webhook-subscription/sample/ |
POST |
/v1/open-conversation/ |
POST |
/v1/teams/{uuid}/members/{uuid}/ |
GET, PUT, PATCH, DELETE |
/v1/teams/{uuid}/invite/ |
POST |
/v1/followups/ |
POST (solo create) |