Skip to main content
POST

Sarafa transfers

Send USD or SSP to an active Sarafa customer account in the same currency, with no additional Sarafa fee:
Successful internal transfers return HTTP 200 with transaction.status: "completed" and the transaction/quote response structure shown in payment details.

Mobile payouts

Specify a USD principal and a KES or UGX destination. KES uses MPESA; UGX uses MTN or AIRTEL and requires the recipient’s name.
Review amount_received, total_fees, and total_debit in the quote before executing with "quote": false. Your USD wallet debit is the principal plus quoted fees. The amount is not an all-inclusive budget. You may include the returned quote_token when executing to detect a changed estimate. Preserve it on later retries. Mobile payments generally return HTTP 202 while pending. Confirm completion through signed callbacks or payment details.

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

Active receiving customer 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