Skip to main content

Refunds, Chargebacks & Disputes

Distinguish provider chargebacks from platform disputes; safe retries.

C
Written by Catalin Fetean
Updated over 3 weeks ago

Audience: Finance, Support, Developers, PMs
Outcomes: Clean refunds; correct expectations; resilient client code

Refunds & reversals

  • Initiation:

    • Cards: Stripe Dashboard/API

    • Bank: provider API/dashboard

    • Crypto: on-chain or provider flow

  • Reconciliation: refund webhook → mark Refunded; update invoices

  • Partial refunds: supported; appear as credit notes; reduce released totals

  • Edge case: active platform dispute + refund → follow provider rules; record both

Chargebacks vs platform disputes

  • Chargeback (card): initiated by cardholder/bank via Stripe; you submit evidence to network

  • TradeOS dispute: about deliverables; resolved by admins; controls escrow release/refunds

Status, idempotency & retries

  • Statuses: Initiated, Pending, Succeeded, Failed, Refunded, ChargedBack

  • Idempotency: stable reference per attempt; webhooks dedupe by event.id; releases dedupe by release reference

  • Retries:

    • 5xx/network ⇒ exponential backoff with jitter

    • 4xx ⇒ fix payload/permissions (don’t blind-retry)

QA checklist

  • Duplicate webhook doesn’t double-apply refund

  • Dispute freeze prevents releases per policy

Runbook: “Duplicate charge concern”

  • Show invoice & provider reference; confirm with provider report; highlight idempotency protections

Did this answer your question?