Skip to main content
POST

Mobile collections

Collect KES or UGX into your USD wallet. Use MPESA for KES, or MTN/AIRTEL for UGX. UGX requires the payer’s name. Supply the payer’s phone number with country prefix and 12 digits; an optional leading + is accepted.
Illustrative quote; actual pricing is returned by the API:
Submit again with "quote": false to collect. You may include the returned quote_token; a changed estimate then returns HTTP 409. Provider acceptance remains pending until settlement. HTTP 202 means the payment is pending or awaiting reconciliation.

Sarafa approval requests

Request payment in USD or SSP from an eligible Sarafa customer or merchant account:
The payer must approve within 15 minutes. Creating the request moves no funds. Rejection or expiry fails the payment, with reason set to rejected or expired. Sarafa charges have no additional fee. Read payment details or process signed callbacks to confirm the outcome. Preserve the reference and original execution payload when retrying.

Authorizations

Authorization
string
header
required

Use the full key from the merchant dashboard API section. Keep it on your server.

Body

application/json
amount
string
required

Positive decimal string, not a JSON number. Zero is invalid. Currency-specific precision and payment limits also apply.

Pattern: ^[0-9]+([.][0-9]{1,18})?$
Example:

"100.00"

reference
string
required

Your idempotency reference, unique across charge, transfer, swap, and checkout creation within your organization. Reuse it with unchanged details for execution retries.

Required string length: 1 - 128
callback_url
string<uri>
required

HTTPS URL without embedded credentials. Required even for quotes. Receives signed payment callbacks.

Pattern: ^https://
Example:

"https://merchant.example/payments"

channel
enum<string>
required
Available options:
sarafa
currency
enum<string>
required
Available options:
USD,
SSP
account_number
string
required

Eligible payer customer or merchant account.

Pattern: ^\d{12,13}$
Example:

"602600000002"

quote
boolean
default:true

True returns a quote without moving funds or creating a transaction. Set false to execute.

Response

Quote, or resolved execution. Only transaction.status = completed confirms payment.

status
enum<string>
required
Available options:
success
quote
object
required