Skip to main content
A payout turns stablecoins into fiat in a bank account. You send crypto to a Zapyd deposit address, and Zapyd pays the beneficiary over local bank rails. Base URL: https://sandbox.zapyd.com/pos/api/v1. Customer and bank calls use /cms/api/v1 and limit calls use /ren/api/v1.

Paying from a balance?

Prefunded payouts skip the per-order crypto transfer.

Paying outside India?

Onboard beneficiaries in the UAE, UK, SEPA, Brazil, Mexico, the US and others.

Before you start

  • The customer is VERIFIED and has a VERIFIED bank account. Save its id as bank_id.
  • Your webhook URL is registered.

Flow

1. Read the configuration

GET /payout/configuration returns, for each fiat, the supported assets, the minimum and maximum per payment method, and the required risk parameters. Cache it and refresh it daily.

2. Check the customer’s limit

GET /ren/api/v1/payout/limits/{customer_id} returns available_limit and is_edd_required. If the limit doesn’t cover the amount and EDD is required, collect EDD first.

3. Create a quotation

Call POST /payout/quotation. Send either sending_amount (the crypto you send) or receiving_amount (the fiat the beneficiary gets).
payment_method and network are required. payment_method must be valid for the fiat, for example IMPS for INR.

4. Send the crypto

Send exactly sending_amount of the quoted asset, on the quoted network, to wallet_address, before expiry_time. Keep the transaction hash.
A wrong asset, a wrong network or a wrong address can mean permanent loss. Read all three from the quotation. Never hardcode or reuse a deposit address.

5. Initiate the payout

Call POST /payout/initiate.
  • A transaction_hash can fund one payout only. EVM hashes are compared without regard to case.
  • Zapyd verifies the transfer on-chain before it pays out.
The payout starts as PROCESSING. Most payouts complete within 30 to 60 minutes. Bank delays can stretch this to 24 hours.

6. Track the result

Zapyd doesn’t send a webhook for PROCESSING. You receive one for each status after that: Every payout event also carries your client_reference_id. To poll instead, call GET /payout/{payout_id}, or list orders with GET /payout/history.

Test it in sandbox

  1. Create a quotation on sepolia, and send testnet USDT or USDC to wallet_address.
  2. Initiate with the Sepolia transaction hash.
  3. Move the payout with Mock Payout Status: SUCCESS, FAILED or REFUNDED.