Docs

Estornos

Peça a devolução integral de uma cobrança paga e acompanhe o resultado assíncrono pelo refundId.

POST/api/v1/paymentintents/{id}/refund-requests

O mesmo endpoint estorna Pix, cartão e Pix parcelado. O estorno é integral e assíncrono: a resposta 202 diz que o pedido foi aceito, não que o dinheiro já voltou.

Solicite

Terminal
curl -X POST "$DM_API_BASE/api/v1/paymentintents/$PAYMENT_INTENT_ID/refund-requests" \
  -H "Authorization: $DM_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "reason": "Cancelamento solicitado pelo comprador",
    "idempotencyKey": "estorno-pedido-1001-tentativa-1"
  }'
202 Accepted
{
  "refundId": "rfnd_EXEMPLO",
  "status": "requested"
}
CampoDescrição
reasonMotivo, para seu registro e rastreabilidade. Opcional.
idempotencyKeyChave da tentativa de estorno, no corpo. Opcional, recomendada. O cabeçalho Idempotency-Key da criação de cobrança não substitui esse campo.

Os dois campos são opcionais: envie {} para um pedido sem motivo e sem chave. Não envie amount: o estorno é sempre do valor total. Trate refundId como identificador opaco.

Respostas

SituaçãoResultado
Cobrança Succeeded202. Grave o refundId.
Estorno já em andamento202 com o mesmo refundId, mesmo que você envie outra chave.
Estorno já concluído409 AlreadyRefunded. Nenhuma devolução nova é iniciada.
Cobrança ainda não paga422 PaymentIntentNotRefundable.
Cobrança inexistente404 PaymentIntentNotFound.

Acompanhe

Resposta ou eventoComo tratar
requestedPedido recebido. Aguarde o resultado.
processingDevolução em processamento.
pending_reviewResultado em verificação. Mantenha o estorno pendente.
payment_intent.refundedDevolução concluída. Registre com o refundId do evento.
payment_intent.refund_failedA tentativa falhou. Registre o motivo e avalie um novo pedido.

Os estados requested, processing e pending_review aparecem na resposta do pedido ou de uma repetição. A consulta do PaymentIntent não mostra refundStatus nem refundId: quando a devolução conclui, o status da cobrança passa a Refund.

Nova tentativa após falha

Depois de payment_intent.refund_failed, um novo pedido de estorno é permitido. Use uma nova idempotencyKey para a nova tentativa e grave o refundId devolvido. Reserve a mesma chave só para repetir a comunicação da tentativa em curso. Faça o novo pedido de forma deliberada, depois de analisar o motivo.

Correlacione os eventos pela tentativa: uma notificação atrasada com o refundId antigo não deve encerrar nem sobrescrever a tentativa atual.

Quando a resposta demora

Não converta a ausência de webhook em falha e não diga ao comprador que a devolução aconteceu só por causa do 202. Mantenha o estorno em acompanhamento, consulte o pagamento e acione a equipe de integração com o id do PaymentIntent e o refundId quando precisar investigar.

Nunca crie outra cobrança para "compensar" um estorno sem desfecho. O pagamento original e cada tentativa de devolução devem continuar vinculados no seu controle.

Nesta página