Skip to main content
Use sandbox first for all integration validation before moving to production.

Sandbox Setup

1

Use sandbox base URL

API base URL: https://sandbox-api.payfonte.com
2

Use sandbox credentials

Get your client-id and client-secret from Settings -> Security -> API Keys and Webhooks in sandbox-app.payfonte.com.
3

Set webhook endpoint

Configure a test callback URL so you can validate async transaction updates.

What To Validate Before Go-Live

Auth and Headers

Confirm all requests include client-id and client-secret.

Amount Format

Confirm you send integer minor-unit values only. Decimals are not supported.

Status Lifecycle

Validate pending/processing to final states (success or failed) in your business flow.

Webhook Handling

Verify signature validation, retries, idempotency, and response timing.

Core Test Scenarios

ScenarioExpected Result
Valid charge request201 response with transaction reference
Invalid credentialsAuthentication failure (401/403)
Decimal amount sentValidation/provider failure
Duplicate reference409 with DuplicateTransactionReference
Invalid provider slugError with InvalidProvider
Webhook deliveryCallback received and processed once (idempotent)

Simulate Success, Failed, and Pending Outcomes

For both collections and disbursements in sandbox, you can control the expected transaction outcome by changing the mobile money phone number used in the request.
Phone Number PatternExpected ResultHow To Use It
Any other phone numbersuccessSandbox treats all other phone numbers as successful transactions
Number ending in 000000failedSandbox forces the transaction to fail
Number ending in 111111pendingSandbox keeps the transaction pending so you can test async handling
Apply this rule to the phone number field you send for the transaction. For collections, use the customer’s mobile money number. For disbursements, use the recipient phone number.
When testing pending flows, do not treat the initial API response as final. Wait for webhook updates or verify the transaction status from your backend before marking the transaction as success or failed.

Card Test Details

Use these sandbox card details to test card collection authentication paths and final outcomes.
NumberExpiryCVVPINOTPTest CaseStatus
5061 4604 1012 1111 10112/505571102543210PinPENDING
5061 4604 1012 1111 10212/505581103543210Pin+OTPPENDING
5061 4604 1012 1111 10312/505591107543210Pin+3DSPENDING
5061 4604 1012 1111 10412/505601104543210PinSUCCESS
5061 4604 1012 1111 10512/505611105543210Pin+OTPSUCCESS
5061 4604 1012 1111 10612/505621106543210Pin+3DSSUCCESS
5061 4604 1012 1111 10712/505631107123456PinFAIL
5061 4604 1012 1111 10812/505641108245678Pin+OTPFAIL
5061 4604 1012 1111 10912/505651109456789Pin+3dsFAIL
5061 4604 1012 1111 11012/505661110234567No auth
5061 4604 1012 1111 11112/505671111334455Insufficient balance
5061 4604 1012 1111 1123/505681111334455Expired card
4508 7500 15741 019(USD)12/501003DSSUCCESS
4012 0000 3333 0026(USD)12/501003DSSUCCESS
5123 4500 0000 0008(USD)12/501003DSSUCCESS
2223 0000 0000 0007(USD)12/501003DSFAIL
5111 1111 1111 1118(USD)12/501003DSFAIL
2223 0000 0000 0007(USD)12/501003DSFAIL
5061 4604 1012 1111 103(USD)12/5010011073DSPENDING

Provider-Specific Test Data

Orange Ivory Coast OTP simulator

For Orange Ivory Coast testing on Payfonte:
  1. Open https://mpayment.orange-money.com/mpayment-otp/login
  2. Sign in with:
    • Username: 7701901040
    • Password: MerchantWP01040
  3. Generate OTP with:
    • Phone Number: 7701101040 (usually pre-loaded)
    • PIN: 1791
  4. Use the generated OTP on the payment platform.
  • Success example: 254700123456
  • Failed example: 254700000000
  • Pending example: 254711111111
  • Success example: 233242426222
  • Failed example: 233240000000
  • Pending example: 233241111111

Quick Sandbox Request

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": "test-001",
    "amount": 10000,
    "currency": "NGN",
    "country": "NG",
    "user": {
      "phoneNumber": "08012345678"
    }
  }'

Environments

Sandbox and production URLs and credential setup.

Webhooks

Verify callback payloads and signature handling.

Error Codes

Troubleshoot failed test requests quickly.