Skip to main content
Read this page once before you build. It explains the terms used everywhere else in these docs.

Products

Objects

Environments and base URLs

Each API module has its own path prefix. Full URL = host + module prefix + endpoint path. Example: POST /payout/quotation in sandbox is https://sandbox.zapyd.com/pos/api/v1/payout/quotation.

Authentication

Every request is signed with your API secret. The signature is Base64 HMAC-SHA256 over apiKey|timestamp|canonicalJsonBody. GET requests sign {}. See Authentication for helpers in three languages and a test vector.

Response envelope

Every response uses the same envelope. Check status first, then read data or err_code.
Branch on err_code, not on message. Create endpoints for quotations and orders return HTTP 201. See Error handling for retry rules.

Amounts and currencies

  • Send amounts as strings ("10000", "60.50") so you don’t lose precision.
  • On a quotation, send either sending_amount or receiving_amount, never both.
  • The quotation response returns both amounts, the rate and a fees breakdown. Show the user these values, not your own calculation.
  • Asset and fiat codes are case-insensitive (usdt or USDT). Networks are lowercase (tron, polygon, sepolia).
  • Check supported pairs in Stablecoins and networks and Supported geographies.

Idempotency and your own IDs

Send client_reference_id (your own ID) on customers and orders. Save both your ID and the Zapyd id in your database.
  • Customer create: if you send a client_reference_id that already exists, Zapyd returns the existing customer. You can retry this call safely.
  • Orders: a quotation can be used only once, so a retried initiate can’t create a second order from the same quotation.
  • Webhooks can arrive more than once. Deduplicate them on the object id and event.

Order lifecycle

SUCCESS, FAILED and REFUNDED are final. ON_HOLD (payin) means the payment is held for review: don’t release crypto, and contact support with the payin ID. IN_REVIEW (payout) means compliance needs more information. The webhook may include an rfi_link for the customer. The Status reference lists every status and what to do in each one.

Sandbox shortcuts

In sandbox you can set statuses directly, so you don’t have to wait for KYC, a bank or a blockchain: