Saltar al contenido

Reembolsa uma compra, escolhendo se o acesso continua

POST/api/manage/purchases/{purchaseId}/refunds

Auth
Requiere token
X-CommunityId
X-CommunityId Envía el X-CommunityId de la comunidad en la que ocurre la operación.
Las descripciones de los endpoints vienen de la especificación de la API y, por ahora, están en portugués. La interfaz alrededor está traducida.

F-55. **Mexe em dinheiro e manda e-mail ao comprador.** Owner, admin, finance ou SuperAdmin (este age pelo `X-CommunityId`); moderator e member: 403. Compra de outra comunidade: 404.

- **Valor:** `amount` (padrão: o que ainda não foi reembolsado); acima disso, 400. - **Acesso:** `access = KEEP` mantém a compra ativa (só soma o reembolso); `access = REVOKE` tira o acesso (a compra vai a `REFUNDED`) e, numa assinatura, **cancela a assinatura na hora**, qualquer que seja o período reembolsado. - **Cartão e PIX:** a Memberfy devolve pelo provedor, **total ou parcial**, e num pedido com plano e adicionais **cada compra é reembolsada sozinha**: o valor vai ao provedor (`DELETE /charges/{id}` com o valor; sem valor quando é o restante inteiro da cobrança), que divide o estorno na proporção do split (teste T4). O parcial costuma voltar `PENDING` ("processing") e é confirmado pelo webhook `charge.partial_canceled`. A taxa da plataforma volta na mesma proporção do reembolso, e o extrato debita só a parte da comunidade. Sem saldo na conta de recebimento da comunidade, o reembolso fica `AWAITING_BALANCE` (pendente) e sai sozinho, em ordem de chegada, quando entrar saldo (uma venda paga, ou o job a cada 10 minutos, que também percebe as liberações); o acesso escolhido já se aplica, o comprador recebe o e-mail quando o estorno sai, e a parte da comunidade fica reservada: o saque desconta os pendentes (`pendingRefunds` em `GET /api/payouts/balance`). Sem resposta do provedor, o reembolso fica `PENDING`; a conciliação lê a cobrança antes de reenviar e, depois de 3 tentativas sem desfecho, o deixa para o SuperAdmin (`NEEDS_REVIEW`, motivo `unknown_outcome`). Recusa do provedor: 422, com o motivo, e o registro fica `DECLINED`. - **Boleto:** a Memberfy não devolve boleto pago. A comunidade devolve direto ao comprador (PIX ou transferência) e registra aqui com `settledOutside` (data e observação); sem ele, 400 com a orientação. O extrato registra sem valor e a taxa não volta. `settledOutside` em cartão ou PIX: 400. - **Idempotência:** `idempotencyKey`, gerada pelo app ao abrir o diálogo e reenviada nas repetições: a mesma chave devolve o mesmo reembolso (200), nunca um segundo. A chave já usada em outra compra: 409.

201 com o reembolso (`SUCCEEDED`, `PENDING` ou `AWAITING_BALANCE`); 200 numa repetição. `requestedByProfileId` é o Profile de quem pediu.

Parámetros

NombreDóndeTipoDescripción
purchaseIdobligatoriopathstring (uuid)

Headers

NombreTipoDescripción
X-CommunityIdopcionalstring (uuid)ID da comunidade em que a operação acontece. Obrigatório na maioria dos endpoints com escopo de comunidade.

Cuerpo de la solicitud application/json

NombreTipoDescripción
amountopcionalstringPadrão: o total restante da compra. No máximo 2 casas decimais, sem notação científica, maior que zero e até o restante (senão 400). Vale para boleto, cartão e PIX
accessobligatorioKEEP | REVOKE
reasonopcionalstringmax 500
idempotencyKeyobligatoriostringmin 8, max 200
settledOutsideopcionalobjectSó boleto: já devolvi diretamente ao comprador
settledOutside.atopcionalstring (date-time)Quando foi devolvido (padrão: agora)
settledOutside.noteopcionalstringmax 500

Respuestas

CódigoDescripción
200Repetição com a mesma chave; o mesmo reembolso.
201Reembolso registrado.
400Requisição inválida — falha de validação.
401Token ausente, inválido ou expirado.
403Autenticado, mas sem permissão para esta operação.
404Recurso não encontrado.
409Compra que não pode ser reembolsada (pendente, em disputa), nada a reembolsar, provedor que ainda não reembolsa pela API (`refunds.providerOff`), ou chave já usada em outra compra.
422O provedor recusou o reembolso; o motivo vem traduzido e o registro fica DECLINED.
500Erro interno do servidor.

Ejemplo con curl

curl -X POST "https://api.memberfy.net/api/manage/purchases/<purchaseId>/refunds" \
  -H "Authorization: Bearer $TOKEN" \
  -H "X-CommunityId: $COMMUNITY_ID" \
  -H "Content-Type: application/json" \
  -d '{"access":"KEEP","idempotencyKey":"string"}'