Skip to main content
Los fallos comparten un único sobre:
code es estable y seguro para ramificar. message es para personas y puede cambiar. details aparece cuando podemos identificar el campo problemático.

Códigos

400 es para una solicitud que no podemos parsear ni entender. 422 se reserva para una solicitud perfectamente formada que no podemos servir en la región pedida. Ramificar por error.code es más duradero que por el estado.

Rechazos por región

Ambos códigos de región se deciden antes de encolar la tarea, así lo sabes de inmediato en lugar de ver cómo una tarea agota sus reintentos y falla con un error que solo muestra el síntoma. REGION_UNSUPPORTED es permanente: ese motor no puede servir el país solicitado.
Consulta la tabla de combinaciones no servibles. REGION_UNAVAILABLE es transitorio: la ruta existe pero ahora mismo nada puede servirla. Consulta GET /capacity para ver qué puede servir cada región en este momento.

Los fallos de lote son por elemento

Un lote bien formado siempre devuelve 200, aunque fallen todas sus tareas. El estado HTTP describe la solicitud; results[].success describe cada tarea.
Solo una solicitud mal formada en su conjunto (no JSON, no es un array, vacía, más de 500 elementos, más de 8 MB o sin autorización) produce un 4xx para el lote en sí.
Un elemento del lote puede fallar con REGION_UNAVAILABLE o ENQUEUE_ERROR, y ninguno figura en el enum de errores por elemento del contrato de tareas asíncronas que implementa esta API. Son añadidos, no sustituciones: VALIDATION_ERROR y RESOURCE_ALREADY_EXISTS no cambian.

Fallos a nivel de tarea

Una tarea que falla después de entrar en cola no produce ningún error HTTP. Lo sabrás por el estado final:
Fíjate en la diferencia de forma: este error de nivel superior es una cadena, no el objeto {code, message, timestamp} de los errores de solicitud. Empieza con un código seguido de una frase fija para ese código, así que decide según el código: ENGINE_TIMEOUT, ENGINE_NO_RESULT, ENGINE_FAILED, o NO_IP_AVAILABLE y NO_ACCOUNT_AVAILABLE cuando no se liberó capacidad a tiempo (reintentar más tarde suele funcionar). BAD_PAYLOAD y PAGE_UNAVAILABLE (una página de Naver que no se puede leer de forma anónima) conservan un mensaje que indica qué cambiar. La misma tarea entrega un webhook con task.status === "FAILED".