Skip to main content
Version: v2

Split Tender Refunds

Split Tender refunds ensure that when a customer paid with two cards, refunds are returned to the correct cards in the correct amounts. CCG orchestrates this automatically—tracking remaining balances and coordinating across both cards.

DRAFT VERSION
Get Started

Key Benefits

  • ✅ CCG tracks per-card balances automatically
  • ✅ Prevents over-refunding or refunding the wrong card
  • ✅ Clear PARTIAL_REFUND status with per-card breakdown
Real-world Example

A customer paid $200 split across two cards: $120 on Card A and $80 on Card B. The merchant issues a $50 refund to Card A. CCG refunds $50 to Card A and tracks that $70 remains refundable on Card A and $80 on Card B.

❌ Without Split Tender Refunds✅ With Split Tender Refunds
Merchant must manually track which card was charged whatCCG tracks per-card balances automatically
Risk of over-refunding or refunding wrong cardValidation prevents exceeding remaining balance
Partial failure = manual follow-up with no visibilityClear PARTIAL_REFUND status with per-card breakdown

How It Works

Split Tender Refund Flow


Refund Status Life Cycle

For technical details on refund allocation statuses (R1/R2), status computation rules, and lifecycle diagrams, see the Refund Processing Integration Guide.


Business Rules

Pre-Conditions

  • Original transaction status must be COMPLETED
  • Refund requested within 180 days of transaction date
  • merchantTransactionId must be unique per refund request
  • Parent Transaction ID and Child Payment IDs must exist and be linked

Post-Conditions

  • If both cards refunded successfully: status → COMPLETED, merchant receives REFUND_SUCCESS webhook
  • If one card refunded, one failed: status → PARTIAL_SUCCESS, merchant receives REFUND_PARTIAL_SUCCESS webhook
  • If both cards failed: status → FAILED, merchant receives REFUND_FAILED webhook

Constraints

Amount Rules

  • Full refund: Omit amount — both cards refunded in full
  • Partial refund: Must specify card ID + amount
  • Minimum: 1¢ per card
  • Maximum: Cannot exceed original card amount minus previous refunds
  • Zero refunds: Not supported
  • Auto-distribution: CCG does not auto-split refund amounts — merchant must specify which card
  • Already fully refunded: If one card is fully refunded, submit individual requests for the remaining card
Example: Multiple Partial Refunds

Original: $100 ($60 on Card A, $40 on Card B)

StepActionCard A RemainingCard B Remaining
1Refund $25 to Card A$35$40
2Refund $20 to Card B$35$20
3Refund $80 to Card A → REJECTED (exceeds $35)$35$20
4Refund $35 to Card A$0$20

Previously Refunded Cards

  • Card fully refunded → refund requested again: Accepted initially, fails with conflict error
  • Card partially refunded → refund exceeds remaining: Rejected — amount exceeds available balance
  • Full refund on partially-refunded transaction: Fails — submit individual requests for non-refunded cards

Scenarios

✅ Standard Scenarios
#ScenarioFinal OutcomeMerchant Action
1Both cards refunded successfully✅ COMPLETEDNone
2One card refund fails (expired/closed/disputed)⚠️ PARTIAL_REFUNDConsider unlinked refund or credit
3Partial amounts refunded from both cards✅ COMPLETEDNone
4Multiple sequential refunds✅ COMPLETEDNone (balance tracked automatically)
5Refund exceeds available balance❌ REFUND_FAILEDAdjust amount to remaining balance
6Disputed card → refund blocked⚠️ PARTIAL_REFUNDRefund only applies to undisputed card
7Individual card refund✅ COMPLETEDNone

Edge Cases

Probability

The probability of these edge cases occurring in production is low (< 1%). CCG validates upfront and returns clear error messages.

Edge Cases
#ScenarioOutcomeRecovery
1Full refund after one card already refunded❌ REFUND_FAILEDSubmit individual request for remaining card
2Refund after 180 days❌ REFUND_FAILEDTime window exceeded — no recovery

Notifications

CCG sends one refund webhook per request:

OutcomeWebhook Event
Both cards refundedREFUND_SUCCESS
One card refunded, one failedREFUND_PARTIAL_SUCCESS
Both cards failedREFUND_FAILED

Status Reference

StatusMeaningMerchant Action
COMPLETEDBoth cards successfully refundedNone
PARTIAL_SUCCESSOne card refunded, one failedConsider unlinked refund for failed card
FAILEDBoth cards failedReview failure reasons
PENDINGProcessing in progressWait for webhook