Changelog
What changed, and what counts as a breaking change.
API stability
We version the API in the path (/v1). Within a version:
Breaking changes — we will not make these without notice and a migration path:
- removing or renaming a field, an endpoint or an error code;
- changing the meaning or type of an existing field;
- adding a required request field;
- changing the signing algorithm or the string to sign;
- removing an order status or a webhook event type.
Additive changes — we make these without notice, and your integration must tolerate them:
- new optional request fields;
- new response fields;
- new webhook event types;
- new endpoints;
- new error codes.
Two obligations this puts on you
Ignore fields you do not recognise, and ignore webhook type values you do
not recognise. A client that rejects an unknown field or event breaks on a
change that is not supposed to break anything.
Changes are announced here and by email to your registered contact.
Changes
2026-09-15
- Fees are itemised.
POST /v1/quotes, both order create routes andGET /v1/orders/{id}now return afeeobject and akesTotalAmountbeside the existingkesAmount.kesAmountkeeps its meaning — the trade principal — andkesTotalAmountis the figure that moves: principal plus the fee on a buy, less the fee on a sell. See Fees. - On a buy,
kesTotalAmountis what we debit. The buy leg takes the KES from your own balance, so there is nothing for you to send — but the total is the figure that leaves the account and the one to reconcile against. Size your balance against it too: one that covers onlykesAmountis refused withINSUFFICIENT_KES_BALANCE. - On a sell,
kesTotalAmountis what we pay into your account, so it is the figure to reconcile a bank statement against. - Webhook payloads carry
feeKesAmountandkesTotalAmount. Both are additive; the pricing terms themselves are not published in the payload. usdtAmountandrateare unchanged by any of this. The fee is charged in KES, on the KES side, on both legs — it is a separate named component and it does not move the rate.- Two new errors:
422 FEE_EXCEEDS_PROCEEDSwhen a sell's fee would consume the whole payout, and503 FEE_PRICING_INVALID. See the error catalogue.
2026-09-04
- Documentation: a plain-language Overview section — what the API is, how an order works, use cases, a glossary and an FAQ — for product, finance and compliance readers, and a rewritten welcome page.
- Documentation: webhooks, signature verification, authentication and the error catalogue are documented. The reference is ordered by integration workflow and the OpenAPI spec is downloadable.
2026-09-02
POST /v1/orders/buy— create a buy order against a quote. Both legs now have a create route.
2026-09-01
- Outbound webhooks:
order.funds_confirmed,order.settled,order.rejectedandorder.expired, signed with HMAC-SHA256 and retried. - Partner API documentation published.