Como ler um erro#
Há dois formatos:
{ "error": "invalid_amount", "message": "Valor abaixo do mínimo aceito: CHF 0,80." }{ "message": "O campo customer.email é obrigatório.", "errors": { "customer.email": ["O campo customer.email é obrigatório."] } }O primeiro é erro de regra: decida pelo campo error, que é fixo. O segundo é erro de campo (validação), com a lista em errors. O texto de message serve para log e apoio e pode mudar.
Alguns erros trazem campos extras, sempre como acréscimo:
| Campo | Onde aparece | Para que serve |
|---|---|---|
retryable |
502 e 503 do cartão |
true: vale repetir com uma Idempotency-Key nova. false: não repita igual |
retry_same_key |
502 acquirer_error do Pix em POST /transactions |
Só vem com true: a cobrança pode ter sido criada. Repita a mesma chamada, com a mesma Idempotency-Key e o mesmo corpo, e nunca com uma chave nova |
Header Retry-After |
429, 503 e fx_unavailable |
Segundos que você deve esperar antes de repetir |
max_amount_cents, min_amount_cents, currency |
422 invalid_amount do cartão |
O limite da adquirente, na moeda que você mandou |
alternatives |
422 invalid_amount acima do máximo |
Outras adquirentes habilitadas na conta que aceitam o valor |
field |
422 invalid_appearance do Checkout Brasil |
O caminho da chave de appearance recusada, por exemplo appearance.button.text |
Repetir ou não#
A regra única de repetição, com o que a API devolve em cada caso, está em como repetir com segurança. Em resumo:
4xx: nada foi criado. Corrija o que for preciso e, se for repetir, use umaIdempotency-Keynova. Repetir a mesma chave devolve409.502ou503com o JSON da API: nada foi criado. Repita com umaIdempotency-Keynova, depois doRetry-Afterquando ele vier. No502do cartão, só com"retryable": true.502 acquirer_errorcom"retry_same_key": true(só no Pix dePOST /transactions): é a exceção da linha acima. A cobrança pode ter sido criada na adquirente. Repita a mesma chamada, com a mesmaIdempotency-Keye o mesmo corpo da primeira tentativa: a chave fica livre para essa repetição, e só para ela. Com outro corpo, a resposta é422 idempotency_key_mismatch. Nunca use uma chave nova para esse pedido, porque ela pode gerar uma segunda cobrança.500: algo pode ter sido criado. Não use umaIdempotency-Keynova antes de conferir no painel. EmPOST /elements/checkout, repita antes a mesma chamada, igual: se nada foi criado, ela roda de novo.- Sem resposta (falha de conexão, timeout ou resposta sem o JSON da API): repita a mesma chamada, com a mesma
Idempotency-Keye o mesmo corpo. 409 idempotency_key_processing: a primeira chamada ainda está em andamento. Espere alguns segundos e repita igual. Se continuar por mais de 2 minutos, confira no painel se algo foi criado antes de usar uma chave nova.
A coluna Repetir das tabelas abaixo diz o que fazer em cada código.
Autenticação e permissões#
| Status | error |
Significado | O que fazer | Repetir |
|---|---|---|---|---|
401 |
unauthorized, detail: credentials_required |
Faltou o header Authorization ou ele não começa com Bearer |
Envie Authorization: Bearer pk:sk |
Depois de corrigir |
401 |
unauthorized, detail: malformed_credentials |
Formato errado (por exemplo, base64) | Envie pk:sk em texto |
Depois de corrigir |
401 |
unauthorized, detail: invalid_credentials |
Chave de API inexistente, revogada ou conta bloqueada | Gere outra chave de API no painel | Depois de corrigir |
401 |
unauthorized, detail: ip_not_allowed |
IP fora da lista de IPs da chave de API | Inclua o IP na lista da chave | Depois de corrigir |
403 |
scope_required |
A chave não tem a permissão do endpoint | Veja required_scope e ligue a permissão |
Com chave nova |
403 |
withdrawal_ip_not_authorized |
IP fora da lista de IPs de saque | Cadastre o IP do servidor nos IPs de saque | Com chave nova |
403 |
seller_not_approved |
A conta ainda não está liberada para operar | Conclua o cadastro no painel | Com chave nova |
Idempotência#
| Status | error |
Significado | O que fazer | Repetir |
|---|---|---|---|---|
400 |
idempotency_key_required |
Faltou o header Idempotency-Key ou ele não tem de 8 a 128 caracteres |
Envie um UUID v4 por operação | Depois de corrigir |
422 |
idempotency_key_mismatch |
Mesma Idempotency-Key com corpo diferente |
Use uma Idempotency-Key nova |
Com chave nova |
422 |
idempotency_key_other_endpoint |
Mesma Idempotency-Key usada em outro endpoint (o POST /elements/checkout e o POST /elements/checkout/br não compartilham chave) |
Use uma Idempotency-Key nova |
Com chave nova |
409 |
idempotency_key_processing |
A primeira chamada ainda está em andamento, ou terminou em erro de servidor (5xx) e a chave ficou presa por até 24 horas (em POST /elements/checkout, um 502 ou 503 libera a chave; um 500 também, a não ser que a venda tenha chegado a ser criada ou que a chamada tenha sido interrompida no servidor; em POST /transactions, o 502 acquirer_error também libera a chave, e com "retry_same_key": true só para a repetição do mesmo corpo) |
Espere alguns segundos e repita a mesma chamada, igual. Se continuar por mais de 2 minutos, siga a regra de repetição | A mesma chamada, igual |
409 |
idempotency_key_race |
Chamadas simultâneas com a mesma Idempotency-Key, ou uma chave cuja primeira chamada recebeu erro 4xx |
Depois de um 4xx, nada foi criado: use uma Idempotency-Key nova. Se foram duas chamadas ao mesmo tempo, espere alguns segundos e repita a mesma chamada, igual: ela devolve a resposta da primeira |
Com chave nova depois de um 4xx. A mesma chamada, igual, depois de chamadas simultâneas |
409 |
idempotency_key_in_use |
Essa Idempotency-Key não pode ser usada pela sua conta |
Use uma Idempotency-Key nova |
Com chave nova |
Validação e regras gerais#
| Status | error |
Significado | O que fazer | Repetir |
|---|---|---|---|---|
422 |
(lista em errors) |
Campo faltando ou fora do formato | Corrija o campo indicado | Com chave nova |
422 |
invalid_request |
Regra de valor, método ou destino (por exemplo, Pix abaixo de R$ 1,00 ou saque abaixo do mínimo) | Leia o message e ajuste |
Com chave nova |
404 |
O recurso não existe ou não é da sua conta | Confira o id (UUID em minúsculas) | Depois de corrigir | |
429 |
rate_limit_exceeded |
Mais de 10 cobranças Pix por segundo | Respeite o Retry-After |
Com chave nova, depois do Retry-After |
429 |
Mais de 10 chamadas por segundo sem credencial válida, do mesmo IP | Corrija a credencial e respeite o Retry-After |
Depois do Retry-After |
|
503 |
temporarily_unavailable |
Falha temporária. Nada foi criado | Respeite o Retry-After, com recuo (como) |
Com chave nova, depois do Retry-After |
Pix#
| Status | error |
Significado | O que fazer | Repetir |
|---|---|---|---|---|
422 |
pix_not_enabled |
O recebimento por Pix não está habilitado nesta conta. Nada foi criado. Vale para POST /transactions com pix e para POST /payment-links |
Fale com o suporte para habilitar. Cartão e saques por Pix continuam normais | Não, até habilitar |
422 |
items_total_mismatch |
A soma dos itens não bate com amount_cents |
Corrija os itens ou o valor | Com chave nova |
422 |
split_invalid |
Divisão para a própria conta | Remova essa divisão | Com chave nova |
502 |
acquirer_error, com "retry_same_key": true |
A adquirente não confirmou o Pix, e a cobrança pode ter sido criada. Nada fica gravado na sua conta e a chave é liberada para a repetição do mesmo corpo | Repita a mesma chamada, com a mesma Idempotency-Key e o mesmo corpo da primeira tentativa. Se o erro continuar, fale com o suporte informando a chave, antes de criar outra cobrança para o pedido |
A mesma chamada, igual |
502 |
acquirer_error, sem retry_same_key |
A adquirente recusou o Pix antes de criar. Nada foi criado | Tente de novo em instantes | Com chave nova |
409 |
already_revoked |
O link de pagamento já estava desativado | Nada a fazer | Não |
Cartão, integração direta na Vortex#
Só em POST /api/v1/vault/vortex/cards e POST /api/v1/vortex/payments. Veja Server-to-server na Vortex.
| Status | error |
Significado | O que fazer | Repetir |
|---|---|---|---|---|
422 |
partner_api_not_enabled |
A integração direta da Vortex não está liberada na conta. A liberação é por adquirente: a da Eminence não vale aqui | Fale com o suporte | Com a mesma chave, depois da liberação |
422 |
invalid_card |
Número, validade, CVV ou nome do titular inválidos. O campo field diz qual |
Peça ao comprador para conferir o cartão | Com chave nova, depois de corrigir |
422 |
invalid_card_token |
O card_token está fora do formato, venceu ou já foi usado. Ele serve para uma cobrança só |
Tokenize de novo | Com chave nova |
422 |
fx_unavailable |
Cotação momentaneamente indisponível. Nada foi criado | Espere o Retry-After (60 s) |
Com a mesma chave |
422 |
amount_out_of_range |
Valor fora da faixa da adquirente. A resposta traz min_amount_cents, max_amount_cents e currency, na moeda que você enviou |
Ajuste o valor | Com chave nova |
503 |
busy |
Cobranças diretas demais em andamento ao mesmo tempo. Nada foi criado | Espere o Retry-After |
Com a mesma chave |
422 |
invalid_cycle |
Só na integração direta da Vortex: o recurrence.cycle não é um dos sete ciclos aceitos. A resposta traz a lista. Nada foi criado |
Mande um de weekly, biweekly, monthly, bimonthly, quarterly, semiannually ou yearly |
Com a mesma chave, depois de corrigir |
422 |
recurrence_not_supported |
Só na integração direta da Vortex: o corpo trouxe recurrence e a cobrança recorrente não está disponível nesta adquirente no momento. Nada foi criado |
Fale com o suporte, ou cobre sem o campo | Com a mesma chave, depois da liberação |
422 |
one_click_not_supported |
O corpo trouxe one_click_from numa rota que não tem esse campo. Nada foi criado |
Na Vortex, o upsell em um clique tem rota própria: POST /api/v1/vortex/upsell. Nas outras, cobre normalmente |
Com a mesma chave, sem o campo |
Cartão (Sterling, Imperium, NovaCorp, Eminence, Apex, ShadowBank, Vortex)#
| Status | error |
Significado | O que fazer | Repetir |
|---|---|---|---|---|
422 |
card_not_enabled |
A conta não tem cartão habilitado | Fale com o suporte | Não |
422 |
invalid_acquirer |
acquirer fora da lista |
Use sterling, imperium, novacorp, eminence, apex, shadowbank ou vortex |
Com chave nova |
422 |
acquirer_not_enabled |
A adquirente pedida em acquirer não está habilitada na conta. Em POST /elements/checkout/br, também quando a conta não tem adquirente habilitada para o Checkout Brasil, ou quando acquirer pede uma que não atende o Checkout Brasil |
Escolha uma das listadas no message (ou em GET /elements/acquirers). No Checkout Brasil, fale com o suporte para habilitar |
Com chave nova |
422 |
customer_required_for_shadowbank |
Só na ShadowBank: a criação veio sem customer.name ou customer.email, com e-mail inválido ou fora dos tamanhos (name até 120 caracteres, email até 180). Nada foi criado |
Mande os dois campos na criação, dentro dos tamanhos. O elemento não pergunta nome nem e-mail ao comprador; colete os dois na sua página | Com chave nova, depois de corrigir |
422 |
customer_required_for_vortex |
Só na Vortex: a criação veio sem customer.name ou customer.email, com e-mail inválido ou fora dos tamanhos (name até 120 caracteres, email até 180). Nada foi criado |
Mande os dois campos na criação, dentro dos tamanhos. O elemento não pergunta nome nem e-mail ao comprador; colete os dois na sua página | Com chave nova, depois de corrigir |
422 |
currency_not_supported |
Moeda fora das 48 aceitas | Use uma moeda da lista | Com chave nova |
422 |
fx_unavailable |
Cotação momentaneamente indisponível | Espere o Retry-After (60 s) |
Com chave nova |
422 |
invalid_amount |
Valor abaixo do mínimo ou acima do máximo da adquirente, na moeda enviada e pela cotação do dia. A resposta traz o limite na sua moeda (min_amount_cents ou max_amount_cents) e, acima do máximo, alternatives |
Abaixo do mínimo, aumente o valor. Acima do máximo, crie com o acquirer de uma das alternatives ou divida o pedido |
Não com o mesmo valor na mesma adquirente |
422 |
invalid_cycle |
O recurrence.cycle não é um dos sete ciclos aceitos. A resposta traz a lista. Nada foi criado |
Mande um de weekly, biweekly, monthly, bimonthly, quarterly, semiannually ou yearly |
Com chave nova, depois de corrigir |
422 |
recurrence_not_supported |
A adquirente da chamada não faz cobrança recorrente. Nada foi criado | Mande acquirer com uma das que o message lista |
Com chave nova, depois de corrigir |
422 |
field_not_supported |
Só em POST /elements/checkout/br: o corpo trouxe one_click_from ou recurrence, que não existem no Checkout Brasil. Nada foi criado |
Tire o campo do corpo. Para upsell em um clique e recorrência, use o POST /elements/checkout |
Com chave nova, depois de corrigir |
422 |
invalid_appearance |
Só em POST /elements/checkout/br: o objeto appearance trouxe chave que não existe, valor fora da regra ou combinação impossível. O campo field diz qual chave. Nada foi criado |
Corrija a chave indicada em field |
Com chave nova, depois de corrigir |
503 |
temporarily_unavailable |
A adquirente está em pausa, instável ou sem capacidade. Vem com Retry-After e "retryable": true. Nada foi criado |
Espere o Retry-After, ou crie com outra adquirente habilitada |
Com chave nova, depois do Retry-After |
502 |
checkout_failed |
O checkout não foi criado. "retryable": false quando a adquirente recusou a criação; true numa falha passageira de conexão |
Com false, não repita igual e fale com o suporte se continuar. Com true, repita |
Só com "retryable": true, com chave nova |
O máximo por venda depende da adquirente e varia com a moeda e com a cotação do dia. GET /elements/acquirers?currency= mostra o limite atual na moeda pedida. Veja Escolher a adquirente.
Nota O campo
one_click_fromnão tem erro próprio. Venda de origem inexistente, de outra conta, não paga, fora da janela ou acima do teto não devolve4xx: a resposta vem201comone_click: falsee o comprador digita o cartão. Veja Upsell em um clique.
Os endpoints de recorrência (GET /recurrences, GET /recurrences/{id} e POST /recurrences/{id}/cancel) usam o mesmo formato de erro e têm um código próprio, no cancelamento:
| Status | error |
Significado | O que fazer | Repetir |
|---|---|---|---|---|
422 |
cancel_failed |
Esta recorrência não é cancelada pela API. Ela continua valendo | Fale com o suporte | Não |
503 |
cancel_failed |
O cancelamento não foi confirmado agora | Repita a mesma chamada em instantes, até receber 200. Enquanto a resposta não for 200, trate a recorrência como ativa |
A mesma chamada, igual |
Uma recorrência que não é da sua conta responde 404, como qualquer outro recurso. Os detalhes de cada situação estão em Recorrência.
Internacional (Paycore)#
| Status | error |
Significado | O que fazer | Repetir |
|---|---|---|---|---|
422 |
global_not_enabled |
O Internacional não está habilitado | Fale com o suporte | Não |
422 |
unsupported_currency |
Moeda fora das 22 aceitas | Veja o campo supported |
Com chave nova |
422 |
currency_not_enabled |
Moeda não liberada na sua conta | Veja o campo enabled |
Com chave nova |
422 |
amount_too_small |
Abaixo do mínimo | Veja o campo minimum |
Com chave nova |
Saques#
O saque por Pix não depende do recebimento por Pix: uma conta com pix_not_enabled na criação de cobrança continua sacando normalmente.
| Status | error |
Significado | O que fazer | Repetir |
|---|---|---|---|---|
401 |
invalid_two_factor |
Código do autenticador errado ou vencido, ou o dono da conta não tem 2FA ativado | Gere um código novo; se continuar, confira o 2FA no painel | Com chave nova e código novo |
422 |
insufficient_balance |
Saldo menor que amount_cents |
Consulte GET /balance |
Com chave nova |
429 |
daily_limit_exceeded |
Passou do limite diário da conta | Tente no dia seguinte | Com chave nova, no dia seguinte |
429 |
rate_limited |
Mais de 1 pedido de saque por minuto | Espere 60 segundos | Com chave nova |
Eventos de erro do checkout embutido#
Os códigos que chegam em throne-elements:error (e.detail.code, como declined e popup_blocked) estão em Throne Elements. Eles são sinais de tela e nunca substituem o webhook.