Skip to main content
Use these payload templates when calling: POST /payments/v1/payments/direct-charge

Common Payload (Most Providers)

{
  "reference": "ORDER-1001",
  "amount": 10000,
  "provider": "mtn-momo-ivory-coast",
  "webhook": "https://yourapp.com/webhooks/payfonte",
  "narration": "Order payment",
  "customerInput": {
    "phoneNumber": "2250512345678"
  }
}

Orange Pre-OTP Payload

Orange providers may require a customer-generated code before request submission.

USSD guidance

  • Orange Senegal: #144#391#
  • Orange Mali: #144#77#
  • Orange Burkina Faso: *144*4*6*amount#
On sandbox, any random 6-digit code can be used for testing.
{
  "reference": "ORDER-1003",
  "amount": 10000,
  "provider": "orange-senegal",
  "webhook": "https://yourapp.com/webhooks/payfonte",
  "narration": "Order payment",
  "customerInput": {
    "phoneNumber": "786175702",
    "customerCode": "<6-digit-code>"
  }
}

Field Reference

FieldTypeRequiredNotes
referencestringRecommendedMust be unique per transaction
amountintegerYesMinor-unit value only
providerstringYesUse slug from Supported Providers
webhookstringNoPer-request webhook override
narrationstringNoHuman-readable transaction note
customerInput.phoneNumberstringUsually YesFormat based on provider/country
customerInput.networkstringProvider-specificRequired for some specific flows like bank transfer
customerInput.customerCodestringProvider-specificRequired for Orange pre-OTP flows

Validation Checklist Before Sending

Amount format

Send integer minor-unit amounts only. Decimals are not supported.
Ensure provider matches a valid slug from Supported Providers.
Confirm provider-specific fields exist (phoneNumber, network, customerCode) before sending request.
Generate unique references to prevent duplicate transaction errors.

Direct Charge API

Request flow and response/action handling.

Mobile Money Flows

Processing, redirect, and pre-OTP behavior.

Amount Specification

Minor-unit conversion rules for all amounts.