Withdrawals
A withdrawal is a Partner API payout: you send USDT or USDC; the recipient receives GHS on mobile money.
Flow
GET /rates → POST /withdrawals → GET /withdrawals/{id} or webhook
Create a withdrawal
POST /v1/withdrawals
| Field | Required | Description |
|---|---|---|
amount | Yes | String with up to 2 decimals, e.g. "50.00" |
currency | Yes | USDT or USDC |
recipient_phone | Yes | E.164 Ghana: +233501234567 |
mobile_network | Yes | MTN, TELECEL, or AIRTELTIGO |
reference_id | Yes | Your unique idempotency key (see Idempotency) |
metadata | No | Arbitrary key-value object |
curl -X POST https://sandbox.fiatsend.com/v1/withdrawals \
-H "Authorization: Bearer $FIATSEND_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"amount": "50.00",
"currency": "USDT",
"recipient_phone": "+233501234567",
"mobile_network": "MTN",
"reference_id": "invoice-2026-001"
}'
| HTTP status | Meaning |
|---|---|
201 | New withdrawal created |
200 | Same reference_id — original withdrawal returned (no duplicate) |
Status lifecycle
pending → processing → completed
↘ failed
| Status | Meaning |
|---|---|
pending | Accepted, queued |
processing | Conversion and MoMo delivery in progress |
completed | GHS delivered |
failed | Not completed; check failure_reason when present |
Get rate quote
GET /v1/rates?from_currency=USDT&to_currency=GHS&amount=50
Response includes rate, fee, total_ghs (what the recipient receives), and valid_until. Quotes are indicative; the rate is locked when you submit the withdrawal.
List and fetch
GET /v1/withdrawals/{withdrawal_id}— single withdrawalGET /v1/withdrawals— paginated listGET /v1/transactions— transaction history view
Network limits (Ghana)
| Network | mobile_network | Min (USDT) | Max (USDT) |
|---|---|---|---|
| MTN Mobile Money | MTN | 1.00 | 5,000.00 |
| Telecel Cash | TELECEL | 1.00 | 3,000.00 |
| AirtelTigo Money | AIRTELTIGO | 1.00 | 2,000.00 |
KYC tier limits apply at the account level. See Console Settings or contact partners@fiatsend.com.