No customer enjoys waiting 5 days to recover 30,000 XOF on a canceled order. No accountant enjoys reconciling poorly tracked partial refunds. This guide ships the clean technical procedure for Wave and Orange Money in Senegal.
TL;DR
- Wave: refund via Wave Business app or API, instant, free up to 7 days, 1% beyond.
- OM: refund via partner dashboard, 24–72h, free if not yet settled, otherwise 2%.
- Card (PayDunya/CinetPay): 5–7 days, free if total, 100 XOF + 0.5% if partial.
- Always trace: dedicated
refundstable, link to parentPaymentEvent, audit log.
Wave Business: refund via API
The Wave Refund API (mid-2024) accepts total or partial refund of an existing payment.
`ts
async function refundWavePayment(paymentId: string, amountXof?: number, reason?: string) {
const res = await fetch(${WAVE_API}/v1/refunds, {
method: 'POST',
headers: {
'Authorization': Bearer ${WAVE_API_KEY},
'Content-Type': 'application/json',
'Idempotency-Key': refund_${paymentId}_${amountXof ?? 'full'},
},
body: JSON.stringify({
payment_id: paymentId,
amount: amountXof,
currency: 'XOF',
reason: reason ?? 'merchant_initiated',
}),
});
if (!res.ok) throw new Error(Wave refund failed: ${res.status} ${await res.text()});
return res.json();
}
`
Idempotency mandatory: sending the same request twice without a key refunds twice. The key refund_${paymentId}_${amount} makes the op safe.
Orange Money: no public refund API
OM Senegal does not expose a public programmatic refund API in May 2026. Procedure:
- Sign in to OM partner dashboard (web)
- Find the transaction by reference or number
- "Cancel / Refund" action
- Enter OTP sent to signatory phone
- Confirm → 24–72h delay for the customer
Automation workaround: webhook triggers a job that notifies a human agent, plus a refund-to-do journal. Not ideal but realistic.
Accounting trace: the Refund model
`prisma
model Refund {
id String @id @default(cuid())
externalId String? @unique
paymentEventId String
paymentEvent PaymentEvent @relation(fields: [paymentEventId], references: [id])
orderId String
amount Int
currency String
reason String
status String
Need a professional website?
Kolonell builds websites that attract clients, optimized for the Sénégalese market. Free quote in 2 minutes.
initiatedBy String
notes String?
createdAt DateTime @default(now())
completedAt DateTime?
@@index([orderId])
@@index([status])
}
`
Standard refund workflow
`
[Customer request]
↓
[Manager approval (>50K XOF)]
↓
[Create Refund.status = "requested"]
↓
[Provider API attempt]
/ \
[OK] [Failure]
↓ ↓
[completed] [failed → human alert]
↓
[Notify customer (WhatsApp + email)]
↓
[Audit log]
`
Real fees and delays
| Provider | Delay | Fees (full) | Fees (partial) | Cap |
|---|---|---|---|---|
| Wave (<7d) | Instant | 0 | 0 | None |
| Wave (>7d) | Instant | 1% | 1% | None |
| OM | 24–72h | 0 if unsettled | 2% if settled | 500K XOF/day |
| PayDunya card | 5–7d | 0 | 100 XOF + 0.5% | Negotiated monthly |
| Stripe card | 5–10d | 0 | 0 | KYC limit |
Dispute handling (chargebacks)
Card payments only (Wave/OM don't support bank chargebacks):
- PayDunya/Stripe →
dispute.createdwebhook - Response window: 7–14 days (Visa/Mastercard)
- Submit evidence: order screenshot, proof of delivery, customer IP, logs
- Decision: 30–90 days
Tip: automate evidence collection at order time (IP, user-agent, delivery signature). Collecting at dispute time = too late.
FAQ
Q: Refund a Wave payment after 90 days?
A: Yes via API up to 180 days. Beyond, manual bank transfer.
Q: Does the customer need the same OM account to receive the refund?
A: Yes, OM refunds to source. If the number is deactivated, it sits pending. Workaround: compensating bank transfer.
Q: How to prevent refund abuse?
A: Scoring rules: refunds per month, refunded/ordered ratio, account age. Auto-block past 3 in a month.
Conclusion
Refunds are under-invested by 90% of Senegalese e-commerce SMEs. Doing it well builds trust, shortens support, protects accounting. A few hours upfront saves many hours every month.
Mohamed Bah
Fondateur, Kolonell
Passionate about digital and entrepreneurship in Africa, Mohamed has been helping Sénégalese businesses with their digital transformation since 2020. Founder of Kolonell, he believes every SME deserves a professional and accessible online présence.
