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.
- For API integration steps, see Refund Processing Guide
Key Benefits
- ✅ CCG tracks per-card balances automatically
- ✅ Prevents over-refunding or refunding the wrong card
- ✅ Clear
PARTIAL_REFUNDstatus with per-card breakdown
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 what | CCG tracks per-card balances automatically |
| Risk of over-refunding or refunding wrong card | Validation prevents exceeding remaining balance |
| Partial failure = manual follow-up with no visibility | Clear PARTIAL_REFUND status with per-card breakdown |
How It Works
Split Tender Refund Flow
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
merchantTransactionIdmust 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 receivesREFUND_SUCCESSwebhook - If one card refunded, one failed: status →
PARTIAL_SUCCESS, merchant receivesREFUND_PARTIAL_SUCCESSwebhook - If both cards failed: status →
FAILED, merchant receivesREFUND_FAILEDwebhook
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)
| Step | Action | Card A Remaining | Card B Remaining |
|---|---|---|---|
| 1 | Refund $25 to Card A | $35 | $40 |
| 2 | Refund $20 to Card B | $35 | $20 |
| 3 | Refund $80 to Card A → REJECTED (exceeds $35) | $35 | $20 |
| 4 | Refund $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
| # | Scenario | Final Outcome | Merchant Action |
|---|---|---|---|
| 1 | Both cards refunded successfully | ✅ COMPLETED | None |
| 2 | One card refund fails (expired/closed/disputed) | ⚠️ PARTIAL_REFUND | Consider unlinked refund or credit |
| 3 | Partial amounts refunded from both cards | ✅ COMPLETED | None |
| 4 | Multiple sequential refunds | ✅ COMPLETED | None (balance tracked automatically) |
| 5 | Refund exceeds available balance | ❌ REFUND_FAILED | Adjust amount to remaining balance |
| 6 | Disputed card → refund blocked | ⚠️ PARTIAL_REFUND | Refund only applies to undisputed card |
| 7 | Individual card refund | ✅ COMPLETED | None |
Edge Cases
The probability of these edge cases occurring in production is low (< 1%). CCG validates upfront and returns clear error messages.
Edge Cases
| # | Scenario | Outcome | Recovery |
|---|---|---|---|
| 1 | Full refund after one card already refunded | ❌ REFUND_FAILED | Submit individual request for remaining card |
| 2 | Refund after 180 days | ❌ REFUND_FAILED | Time window exceeded — no recovery |
Notifications
CCG sends one refund webhook per request:
| Outcome | Webhook Event |
|---|---|
| Both cards refunded | REFUND_SUCCESS |
| One card refunded, one failed | REFUND_PARTIAL_SUCCESS |
| Both cards failed | REFUND_FAILED |
Status Reference
| Status | Meaning | Merchant Action |
|---|---|---|
COMPLETED | Both cards successfully refunded | None |
PARTIAL_SUCCESS | One card refunded, one failed | Consider unlinked refund for failed card |
FAILED | Both cards failed | Review failure reasons |
PENDING | Processing in progress | Wait for webhook |
Related Documentation
- Payments: Split Tender Payments
- Technical Refund Processing: Split Tender Refund Processing
- Technical Payment Processing: Split Tender Payments Integration