SelectwinSelectwin

Transações - Reembolsar

Visão Geral

Reembolsa uma transação previamente aprovada, com suporte a reembolso total ou parcial. É a ferramenta para devoluções, cancelamentos e correções de cobrança.

O reembolso é assíncrono: o endpoint aceita a solicitação (HTTP 202) e o estorno é processado em background. Acompanhe o resultado pelos webhooks (transaction.refunded, receivable.refunded) ou consultando a transação.

Precauções

  • Só pode reembolsar transações no status approved ou pre-authorized.
  • O valor do reembolso não pode exceder o valor da cobrança.
  • Cada venda aceita um reembolso: depois dele, mesmo parcial, a transação passa a refunded, e um novo pedido de reembolso responde 422 transactionNotRefundable.
  • Há uma trava contra reembolsos concorrentes para a mesma transação.
  • Plataformas de marketplace: o reembolso de uma venda feita com onBehalfOf é pedido como a sub-conta, com X-Selectwin-Account: bus_… — veja Operar como a sub-conta. O estorno sai do saldo da sub-conta.
  • O reembolso afeta o saldo financeiro da conta.
  • O ID da transação é sensível a maiúsculas e minúsculas (tra_... ou trx_...).

Casos de uso

  • Cancelamento de compra após a aprovação.
  • Produto indisponível/defeituoso — devolução.
  • Cobrança incorreta — estorno por valor errado.
  • Acordo comercial — reembolso parcial.

Requisição

HTTP
POST /v1/transactions/{transactionId}/refund

Parâmetros de URL

ParâmetroTipoObrigatórioDescrição
transactionIdstringSimIdentificador da transação a reembolsar

Parâmetros do Corpo da Requisição

ParâmetroTipoObrigatórioDescrição
amountintegerNãoValor a reembolsar em centavos. Se omitido, reembolsa o valor total
reasonstringNãoMotivo do reembolso (máx. 255 caracteres)

Exemplo — Reembolso Total

JSON
{ "reason": "Cliente desistiu da compra e solicitou reembolso" }

Exemplo — Reembolso Parcial

JSON
{
  "amount": 5000,
  "reason": "Cliente devolveu apenas um dos itens do pedido"
}

Resposta

Aceito (HTTP 202 Accepted)

O reembolso foi aceito para processamento assíncrono.

JSON
{
  "transactionId": "tra_987654321",
  "status": "approved",
  "accepted": true
}
AtributoTipoDescrição
transactionIdstringIdentificador da transação
statusstringStatus no momento do aceite (a transição para refunded chega por webhook)
acceptedbooleanSempre true

Erros

error.codeHTTPQuando
transactionNotRefundable422A transação não pode ser reembolsada no status atual
refundAmountInvalid422Valor zero/negativo, ou acima do valor da cobrança
refundInProgress409Já existe um reembolso em andamento para esta transação
refundInsufficientBalance422O saldo disponível não cobre o estorno: o valor desta venda já foi liberado (e sacado). Só se aplica quando algum recebível da transação já está liberado; venda ainda em pending estorna normalmente
transactionInPaymentGroup409A transação é uma parte de um pagamento combinado (2 cartões ou cartão + Pix) que ainda não terminou: enquanto o pagamento combinado está em andamento, ele mesmo cancela ou estorna as partes. Depois de pago, cada parte se estorna como qualquer transação. params[0] traz o paymentGroupId e o status
refundSplitRecipientInsufficientBalance422Um recebedor da divisão (split) desta venda não tem saldo disponível para a parte dele neste estorno: a fatia dele já foi liberada e sacada. O estorno reserva o valor de cada recebedor no aceite, como faz com o do vendedor
transactionNotFound404Transação inexistente

Exemplo de erro (HTTP 409)

JSON
{
  "error": {
    "status": "Conflict",
    "statusCode": 409,
    "category": "client",
    "code": "refundInProgress",
    "message": "A refund for this transaction is already in progress.",
    "resource": "transaction"
  }
}

Melhores Práticas

  1. Verifique o status antes de reembolsar.
  2. Reaja aos webhooks transaction.refunded / receivable.refunded para confirmar o estorno.
  3. Registre o motivo (reason) para auditoria.
  4. Para cartão de crédito, lembre que o estorno pode levar de 7 a 30 dias para aparecer na fatura.

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