Your users. Your app. Nigeria's bill payments.
You know your users. You decide how they fund their account. You use our API to offer them airtime, data, electricity, and cable TV. Read your product costs from the catalogue and set the retail price your customers pay in your own app.
Airtime, data, electricity and cable TV through one API. Check the current catalogue for product availability.
By integrating you agree to the Partner Agreement.
Choose what you want to build
Find a network or biller, connect your server and learn how to recover an unresolved purchase.
How the RizPay API works
You bring the users. We bring the infrastructure. You keep the margin.
You own the user relationship
Your users authenticate with your app. You control their experience. We are invisible infrastructure: no RizPay branding, no redirects, no separate login.
You control funding
Your application controls customer payment collection. Keep your customer payment records separate from the purchases billed to your RizPay partner account.
Set your retail prices
Read product costs from the catalogue and set retail prices in your own system. Your checkout collects your markup; any separately agreed partner incentive is a different calculation.
Four product categories, one API
Airtime (MTN, Airtel, Glo, 9mobile), data plans, electricity (all DisCos), and cable TV (DStv, GOtv, Startimes). One integration covers everything.
Webhooks for real-time events
Get notified on purchase success, failure, and reversal. Every webhook is signed with HMAC-SHA256 so you can verify it came from us.
Full sandbox environment
Test every product category without moving real money. Sandbox API keys are separate from production, so you can build and verify before going live.
Why choose RizPay?
Everything you need to build and grow a bill payment business on top of our platform.
Competitive rates
Earn a margin on every transaction. Volume bonuses available for high-transaction partners.
Fast integration
Single API for all bill payment categories. Clear documentation, code examples, and a full sandbox so you can go from zero to live quickly.
Secure infrastructure
Use scoped server-side API keys and verify signed webhook events. Keep customer authorization and secret management in your own server application.
Real-time transaction events
Webhooks for every transaction event - success, failure, and reversal, with automatic retries on failed deliveries.
Built for developers
Clear docs, working code examples, and a sandbox that mirrors production. No surprises when you go live.
Dedicated support
Priority support for API partners. We are here to help you ship and succeed.
Simple Integration
Start by reading the sandbox catalogue. Keep your API key on your server.
// Node.js server: list products before creating an order.
const response = await fetch(
'https://my.rizpay.app/api/partners/sandbox/v1/products/airtimes?network=MTN',
{ headers: { Authorization: `Bearer ${process.env.RIZPAY_API_KEY}` },
signal: AbortSignal.timeout(20000), redirect: 'error' }
);
if (!response.ok) throw new Error('Check API access and try again.');
const catalogue = await response.json();
// Select an ID from catalogue.data. Keep your key on the server.# Python server. Use the complete guide for purchase recovery.
import os
import requests
response = requests.get(
'https://my.rizpay.app/api/partners/sandbox/v1/products/airtimes',
params={'network': 'MTN'},
headers={'Authorization': 'Bearer ' + os.environ['RIZPAY_API_KEY']},
timeout=20,
allow_redirects=False,
)
if response.status_code != 200:
raise RuntimeError('Check API access and try again.')
catalogue = response.json()
# Select an ID from catalogue['data'].<?php
// PHP server. RIZPAY_API_KEY must be a sandbox key.
$ch = curl_init('https://my.rizpay.app/api/partners/sandbox/v1/products/airtimes?network=MTN');
curl_setopt_array($ch, [
CURLOPT_RETURNTRANSFER => true,
CURLOPT_FOLLOWLOCATION => false,
CURLOPT_TIMEOUT => 20,
CURLOPT_HTTPHEADER => ['Authorization: Bearer ' . getenv('RIZPAY_API_KEY')],
]);
$raw = curl_exec($ch);
$status = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);
if ($raw === false || $status !== 200) {
throw new RuntimeException('Check API access and try again.');
}
$catalogue = json_decode($raw, true, 512, JSON_THROW_ON_ERROR);# Ruby server. Keep the key in secret configuration.
require 'net/http'
require 'json'
uri = URI('https://my.rizpay.app/api/partners/sandbox/v1/products/airtimes?network=MTN')
request = Net::HTTP::Get.new(uri)
request['Authorization'] = "Bearer #{ENV.fetch('RIZPAY_API_KEY')}"
response = Net::HTTP.start(uri.host, uri.port, use_ssl: true,
open_timeout: 5, read_timeout: 20) do |http|
http.request(request)
end
raise 'Check API access and try again.' unless response.is_a?(Net::HTTPSuccess)
catalogue = JSON.parse(response.body)
# Select an ID from catalogue['data'].# Reads the catalogue. No purchase or real charge.
curl --fail-with-body --silent --show-error --max-time 20 \
-H "Authorization: Bearer ${RIZPAY_API_KEY:?Set a sandbox key}" \
"https://my.rizpay.app/api/partners/sandbox/v1/products/airtimes?network=MTN"Official SDKs in four languages
Fully typed clients for TypeScript, Python, PHP and Ruby. Real methods, real models, autocomplete in your editor: skip the hand-rolled HTTP layer and ship your first purchase call today.
Docs your AI agent can actually read
Point your AI coding agent at our documentation and it writes a correct integration, because the docs are machine-readable by design, not just human-readable.
Connect your coding agent
Claude, Cursor, and any other MCP client can search and read our documentation while it writes your integration, so it works from the real contract instead of guessing.
Built for LLM context
The whole documentation set is published as clean plain text an assistant can read in a single pass, so it starts with complete, current context instead of scraped fragments.
Markdown, not scraped HTML
Every documentation page is available as clean markdown, so your tooling reads exactly what you read. No parsers, no scrapers, no drift.
One click to your assistant
Every page has a menu to copy it as markdown or open it straight in Claude or ChatGPT, so you can ask questions about the exact page you are reading.
Products Supported
Explore the product workflows, then check the current catalogue for availability and partner costs.
Data Plans
Daily, weekly, monthly bundles
- Bundle discovery
- Catalogue costs
- Validity fields
Electricity
Check current distributor availability
- Meter verification
- Prepaid & postpaid
- Token retrieval
Cable TV
DStv, GOtv, Startimes
- Package discovery
- Decoder verification
- Purchase tracking
Your cost, selling price and margin
Your customers pay you through your own application. Production API purchases debit your funded partner account. Reconcile the final transaction debit and fees against the retail total you collected.
Set your retail price
The catalogue gives you your product cost. You decide the retail price in your own app and collect your markup through your own checkout.
Free sandbox to build in
Build and verify your whole integration on a sandbox key, with simulated purchases. Sandbox balances and purchases never move real money.
One integration, four categories
Airtime, data, electricity and cable TV run through one API. Build once, then sell across every category you enable, priced from the live catalogue.
Volume terms, product by product
Tell us your product mix and expected purchase volume and we will work out terms that fit. Terms are set per product, never one blanket rate.
Is my resale margin an API commission?
Your resale markup stays in your own checkout. It is not automatically credited to your RizPay wallet. Any separate incentive follows your agreed terms; there is no universal commission rate to assume.
A markup is not net profit. Account for the final purchase debit, customer payment costs, refunds and other direct costs before evaluating your contribution. Use your authenticated catalogue and transaction records, not a price embedded in a product name.
Comparing products? Browse the public product catalogue. For your API account costs, use the authenticated catalogue and agreed terms. Running high volume? Talk to us about terms.
Rather We Built It?
Not every partner wants to write the integration themselves. Our team can build it into your existing product, or build the whole thing from scratch.
Integrate into what you already have
Running a product with real users already? Our team integrates the Developer API directly into your existing app or platform, so bill payments become one more thing it already does.
Build your app from scratch
Starting from zero? We design and build a complete customer-facing app, mobile and web, on top of the same rails you would otherwise integrate yourself.
Ship it under your brand
The API is invisible infrastructure: no RizPay branding, no redirects. Whatever we build for you carries your brand from the first screen to the last.
Start Building Today
Create an account and follow the business-access steps in API settings. Then create a sandbox key and test the full purchase flow.
Sandbox purchases are simulated. They do not deliver real services.