Cross-border Remittance
Overview

The Remittance API sends funds from a merchant wallet (KES or USD) to a recipient on a supported destination corridor, over mobile money or bank transfer. Quotes are live-priced. The wallet is debited only when you execute the transfer.

  • Purpose: Quote, verify, and send cross-border payouts from your business wallet.
  • Target Audience: Merchants and fintechs sending payouts to supported destination countries.

Integration flow
  1. Authenticate with a Bearer token and whitelist your server IP.
  2. Save the sender (KYC) profile, then confirm readiness.
  3. List destinations. For bank rails, fetch banks for that country.
  4. Request a quote (send or receive amount).
  5. Verify the recipient phone or bank account.
  6. Create the remittance against the quote. By default it executes immediately.
  7. Poll status or wait for the webhook on your result_url.

Authentication

All remittance endpoints except the provider callback require a Bearer token and an approved source IP. Pass the merchant business as X-Business-Id.

HeaderTypeDescriptionRequired
AuthorizationstringBearer token from Authentication.Yes
Acceptstringapplication/jsonYes
Content-Typestringapplication/json on POST/PUT.Conditional
X-Business-IdintegerMerchant business ID. If omitted, the first business on the authenticated user is used.Recommended
Remittance does not use Signature or x-hash. Those headers apply to C2B/B2C payment endpoints only.

Source wallets

Fund the transfer from a wallet whose currency is KES or USD. wallet_no is the wallet slug. The wallet must belong to the business in X-Business-Id.


Destination corridors

Use ISO country codes and the matching currency. Fetch the live list from Destinations & Banks.

CountryCodeCurrency
TanzaniaTZTZS
United Arab EmiratesAEAED
BangladeshBDBDT
United KingdomGBGBP
GhanaGHGHS
IndiaININR
KenyaKEKES
NigeriaNGNGN
PakistanPKPKR
RwandaRWRWF
UgandaUGUGX
United StatesUSUSD
South AfricaZAZAR

Rails
RailRecipient fields
mobile_moneyother_names, surname, phone (international format, e.g. 2567XXXXXXXX)
bankother_names, surname, account_number, bank_code, bank_name

Statuses
StatusMeaning
pending_approvalCreated with auto_execute: false. Wallet not yet debited.
processingSubmitted to the payout rail. Wallet already debited.
successfulProvider confirmed payout.
failedProvider rejected the payout or submit failed.
expiredReserved status. Request a new quote if the quote TTL elapsed.

Endpoint catalog
MethodPathAuthPage
GET/api/v2/remit/readinessBearer + IPSender
PUT/api/v2/remit/senderBearer + IPSender
GET/api/v2/remit/destinationsBearer + IPDestinations
GET/api/v2/remit/banks?country=UGBearer + IPDestinations
POST/api/v2/remit/quotesBearer + IPQuote
POST/api/v2/remit/verifyBearer + IPVerify
POST/api/v2/remitBearer + IPCreate
POST/api/v2/remit/{id}/executeBearer + IPCreate
GET/api/v2/remitBearer + IPStatus
GET/api/v2/remit/{reference}Bearer + IPStatus
POST/api/v2/remit/callbackPublic (provider)Status

Wallet debit
  • Create with auto_execute: true (default) debits immediately and submits the payout.
  • Create with auto_execute: false leaves the remittance in pending_approval. Debit happens on POST /api/v2/remit/{id}/execute.
  • Existing C2B collections and B2C payouts are unchanged. Remittance is a separate /api/v2/remit/* surface.

Terms of Use & Legal

By using this API, you agree to our Terms of Service and Privacy Policy. Do not share sensitive data or credentials.