Your balances
The KES account you hold with us and its available balance. A Collections credential also gets usd, the USD account that collections are paid into and that conversions and USD payouts draw on. When that USD account cannot be read (not opened yet, still activating, or suspended), usd.available is null and usd.unavailableReason names why; it is never reported as 0. A USDT Rails credential gets kes only.
Authorization
partner-key In: header
Response Body
application/json
application/json
application/json
curl -X GET "https://example.com/v1/balances"{ "kes": { "available": "150000.50", "accountNumber": "00000000123456", "currency": "KES", "asOf": "2026-09-08T12:00:00.000Z" }, "usd": { "available": "98.50", "accountNumber": "00000000000000", "currency": "USD", "asOf": "2026-09-08T12:00:00.000Z", "unavailableReason": null }}Your KES payout destinations GET
Your OnLink KES account(s). Pass an account's payoutAccountId on POST /v1/orders/sell; the KES lands in that account. Read-only: the list is your own KES account(s), so your API credential cannot add a place for money to go. Only active, named KES accounts are listed. Account numbers are returned as the last four digits only — you select an account by id and never type its number.
Register a withdrawal address POST
Creates the address in pending_partner_approval and emails a 6-digit code to a registered administrator. The address is not usable until your administrator confirms the code and OnLink approves it. Re-registering the same address is idempotent: the existing registration is returned and no second row is created. If that registration is still awaiting your administrator and its code is no longer usable (expired, or cancelled after too many incorrect attempts), re-registering re-issues a fresh code — this is how you recover such an address. A code that is still live is never replaced, and no code is issued once the address has moved past your administrator’s approval.