Connect
One integration in front of every provider.
Add Paystack, Flutterwave or a new rail without touching your product code. Credentials, environments and provider configuration live in one place instead of five.
Your first payment provider was a decision. Your fourth is a system nobody owns.
Quirk gives technology companies one unified layer to connect, manage, monitor and scale their payment infrastructure. One integration in front of Paystack, Flutterwave and every rail you add after them.
Not a payment provider · Not a new rail · A layer above the ones you already use
Illustrative trace. The SDK is the starting point, not the product.
Payments start as one integration and end as a system with no owner. These are the five points where it stops being a feature and becomes infrastructure.
You add a second for coverage, a third for a payout rail, a fourth because a market demanded it. Each arrives with its own SDK, its own webhook shape, its own dashboard and its own edge cases, and all four now live inside your codebase.
A payment fails and nobody can say why with confidence. Issuer, provider, network, or your own retry logic. The failure is measurable, the reason is not, so the answer becomes a support thread instead of a query.
Every provider settles on its own schedule, in its own format, with its own fee structure. Finance rebuilds the same spreadsheet every month to answer a question your systems should already know.
Mobile money, bank transfer, USSD, cards, wallets. Each one is a sprint, a migration and a fresh set of failure modes, long after the commercial decision to support it was made.
A new market means a new provider, new methods, new currency handling and new compliance. Complexity stops adding and starts compounding, and the payments layer becomes the thing that slows the roadmap.
At that point the problem is no longer which provider to use. It is that nothing sits above them.
Quirk is not another payment API competing with Paystack or Flutterwave. It is the layer above them, so your product talks to one interface while your money moves across many.
One interface, one data model, one operational view. Your team stops writing provider-specific code and starts making provider decisions.
You build against Quirk once. Adding, replacing or splitting traffic across providers stops being a release.
The SDK is how your code reaches the layer. The layer itself is the routing, the normalised data model and the operational view around it.
Quirk does not replace your providers or hold your contracts. It sits above them and gives you a single place to run them.
Four things Quirk is being built to do from day one, and one it is working toward. We would rather be clear about the difference than blur it.
One integration in front of every provider.
Add Paystack, Flutterwave or a new rail without touching your product code. Credentials, environments and provider configuration live in one place instead of five.
One data model across providers that disagree.
Payments, refunds, payouts and webhooks arrive in a single consistent shape, with provider quirks translated rather than pushed into your application logic.
Decide where a transaction goes, and change your mind.
Send traffic by method, market, currency, cost or availability. Retry a failed attempt on a second provider without a deploy, and shift volume as your commercial terms change.
One operational view instead of four dashboards.
See transactions, failures, webhook delivery and provider health in one timeline, so an incident is something you observe rather than something a customer reports.
Turn transaction history into decisions.
The layer that routes and records every payment is the layer that can eventually explain them. This is the direction Quirk is building toward, and it is not live today.
A few lines get a payment moving. What matters afterwards is the routing you can change without a deploy, the events that arrive in one shape, and the record of every attempt behind them.
import { Quirk } from '@quirk/node' const quirk = new Quirk({ apiKey: process.env.QUIRK_API_KEY }) // One call. Quirk selects the provider.const payment = await quirk.payments.create({ amount: 250000, currency: 'NGN', method: 'card', customer: { email: 'ada@marketplace.africa' }, reference: 'ord_8241'}) // Same shape, whichever provider handled it.payment.provider // 'flutterwave'payment.status // 'succeeded'payment.attempts // [{ provider: 'paystack', outcome: 'failed' }, ...]No provider name in your application code. Changing where that payment goes is a rule, not a release.
Quickstart
First payment through the layer in one file.
Connecting providers
Credentials, environments and provider configuration.
Routing rules
Choose a provider by method, market, cost or availability.
Normalised objects
Payments, refunds, payouts and customers in one schema.
Webhooks and events
One event stream, delivered and retried consistently.
Failures and retries
Attempt history, failure reasons and fallback behaviour.
The full reference opens as we bring companies onto the layer. Join the waitlist and we will send it with your access.
Request accessQuirk is for African technology companies past their first integration, where payments have become an operational system rather than a single API call.
Money comes in from buyers and goes out to sellers, often on different rails, often on different days.
Collections on one provider, payouts on another, and a ledger that has to agree with both.
Payments are the product, so every provider outage, decline and settlement delay is felt by your customers directly.
You need failover and attempt-level visibility, not a second dashboard.
You process on behalf of merchants who each want their own methods, their own provider and their own reporting.
One codebase, many payment configurations, and no clean way to manage them.
Recurring billing across markets, currencies and methods that were never designed to renew cleanly.
Failed renewals you cannot explain and retries you cannot tune.
Any technology business where payments sit inside the product rather than beside it.
Payments work is quietly taking engineering time away from your actual roadmap.
If payments are a system you operate, not a service you bought, Quirk is aimed at you.
A layer that routes and records every transaction is the only place that can eventually explain them. That is the direction Quirk is building in, and we want to be exact about what exists now and what does not.
Connecting, normalising, routing and monitoring your payment infrastructure.
Explaining what those payments are telling you.
None of this ships on day one, and we will not describe it as if it does. It is the reason the layer is worth building in the right order: connect first, normalise honestly, then earn the right to interpret.
The short version
Your providers keep doing what they do well. Quirk gives you one place to run them, one shape for the data they return, and one view of what is actually happening to your money.
We are onboarding a small number of companies whose payments have outgrown a single integration. Not a beta list to sit on. A short group we work with directly while the layer takes its shape.
You run real traffic through the layer while it is still being shaped, with the team on the other end of the line.
The normalised objects, the routing rules and the failure taxonomy get decided with the companies actually living with them.
Design partners are not paying to be a test environment. Pricing and commitments match the stage we are both at.
Prefer to talk first?team@quirk.dev