Payment Infrastructure for Any Fuel Distributor

Pay at the pump.
No cash. No wait.

PumpFuel connects drivers, fuel stations, and enterprise fleets through a single payment platform — with NFC cards, QR codes, and real-time wallet settlements.

4
platforms
Mobile · TPE · Admin · Partner
3
payment methods
NFC · QR · App Code
< 200ms
authorization
P50 latency
PUMPFUEL TPE
STATION TOTAL · LOMÉ
CLIENTKofi A.
WALLETGeneral
FUELDIESEL
AMOUNT10 000 F CFA
AUTHORIZING…REF: TX-17795-91C5E4
> authorize · confirm · settle_

Designed for any fuel operator

Mobile Money
NFC
PostgreSQL
Redis
EXExpo
Next.js
Node.js
Sequelize
Mobile Money
NFC
PostgreSQL
Redis
EXExpo
Next.js
Node.js
Sequelize
The payment flow

How a fuel payment works

From wallet top-up to pump confirmation in under two seconds.

STEP 01

Client Top-Up

The driver loads funds into their PumpFuel wallet via Mobile Money, bank transfer, or cash. Balance is updated in real time once the payment is confirmed.

STEP 02

Arrive at Station

The driver opens the app or taps their NFC card at the pump. Before confirming, they can add products from the station catalog — lubricants, accessories, services — to their order.

STEP 03

Authorization

The terminal sends a signed request to the backend. The balance is verified and the funds are locked in real time. The pump receives its go-ahead.

STEP 04

Fuel Dispensed

The pump opens and fuel flows. The attendant confirms the actual volume delivered on the terminal. The transaction is finalized.

STEP 05

Automated Settlement

Station revenues are consolidated automatically and payouts are triggered to each station's configured account — with no manual intervention.

coming soon
Platform capabilities

Everything in one platform

A single backbone for wallets, terminals, settlement, and audit — designed for the realities of African fuel retail.

Multi-wallet, per client

Every client gets a General wallet, per-card Dedicated wallets, and Enterprise wallets from partner companies. Each isolated, each audited.

GENERAL · DEDICATED · ENTERPRISE

NFC, QR, or Code

Physical NFC card tap, 30-second TTL QR codes, or 6-character app codes. The TPE handles all three. No internet required on client side.

NFC · QR · CODE

Zero double-spend guarantee

Idempotency keys in Redis + SELECT FOR UPDATE locking + PostgreSQL CHECK constraints. Clients are debited exactly once, even with network retries.

ACID · REDIS · POSTGRESQL

Fleet & Enterprise programs

Companies fund a central wallet and distribute to employees. Suspend a member's access instantly. Full transaction reporting per employee.

PARTNER PORTAL

Device-isolated security

Every TPE gets a unique XXXX-XXXX-XXXX registration secret at onboarding. SHA-256 stored. Shown once, never recoverable. Legacy fallback supported.

SHA-256 · ONE-TIME

Automated daily payouts

soon

Station revenues are consolidated nightly and payouts triggered automatically to the configured bank account. Full double-entry audit trail — every unit accounted for.

CRON · DOUBLE-ENTRY

Station catalog

Each station freely defines its own products and services — lubricants, car accessories, maintenance — with station-specific prices. Clients browse and add items directly in the app before paying.

CATALOG · PER-STATION

One payment, full breakdown

Fuel and catalog items are bundled into a single atomic transaction. The client sees a clear receipt — fuel amount, services, total. The station receives one net payout.

UNIFIED ORDER · SNAPSHOT
Architecture

A platform in 4 layers

Each component speaks to the others through secured APIs and event webhooks — idempotent, observable, and built to fail safely.

1
Mobile AppReact Native · Expo
Clients, wallet top-up, QR codes, NFC, nearby stations
2
TPE TerminalReact Native · Expo
Pump-side device, authorizes payments, confirms fuel delivery
3
Backend APINode.js · Express · PostgreSQL · Redis
Orchestrates all flows, maintains ACID guarantees, fires webhooks
4
Admin WebNext.js · Tailwind
3 portals: PumpFuel Admin, Station Manager, Partner Company
SYSTEM_TOPOLOGY.svg
React Native
Mobile App
React Native
TPE Terminal
CORE
Backend API
Node · Express · Redis
Next.js
Admin Web
Postgres · Redis
DB & Cache
Payment
Gateway
JWT · RESTDevice TokenRBACSequelizewebhook
For stations

For fuel station operators

One TPE per pump
Register once. Receive funds automatically.
Real-time dashboard
View all transactions, fuel types, cashier reports.
Station catalog
Define your products and services — lubricants, accessories, maintenance. Clients add them to their fuel order in one tap.
Daily settlement
Funds hit your bank account every night at 23:00.
Station overview
Station Total Lomé
ACTIVE
Daily Volume248 300 XOF
Fuel transactions34
Catalog items sold18 today
Services revenue47 500 XOF
24H VOLUME
FUELSERVICES
For partners

Enterprise fuel programs

Invite employees by phone
Pending until they register the app.
Control their fuel budget
Top up and distribute funds per employee.
Instant suspension
Revoke access immediately if needed.
Partner portal
LogiTrans SARL
ENTERPRISE
Active Members47
Central Wallet1 240 000 XOF
Last Distribution3h ago
Monthly Spend4 800 000 XOF
MEMBER ACTIVITY (7 DAYS)
Adjo K.
78%
Mensah O.
64%
Yao S.
52%
Akouvi T.
31%
Under the hood

Zero compromise on correctness

Every franc tracked. Every transaction logged. Every retry safe.

api/services/authorize.jsJavaScript
// Atomic debit with pessimistic lock
await sequelize.transaction(async (t) => {
  const wallet = await PumpWallet.findOne({
    where: { id: walletId, clientId },
    lock: t.LOCK.UPDATE,
    transaction: t,
  });

  if (parseFloat(wallet.balance) < amount)
    throw new Error('INSUFFICIENT_FUNDS');

  await wallet.decrement('balance', { by: amount, transaction: t });
  await tx.update({ state: 'AUTHORIZED' }, { transaction: t });
});
api/services/settle.jsJavaScript
// Double-entry audit trail
await Operation.bulkCreate([
  { type: 'PUMP_DEBIT',        side: 'DEBIT',  amount },
  { type: 'PUMP_CREDIT',       side: 'CREDIT', amount: netStation },
  { type: 'COMMISSION_DEBIT',  side: 'DEBIT',  amount: commission },
  { type: 'COMMISSION_CREDIT', side: 'CREDIT', amount: commission },
], { transaction: t });

// Every franc traced — by side, by counterparty,
// by transaction. Reconciliation by SQL.
Idempotency via Redis (24h TTL per key)
SELECT FOR UPDATE prevents race conditions
PostgreSQL CHECK(balance >= 0) as last defense
Get in touch

Ready to deploy?

PumpFuel is built and battle-tested. Contact us to discuss a deployment for your market.