Products
Solutions
Developers
Pricing
Company
Get started Sign in

Transit

Collect every fare, even where the route has no signal.

A passenger opens a payment window in your app and taps the conductor's POS. Neither device needs a network. The fare comes from value your app issued from your own float, and it settles to your account when the bus reaches signal.

The passenger opens a short payment window with their PIN. The conductor's POS takes the fare inside it, with no network on either device.

The rails a fare runs on.

On board, the offline tap. To buy fare value, the passenger pays you by transfer or QR, and by USSD or card once they arrive. Wallet here is the purse your app issues.

Pull-mode fare on a bus Pull mode on a bus: the passenger opens a window with a PIN for up to ₦500, the offline POS requests ₦500, the phone signs inside the window and the POS stores the signed pair. Later, at signal, the POS uploads batch 57 and 24 fares settle for ₦12,000. Passenger opens a window PIN · up to ₦500 · 1 tap · 2 min POS requests ₦500 Bus 14 · offline Phone signs inside the window no PIN needed again POS signs and stores the pair fare 24 held PULL Later, at signal POS uploads batch 57 Each fare checked once 24 fares settled · ₦12,000
In pull mode the POS asks and the phone answers inside the window the passenger opened.

On the bus

Take the fare in the time it takes to board.

Most bus POS devices cannot act as a card, so the POS asks and the phone answers. Before boarding, the passenger opens a payment window in your app with their PIN: a ceiling, one tap, two minutes. The conductor's POS requests the fare and the phone signs it automatically inside the window. You set each bus's limits: the most a single fare may be, how much one POS may hold unsettled, and how many taps it may take in an hour. When the bus reaches signal, the POS uploads one signed batch and the fares settle, dated at the moment of each tap.

How offline payments work
POST /v1/customers/cus_8841/purse/issue
{
  "amount": 500000,
  "currency": "NGN",
  "source": "merchant_float",
  "external_reference": "FARE-BUNDLE-20931",
  "device": "dev_01J9Q…"
}
→ 200  { "purse": { "balance": 500000 },
         "assertion": { "expires_at": "…+24h" } }
You take the passenger's money your way, then issue the purse from your float. The phone holds a signed claim, refreshed daily.

In your app

Sell fare value in your own app.

Your passengers buy a fare bundle from you, paying by transfer or QR, or at your counter, with USSD and cards coming. Your server then issues a purse to the passenger's phone from your float: the value sits on the ledger, and the phone holds a signed claim on it for 24 hours at a time. Passengers you have already verified can be onboarded on your attestation, without a second OTP. PediWave holds funds for you, never for the passenger, and the purse stays in your own app and your brand.

Take top-ups on every rail
Each paid cycle issues the pass value to the passenger's purse. A failed cycle is retried before the pass lapses.

Passes

Weekly and monthly passes that renew themselves.

Sell a pass as a subscription. The passenger chooses how it is paid each cycle: a direct debit mandate, a wallet autodebit, or an invoice they pay by transfer from any phone, with USSD and saved cards coming. When the cycle's invoice is paid, your server issues the pass value to their purse. Failed payments are retried on a schedule that follows payday, and you decide what happens when a pass lapses.

Billing & subscriptions

Questions operators ask

What if a bus has no signal for a whole shift?
The POS keeps taking fares within its policy. It needs a signal at least once every 24 hours to refresh its signed policy, for example at the depot; a stale policy stops acceptance. Passengers' phones also refresh their offline balance claim every 24 hours when they are online. Fares upload whenever the POS reconnects and must arrive within the settlement window you set.
What stops a passenger spending the same balance twice?
The purse is a balance on the ledger, and the ledger cannot be overdrawn, so a second spend of the same value fails at settlement. You choose in advance who carries that loss: you, PediWave's assurance pool for a per-tap premium, or a share. The passenger's device is blocked, a case is opened, and the POS that took the tap has its limits tightened automatically.
Do passengers need a smartphone?
To tap with no signal, yes: a phone with hardware-backed keys running your app with the PediWave Offline SDK, or a supported wallet. Passengers can buy fare value by transfer or QR, and by USSD or card once they arrive. Cards cannot be tapped offline. Unattended top-up kiosks are coming with the PediWave POS SDK.
What happens if a conductor's POS is stolen?
Revoke it from the dashboard or the API. Fares it signed before revocation still settle; anything it signs afterwards never does, and passengers' phones refuse it within 24 hours as its identity expires. Each POS also reports in every time it connects, even when it took nothing, so a lost batch is flagged and never mistaken for a quiet bus.
Does PediWave hold our passengers' money?
No. PediWave holds funds for operators only. The passenger pays you in your own system, and you issue a purse from your float. Unspent value can be returned from the purse to your float, and you refund the passenger your way.

Products used

Tell us about your routes.

Fleet size, routes and how fares are taken today. We will come back with an offline setup to pilot on one route.