Skip to main content
Payfonte provides multiple methods to collect payments from your customers across Africa using our payment orchestration API. Accept all major alternative payment methods (APM) and local payment methods in Africa through a single integration.

Integration Methods


Quick Comparison

MethodIntegration EffortCustomer ExperienceUse Case
StandardLowRedirect to hosted pageMost merchants
InlineMediumEmbedded on your siteSeamless UX
Direct ChargeHighNo UI (server-side)Recurring, saved cards
Payment LinksNoneClick link to payInvoices, ad-hoc

Payment Flow Overview


Supported Alternative Payment Methods (APM)

RegionMobile Money APIBank TransferCards
NigeriaMTN MoMo API, Airtel, Opay, PalmPay✅ YesVia partner
GhanaMTN MoMo API, AirtelTigo, TelecelComing soonVia partner
KenyaM-Pesa API✅ YesVia partner
TanzaniaM-Pesa API, Airtel Money API, Halopesa, TigoComing soon-
West Africa (CFA)Orange Money, MTN, Wave Money integration, Moov--
See Supported Providers for the complete list of local payment methods in Africa.

Basic Collection Request

Here’s a minimal example to create a checkout session:
curl --location 'https://sandbox-api.payfonte.com/payments/v1/checkouts' \
  --header 'client-id: YOUR_CLIENT_ID' \
  --header 'client-secret: YOUR_CLIENT_SECRET' \
  --header 'Content-Type: application/json' \
  --data '{
    "reference": "ORDER-001",
    "amount": 5000,
    "currency": "NGN",
    "country": "NG",
    "redirectURL": "https://yoursite.com/payment/complete",
    "webhook": "https://yoursite.com/webhooks/payfonte",
    "user": {
      "email": "customer@example.com",
      "phoneNumber": "08012345678"
    }
  }'

Required Parameters

ParameterTypeDescription
referencestringYour unique order/transaction identifier
amountintegerPayment amount in minor units (see Amount Specification)
currencystringISO currency code (NGN, KES, GHS, XOF, etc.)
countrystringISO country code (NG, KE, GH, etc.)
redirectURLstringURL to redirect customer after payment

Optional Parameters

ParameterTypeDescription
webhookstringURL for payment notifications
user.emailstringCustomer email address
user.phoneNumberstringCustomer phone number
metadataobjectCustom data to attach to transaction

Handling Webhooks

We send webhook notifications for payment status changes. Always implement webhook handling for production:
app.post('/webhooks/payfonte', (req, res) => {
  const event = req.body;

  switch (event.event) {
    case 'payment.completed':
      // Payment successful - fulfill order
      fulfillOrder(event.data.reference);
      break;
    case 'payment.failed':
      // Payment failed - notify customer
      notifyCustomer(event.data.reference);
      break;
  }

  res.status(200).send('OK');
});
See Webhooks for complete documentation.

Best Practices

Generate unique reference values for each transaction. This prevents duplicate charges and simplifies reconciliation.
Your system should handle webhook retries gracefully. Check if an order is already fulfilled before processing.
After receiving a webhook, verify the transaction status via API before fulfilling orders.
Some payment methods (like USSD) take time to complete. Show appropriate waiting states to customers.

Next Steps