Skip to main content
Remittances move funds across corridors and require extra KYC fields. The flow mirrors payouts/collections: accept immediately, then finalize via webhook.

Quick flow

Authenticate -> Sign -> Send remittance -> Receive acceptance -> Receive webhook -> Reconcile (optional status check).

Prerequisites


Endpoint

Required headers
Idempotency: reuse the same transaction.reference for retries of the same logical remittance.

Request body (example — Individual originator, BANK recipient)

Corporate originator, MOMO recipient

Notes
  • transaction.timestamp for remittance uses YYYY-MM-DD HH:mm:ss (no timezone suffix).
  • KYC fields are required per corridor. At minimum, the originator needs nationality, address, msisdn, country, and purpose; the recipient needs address, country, relationship, account_type, and account. Provide name, DOB, and ID details where available.
  • Use bank_code for BANK recipients. For Corporate parties, supply company_name and company_registration.
  • id_type supported values — Individual: DRIVING-LICENSE, PASSPORT, NATIONAL-ID, ALIEN-ID, MILITARY-ID. Corporate: CERTIFICATE-OF-INCORPORATION, REGISTRATION-NUMBER, CR12.

Acceptance response (immediate)

The acceptance response uses the same envelope as payouts. See Initiate remittance API.

Webhook (final outcome)

We POST to your callback_url when the remittance completes. See Webhook payload.

Status checks (optional)

If a webhook is delayed or missing, query status using Check remittance status or Status checks.

Common issues

  • Signature mismatch: ensure the string-to-sign matches the payload exactly. See Signature generation.
  • Wrong token: use a remittance-scoped Bearer token.
  • Timestamp format: remittance uses YYYY-MM-DD HH:mm:ss.