Self-service signup is live — create your ledger account and start collecting today Get started →
PayHub
Custodial ledger · Paystack & Flutterwave, unified

One gateway, one ledger,
every payout accounted for.

PayHub collects payments through Paystack or Flutterwave on behalf of every company you onboard, tracks exactly what each one is owed in a real double-entry ledger, and runs the payout-approval workflow that gets it safely into their bank account.

Building your own app on PayHub? Platform admin is for you instead.

Double-entry ledger Bank-verified payouts Admin-approved transfers Self-service signup
2
Providers unified
100%
Double-entry ledger
0
Payouts without approval
Collects through the rails you already use
Paystack checkout & transfers Flutterwave checkout & transfers NIP bank payouts
payhub.compasse.net/admin
Companies
24
Balance held
₦482,300
Volume (14d)
Greenfield Academy+₦25,000.00Success
Riverside High+₦18,500.00Success
Payout · Oakwood College₦40,000.00Pending

How it works

Four steps from a customer's payment to money in your bank.

Worked example

A ₦25,000 charge, entry by entry

Not a mockup of a dashboard — this is what the ledger actually posts when a charge settles. Toggle the fee to see it change.

1
Webhook received

Provider confirms the charge

Event
charge.success
Reference
phb_a1B2c3d4
Idempotency key
charge_settled:phb_a1B2c3d4
Gross amount
₦25,000.00
2
Double-entry post

Ledger entries, signed to zero

company_balancethis company's account+₦25,000.00
platform_clearingcash held in PayHub's provider account-₦25,000.00
Sums to ₦0.00 — balanced
3
What happens next

Nothing moves until it's approved

The company's available balance reflects this the instant the webhook is processed.
Requesting a payout holds the amount aside — it doesn't touch the ledger yet.
Only an admin's approval, followed by the provider confirming the transfer, posts the offsetting entry.

Illustrative figures — the fee shown here is an example; a live account defaults to 0% until an admin configures one.

What PayHub does

Everything between "they paid" and "you paid them"

Not a payment gateway on its own — the accounting and payout layer that sits on top of one, so the parts that are easy to get wrong (whose money is whose, who approved what) are handled once, correctly.

Collect either way

Paystack or Flutterwave, picked per charge. The company never sees the difference.

A real ledger

Every charge and payout is a balanced, double-entry transaction — never a number that can drift.

Payouts you control

A company requests, an admin approves, then the transfer goes straight to their verified bank account.

Bank-verified accounts

A payout destination is resolved against the bank's own records before it's ever usable — not just whatever name was typed in.

One API, any app

A single key authenticates as one company. Built for your own backend to integrate directly — not tied to any one platform.

Self-service onboarding

Create your own account directly — no waiting on a platform admin to set you up first.

Idempotent by design

Every ledger post carries an idempotency key — a retried webhook or a duplicate request can never post the same money twice.

Scoped access tokens

Admin and company sessions issue separate token scopes — a company session can never be replayed as platform-admin access, or vice versa.

Runtime-configurable fee

The platform service fee lives in the database, not a hardcoded constant — an admin can change it without a deploy, and it's shown on every affected charge.

How the money actually moves

From a customer's card to your bank account

Not a black box — this is the real ledger path every charge takes, node by node.

Customer pays

Via Paystack or Flutterwave checkout, resolved per charge.

Provider webhook

Platform clearing

Money lands in PayHub's own provider account first — held here in transit.

platform_clearing

Company balance

Credited by a balanced double-entry post the instant the charge settles.

company_balance

Payout, approved

Company requests it, admin approves it, the real transfer API pays out.

Bank account
If a platform fee is configured, its share is split off into a separate platform_fees ledger account at the same moment the charge settles — never taken from an already-completed payout.
Why not integrate directly

What you'd otherwise have to build yourself

ConcernIntegrating Paystack/Flutterwave yourselfWith PayHub
Multiple sellers or schools Track who's owed what in your own database, by hand A ledger account per company, always summing to the truth
Switching or mixing providers Separate integration, keys, and webhook handling per provider One API — provider is a parameter, not a rewrite
Paying sellers back out Build your own approval flow and bank-verification step Built in: verified account, admin approval, real transfer
Duplicate webhook safety Something you have to remember to de-duplicate yourself Idempotency keys enforced at the ledger layer
Audit trail Whatever logging you happened to add Every webhook event stored, whether acted on or not
For developers

One request to start collecting

The same API a school's dashboard uses under the hood — call it directly from your own backend with the API key you got at signup.

Create a charge, get a checkout link back

Pass an amount, a provider, and your customer's email. PayHub returns a hosted checkout URL — redirect your customer there, and a webhook settles the ledger the moment they pay.

View full API reference
curl -X POST https://payhub.compasse.net/api/v1/charges \
  -H "Authorization: Bearer sk_live_..." \
  -H "Content-Type: application/json" \
  -d '{
    "amount": "5000.00",
    "provider": "paystack",
    "customer_email": "parent@school.example"
  }'

# → 201 Created
{
  "reference": "phb_a1B2c3...",
  "status": "pending",
  "checkout_url": "https://checkout.paystack.com/..."
}
Built for

Anywhere money changes hands and someone needs to be paid back out

Schools

Fee payments from parents land in a ledger the school can see and understand, with a clear, approved path to get it into the school's own account.

Marketplaces & platforms

Any app with multiple sellers or vendors who each need their own balance, their own payout history, and their own approval trail.

Your own backend

Skip both dashboards entirely and call the API directly — a single key authenticates as your company from whatever you're already running.

How it's kept honest

Trust, built into how it works — not just claimed

Custodial by designMoney lands in PayHub's own Paystack/Flutterwave account first — a company never hands over their own provider keys.
Balances can't driftEvery balance is computed by summing a company's ledger entries, not stored as a number that could quietly go wrong — every transaction is asserted to sum to zero before it's ever saved.
No payout without approvalRequesting a payout doesn't move money. An admin has to approve it before a real transfer is ever initiated.
Every event is loggedEvery webhook a provider sends is recorded, whether or not it was acted on — a full audit trail of why a balance changed when it did.
Questions

Before you ask

Can I use my own Paystack or Flutterwave account instead?
No — PayHub is custodial, meaning it collects into its own provider account and tracks what's owed to you in the ledger. That's what lets it verify bank accounts and gate payouts behind approval consistently for every company.
What happens if a payout transfer fails?
Nothing is deducted from your balance until the provider actually confirms the transfer succeeded. A failed transfer leaves your balance exactly as it was — you can simply request the payout again.
Does PayHub take a cut of what I collect?
Only if the platform admin has configured a service fee — it defaults to 0%. If one is set, it's deducted automatically when a charge settles, and shown as its own line in your ledger.
How fast is a payout once it's approved?
As fast as the provider's own transfer API — PayHub initiates it immediately on approval and updates your balance the moment the provider confirms it landed.
Do I need to be technical to use this?
No — sign up, add a bank account, and request payouts entirely from the dashboard. The API is there if your own developers want to integrate charges directly into your app.

Ready to get paid, properly accounted for?

Create your account in under a minute — no admin approval needed to get started.

Create your account →