Saltar al contenido

Errores

Una única estructura de error, códigos estables y reglas de reintento claras.

Todas las respuestas que no son 2xx tienen la misma estructura. Basa tu lógica en error.code, nunca en message.

JSON
{
  "error": {
    "code": "validation_failed",
    "message": "The request is invalid.",
    "request_id": "req_8fK2Lq9ZtX4mN7bV1cW3yH6p",
    "details": [
      {
        "path": "items[3].length",
        "code": "out_of_range",
        "message": "length must be greater than 0."
      }
    ]
  }
}
CampoContenido
codeEstable, en snake_case
messageEn inglés, para los registros
request_idTambién en X-Request-Id. Indícalo al soporte
details[]En 400/422: path, code y message de cada problema

Códigos

EstadoCódigoSignificadoQué hacerReintentar
400invalid_jsonEl cuerpo no es JSON válido o un campo tiene un tipo incorrecto.Corrige el cuerpo de la solicitud.No
401unauthorizedClave de API ausente, mal formada o desconocida.Envía Authorization: Bearer cd_live_…; comprueba que copiaste la clave completa.No
401key_revokedLa clave se ha revocado.Crea una clave nueva en la consola de desarrolladores.No
401key_expiredLa clave ha superado su fecha de caducidad.Crea una clave nueva en la consola de desarrolladores.No
402insufficient_creditsLos créditos disponibles no cubren el coste mínimo posible de este trabajo.Compra una recarga de créditos o espera a los créditos mensuales; no se ha cobrado nada.No
403ip_not_allowedLa IP de origen no está en la lista de IP permitidas de la clave.Llama desde una IP permitida o edita la lista de IP permitidas.No
403subscription_inactiveLa organización no tiene ninguna suscripción activa que incluya la API.Renueva la suscripción.No
403account_inactiveLa organización está suspendida o no tiene ningún propietario con la cuenta activa.Contacta con el soporte.No
403scope_missingA la clave le falta un permiso que requiere este endpoint.Usa una clave con el permiso necesario (pack:write, jobs:read, account:read, resources:read, resources:write).No
403preset_read_onlyLos vehículos predefinidos no se pueden modificar ni eliminar.Crea tu propio vehículo con POST /v1/vehicles.No
403plan_limit_reachedEl plan de la organización no permite más proyectos ni artículos de carga.Elimina los proyectos que ya no necesites o cámbiate a un plan superior.No
404not_foundNingún endpoint de /v1 tiene este método y esta ruta.Comprueba el método y la ruta en la lista de endpoints.No
404job_not_foundNo hay ningún trabajo con este ID en tu organización.Comprueba el ID.No
404vehicle_not_foundNo hay ningún vehículo con este ID entre los predefinidos ni entre los vehículos de tu organización.Comprueba el ID con GET /v1/vehicles.No
404template_not_foundNo hay ninguna plantilla con este ID en tu organización.Comprueba el ID con GET /v1/templates.No
404project_not_foundNo hay ningún proyecto con este ID en tu organización.Comprueba el ID con GET /v1/projects.No
409job_not_finishedEl trabajo sigue en cola o en curso.Consulta GET /v1/jobs/{id} hasta que status sea succeeded.Sí
409project_busySe está calculando la carga del proyecto en este momento (en la aplicación o en otro trabajo).Espera a que termine ese cálculo y vuelve a intentarlo.Sí
409job_failedEl trabajo ha fallado; no tiene resultado.Lee job.error; los fallos por nuestra parte no se cobran (time_limit_exceeded se cobra como un trabajo cancelado). Vuelve a enviarlo si la causa era temporal.No
409job_canceledEl trabajo se canceló; no tiene resultado.Vuelve a enviarlo si lo necesitas.No
409job_already_finishedEl trabajo ya ha terminado y no se puede cancelar.No hay nada que hacer.No
400idempotency_key_invalidLa cabecera Idempotency-Key tiene más de 128 caracteres.Usa una clave más corta (un UUID sirve).No
410result_expiredEl resultado superó el periodo de conservación y se eliminó.Vuelve a enviar el trabajo si necesitas el plan de nuevo.No
413payload_too_largeEl cuerpo de la solicitud supera los 10 MB.Envía menos artículos o artículos más simples.No
422validation_failedLa solicitud es JSON bien formado, pero describe un trabajo no válido. details[] enumera todos los problemas.Corrige cada details[].path; los errores de validación son gratuitos.No
429rate_limitedDemasiadas solicitudes en el minuto, la hora o el día en curso (por clave o por organización), o más de 60 autenticaciones fallidas por minuto desde tu dirección IP.Espera los segundos que indica Retry-After y reintenta con backoff.Sí
429too_many_jobsLa organización ya tiene el número máximo de trabajos en cola + en curso.Espera a que terminen los trabajos en curso y vuelve a intentarlo.Sí
500internal_errorAlgo ha fallado por nuestra parte.Reintenta con backoff; si persiste, indica el request_id al soporte.Sí
503api_disabledLa API está desactivada temporalmente (mantenimiento) o deshabilitada para la organización.Vuelve a intentarlo más tarde.Sí

Detalles de validación

details[].code en 422 validation_failed:

CódigoSignificado
requiredFalta un campo obligatorio
invalid_valueTipo incorrecto o valor no permitido
out_of_rangeDemasiado pequeño, demasiado grande o demasiado largo
duplicate_idUn ID se usa dos veces
unknown_vehicleNo hay ningún vehículo predefinido ni tuyo con este vehicle_id
unknown_templateNo hay ninguna plantilla tuya con este template_id
type_not_allowedTipo de vehículo no habilitado para tu organización
unknown_groupUn artículo indica un grupo que no está en la lista
does_not_fitEl artículo no cabe en ninguno de los vehículos indicados
too_many_itemsMás unidades de artículos que el límite por trabajo
too_many_vehiclesMás vehículos que el límite por trabajo
unknown_fieldUn campo que la API no reconoce

Errores de trabajo

Un trabajo failed o canceled indica el motivo en job.error.code:

CódigoSignificado
canceledCancelado con DELETE /v1/jobs/{id}. Se cobra la tarifa base + el cómputo usado.
time_limit_exceededEl presupuesto de cómputo se agotó antes de completar ningún vehículo. Se cobra como un trabajo cancelado: tarifa por trabajo, recargo por carga grande y cómputo usado, nunca la tarifa por vehículo.
engine_failedEl motor de carga ha fallado. No se cobra.
queue_timeoutEl trabajo esperó demasiado a que quedara libre un hueco de cómputo. No se cobra.
server_restartedEl servicio se reinició mientras el trabajo estaba en cola o en curso. No se cobra.

Reintentos

Reintenta 429, 500 y 503 con backoff exponencial, respetando Retry-After. Envía la misma Idempotency-Key (Idempotencia). No reintentes nunca otros errores 4xx sin modificar la solicitud.

Ver también