https://sandbox.zapyd.com/pis/api/v1. Customer calls use /cms/api/v1 and limit calls use /ren/api/v1.
Before you start
- The customer is
VERIFIED. See Onboard customers. - Your webhook URL is registered.
- Your organization has a delivery wallet for each asset and network you use. Zapyd sets this up during onboarding.
Flow
1. Read the configuration
GET /payin/configuration returns, for each fiat, the supported assets and networks, the crypto minimum and maximum per network and payment method, settlement times, and the risk parameters you must send. Cache it and refresh it daily.
2. Check the customer’s limit
GET /ren/api/v1/payin/limits/{customer_id} returns the customer’s daily limit, how much is left, and whether they need Enhanced Due Diligence.
3. Create a quotation
Optionally show a live rate first withGET /payin/fetch-rate. When the user confirms, create a quotation with POST /payin/quotation. It locks the rate until expiry_time.
4. Collect the fiat
Show the userdeposit_instructions, the exact sending_amount and the time left before expiry_time.
After the transfer, the user’s bank gives them a reference. In India this is the 12-digit UTR for IMPS and UPI. See Understanding UTR numbers.
5. Initiate the payin
CallPOST /payin/initiate before the quotation expires.
transaction_reference_id is required for INR: 12 or 16 characters, not used by any other payin. It’s optional for other fiats. The payin starts as PROCESSING.
6. Track the result
Zapyd matches the transfer, then delivers the crypto and sends aPAYIN webhook.
To poll instead, call
GET /payin/{payin_id} no more than once a minute. GET /payin/history lists orders with filters.
Where the crypto goes
Zapyd delivers the crypto to your organization’s delivery wallet for that asset and network, set up during onboarding. The address iswallet_address on the payin. If no wallet is set up for the pair, the quotation fails with Not configured for asset: X & network: Y. Credit the user from that wallet in your own ledger.
Test it in sandbox
- Create a quotation, then initiate with any 12-digit
transaction_reference_id. - Move the payin with Mock Payin Status:
SUCCESS,ON_HOLD,REFUNDEDorFAILED. - Check that your webhook handler credits the user only on
SUCCESS.