Pular para o conteúdo principal

Visão Geral

O Dodo Payments retorna uma razão detalhada de falha sempre que uma tentativa de pagamento é mal sucedida. Esses motivos são padronizados entre métodos e provedores de pagamento, permitindo que você implemente um tratamento consistente em sua aplicação. Quando um pagamento falha, o payment.failed webhook e o objeto de pagamento expõem:
  • error_code — um motivo de falha padronizado da tabela abaixo.
  • error_message — uma explicação legível para humanos.
  • retry_attempt0 para a cobrança original, 1 ou superior para cada tentativa de renovação de assinatura agendada.
Entender esses motivos de falha permite dar um feedback claro aos clientes, decidir se uma nova tentativa vale a pena, e recuperar mais receita.

Handle Payment Failures

Um guia passo a passo para desenvolvedores sobre como ler esses códigos de webhooks e da API, apresentá-los aos clientes, e decidir quando tentar novamente.

Recusas Suaves vs. Duras

Cada código de falha se encaixa em uma das duas categorias. Essa distinção determina se você deve tentar novamente com o mesmo método de pagamento ou pedir ao cliente um novo.
Tipo de RecusaO que significaO que fazerExemplos
Recusa suaveTemporária ou corrigível — o mesmo cartão pode ter sucesso em uma tentativa posterior ou uma vez que o cliente corrige seu erro.Seguro para tentar novamente (depois de um atraso, ou uma vez que o cliente corrige seus detalhes).INSUFFICIENT_FUNDS, GENERIC_DECLINE, CARD_VELOCITY_EXCEEDED, PROCESSING_ERROR, NETWORK_ERROR, NETWORK_TIMEOUT, TRY_AGAIN_LATER
Recusa duraTerminal — tentar o mesmo cartão não mudará o resultado.Não tentar novamente o mesmo cartão. Peça ao cliente para usar outro método de pagamento ou contacte seu banco.STOLEN_CARD, LOST_CARD, PICKUP_CARD, DO_NOT_HONOR, FRAUDULENT, INVALID_ACCOUNT
Para renovações de assinatura, o Dodo Payments aplica essa distinção automaticamente: recusas suaves são tentadas novamente por Recuperações de Pagamento de Assinatura, enquanto recusas duras encerram imediatamente a cadeia de tentativas e são melhor tratadas com Recuperação de Assinatura.
Nunca revele a verdadeira razão para STOLEN_CARD, LOST_CARD, PICKUP_CARD, ou FRAUDULENT para o cliente. Apresentar esses motivos pode alertar um ator fraudulento. Sempre mostre ao cliente uma mensagem genérica de recusa (por exemplo, “Seu cartão foi recusado. Por favor, entre em contato com seu banco ou use outro cartão.”) e apenas registre o código específico internamente.

Motivos de Falha de Transação

A seguinte tabela lista cada código de falha, seu tipo de recusa, se o cliente pode resolvê-lo, uma descrição e a ação recomendada.
Código de FalhaTipoErro do UsuárioDescriçãoAção Recomendada
AUTHENTICATION_FAILURESuaveSimAutenticação falhou durante a transaçãoPeça ao cliente para tentar novamente e completar a autenticação 3DS, ou use outro cartão
AUTHENTICATION_REQUIREDSuaveSimAutenticação adicional é necessária para completar a transaçãoSolicite que o cliente complete a autenticação 3DS. Para renovações de assinatura, peça ao cliente para retornar e autenticar
AUTHENTICATION_TIMEOUTSuaveSimO processo de autenticação expirouPeça ao cliente para tentar novamente e completar a autenticação rapidamente
CARD_DECLINEDSuaveNãoO cartão foi recusado pelo banco emissor sem uma razão específica (recusa genérica)Peça ao cliente para tentar novamente, entrar em contato com seu banco, ou usar outro cartão
CARD_NOT_ACTIVATEDSuaveSimO cartão não foi ativado pelo titular do cartãoPeça ao cliente para ativar o cartão com seu banco e tentar novamente
CARD_VELOCITY_EXCEEDEDSuaveSimMuitas transações foram tentadas em um curto períodoPeça ao cliente para aguardar e tentar mais tarde, ou entrar em contato com seu banco sobre limites
CUSTOMER_CANCELLEDSuaveSimO cliente cancelou a transaçãoDeixe o cliente reiniciar o checkout quando estiver pronto
DO_NOT_HONORDuraNãoO banco emissor recusou explicitamente a transação (código ISO 8583 05 — não honrar); as redes tratam isso como terminalPeça ao cliente para entrar em contato com seu banco; não tente o mesmo cartão novamente
EXPIRED_CARDDuraSimO cartão está expiradoPeça ao cliente para usar um cartão com data de validade válida
FRAUDULENTDuraSimA transação foi sinalizada como potencialmente fraudulentaMostre ao cliente uma mensagem genérica de recusa — não revele o motivo. Peça para usar outro cartão
GENERIC_DECLINESuaveNãoA transação foi recusada por uma razão não especificadaPeça ao cliente para entrar em contato com seu banco ou tentar outro cartão
INCORRECT_CVCSuaveSimO código CVC fornecido estava incorretoPeça ao cliente para inserir o CVC correto novamente
INCORRECT_NUMBERSuaveSimO número do cartão foi digitado incorretamentePeça ao cliente para inserir o número do cartão correto novamente
INSUFFICIENT_FUNDSSuaveSimA conta não possui fundos suficientes para completar a transaçãoPeça ao cliente para usar outro método de pagamento ou tentar novamente quando os fundos estiverem disponíveis
INVALID_ACCOUNTDuraSimOs detalhes da conta fornecidos são inválidosPeça ao cliente para entrar em contato com seu banco ou usar outro cartão
INVALID_AMOUNTSuaveSimO valor da transação é inválidoVerifique o valor e quaisquer limites de compra com o cliente
INVALID_CARD_NUMBERSuaveSimO formato do número do cartão é inválidoPeça ao cliente para inserir novamente um número de cartão válido
INVALID_CARD_OWNERSuaveSimAs informações do titular do cartão são inválidasPeça ao cliente para corrigir o nome do titular do cartão
INVALID_CVCSuaveSimO formato CVC é inválidoPeça ao cliente para inserir novamente um CVC válido
INVALID_EXPIRY_YEARSuaveSimO ano de validade do cartão é inválidoPeça ao cliente para inserir uma data de validade válida
INVALID_PINSuaveSimO PIN fornecido está incorretoPeça ao cliente para inserir novamente o PIN correto
INVALID_REQUESTSuaveSimA solicitação de transação contém dados inválidosVerifique os campos da solicitação de pagamento e reenvie com dados válidos
INVALID_UPI_IDSuaveSimO ID UPI fornecido é inválidoPeça ao cliente para inserir um ID UPI válido
LIMIT_EXCEEDEDSuaveSimA transação excede o limite do cartão ou da contaPeça ao cliente para entrar em contato com seu banco sobre limites, ou usar outro método
LIVE_MODE_TEST_CARDDuraSimUm cartão de teste foi usado no modo ao vivoUse um cartão real — tentar novamente o cartão de teste sempre falhará no modo ao vivo
LOST_CARDDuraSimO cartão foi relatado como perdidoMostre ao cliente uma mensagem genérica de recusa — não revele o motivo. Peça para usar outro cartão
MANDATE_INVALIDSuaveSimO mandato de pagamento é inválidoPeça ao cliente para configurar o mandato de pagamento novamente
MANDATE_REQUIREDSuaveSimUm mandato é necessário para esta transaçãoConfigure um mandato e peça ao cliente para autorizá-lo antes de cobrar
MANDATE_REQUIRED_SYSTEMDuraNãoO sistema requer um mandato para este tipo de transaçãoCertifique-se de que o fluxo de configuração do mandato seja concluído antes de cobrar
NETWORK_ERRORSuaveNãoUm erro de rede ocorreu durante a transaçãoTransitório — tente o pagamento novamente após um curto período
NETWORK_TIMEOUTSuaveNãoO pedido de rede expirouTransitório — tente o pagamento novamente após um curto período
ORDER_ALREADY_EXISTSSuaveNãoJá existe um pedido para essa transação (criação de pedido duplicado)Verifique o status do pedido existente antes de tentar novamente; entre em contato com o suporte se persistir
ORDER_CREATION_FAILEDSuaveNãoFalha ao criar o pedido para a transaçãoErro transitório/sistema — tente o pagamento novamente; entre em contato com o suporte se persistir
PAYMENT_METHOD_PROVIDER_DECLINEDDuraSimO provedor do método de pagamento recusou a transaçãoPeça ao cliente para entrar em contato com seu provedor ou usar outro método de pagamento
PAYMENT_METHOD_UNSUPPORTEDDuraSimO método de pagamento não é compatível com esta transaçãoPeça ao cliente para usar um método de pagamento compatível
PICKUP_CARDDuraSimO cartão foi relatado como perdido ou roubado e sinalizado para coletaMostre ao cliente uma mensagem genérica de recusa — não revele o motivo. Peça para usar outro cartão
PROCESSING_ERRORSuaveNãoOcorreu um erro ao processar a transaçãoTransitório — tente o pagamento novamente; se persistir, peça ao cliente para entrar em contato com seu banco
PROVIDER_UNSUPPORTEDDuraNãoO provedor de pagamento não suporta este tipo de transaçãoPeça ao cliente para usar outro método de pagamento
REENTER_TRANSACTIONSuaveSimA transação precisa ser reentradaPeça ao cliente para tentar o pagamento novamente
REVOCATION_OF_AUTHORIZATIONDuraSimA autorização para a transação foi revogadaPeça ao cliente para usar outro método de pagamento
STOLEN_CARDDuraSimO cartão foi relatado como roubadoMostre ao cliente uma mensagem genérica de recusa — não revele o motivo. Peça para usar outro cartão
SUBSCRIPTION_NOT_ACTIVEDuraNãoA assinatura não está ativa, então a cobrança recorrente não pôde ser processadaReative a assinatura (por exemplo, atualizando o método de pagamento) antes de tentar a cobrança novamente
TRANSACTION_NOT_ALLOWEDDuraSimA transação não é permitida para este cartão ou contaPeça ao cliente para entrar em contato com seu banco para permitir este tipo de transação, ou usar outro cartão
TRANSACTION_NOT_APPROVEDDuraSimA transação não foi aprovadaPeça ao cliente para entrar em contato com seu banco ou tentar outro cartão
TRY_AGAIN_LATERSuaveNãoA transação deve ser tentada novamente mais tardeTransitório — tente o pagamento novamente mais tarde
UNKNOWN_ERRORSuaveNãoOcorreu um erro desconhecidoTente o pagamento novamente; se persistir, entre em contato com o suporte
Erro do Usuário indica se a recusa de pagamento pode ser resolvida pelo cliente. Quando Yes, o cliente pode tomar uma ação para resolver o problema (por exemplo, inserir detalhes corretos do cartão). Quando No, a recusa é devido a questões de nível de sistema ou restrições bancárias que o cliente não pode resolver diretamente.

Manipulando Falhas Programaticamente

Leia error_code do payment.failed webhook ou do objeto de pagamento, mapeie para a ação recomendada acima, e decida se deve tentar novamente. Para renovações de assinatura, recusas suaves são tentadas novamente automaticamente — veja Recuperações de Pagamento de Assinatura. Para erros de nível API e lógica de negócios (como PAYMENT_NOT_SUCCEEDED ou REFUND_WINDOW_EXPIRED) que não são recusas de pagamento, veja a referência Códigos de Erro.

Relacionados

Handle Payment Failures

Guia completo para detectar, apresentar e tentar novamente pagamentos falhos.

Error Codes

Códigos de erro de API e lógica de negócios para falhas não relacionadas a recusa.

Subscription Payment Retries

Tentativas automáticas que recuperam recusas suaves em renovações de assinatura.

Subscription Dunning

Sequências de email que recuperam recusas duras solicitando uma atualização de método de pagamento.

Suporte

Para ajuda adicional com falhas de transação ou problemas de integração, entre em contato com nossa equipe de suporte em support@dodopayments.com.
Última modificação em 18 de junho de 2026