Skip to content
Z9Pay

Developers

The rails we use, as an API.

REST endpoints, JSON in and out, one API key. Sell bills, run crypto swaps, issue cards and pay suppliers abroad from your own product.

curl https://api.z9pay.com/v1/swaps/quote \
  -H "Authorization: Bearer sk_test_••••••••" \
  -d from=USDT \
  -d to=NGN \
  -d amount=2500

How it behaves

Boring in the right places.

Idempotent by default
Send an Idempotency-Key and retry safely. We never move money twice for the same key.
Signed webhooks
Every status change is pushed to you, signed with your secret, retried for 72 hours.
One balance
Fund once in naira. Bills, swaps, cards and payouts all draw from the same ledger.
Sandbox that behaves
Simulated billers, chains and banks, including failures, so you can test the unhappy paths.
curl https://api.z9pay.com/v1/payouts \
  -H "Authorization: Bearer sk_test_••••••••" \
  -H "Idempotency-Key: inv-2026-0412" \
  -d currency=CNY \
  -d amount=148500.00 \
  -d beneficiary=ben_8Hq2Lw \
  -d reference="INV-0412 Shenzhen Lighting Co."
curl https://api.z9pay.com/v1/bills \
  -H "Authorization: Bearer sk_test_••••••••" \
  -d biller=ikeja-electric-prepaid \
  -d customer=45031288761 \
  -d amount=10000

FAQ

Questions people ask

Something else? support@z9pay.com

Is there a sandbox?
Yes. Sandbox keys work against simulated billers, chains and payouts, with the same API shape as production.
How do I go live?
Complete business verification, sign the API agreement, and our compliance team reviews your use case. Most reviews finish within five business days.
Do you send webhooks?
Yes. Every object change triggers a signed webhook. We retry with backoff for 72 hours until your endpoint returns a 2xx.