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.
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 devuelve200, aunque fallen todas sus tareas. El estado HTTP describe la solicitud;
results[].success describe cada tarea.
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: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".