One API for cards, bank transfer, USSD and stablecoins — settled in naira, dollars or USDC over a double-entry ledger that always balances to zero.
USDC · USDT
await harepay.payments.create({
amount: { value: 100, currency: "USDC" },
method: "crypto",
settle_as: { currency: "NGN" },
});Built for how Africa actually pays
Stop stitching providers together. Harepay abstracts the best of each rail behind a single API and one ledger — swap or add providers without touching your code.
Correctness, not vibes
Under every transaction is a double-entry ledger. Money is never created or lost — only moved. Reconcile provider balances against the ledger, per asset, and watch it prove out to ₦0.00.
How the ledger works →One platform, end to end
Invoices, recurring plans and metered pay-as-you-use — billed and auto-reconciled.
Pay out to any bank or wallet, with name resolution, approvals and tracking.
Per-provider float, live funding accounts and one-click rebalancing.
Sanctions / PEP screening and KYB gate every payment; disputes reserve and resolve.
HMAC-signed, retried events with a full per-attempt delivery log.
An AI back-office Copilot grounded in live data, over an append-only audit trail.
For developers
Clean REST, idempotent writes, signed webhooks and SDKs in the languages your team already uses. Sandbox keys the moment you sign up — no credentials needed to build.
import { Harepay } from "@harepay/sdk";
const px = new Harepay({ apiKey: process.env.HAREPAY_SECRET_KEY });
const intent = await px.payments.create({
amount: { value: 100, currency: "USDC" },
method: "crypto",
settle_as: { currency: "NGN" },
});Free to start. No credentials needed to build in sandbox.