Offline payments
Get paid where the network isn't.
A customer's phone taps your terminal with no signal on either side. Both devices sign. When the network returns, the tap settles on the ledger and you are paid. You choose, in advance, who carries a double-spend.
Offline payments are available to pilot merchants. Talk to sales to join.
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
How it works
From enrolment to payout in five steps.
The money stays on the ledger throughout. The phone carries a signed claim to it, and the terminal carries the customer's signature.
-
Acme Stores · Till 3
Terminal enrolled
- Key
- Stored in secure hardware
- Attestation
- StrongBox attested
- Policy
- opol_01J9…
- Policy refreshed
- 09:00 today
Step 1
Enrol a terminal
The terminal generates its own signing key inside secure hardware, so the key never leaves the device. PediWave verifies the hardware attestation, records the key, and issues the terminal its own credential. You attach a policy: how much it may accept per tap, how much it may hold before it must settle, and how long it may wait.
Works on POS terminals, Android handsets and soft-POS.
- 08:41
Offline wallet
Offline balance
₦5,000
Valid 24 h
- Per tap limit
- ₦20,000
- Loaded
- Today 08:41
- Bound to
- This phone
Refresh when online
Your balance is held on the ledger. This phone holds a signed claim.
Step 2
Load an offline balance
While online, the customer moves money into an offline balance tied to their phone. The balance lives on the ledger, in an account bound to that device. The phone receives a signed claim on it and an identity assertion valid for 24 hours. It can never spend more than was loaded.
Your own app can hold this balance for your customers. See “Your app can be the wallet” below.
- 09:02
Pay ₦1,500 to Acme Stores · Till 3?
Signed
2 signaturescx · signed by phoneack · signed by terminalTill 3₦1,500.00
Signed
Step 3
Tap
The terminal asks for the amount. The customer's phone checks the terminal is genuine, confirms with a PIN and signs the payment. The terminal checks the customer's signature and its own limits, then signs the acknowledgement. Both devices keep the signed pair. No network is involved.
Over BLE, NFC, local Wi-Fi or a two-scan QR exchange.
- POST /v1/offline/batches
POST /v1/offline/batches Authorization: Bearer tk_test_… Idempotency-Key: term_01J9…-118 PediWave-Version: 2026-10-01 { "sequence": 118, "previous_hash": "…", "items": [ /* 43 dual-signed pairs */ ], "terminal_signature": "…" } // 200 OK { "id": "obat_01J9…", "sequence": 118, "accepted": 41, "failed": 1, "quarantined": 1, "gap_detected": false, "items": [ … ] }One upload, a result per tap. A quarantined tap is held for review; the rest settle. Step 4
Settle
When either device reconnects, it uploads its signed pairs. Whichever side uploads first settles the tap; the other side's later upload is matched, not paid twice. Each tap is value-dated at the moment it was signed, and every signature is checked against registered keys.
A terminal uploads a signed, sequenced batch, so a missing batch is detected.
-
Settlement
₦184,000
41 offline taps · T+1
Scheduled
Gross₦184,000FeesShown at settlementTerminalTill 3Step 5
Get paid
A settled tap is a payment like any other. Fees, splits and settlement work the same way, the tap appears in your settlement report with its terminal and signing time, and your systems receive the
offline.payment.settledevent.Taps bound to a payment intent also fire
payment_intent.succeeded.
What it needs
Three things on each side of the counter.
| For the customer | For you |
|---|---|
| A phone with hardware-backed keys (StrongBox or TEE) | A terminal, soft-POS or your own app with the PediWave Offline SDK |
| A supported wallet, or a purse your app issued | A policy: per-tap limit, outstanding cap, settlement window |
| An identity assertion refreshed every 24 h | A loss policy: yours, PediWave-assured, or shared |
The identity assertion refreshes automatically whenever the phone is online. If it is older than 24 hours, the phone stops paying offline until it reconnects; it can still receive.
{
"floor_limit_per_tap": 2000000,
"max_outstanding": 50000000,
"max_taps_per_hour": 60,
"max_offline_hours": 72,
"settlement_window_hours": 168,
"loss_allocation": "merchant"
} 201 Created
{ "id": "opol_01J9…", "object": "offline_policy",
"policy_expires_at": "2026-10-11T09:00:00Z" } Limits
Limits apply before anything is signed.
Each terminal carries a policy signed by PediWave: the most it may accept per tap, the most it may hold unsettled, how many taps an hour, and how long it may wait before settling. The terminal checks every tap against it before it signs. A policy expires 24 hours after it was last refreshed, and a terminal with an expired policy stops accepting until it reconnects.
Merchant: You carry a verified double-spend loss. You receive the signed proof of both taps and an offline dispute you can pursue against the payer.
PediWave-assured: PediWave covers verified double-spend losses from its assurance pool, in return for a premium in basis points on your offline volume.
Shared: Verified losses are split between you and PediWave in the proportion agreed at underwriting.
- Tap 1 ₦9,000 · settled
- Tap 2 ₦8,000 · same phone · quarantined
- Balance at load ₦10,000
Your policy is set at underwriting. The premium is shown on Pricing.
Loss policy
Double-spend has an owner, and you choose it.
The ledger cannot be overdrawn. If a cloned or rolled-back phone signs the same balance twice, the first tap settles and the second fails. The question is only who carries that loss, so you decide before you accept a single tap. In every case the payer's device is blocked, a fraud case is opened, and recovery is pursued from the payer's account when funds appear.
Exposure · Till 3
₦184,000 held of ₦500,000
Alert at 80 %
- Headroom
- ₦316,000
- Oldest unsettled tap
- 6 h
- Last sync
- Yesterday 18:40
Within policy
Exposure
See what is held, where, and for how long.
Exposure is shown per terminal and for the whole business: how much is held unsettled, the ceiling, the headroom, and the age of the oldest unsettled tap. You are alerted at 80 % of the ceiling, and when a terminal holding taps stays silent longer than its policy allows. Each terminal also sends a signed "no taps since" note when it reconnects, so a quiet terminal is never mistaken for a lost batch.
Offline balance
₦5,000
Valid 24 h
Hold near the till to pay
- Paid ₦2,400 · Mama Put Kitchen · Till 1 · Settled
- Paid ₦1,800 · Mama Put Kitchen · Till 2 · Will settle when online
Payer mode
Your customers can pay offline from your own app.
The same SDK runs in payer mode inside your app. Customers you have already verified are registered on your attestation, with no extra one-time code, and hold a purse you fund from your float after taking their money your way. Loading a purse goes through your server; settlement goes straight to PediWave, which sends you a webhook for every settled tap. Customers can also pay each other offline, if you allow it.
Deposit
₦20,000
Account 0123456789
Signed · pending sync
Banks and agents
Cash in and cash out at the POS, with no network.
Agents take deposits and pay withdrawals offline. A customer with your bank's app withdraws with a tap from their purse; a customer with a feature phone withdraws with a single-use cash-out code obtained from the bank's own channels, such as its USSD menu. Deposits are signed by the agent's terminal and credited when it reconnects.
Till 5 · Acme Stores
- 09:10 ₦3,000 Settled
- 10:42 ₦1,200 Settled
- 11:05 ₦4,500 Settled
- Revoked 11:30 · reason: stolen
- 12:15 ₦9,000 Quarantined, not paid
- 13:02 ₦7,500 Quarantined, not paid
Revocation
A stolen terminal's future taps fail. Its honest past taps still settle.
Revoke a terminal and its credential stops working at once. Taps it signed before the moment of revocation still settle; taps signed after it are quarantined and never paid. Customers' phones stop trusting the terminal at their next identity refresh, within 24 hours.
How the devices talk
Four ways to tap without a network.
-
BLE
Bluetooth Low Energy between phone and terminal, for most Android POS devices.
-
NFC
The phone acts as a card to the terminal's reader, or reads the terminal itself.
-
Local Wi-Fi
A direct local link where Bluetooth and NFC are unavailable.
-
QR two-scan
The terminal shows a signed request, the phone scans it and shows its signed reply back. For merchants with a screen and no radio.
POS makers can plug their own transport into the SDK.
The protocol, briefly
Three keys make a tap trustworthy. The customer's phone and the terminal each hold a P-256 key generated in secure hardware. The ledger signs a short-lived identity assertion for each device, valid for 24 hours. A tap is a pair of signed statements, and money moves only when both verify against registered keys.
idLedger → each device · 24 hcxPayer → terminal · signed by payer keyrespkey·ackTerminal → payer · response key, bound to terminal key
- Payer key. Signs the payment statement (
cx): amount, currency, both device fingerprints, a nonce, a timestamp, a sequence number and the collection reference. - Terminal key. Signs a binding to a one-time response key; the response key signs the acknowledgement (
ack). The terminal also signs each batch it uploads. - Assertion key. Held by the ledger. Signs each device's 24-hour identity assertion, which the other device checks during the tap.
In this order, at settlement
- The terminal was enrolled, and not revoked, at the time of the tap.
- The batch is in sequence, chained to the previous one, and signed by the terminal.
- The pair has never been seen before.
- The amount was within the terminal's policy at the time of the tap, and the upload is within the settlement window.
- The payer's identity assertion was valid at the time of the tap, and signed by the ledger.
- The payment statement is signed by the asserted payer key.
- The response key is bound to this terminal, and the acknowledgement is signed by it.
- The ledger debits the payer's offline balance. If the balance is short, the tap is quarantined as a suspected double-spend and your loss policy applies.
Limits, stated plainly
What offline does not do.
| Offline does not |
|---|
| No card-present offline. Offline taps are paid from a phone's offline balance, not from a bank card. Card payments at the POS need a network. |
| No taps between different ledger tenants. A terminal accepts payers from the payer base it was set up for. A phone whose balance was issued in another tenant is refused, never approximated. |
| No deposits without a merchant server online. Loading a customer's offline purse needs your server, because you take the customer's money first. A deposit is never queued offline. |
| No voucher tenders offline, yet. Vouchers can pay online today. Offline vouchers are planned. Coming |
Cash deposits at an agent's POS are different: the agent's terminal signs them offline and they are credited when it reconnects. See Banks & agents.
Questions, answered.
How long can a terminal stay offline?
A terminal accepts taps for up to 24 hours after it last refreshed its policy; after that it stops accepting until it reconnects. Taps it holds must be uploaded within the settlement window in your policy, for example seven days, or they are refused at settlement. If a terminal holding taps stays silent longer than its policy allows, you are alerted.
What if the customer's phone is stolen?
The thief needs the customer's PIN to pay, and repeated wrong PINs lock it. The customer, or your support team, blocks the device: taps signed after the block fail at settlement and taps signed before it still settle. Without a fresh identity assertion, the phone cannot pay offline more than 24 hours after its last refresh. On a new phone, the remaining balance follows the customer.
Who pays the fee?
You do, as the merchant receiving the payment. The fee is calculated when the tap settles, not at the tap, and appears in your settlement report. If you choose PediWave-assured cover, a premium applies to your offline volume. Loading an offline balance may carry a load fee, shown to the customer before they confirm. See Pricing.
Can two customers pay each other?
Yes, if both use your app in payer mode. They tap phones, both keep the signed pair, and either can settle when back online. You can switch person-to-person payments off for any group of customers.
What hardware is supported?
Android devices that generate keys in secure hardware: StrongBox or a trusted execution environment (TEE). That covers modern Android phones, Android POS terminals and soft-POS. PediWave records each device's attestation level, and your underwriting can require hardware-backed keys. Devices without them can be accepted only at lower limits.
Related products
See offline in your sandbox.
Simulate taps, double-spends and revocations with test terminals.