API reference
Base URL https://api.saopayglobal.com/v1 · sandbox https://sandbox.api.saopayglobal.com/v1
Initiate a mobile money payment
Sends an approval prompt to the customer's phone. Returns a payment in pending.
| Field | Type | Notes |
|---|---|---|
| amount | integer | Pesewas, min 100, max 5,000,000 |
| currency | string | GHS |
| phone | string | 233XXXXXXXXX |
| network | string | mtn · telecel · airteltigo · optional |
| reference | string | Unique, ≤ 64 chars, idempotent |
| description | string | Shown on the prompt, ≤ 60 chars |
| callback_url | string | HTTPS |
| metadata | object | ≤ 20 keys |
Initiate a card payment
Returns authorization_url. Redirect the customer; Sao redirects back to return_url and sends a webhook.
Retrieve a payment
Also accepts your reference: GET /payments/ref/{reference}.
List payments
Cursor paginated with next_cursor. Max 100 per page.
Create a payment link
| Field | Type | Notes |
|---|---|---|
| amount | integer | Omit for open amount |
| title | string | Shown on the page |
| reusable | boolean | Default false |
| collect | array | name · email · note |
| expires_at | datetime | Optional |
Create a refund
Fields: payment_id, optional amount for partial, reason. Returns a refund with status pending then completed.
Create a payout
| Field | Type | Notes |
|---|---|---|
| amount | integer | Pesewas |
| destination.type | string | momo · bank |
| destination.phone | string | For momo |
| destination.bank_code, account | string | For bank |
| reference | string | Idempotent |
| narration | string | Appears on the recipient's statement |
Up to 1,000 payouts in one call. Each item succeeds or fails independently; the batch reports per-item status.
Name lookup
Returns the registered name for a MoMo number. Free, rate limited to 10 per second.
Webhooks
Events: payment.success, payment.failed, payment.expired, refund.completed, payout.completed, payout.failed. Signature header X-Sao-Signature.
Balance
Available and pending balances per currency.