OnLink API
Move money into and out of Kenya from inside your own product. Start with the plain-language overview, or go straight to a signed first call.
OnLink is a business-to-business API for moving money into and out of Kenya. Your partner account holds a Kenyan shilling balance: shillings arrive in it over the Kenyan rails your payers already use, and leave it to M-PESA or a bank account in a single call or a batch. On top of that balance, one product converts between shillings and USDT — a US-dollar stablecoin that moves over the Tron network — and the other opens USD collections for contributors paying from the US. On that second product you can convert the dollars to shillings, or pay them out as dollars. Every movement is asynchronous: we accept the instruction, move the money, and send you a signed message when it is done.
Each partner account is set up for one product, and your credentials carry only that product's scopes. Products and scopes has the split.
You do not need to know anything about blockchains or bank rails to follow these docs. The Overview explains the product in plain language, with no code. The technical sections begin at Get started.
Choose your path
I want to understand the product
What the API does, how a conversion works, what you can build with it, and a glossary of every term. Written for product, business and compliance readers.
I want to make my first call
Get sandbox credentials, sign a request and take a live quote, in curl, Node or Python. Then run a complete order end to end.
I am building with an AI agent
llms.txt, the whole corpus as one file, every page as Markdown and a read-only MCP server. Point your agent at the docs and let it read.
What you can build
Take shillings in on a Kenyan rail
Payers top up your KES balance by M-PESA or bank transfer — or you raise the M-PESA prompt on their phone yourself.
Pay out shillings to M-PESA or a bank
One call moves money out of your KES balance, confirmed with a one-time code sent to someone you nominated.
Pay many recipients at once
Up to 100 transfers under one instruction and one confirmation, each settling on its own.
Turn USDT into shillings
Sell from your USDT balance at a quoted rate; shillings land in a bank account registered to you.
Turn shillings into USDT
Buy at a quoted rate, paid for straight out of your KES balance — there is no payment step to wait on.
Send USDT to a wallet you registered
Move USDT from your balance to a withdrawal address you registered and confirmed ahead of time.
Collect US dollars from US contributors
Open a collection, hand your contributor a reference and US deposit details, and be paid the net into your USD account.
Turn US dollars into shillings
Convert the USD in your USD account into KES in your KES account with one call, then pay it out in Kenya. Or pay the dollars out as dollars.
Know the moment money moves
Signed webhooks for orders, transfers, USDT sends, collections, conversions and every credit that lands on your account.
Control where value can go
Sell proceeds land in your own OnLink KES account, withdrawal addresses are registered ahead of time, and every transfer and USDT send waits for a one-time code sent to someone you nominated. You can ask OnLink to waive the code for your account. In production it then applies only when you call with an API key that has an IP allowlist.
Remittance operators, exchanges, treasury teams and platforms paying suppliers in Kenya combine these in different ways. See Use cases for how.
How a conversion works
Every order, in either direction, follows the same three steps:
- Lock a rate. You ask for a quote and we hold that rate for a short window.
- Create an order against the quote, with a reference of your own. The order is paid for from funds you already hold with us. A buy uses your KES. A sell uses your USDT balance, or USDT we collect from your own wallet if your account is set up with one. There is nothing to send and no payment to match.
- We settle and tell you. We deliver the other side and send you a webhook when the order reaches its final state.
Settlement is not immediate. The order is created first and completes later, the way a bank transfer does rather than a tap-to-pay. That one fact shapes how an integration is built, so it has its own page: How it works for the plain-language version and Asynchronous settlement for the version you build against.
Find your way around
Get started
Credentials, request signing, your first call, and how sandbox works.
Guides
Money in, money out, the conversions between them, and USD collections — one step-by-step guide per job.
Concepts
Settlement, money, quotes, idempotency, limits, and who does what.
Webhooks
Every event we send, delivery and retries, and how to verify a signature.
Rails
Every rail in the corridor, which of them the API reaches today, and what each does to your reference.
API reference
Every operation, generated from the running service, with a downloadable OpenAPI spec.
Errors
One error envelope, every code you can branch on, and what to retry.
Changelog
What changed, and what we count as a breaking change.
Environment
Every example in these docs uses the sandbox at
https://sandbox.onlink.africa. Sandbox is where you integrate and certify.
Production access is enabled per partner once your integration is ready, and
nothing in your code changes except the base URL and your credentials. Read
Sandbox for what it can and cannot do.
Getting help
Email info@onlink.africa with integration
questions, incidents and credential requests. It is a monitored inbox. Check
onlink.africa/status first if something looks
wrong, and quote the requestId from any error response when you write to us
— it is the one handle that finds your request in our logs. See
Status and support for what to include.