Getting Started
What is Payfonte?
What is Payfonte?
- Mobile Money API: MTN MoMo, Orange Money, Airtel Money, M-Pesa, Wave, Moov
- Bank Transfers: Direct bank payments in Nigeria, Kenya, South Africa
- Cards: Visa, Mastercard via partner gateways
- Digital Wallets: Opay, PalmPay, and others
- MTN MoMo API integration across 10+ countries
- M-Pesa API for Kenya and Tanzania
- Airtel Money API for pan-African coverage
- Wave Money integration for Senegal, Ivory Coast, and more
How do I get started with Payfonte?
How do I get started with Payfonte?
- Create a Sandbox Account: Sign up at sandbox-app.payfonte.com
- Get API Credentials: Navigate to Settings → API Keys/Webhooks in your dashboard
- Set Up Webhooks: Configure your callback URL under Settings → API Keys/Webhooks
- Test Your Integration: Use our sandbox environment to test transactions
- Complete KYB: Submit documentation via our KYB form
- Go Live: Once approved, switch to production credentials
What are the differences between Sandbox and Production?
What are the differences between Sandbox and Production?
| Aspect | Sandbox | Production |
|---|---|---|
| API URL | https://sandbox-api.payfonte.com | https://api.payfonte.com |
| Dashboard | https://sandbox-app.payfonte.com | https://app.payfonte.com |
| Real Money | ❌ No | ✅ Yes |
| Credentials | Separate sandbox keys | Separate production keys |
| MNO Prompts | Simulated responses | Real STK push/USSD |
What KYB documents are required for onboarding?
What KYB documents are required for onboarding?
- Certificate of Incorporation
- Memorandum & Articles of Association
- Board Resolution authorizing payment processing
- Valid ID of Directors/UBOs
- Proof of Business Address
- Bank Statement (last 3 months)
- Business Registration Certificate
- Valid Government ID
- Proof of Address
- Bank Statement
Mobile Money API Explained
How does mobile money payment work?
How does mobile money payment work?
What is STK Push vs USSD?
What is STK Push vs USSD?
STK Push (SIM Toolkit Push)
- How it works: A payment prompt is automatically “pushed” to the customer’s phone
- User experience: Customer sees a pop-up asking them to enter their PIN
- Supported by: M-Pesa API (Kenya, Tanzania), some MTN markets
- Pros: Seamless, no dialing required
- Cons: Requires phone to be on and have signal
USSD (Unstructured Supplementary Service Data)
- How it works: Customer dials a code or receives a session-based menu
- User experience: Customer navigates menu and enters PIN
- Supported by: MTN MoMo API, Orange Money, Airtel Money API
- Pros: Works on basic phones, no data required
- Cons: More steps for customer
Provider Authorization (Merchant-Initiated)
- How it works: Payment request sent directly via mobile money API, MNO prompts customer
- Supported by: Most alternative payment method providers in West Africa
- Pros: Consistent experience across channels
What is the customer experience for mobile money payments?
What is the customer experience for mobile money payments?
- Customer selects mobile money as payment method
- Enters their mobile money phone number
- Clicks “Pay”
- Customer receives an STK push notification OR USSD prompt on their phone
- The prompt shows: merchant name, amount, and reference
- Customer enters their mobile money PIN to authorize
- Customer sees “Payment Successful” on their phone
- Receives SMS confirmation from MNO
- Redirected back to merchant’s success page
| Stage | Duration |
|---|---|
| Initiation to prompt | 2-5 seconds |
| Customer authorization | 10-30 seconds |
| Confirmation callback | 1-3 seconds |
| Total | 15-45 seconds |
What is Pre-Authorization for mobile money?
What is Pre-Authorization for mobile money?
Transaction Processing
What transaction statuses can I expect?
What transaction statuses can I expect?
| Status | Description | Final? | Action Required |
|---|---|---|---|
pending | Payment initiated, awaiting customer authorization | ❌ | Wait for webhook |
processing | Customer authorized, MNO processing | ❌ | Wait for webhook |
success | Payment completed successfully | ✅ | Fulfill order |
failed | Payment failed (see error code) | ✅ | Show retry option |
expired | Customer didn’t authorize in time | ✅ | Show retry option |
reversed | Funds returned to customer | ✅ | Update records |
How does Payfonte ensure 100% final state resolution?
How does Payfonte ensure 100% final state resolution?
- Real-time monitoring: We track every transaction from initiation
- Automatic polling: For pending transactions, we poll MNO status APIs
- Statement reconciliation: We download and reconcile MNO statements
- Timeout handling: Transactions that exceed timeout are marked appropriately
- Callback retry: We retry webhook notifications until acknowledged
pending state indefinitely. Every payment reaches a conclusive status (success, failed, or expired) within the provider’s timeout window (typically 5-15 minutes).What are the timeout windows for different providers?
What are the timeout windows for different providers?
| Provider | Timeout | Notes |
|---|---|---|
| M-Pesa (Kenya) | 60 seconds | STK push expires quickly |
| MTN MoMo | 5-15 minutes | Varies by country |
| Orange Money | 5-10 minutes | USSD session timeout |
| Airtel Money | 5-10 minutes | Standard timeout |
| Wave | 5 minutes | App-based confirmation |
expired and you’ll receive a webhook notification.How do I handle failed transactions?
How do I handle failed transactions?
errorCode and errorMessage in the response/webhook:Common failure reasons:| Error | Cause | Resolution |
|---|---|---|
INSUFFICIENT_FUNDS | Customer’s wallet balance too low | Ask customer to top up |
WRONG_PIN | Customer entered incorrect PIN | Retry with correct PIN |
TIMEOUT | Customer didn’t respond in time | Retry the transaction |
ACCOUNT_LOCKED | Customer’s wallet is locked | Customer contacts MNO |
INVALID_PHONE | Phone number not registered for mobile money | Verify phone number |
DAILY_LIMIT_EXCEEDED | Customer exceeded daily transaction limit | Try smaller amount or wait |
SYSTEM_ERROR | MNO technical issue | Retry after a few minutes |
- Show user-friendly error messages
- Offer retry option for retriable errors
- Log all failed transactions for analysis
- Contact support for persistent
SYSTEM_ERRORissues
Webhooks & Callbacks
How do I set up webhooks?
How do I set up webhooks?
- Go to Dashboard → Settings → API Keys/Webhooks
- Enter your webhook endpoint URL (e.g.,
https://yoursite.com/payfonte/webhook) - Click Save
- Must be publicly accessible (no localhost)
- Must use HTTPS (SSL certificate required)
- Must return HTTP 200 within 30 seconds
- Should be idempotent (handle duplicate calls)
What does a webhook payload look like?
What does a webhook payload look like?
payment.completed- Payment successfulpayment.failed- Payment failedpayment.expired- Payment timed outdisbursement.completed- Disbursement successfuldisbursement.failed- Disbursement failed
How should I handle webhooks?
How should I handle webhooks?
What if my webhook endpoint is down?
What if my webhook endpoint is down?
- Attempt 1: Immediate
- Attempt 2: 1 minute later
- Attempt 3: 5 minutes later
- Attempt 4: 30 minutes later
- Attempt 5: 2 hours later
- Attempt 6: 12 hours later
- Transaction status is still updated in our system
- You can always query transaction status via API
- Check the webhook logs in your dashboard
Settlement & Disbursements
How quickly do I receive my funds?
How quickly do I receive my funds?
| Country | Method | Settlement |
|---|---|---|
| Nigeria | Bank Transfer | T+1 (Next business day) |
| Nigeria | Mobile Money | T+1 to T+2 |
| Kenya | M-Pesa | T+1 |
| Ghana | All methods | T+1 to T+2 |
| Ivory Coast | Mobile Money | T+2 to T+3 |
| Other CFA Zone | Mobile Money | T+2 to T+3 |
Can I send Disbursements (disbursements)?
Can I send Disbursements (disbursements)?
- Mobile Money Wallets: Send to any supported MNO
- Bank Accounts: Nigeria, Kenya, South Africa, and more
- Bulk Disbursements: Process multiple disbursements in one API call
- Validate recipient (phone number or bank account)
- Submit disbursement request
- Receive webhook on completion
- Mobile Money: 30 seconds - 5 minutes
- Bank Transfer: Same day - Next business day
How do I check my wallet balance?
How do I check my wallet balance?
- Login to your merchant dashboard
- View balances on the home screen
- Breakdown by currency and country
Technical Integration - Payment Orchestration API
How should I format amounts?
How should I format amounts?
| Display Amount | Value to Send |
|---|---|
5000.50 NGN | 500050 |
100.00 GHS | 10000 |
1000 KES | 100000 |
10000 XOF | 1000000 |
5000 XAF | 500000 |
How should I format phone numbers?
How should I format phone numbers?
| Country | Format | Example |
|---|---|---|
| Nigeria | 234XXXXXXXXXX | 2348012345678 |
| Kenya | 254XXXXXXXXX | 254712345678 |
| Ghana | 233XXXXXXXXX | 233201234567 |
| Ivory Coast | 225XXXXXXXXXX | 2250512345678 |
| Cameroon | 237XXXXXXXXX | 237612345678 |
- Plus sign (+)
- Spaces or dashes
- Leading zeros after country code
What is the Direct Charge API?
What is the Direct Charge API?
- Server-to-server payments: When you’ve already collected customer details for mobile money API charges
- Recurring payments: Charging saved payment methods
- Mobile app integrations: Native mobile money integration Africa experiences
Do you support Hybrid Orchestration (BYOK)?
Do you support Hybrid Orchestration (BYOK)?
- You maintain direct contracts with MNOs (e.g., MTN MoMo API, M-Pesa API, Orange Money)
- You provide your API credentials to Payfonte
- We route transactions through your contracts using our smart payment routing Africa engine
- You keep your negotiated rates for each mobile money API
- Lower fees (your negotiated rates)
- Maintain provider relationships
- Combined coverage (your contracts + our partnerships)
- Single dashboard for all alternative payment methods (APM)
- Enterprise payment orchestration Africa capabilities
What happens if a provider is down?
What happens if a provider is down?
- When a primary provider fails, we automatically try backup rails
- Multi-PSP integration ensures multiple providers per country for redundancy
- Real-time monitoring detects outages within seconds
- Traffic is re-routed without merchant intervention
- Primary: MTN MoMo API direct integration
- Backup 1: MTN via aggregator
- Backup 2: Alternative mobile money payment aggregator route
Security & Compliance
Is Payfonte PCI DSS compliant?
Is Payfonte PCI DSS compliant?
- PCI DSS Level 1: Highest level of card data security
- Quarterly ASV Scans: External vulnerability assessments by certified consultants
- Annual Penetration Testing: Third-party security audits
- End-to-End Encryption: All data encrypted in transit (TLS 1.2+) and at rest
- Secure Tokenization: Card data tokenized for recurring payments
How do you handle customer data privacy?
How do you handle customer data privacy?
- GDPR-aligned practices: Even for non-EU data
- Data minimization: We only collect what’s necessary
- Encryption: All PII encrypted at rest and in transit
- Access controls: Role-based access with audit logging
- Retention policies: Data retained per regulatory requirements
- Phone numbers (for payment processing)
- Email addresses (for notifications)
- Transaction history (for reconciliation)
- Mobile money PINs
- Card CVVs (tokenized immediately)
- Customer wallet balances
What fraud prevention measures are in place?
What fraud prevention measures are in place?
- Velocity checks: Detect unusual transaction patterns
- Device fingerprinting: Identify suspicious devices
- Geolocation analysis: Flag location mismatches
- Amount thresholds: Configurable limits per merchant
- Blacklist management: Block known bad actors
- Set custom transaction limits in your dashboard
- Enable additional verification for high-value transactions
- Access fraud analytics and reports
Troubleshooting
Why is my transaction stuck in 'pending'?
Why is my transaction stuck in 'pending'?
| Cause | Resolution |
|---|---|
| Customer hasn’t authorized yet | Wait for customer to enter PIN |
| MNO processing delay | Usually resolves within 5-15 minutes |
| Network connectivity issues | Our reconciliation engine will resolve |
| STK push not received | Customer may need to retry |
- Wait 5-15 minutes for auto-resolution
- Check transaction status via API
- If stuck > 30 minutes, contact support
Why am I getting 401 Unauthorized errors?
Why am I getting 401 Unauthorized errors?
How do I test different transaction scenarios in sandbox?
How do I test different transaction scenarios in sandbox?
| Phone Number | Scenario |
|---|---|
2348000000001 | Successful payment |
2348000000002 | Failed - Insufficient funds |
2348000000003 | Failed - Wrong PIN |
2348000000004 | Timeout - No response |
2348000000005 | Processing delay (30s) |