Create OTC Deposit (bank or mobile money)
Creates a new OTC deposit request. Bank creates a pending record. Mobile money creates a record and initiates STK push.
fiat_currency must be an active row in fiat_currencies. Discover codes with GET /api/v1/auth/fiat-currencies before building forms.
When requested_network (and typically requested_asset) are sent, the API sets credited_to_address and to_wallet_id from the merchant default wallet on that network (master merchant ledger user or a sub-vendor wallet under that merchant). Optional body to_wallet_id on the B2B draft path selects a specific owned wallet.
Non-USD fiat (e.g. KES). Set fiat_currency to the wire currency and fiat_amount to the amount received. Link commercial FX (e.g. 130 KES = 1 USD) via fx_rate_quote_id and optional pricing_profile_id. After confirmation, /credit may pair fiat_currency with fiat_amount_equivalent using the same principal when attaching a pricing snapshot.
Authorizations
Bearer authentication header of the form Bearer <token>, where <token> is your auth token.
Body
bank, mpesa Active three-letter ISO code in fiat_currencies. List via GET /api/v1/auth/fiat-currencies.
YYYY-MM-DD for bank
Required for mpesa
Sender account holder name from bank receipt
Last 4 digits of sender account number
Bank advice/receipt number
"application/pdf"
USDT, USDC When set on create, the API persists credited_to_address and to_wallet_id from the merchant default wallet on this network.
tron, ethereum Response
Deposit created (bank) or mobile money STK initiated
- Option 1
- Option 2
bank, mpesa draft, priced, pending, confirmed, rejected, credited Relative path to the bank proof PDF. Prepend API base URL for GET in browsers (GET /otc-deposits-proof/..., no auth).
"/otc-deposits-proof/ce6e4186-16fe-4e0d-a97d-7638f11c6063/8251c719-0941-46da-8792-5acce5e5efc8.pdf"
Merchant blockchain address to receive USDT/USDC on treasury credit. Resolved from the default wallet for requested_network on the master merchant ledger or a sub-vendor under that merchant. Set on draft, one-shot create (when requested_network is sent), quote refresh, and list backfill when missing.
"TJyF42dRr18tSiXV9Cf7JtYUtTbqAGZg94"
Internal wallets.id paired with credited_to_address.
Same as credited_to_address when the API enriches the response (list/detail). Omitted when no wallet can be resolved.
Same as to_wallet_id on enriched responses.
Network from the resolved payout wallet (tron or ethereum).
Mirrors requested_asset when enrichment runs.