Integração
Estornos e disputas
O estorno é uma intenção como a cobrança: responde 202, reserva o valor e só conta como devolvido quando o provedor conclui. A disputa (chargeback) é aberta pelo emissor do cartão e suspende a entrega até o desfecho.
Pedir um estorno
Estorne uma cobrança confirmada ou recebida, total ou parcialmente. O reason é interno (não vai ao provedor): não coloque dados pessoais nele. A resposta é uma Operation cujo resourceId é o estorno.
{
"amountCents": "4990",
"reason": "Cliente desistiu da compra dentro do prazo."
}{
"id": "op_01JDY8D1B2C3D4E5F6G7H8J9KD",
"status": "ACCEPTED",
"kind": "REFUND_PAYMENT",
"resourceId": "rfd_01JDYA11B2C3D4E5F6G7H8J9KA",
"statusUrl": "/v1/operations/op_01JDY8D1B2C3D4E5F6G7H8J9KD",
"nextAction": "WAIT",
"createdAt": "2026-11-13T13:00:00.000Z"
}- Limite elegível: pago − devolvido − reservado. Pedidos simultâneos nunca passam do total (
422 REFUND_EXCEEDS_ELIGIBLE). - Cobrança já recebida só estorna até o saldo disponível conciliado da conta (a tarifa do provedor não volta): acima dele,
422 INSUFFICIENT_AVAILABLE_BALANCEe nada é criado. - Pix e cartão aceitam estorno parcial. Cartão parcelado é estornado pelo parcelamento (um estorno ativo por vez,
REFUND_IN_PROGRESS). Boleto só integral (PARTIAL_REFUND_NOT_SUPPORTED) e o pagador informa a conta de devolução no linkpayerActionUrldo estorno. - Cobrança pendente, em disputa ou já estornada por inteiro não estorna (
PAYMENT_NOT_REFUNDABLE). - Use uma Idempotency-Key por intenção (por exemplo
pedido-98765-estorno-1). Um422é conclusivo e não fica gravado: corrigida a causa, a mesma chave pode ser usada de novo.
Situações do estorno
| status | Significado |
|---|---|
REQUESTED | Pedido registrado, ainda não enviado. |
PENDING | Aceito pelo provedor, em processamento. O valor continua reservado; ainda não é devolução. |
UNKNOWN | Resposta do provedor perdida. A plataforma consulta pela referência; nunca reenvia. |
MANUAL_REVIEW | A consulta não provou o resultado. Fale com o suporte. |
DONE | Devolvido. Só aqui o pedido vira PARTIALLY_REFUNDED ou REFUNDED. |
CANCELLED | Cancelado no provedor; a reserva é liberada. |
FAILED | Recusado de forma conclusiva; a reserva é liberada. |
Estornos feitos fora do Eclipta Pay (por exemplo, no painel do provedor) são descobertos na consulta e aparecem em GET /v1/payments/{id}/refunds com origin: "PROVIDER". O pedido passa por REFUND_PENDING enquanto há estorno em andamento.
Disputas (chargebacks)
A disputa nasce do emissor do cartão: o provedor avisa e a plataforma abre o registro com motivo, valor e prazo da defesa. A cobrança continua com o histórico (por exemplo RECEIVED) e a dimensão de reversão vira DISPUTED; o pedido passa a DISPUTED e fulfillmentEligible volta a false.
- Acompanhe pelo evento
payment.dispute_updatede porGET /v1/disputes/{id}(reasonoriginal ereasonLabelem português,evidenceDueBy). - Anexe evidências com
POST /v1/disputes/{id}/evidence: corpo binário (PDF, JPG ou PNG até 10 MB) e o nome emX-File-Name. Os arquivos ficam cifrados em armazenamento privado da conta. - Envie a defesa uma única vez com
POST /v1/disputes/{id}/submite a versão esperada (202). Depois do envio não é possível anexar mais nada (DISPUTE_NOT_OPEN). - Desfecho: ganha (
WON) restaura a cobrança e o pedido volta aPAYMENT_COMPLETED; perdida (LOST) deixa a reversão emCHARGED_BACKe o pedido segueDISPUTED, sem virar "estornado".
curl -X POST "$ECLIPTA_PAY_API/v1/disputes/dsp_.../evidence" \
-H "Authorization: Bearer $ECLIPTA_PAY_KEY" \
-H "X-Account-Id: $ECLIPTA_PAY_ACCOUNT" \
-H "Idempotency-Key: disputa-dsp_...-comprovante-1" \
-H "Content-Type: application/pdf" \
-H "X-File-Name: comprovante-entrega.pdf" \
--data-binary @comprovante-entrega.pdfEstorno de pagamento com dois cartões
POST /v1/payment-groups/{id}/refunds divide o valor entre os dois cartões de forma proporcional (maiores restos, com teto por cartão), grava a divisão antes do envio e confirma cada parte separadamente. Veja Dois cartões e planos.
Rotas
| Rota | O que faz | Situação |
|---|---|---|
| POST /v1/payments/{id}/refunds | Estornar cobrança (total ou parcial, limitado ao elegível) | Implementada |
| GET /v1/payments/{id}/refunds | Estornos da cobrança (inclui os feitos fora do Eclipta Pay) | Implementada |
| GET /v1/refunds/{id} | Consultar estorno | Implementada |
| Rota | O que faz | Situação |
|---|---|---|
| GET /v1/disputes | Listar disputas | Implementada |
| GET /v1/disputes/{id} | Consultar disputa | Implementada |
| POST /v1/disputes/{id}/submit | Enviar defesa (uma vez) | Implementada |
| POST /v1/disputes/{id}/evidence | Anexar evidência (PDF, JPG ou PNG até 10 MB; corpo binário, nome em X-File-Name) | Implementada |
A integração de referência do Educators mostra o cancelamento dentro da garantia (estorno, acesso suspenso até DONE) e a revisão do acesso numa disputa.