BEVIPAY WHOLESALE API

One integration.
Endless possibilities.

Power airtime, bills, cards, travel and customer accounts with infrastructure built for ambitious African businesses.

Test & live modes Secure webhooks Idempotent requests
request.http
01POST /api/reseller/airtime/purchase
02Authorization: Bearer sk_test_...
03Content-Type: application/json
04
05{
06  "network": "mtn",
07  "amount": 1000,
08  "reference": "airtime_01JYC8K7"
09}
200 SUCCESS248 ms
{ "status": "success", "message": "Airtime delivered" }
Built to scale
BASE URLhttps://api.bevipay.com.ng/api/reseller
FROM ACCOUNT TO PRODUCTION

Your first integration,
made refreshingly clear.

Five deliberate steps take you from your existing BeviPay account to a secure, production-ready integration.

Before you begin

An active BeviPay account is required.

Sign up on the BeviPay iOS or Android app, or directly through the web portal. Your app email, password, transaction PIN and wallet stay linked to your reseller account.

Create or access your account
01

Sign in to the Reseller Portal

Open the reseller portal, select the Reseller tab—not Staff control centre—and sign in with your BeviPay email and password or Google Sign-In.

Your existing BeviPay credentials and transaction PIN connect to the same reseller account and wallet.
Open reseller portal
02

Complete your business profile

Go to Business Profile and submit your company information for due diligence. Choose free self-integration or BeviPay’s custom-built platform package.

Business name and type, RC/BN number (optional), address, email, phone, director’s full name, and 11-digit BVN or NIN.
Optional CAC certificate, government ID and a utility bill from the last three months can accelerate review.
PendingUnder ReviewApproved
Open business profile
03

Generate your API keys

Once approved, open Developers to create credentials for each environment. Test without debiting real funds, then switch to live when you are ready.

Test mode uses sk_test_... keys. Live mode uses sk_live_... keys and executes real wholesale transactions against your wallet.
Secret keys appear only once. Store them in environment variables, never in browser code or source control. Roll or revoke compromised keys immediately.
Open developer settings
04

Configure webhooks & IP access

Add a secure webhook URL for real-time transaction callbacks, including bill confirmations, flight bookings and card events.

Generate a webhook signing secret and verify the HMAC signature on every incoming payload before processing it.
For stronger production security, whitelist up to 20 server IP addresses.
05

Explore the interactive docs

Use the built-in API reference to inspect service endpoints, test requests and move from sandbox to production with confidence.

Documentation covers utilities, education, cards, travel and co-branded customer accounts.
Explore API reference
ONE API. EVERY ESSENTIAL SERVICE.

Infrastructure that
works as hard as you do.

Bring high-demand services into your app, platform or fintech without managing a patchwork of providers.

EXAM PINS

Education

Issue WAEC, JAMB and NECO examination pins directly inside your product experience.

CARD ISSUING

Virtual cards

Create, fund and terminate virtual cards with programmatic control at every step.

FLIGHTS & HOTELS

Travel & stays

Flight search, quotes, instant or held bookings, and hotels for complete travel journeys.

VIRTUAL ACCOUNTS

Customer accounts

Create co-branded virtual accounts for your customers and simplify collections.

POST /api/reseller/customers/accounts
QUICKSTART

From zero to first request.

Authenticate with either Authorization: Bearer sk_... or x-api-key: sk_.... Keep secret keys on your server.

SANDBOX READY2 examples · Wallet + Airtime
# 1. Check your wallet balance
curl --request GET \
  --url https://api.bevipay.com.ng/api/reseller/wallet/balance \
  --header "Authorization: Bearer $BEVIPAY_SECRET_KEY"

# 2. Purchase airtime with a unique reference
curl --request POST \
  --url https://api.bevipay.com.ng/api/reseller/airtime/purchase \
  --header "Authorization: Bearer $BEVIPAY_SECRET_KEY" \
  --header "Content-Type: application/json" \
  --data '{
    "network": "mtn",
    "phone": "08030000000",
    "amount": 1000,
    "reference": "airtime_01JYC8K7M4N2Q0W8V6"
  }'

Success response

200 OK
{
  "status": "success",
  "message": "Airtime purchase successful",
  "data": {
    "reference": "airtime_01JYC8K7M4N2Q0W8V6",
    "status": "completed"
  }
}

Error response

4XX
{
  "status": "error",
  "message": "Insufficient wallet balance",
  "data": null
}

Handle every outcome deliberately.

Check both the HTTP status and the response’s status and message fields.

CODEMEANINGWHAT TO DO
200Request successfulRead the data object and fulfil the customer journey.
400Invalid requestCorrect validation errors before retrying.
401Authentication failedCheck the key, environment and authentication header.
402Insufficient balanceFund the reseller wallet; do not retry automatically.
409Duplicate referenceQuery the original transaction instead of creating another.
500Server errorRetry safely with the same reference and exponential backoff.

Protect every transaction.

Generate a unique idempotency reference for each purchase, persist it before sending, and reuse that same reference for network retries. Never reuse a reference for a different request, and always verify webhook HMAC signatures.

READY WHEN YOU ARE

Your next big product
starts with one request.