Skip to main content

1. Register a User

Create a new user and receive default Ethereum + TRON wallets. Each wallet is provisioned with zero balances for native (ETH/TRX), USDT, and USDC on that network.
Response includes user and wallets with initialized balances (USDT, USDC, and native token per wallet).

2. Authenticate

Use login (or login-pin if you set a PIN) to get an access token:
Save the access_token and refresh_token from the response.

3. Call Protected Endpoints

Use the access token for authenticated requests:

4. Create an Order (on-Ramp)

Create an order to buy USDT with KES. Production flows require a matching offer and pricing (pricing_profile_id + fx_rate_quote_id) created by an admin — see Pricing and FX.
For off-ramp (OFF_RAMP_SELL), add payout_phone and use a customer wallet whose address matches the escrow network (TRON T... vs Ethereum 0x...) — see Orders and payments.

5. Initiate Payment

Trigger mobile money STK push for the order:

Additional Wallet Provisioning

Use POST /api/v1/auth/wallets/for-owner with a Bearer token to add a custodial or treasury-multisig wallet tied to a users row (owner_type: customer, vendor, merchant, sub_merchant, or treasury). Each new wallet gets zero balances for native, USDT, and USDC on the chosen network.
  • Retail (customer): non-admin callers must set user_id to their own id and have role customer or user. A master vendor may also use customer with their own user_id for an extra wallet.
  • vendor: same as a master merchant — send user_id equal to the vendor’s user id (alternative to merchant + merchant_id).
  • Admin: may use owner_type customer with any user_id. Use merchant/sub_merchant when the id field should be explicit.
See the API Reference tab for request fields and examples.

Next Steps

Authentication

Understand refresh tokens and PIN-based login