Create Offer (On-Ramp Or Off-Ramp)
Authenticated customer, vendor, subvendor, merchant, or admin may create an offer. Non-admin callers must set vendor_id to their own user id.
Off-ramp (offer_type BUY) offers require pricing_profile_id, fx_rate_quote_id, and default_fee_bearer.
Create the pricing profile and FX quote first (admin). The profile and quote must both be flow_type: offramp,
match the offer asset, agree on fiat_currency when the profile sets it, match network when both set it,
and use the same spread_bps.
On-ramp (offer_type SELL) must omit those three fields. Orders created against a BUY offer inherit
default_fee_bearer when the client omits fee_bearer on the order.
rate: Required for SELL. For BUY, omit rate to store the linked FX quote’s applied_rate, or send rate to override (e.g. merchant display price).
Authorizations
Bearer authentication header of the form Bearer <token>, where <token> is your auth token.
Body
SELL = Merchant sells USDT (on-ramp), BUY = Merchant buys USDT (off-ramp)
SELL, BUY Total offer amount for selected asset (USDT or USDC).
KES per USDT. Required for SELL. For BUY, omit to use the linked FX quote applied_rate, or set to override.
Optional: defaults to 'active' if omitted
Required for BUY. Omit for SELL.
Required for BUY. Omit for SELL.
Required for BUY. Default for orders from this offer. Omit for SELL.
sender, receiver Response
Offer Created
Offer ID.
Vendor ID.
Offer type.
SELL, BUY Asset symbol (e.g.
Offer amount in selected asset (USDT/USDC).
Available offer amount in selected asset. Must be <= crypto_amount and <= owner's default wallet asset balance.
Exchange rate (KES per USDT).
Minimum order size.
Maximum order size.
Offer status.
Set for BUY (off-ramp) offers.
Set for BUY (off-ramp) offers.
Default fee bearer for orders against this offer.
sender, receiver Database-style nullable time wrapper