Welcome to the PayOnUs API documentation. This guide will help you integrate with our payment processing platform to enable seamless financial transactions for your business.
To set up your integration, follow these steps to get your credentials and connect to the PayOnUs API. All requests must be made over HTTPS; responses are in JSON format.
1
Create an account
Sign up on the Merchant Portal. You'll have access to both Sandbox and Production environments immediately after registration.
2
Get your API credentials
Navigate to Settings → API Credentials to generate your Client ID and Client Secret. These are required to obtain an access token.
3
Set up your Webhook
Configure your Webhook URL and copy your Webhook Verification Key from Settings → API. Both are needed to receive and verify payment notifications.
4
Retrieve your Business ID
Toggle Test Mode to OFF, navigate to the Business section and copy your ID. Required for most API endpoints. You can re-enable Test Mode after.
Base URLs
Sandbox
https://core-sandbox.payonus.com
No real money. Full API parity.
Production
https://core.payonus.com
Live keys. Keep credentials secret.
Authentication
PayOnUs uses OAuth 2.0. Exchange your Client ID and Client Secret for an access token, then pass it in the Authorization header of every request.
You can only have one valid token at a time — generating a new one invalidates the previous. Token generation is rate-limited to 3 requests per minute. Cache the token for slightly less than expires_in seconds.
Error Handling
PayOnUs uses conventional HTTP status codes. 2xx indicates success; 4xx a client error; 5xx a server error.
400Bad RequestMissing or invalid parameter
401UnauthorizedMissing or expired access token
403ForbiddenToken doesn't have permission for this action
404Not FoundThe requested resource doesn't exist
409ConflictRequest conflicts with an existing record
429Too Many RequestsRate limit exceeded (e.g. token generation > 3/min)
500Internal Server ErrorSomething went wrong on PayOnUs's servers
PayOnUs provides multiple methods to receive payments: Virtual Accounts (Fixed or Dynamic) and Mobile Money. Virtual Accounts accept bank transfers; Mobile Money supports MTN, M-Pesa, and other networks across Africa.
Fixed Accounts
Permanent accounts assigned to your business for receiving ongoing customer payments.
Dynamic Accounts
Temporary accounts created per transaction — ideal for one-time payments with exact amounts.
Mobile Money
Accept MoMo payments across Ghana (MTN), Kenya (M-Pesa), South Africa, and Francophone Africa.
Card Payments
Accept card payments via the PayOnUs checkout or direct API integration.
Fixed Accounts
Fixed virtual accounts are permanent accounts assigned to your business that can receive payments from customers at any time.
Transfer funds from your PayOnUs wallet to bank accounts, mobile money wallets, or other PayOnUs businesses. Always perform a Name Enquiry before initiating a bank transfer.
GET /api/v1/banks
Fetch Bank List
Returns available banks and institution codes.
POST /api/v1/transfer-requests/name-enquiry
Name Enquiry
Verify account details before initiating a transfer.
POST /api/v1/transfer-requests/bank-transfer
Initiate Transfer
Send funds to a bank account or mobile money wallet.
PayOnUs sends real-time webhook events when a payment is received or a payout completes. Configure a publicly accessible HTTPS endpoint under Merchant Dashboard → Settings → Webhooks. Respond with HTTP 200 within 5 seconds; defer heavy work to background jobs.
Event types
CollectionCOLLECTIONInbound payment confirmed — bank transfer, card, or mobile money
PayoutPAYOUTOutbound transfer settled, failed, or rejected
Every webhook request includes a hash header — a hex-encoded SHA-256 used to verify payload integrity.
Use the sandbox environment to simulate transactions before going live. Ensure your Webhook URL and Verification Key are configured in the sandbox dashboard, and that your IP is whitelisted.