Payments · Orchestration · Offline
Get paid on every rail.
Even offline.
One API for bank transfer, QR, wallets, vouchers and tap to pay with no network, with cards, USSD and mobile money coming. Routing across providers. Settlement the next business day, or the same day when you ask.
Acme Stores
Offline wallet · Ada Obi
Ready to tap
Offline balance ₦8,500.00
Connected to Acme Stores · Till 3
Pay ₦1,500 to Acme Stores?
Signed on this phone
Waiting for the till…
Accepted
Signed by both devices
Paid
₦1,500.00
Acme Stores · Till 3
09:02 · Today
Settles when either device is online
Settled
Tap to pay
₦1,500.00
Acme Stores · Till 3
Customer connected
Accepted · within offline limit
Signed by both devices
Received
₦1,500.00
Settled · ₦1,500Held offline · 1 tap to upload
Uploading 1 tap
Paid to your balance
Stages: Connected, Offer sent, Accepted, Signed, Confirmed. Then the signal returns on both devices and the till shows Settled, ₦1,500.
- 1 Connected
- 2 Offer sent
- 3 Accepted
- 4 Signed
- 5 Confirmed
Every way your customers pay. One object.
- Card
redirect_to_url · otp · pinComing - Transfer
display_bank_transfer - USSD
display_ussd_codeComing - QR
display_qr - Mobile money
await_mobile_money_promptComing - Wallet
pin - Voucher
tenders · pin - Agent cash
await_agent_cashComing - POS
terminal · collect_paymentComing - Offline tap
offline_tap
Why PediWave
Every rail
Bank transfer, QR, wallets, vouchers and offline taps, from one payment_intent with one status and
one webhook. Cards, USSD, mobile money and agent cash are next.
Acme Stores
₦25,000.00
Transfer exactly ₦25,000.00 to
- Account number
- 0123456789
- Bank
- Partner bank
- Account name
- Acme Stores
Expires in 29:41
Resilient
Rules choose the provider for each payment. A decline that is safe to retry cascades to the next provider; a timeout is checked first, so no customer is charged twice.
Offline
Keys held in secure hardware, every tap signed by both devices, settled when the network returns, with the loss policy chosen before the first tap.
Received
₦1,500.00
Settled · ₦1,500Acme Stores
₦25,000.00
Transfer exactly ₦25,000.00 to
- Account number
- 0123456789
- Bank
- Partner bank
- Account name
- Acme Stores
Expires in 29:41
Accept payments
Your checkout speaks every rail.
Send customers to hosted Checkout or share a Payment Link that also carries a QR, so it can be paid from any banking app. Send invoices by SMS or WhatsApp. Take bank transfers to an account number made for that payment. Cards with 3DS and local step-ups, and USSD codes on every link, are coming.
Accept payments// Terminal "Till 3" reconnects and uploads 43 signed taps
// POST /v1/offline/batches
// Authorization: Bearer tk_live_…
// Idempotency-Key: term_01J9…-118
// → 200 OK
{
"id": "obat_01J9ZQ…",
"sequence": 118,
"accepted": 41,
"failed": 1,
"quarantined": 1,
"gap_detected": false,
"items": [ /* 43 results */ ]
} Offline payments
Get paid where the network isn't.
Enrol a terminal, set its limits and accept taps with no signal on either side. When the terminal is back online it uploads the signed taps in one batch and each one settles. You choose in advance who carries the loss if a tap is ever double-spent.
How offline worksWhy Provider A
Success rate 0.96
Cost 1.4 %
Then: cascade to Provider B on a retry-safe decline
Orchestration
Route every payment to the provider most likely to approve it.
Write rules once and test them against a simulate endpoint that explains every decision. When a provider declines for a reason that is safe to retry, the payment cascades to the next. When a call times out, PediWave asks the provider what happened before it tries again.
Live health scoring Coming
OrchestrationSubscription · Tunde Bello
Lagos Ride Pass · ₦12,000 / month
- 1 OctPaidDirect debit
- 1 NovFailedDirect debit · insufficient funds
- 27 NovRecoveredWallet autodebit
- 1 DecPaidDirect debit
Retry scheduled for payday, paid by the backup method.
Billing & subscriptions
Recurring payments on every rail, retried when your customers are paid.
Bill by direct debit mandate, wallet autodebit, or a transfer invoice for customers on feature phones, with USSD invoices and card on file coming. When a charge fails, retries follow a schedule built around payday, and a backup method can step in.
Smart Dunning Coming
Billing & subscriptionsTransfer tr_01J9…
₦25,000.00
Ada Obi
Partner bank · 0123456789
Name confirmed
- Name confirmed
- Approved by Chiamaka Eze
- Sent
- Paid
Reference PAY-2026-10-0412
Payouts & transfers
Pay anyone, the same day.
Send single and bulk transfers with the account name confirmed before any money moves and approvals above the amount you set. Run payroll on a schedule, settle your balance the same day when you ask, and split each payment to the parties it belongs to.
Payouts & transfersCash deposit
₦50,000.00
To account •••• 4821 · Chiamaka Eze
Signed by this terminal
Queued · uploads when online
Agent float · Agent 0412
₦450,000.00
of ₦1,000,000.00 limit
Deposit of ₦50,000.00 held
Banks & agents
Deposits and withdrawals at the POS, with or without a network.
Your agents take cash deposits and give withdrawals at a POS that keeps working offline, against floats you fund and control. Customers without a phone can withdraw with a cash-out code. Your core banking system stays the customer's ledger, and PediWave reconciles with it daily.
Banks & agentsAlso on PediWave: Platforms & marketplaces Escrow Coming
Developers
Built the way you'd build it.
Idempotency-Keyon every call that moves money. Retry after a dropped connection and get the same answer, never a second charge.- Signed, timestamped webhooks. Verify each delivery and reject replays.
- A date-versioned API. Your integration keeps working when we ship.
- A sandbox for every rail. Simulate transfers, USSD, card declines and offline taps.
import PediWave from "@pediwave/node";
const pediwave = new PediWave(process.env.PEDIWAVE_SECRET_KEY);
const intent = await pediwave.paymentIntents.create({
amount: 250000, // ₦2,500.00, in kobo
currency: "NGN",
reference: "ORD-1001",
payment_method_types: ["bank_transfer", "qr", "offline"],
}, { idempotencyKey: "ORD-1001-1" });
// → 201 Created
// { "id": "pi_01J9ZK3M7Q8R1S2T3U4V5W6X7Y", "object": "payment_intent",
// "amount": 250000, "currency": "NGN",
// "status": "requires_payment_method", "livemode": false }
// Later, on your webhook endpoint:
// PediWave-Event-Type: payment_intent.succeeded
// PediWave-Signature: t=1759918530,v1=5257a869e7… import os, pediwave
client = pediwave.Client(os.environ["PEDIWAVE_SECRET_KEY"])
intent = client.payment_intents.create(
amount=250000, # ₦2,500.00, in kobo
currency="NGN",
reference="ORD-1001",
payment_method_types=["bank_transfer", "qr", "offline"],
idempotency_key="ORD-1001-1",
)
# → 201 Created
# { "id": "pi_01J9ZK3M7Q8R1S2T3U4V5W6X7Y", "object": "payment_intent",
# "amount": 250000, "currency": "NGN",
# "status": "requires_payment_method", "livemode": false }
# Later, on your webhook endpoint:
# PediWave-Event-Type: payment_intent.succeeded
# PediWave-Signature: t=1759918530,v1=5257a869e7… curl https://api.pediwave.com/v1/payment/intents \
-H "Authorization: Bearer sk_test_…" \
-H "Idempotency-Key: ORD-1001-1" \
-H "PediWave-Version: 2026-10-01" \
-H "Content-Type: application/json" \
-d '{"amount": 250000, "currency": "NGN", "reference": "ORD-1001",
"payment_method_types": ["bank_transfer", "qr", "offline"]}'
# → 201 Created
# { "id": "pi_01J9ZK3M7Q8R1S2T3U4V5W6X7Y", "object": "payment_intent",
# "amount": 250000, "currency": "NGN",
# "status": "requires_payment_method", "livemode": false }
# Later, on your webhook endpoint:
# PediWave-Event-Type: payment_intent.succeeded
# PediWave-Signature: t=1759918530,v1=5257a869e7… Made for how your sector pays.
Different sectors pay on different rails. See the mix that fits yours.
-
Retail & markets
Sell when the network is down; settle when it's back
-
Transit
Collect every fare, even where the route has no signal
-
Banks & MFBs
Agent banking that keeps working offline
-
SaaS & subscriptions
Recurring revenue that survives month-end
-
Marketplaces & platforms
One payment, many settlements
-
Utilities & pay-TV
Bills paid from any phone
-
Cooperatives & savings groups
Dues and contributions, even in the village
-
All solutions
See every sector side by side.
Security
-
PCI DSS scoped tokeniser
Card numbers go to an isolated tokeniser; your servers never see them.
-
Signed webhooks
HMAC-SHA256 with a timestamp, secret rotation and replay.
-
Hardware-bound offline keys
Device keys live in secure hardware; every tap is signed by both sides.
-
NDPA data handling
Identity data stays in Nigeria. We act as processor for your customers' data.
Start accepting payments today.
A test key in five minutes. Talk to us about offline, banks and platforms.