Create a sell order (USDT in, KES out)
Consumes a sell quote and returns your deposit address. Payout is asynchronous: nothing is paid out until you attach the transaction hash of your USDT send with PATCH /v1/orders/{id} and the order reaches a terminal state. A signed webhook tells you when it settles; polling is the fallback. Retry-safe: creating twice with the same partnerReference returns the original order rather than a second one. Your deposit address is the same for every order, so we cannot tell your orders apart by it — the transaction hash is what attributes a deposit.
Authorization
partner-key In: header
Request Body
application/json
TypeScript Definitions
Use the request body type in TypeScript.
Response Body
application/json
application/json
application/json
application/json
application/json
application/json
application/json
curl -X POST "https://example.com/v1/orders/sell" \ -H "Content-Type: application/json" \ -d '{ "quoteId": "string", "partnerReference": "string", "payoutAccountId": "string" }'{ "orderId": "3a7c1f90-8b2d-4e56-9a01-cd23ef456789", "status": "awaiting_usdt", "kesAmount": "1281000.00", "usdtAmount": "10000.000000", "rate": "128.1000", "expiresAt": "2026-09-01T09:30:00.000Z", "depositAddress": "TQiBwkXtUUNygiLdSwdeaZCKagwPsD1a7C", "chain": "tron", "sendBefore": "2026-09-01T09:30:00.000Z"}Create a buy order (KES in, USDT out) POST
Consumes a buy quote and returns the payment instructions — where to send the KES, how much, by when, and the payment reference we issue for this order. The reference is ours, not yours: that is what makes attribution exact rather than guessed. Delivery is asynchronous: nothing is sent until your payment is received and the order reaches a terminal state. Register a webhook endpoint rather than assuming a create means the trade is done. Retry-safe: creating twice with the same partnerReference returns the original order rather than a second one. On the mpesa rail the reference cannot be transmitted (M-PESA carries no narration field), so keep it in your own records — we attribute a Pay Bill payment by the Account Number plus the amount. On the bank rails, put it in the narration.
Attach the transaction hash of your USDT send PATCH
This is what attributes your deposit to this order. Attaching a different hash to an order that already has one is refused (409), never an overwrite — the first hash may already have been matched, and re-pointing the order would orphan a real deposit. Re-sending the SAME hash is safe and returns 200, so a retry after a lost response is fine.