Skip to main content
As falhas compartilham um único envelope:
code é estável e seguro para ramificações. message é para pessoas e pode mudar. details aparece quando conseguimos apontar o campo com problema.

Códigos

400 é para uma requisição que não conseguimos interpretar nem entender. 422 é reservado para uma requisição perfeitamente formada que não conseguimos atender na região solicitada. Ramificar por error.code é mais durável do que pelo status.

Recusas por região

Os dois códigos de região são decididos antes de a tarefa entrar na fila, então você fica sabendo na hora, em vez de ver uma tarefa gastar todas as tentativas e falhar com um erro que só mostra o sintoma. REGION_UNSUPPORTED é permanente: esse mecanismo não pode atender o país solicitado.
Veja a tabela de combinações não atendidas. REGION_UNAVAILABLE é transitório: a rota existe, mas nada pode atendê-la neste momento. Consulte GET /capacity para ver o que cada região consegue atender agora.

Falhas de lote são por item

Um lote bem formado sempre retorna 200, mesmo que todas as tarefas dele falhem. O status HTTP descreve a requisição; results[].success descreve cada tarefa.
Só uma requisição malformada como um todo (não é JSON, não é array, vazia, mais de 500 itens, mais de 8 MB ou não autorizada) gera um 4xx para o próprio lote.
Um item do lote pode falhar com REGION_UNAVAILABLE ou ENQUEUE_ERROR, e nenhum dos dois consta no enum de erros por item do contrato de tarefas assíncronas que esta API implementa. Ambos são acréscimos, não substituições: VALIDATION_ERROR e RESOURCE_ALREADY_EXISTS não mudam.

Falhas no nível da tarefa

Uma tarefa que falha depois de entrar na fila não gera nenhum erro HTTP. Você descobre pelo status final:
Repare na diferença de formato: este error de nível superior é uma string, não o objeto {code, message, timestamp} dos erros de requisição. Ele começa com um código seguido de uma frase fixa para esse código, então decida pelo código: ENGINE_TIMEOUT, ENGINE_NO_RESULT, ENGINE_FAILED, ou NO_IP_AVAILABLE e NO_ACCOUNT_AVAILABLE quando nenhuma capacidade ficou livre a tempo (tentar de novo mais tarde costuma funcionar). BAD_PAYLOAD e PAGE_UNAVAILABLE (uma página do Naver que não pode ser lida de forma anônima) mantêm uma mensagem que diz o que mudar. A mesma tarefa entrega um webhook com task.status === "FAILED".