SelectwinSelectwin

Recusas de Pagamento

Visão Geral

A criação de uma cobrança na Selectwin é assíncrona. Quando você chama POST /v1/transactions (ou cria/renova uma Assinatura), a API responde imediatamente com 201 Created e a transação nasce com status: "pending". A cobrança junto ao adquirente é processada em segundo plano.

Por isso, uma recusa de cartão normalmente NÃO chega como um erro HTTP síncrono nessa chamada. O resultado da cobrança — incluindo uma recusa — aparece de duas formas:

  1. No objeto da transação, cujo status passa a failed (recusa).
  2. Em um webhook: a recusa dispara o evento transaction.failed (ver Catálogo de Eventos).

Como acompanhar o resultado da cobrança

SinalOnde apareceSignificado
status: "pending"resposta 201 da criaçãoCobrança ainda em processamento
status: "approved"objeto da transação + webhook transaction.approvedPagamento aprovado
status: "failed"objeto da transação + webhook transaction.failedCobrança recusada

Os status possíveis de uma transação incluem pending, pre-authorized, approved, failed, refused, canceled, refunded, chargeback, dispute, fraud-review, analyzing e awaiting.

O motivo da recusa (payment.refused)

Quando a cobrança falha, o objeto da transação (e o payload do webhook transaction.failed) traz o motivo em payment.refused. Nas demais transações o campo é null.

JSON
{
  "status": "failed",
  "payment": {
    "refused": {
      "code": "insufficientFundsError",
      "type": "cardError",
      "category": "payment",
      "message": "Insufficient funds or limit.",
      "displayMessage": "Saldo ou limite insuficiente para realizar esta compra. Verifique o limite disponível ou use outro cartão.",
      "reversible": false
    }
  }
}
CampoO que é
codeCódigo estável da recusa (tabela abaixo). É por ele que você deve decidir.
typecardError · invalidRequestError · processingError
categoryQuem precisa agir: payment (o cartão/emissor recusou) · validation (dados enviados inválidos) · businessRule (a loja não pode receber este pagamento) · processing (não foi possível processar — não é culpa do comprador)
messageTexto curto em inglês. Pode mudar — não decida por ele.
displayMessageTexto em português, pronto para mostrar ao comprador.
reversibletrue quando uma nova tentativa do mesmo pagamento pode dar certo.

Os textos são sempre da Selectwin. A resposta bruta da adquirente ou do processador nunca é exposta — nem na API, nem no webhook, nem no painel.

codecategorySignificado
insufficientFundsErrorpaymentSaldo ou limite insuficiente
expiredCardErrorpaymentCartão vencido
invalidCardNumberpaymentNúmero do cartão inválido
invalidExpiryMonth / invalidExpiryYearpaymentValidade incorreta
invalidSecurityCodepaymentCódigo de segurança (CVV) inválido
invalidPinCodepaymentSenha do cartão incorreta
invalidPaymentInformationpaymentDados do cartão inválidos (campo não identificado)
cardDeclinedpaymentRecusa do banco emissor, sem motivo detalhado
authorizationRefusedpaymentAutorização negada pelo emissor
cardCustomerNotAssociatedpaymentNão há cartão ativo para cobrar — o comprador precisa informar o cartão de novo
invalidParametersvalidationDados informados para o pagamento são inválidos
sellerAuthorizationRefusedbusinessRuleA loja não está habilitada para receber pagamentos no momento
paymentMethodUnavailablebusinessRuleA forma de pagamento não está disponível para a loja
cardValidationUnavailableprocessingO cartão não pôde ser validado neste momento (proteção contra teste de cartão na loja) — o emissor não foi consultado; vale tentar de novo mais tarde ou usar outra forma de pagamento
paymentProcessingErrorprocessingO pagamento não pôde ser processado (indisponibilidade ou falha de processamento) — vale tentar de novo

O envelope de erro 402 (Payment Required)

Em superfícies síncronas de pagamento, uma falha de processamento pode retornar HTTP 402 com o envelope de erro padrão (os mesmos campos de qualquer erro — status, statusCode, category, code, message, resource; ver Tratamento de Erros):

JSON
{
  "error": {
    "status": "Payment Required",
    "statusCode": 402,
    "category": "payment",
    "code": "paymentDeclined",
    "message": "The payment was declined by the issuer.",
    "resource": "payments"
  }
}

Boas Práticas

  1. Não faça polling para descobrir o resultado — escute os webhooks transaction.approved / transaction.failed (ver Proibição de Polling).
  2. Keye no error.code (em respostas de erro síncronas) e no status da transação, não no texto de message (que pode mudar).
  3. Em caso de recusa (failed), para cobrar de novo inicie uma nova transação — idealmente com outro cartão ou forma de pagamento.
  4. Teste os cenários com os Cartões de Teste (ex.: o cartão de failed) antes de ir para produção.

Notas

  • Forma de pagamento indisponível para a conta: a transação termina failed, com payment.refused.code: "paymentMethodUnavailable" (no objeto da transação e no webhook transaction.failed).
  • O catálogo de error.code por recurso (com o status HTTP de cada um) está em Catálogo de Códigos de Erro.

Atualizado em 17 de outubro de 2026

Preferências de cookies

Hoje o site usa só cookies essenciais: nenhuma ferramenta de medição ou de anúncios está ligada, e nada é compartilhado com terceiros. Se isso mudar, você decide aqui antes de qualquer coisa ser carregada.

  • Mantêm o site funcionando: segurança, a sua escolha sobre cookies e preferências como a versão da documentação. Não dependem de consentimento.

    Sempre ativos