Erros
Toda negativa diz quem disse não, porque é isso que define o seu próximo passo. Três delas não custam nada, a não ser que um script seu tenha rodado na página antes: aí só falha nossa continua de graça.
| Código | HTTP | Quem disse não |
|---|---|---|
| VALIDATION_ERROR | 400 | - |
| INVALID_URL | 400 | - |
| SSRF_DENIED | 400 | A nossa política disse não0cr· recusada · não cobrada |
| UNAUTHORIZED | 401 | - |
| INVALID_TOKEN | 401 | - |
| PLAN_GATE | 402 | - |
| FORBIDDEN | 403 | - |
| AUP_DENIED | 403 | A nossa política disse não0cr· recusada · não cobrada |
| NOT_FOUND | 404 | - |
| SESSION_NOT_FOUND | 404 | - |
| CONFLICT | 409 | - |
| PAYLOAD_TOO_LARGE | 413 | - |
| UPSTREAM_BLOCKED | 422 | O site disse não0cr· bloqueada · não cobrada |
| NAV_TIMEOUT | 422 | O tempo acabou0cr· tempo esgotado · não cobrada |
| PROXY_REFUSED | 422 | - |
| FILE_TOO_LARGE | 422 | - |
| DOCUMENT_TIMEOUT | 422 | - |
| ACTION_FAILED | 422 | - |
| RATE_LIMIT_EXCEEDED | 429 | - |
| QUOTA_EXCEEDED | 429 | - |
| INTERNAL_ERROR | 500 | A gente quebrou0cr· estornada |
| SERVICE_UNAVAILABLE | 503 | A gente quebrou0cr· estornada |
| BILLING_UNAVAILABLE | 503 | A gente quebrou0cr· estornada |
O site disse não
Um bloqueio anti-bot, um captcha ou uma negativa seca. Nada quebrou, e nada foi cobrado, a não ser que um script seu de browser.actions tenha rodado na página antes. Repetir a chamada idêntica traz a resposta idêntica. Mude alguma coisa: a engine browser, outro país de saída, o seu próprio proxy.
O tempo acabou
A página não ficou pronta antes de o timeoutMs acabar (NAV_TIMEOUT). Ninguém disse não, e nada foi cobrado, a não ser que um script seu de browser.actions tenha rodado na página antes. Dê mais tempo: aumente o timeoutMs ou peça menos formatos.
A nossa política disse não
Um endereço privado, de loopback ou link-local (em qualquer salto de qualquer redirecionamento), ou um host na lista de uso aceitável. Repetir não adianta, e nada foi cobrado, a não ser que um script seu de browser.actions tenha levado a página até lá. Troque a URL.
A gente quebrou
Um 5xx é nosso. Já foi estornado antes de você ler, e é o único erro que vale repetir exatamente igual.
O resto é nosso explicar e seu resolver
Um campo errado, uma chave que falta ou foi revogada, uma cota gasta, um plano que não inclui aquilo. Cada uma diz qual campo ou qual limite, e um limite que passa esperando vem com Retry-After e o momento em que zera. Um passo seu em browser.actions que não funcionou responde ACTION_FAILED, diz qual passo e por quê, e não custa nada. Com script é diferente. Depois que um script seu começa a rodar, a chamada é cobrada mesmo que um passo falhe, o site bloqueie a página, o tempo acabe, a nossa política recuse o endereço para onde o script foi, o seu próprio proxy não abra a conexão ou um seletor seu fique lento demais na página que ele montou, porque o script pode já ter lido a página. Um 5xx continua sendo estornado.
Deixe folga entre o seu timeout e o nosso
Uma negativa que a gente devolve é informação: UPSTREAM_BLOCKED quer dizer que o site disse não. Se o prazo do seu cliente for igual ao timeoutMs que você envia, os dois disputam, e quando o seu ganha, chega um erro de transporte no lugar, que parece falha nossa e joga fora uma resposta verdadeira que já estava na linha. Deixe o seu prazo bem acima do que você manda pra gente; dez segundos bastam. Isso pesa mais se você estorna ou tenta de novo do seu lado, porque a disputa transforma “o site bloqueou” em “a chamada quebrou”, e as duas pedem tratamento oposto.
O formato de uma negativa
{
"error": {
"code": "UPSTREAM_BLOCKED",
"message": "example.com refused the request (cloudflare)",
"details": { "status": 403, "reason": "cloudflare", "finalUrl": "https://example.com/" }
}
}
x-request-cost: 0
x-credits-remaining: 987Sempre este envelope. details traz o caminho do campo e a regra que ele quebrou, nunca o valor que você enviou.