Skip to main content
A payin turns a user’s fiat bank transfer into stablecoins. The user pays Zapyd’s collection account, and Zapyd delivers USDT or USDC on the network you choose. Base URL: 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 with GET /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 user deposit_instructions, the exact sending_amount and the time left before expiry_time.
Payins are rejected or refunded when the user pays from an account that isn’t in their own KYC name, pays a different amount, or splits the payment. Tell the user this before they pay.
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

Call POST /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 a PAYIN 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 is wallet_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

  1. Create a quotation, then initiate with any 12-digit transaction_reference_id.
  2. Move the payin with Mock Payin Status: SUCCESS, ON_HOLD, REFUNDED or FAILED.
  3. Check that your webhook handler credits the user only on SUCCESS.