curl --request POST \
--url https://sandbox.zapyd.com/pos/api/v1/payout/quotation \
--header 'Content-Type: application/json' \
--header 'X-API-KEY: <api-key>' \
--header 'X-SIGNATURE: <api-key>' \
--header 'X-TIMESTAMP: <api-key>' \
--data '
{
"asset": "usdt",
"fiat": "inr",
"customer_id": "def8b740-99f9-4cba-bc9e-99de57e927b4",
"bank_id": "4e6f1b20-a73c-11ec-b909-0242ac120002",
"risk_parameters": {
"ip_address": "127.0.0.1",
"device_id": "<string>",
"suspicious_activity_report": false,
"law_enforcement_agency_report": false
},
"network": "tron",
"payment_method": "IMPS",
"sending_amount": "51",
"receiving_amount": "5100"
}
'import requests
url = "https://sandbox.zapyd.com/pos/api/v1/payout/quotation"
payload = {
"asset": "usdt",
"fiat": "inr",
"customer_id": "def8b740-99f9-4cba-bc9e-99de57e927b4",
"bank_id": "4e6f1b20-a73c-11ec-b909-0242ac120002",
"risk_parameters": {
"ip_address": "127.0.0.1",
"device_id": "<string>",
"suspicious_activity_report": False,
"law_enforcement_agency_report": False
},
"network": "tron",
"payment_method": "IMPS",
"sending_amount": "51",
"receiving_amount": "5100"
}
headers = {
"X-API-KEY": "<api-key>",
"X-TIMESTAMP": "<api-key>",
"X-SIGNATURE": "<api-key>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {
'X-API-KEY': '<api-key>',
'X-TIMESTAMP': '<api-key>',
'X-SIGNATURE': '<api-key>',
'Content-Type': 'application/json'
},
body: JSON.stringify({
asset: 'usdt',
fiat: 'inr',
customer_id: 'def8b740-99f9-4cba-bc9e-99de57e927b4',
bank_id: '4e6f1b20-a73c-11ec-b909-0242ac120002',
risk_parameters: {
ip_address: '127.0.0.1',
device_id: '<string>',
suspicious_activity_report: false,
law_enforcement_agency_report: false
},
network: 'tron',
payment_method: 'IMPS',
sending_amount: '51',
receiving_amount: '5100'
})
};
fetch('https://sandbox.zapyd.com/pos/api/v1/payout/quotation', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://sandbox.zapyd.com/pos/api/v1/payout/quotation",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'asset' => 'usdt',
'fiat' => 'inr',
'customer_id' => 'def8b740-99f9-4cba-bc9e-99de57e927b4',
'bank_id' => '4e6f1b20-a73c-11ec-b909-0242ac120002',
'risk_parameters' => [
'ip_address' => '127.0.0.1',
'device_id' => '<string>',
'suspicious_activity_report' => false,
'law_enforcement_agency_report' => false
],
'network' => 'tron',
'payment_method' => 'IMPS',
'sending_amount' => '51',
'receiving_amount' => '5100'
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json",
"X-API-KEY: <api-key>",
"X-SIGNATURE: <api-key>",
"X-TIMESTAMP: <api-key>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://sandbox.zapyd.com/pos/api/v1/payout/quotation"
payload := strings.NewReader("{\n \"asset\": \"usdt\",\n \"fiat\": \"inr\",\n \"customer_id\": \"def8b740-99f9-4cba-bc9e-99de57e927b4\",\n \"bank_id\": \"4e6f1b20-a73c-11ec-b909-0242ac120002\",\n \"risk_parameters\": {\n \"ip_address\": \"127.0.0.1\",\n \"device_id\": \"<string>\",\n \"suspicious_activity_report\": false,\n \"law_enforcement_agency_report\": false\n },\n \"network\": \"tron\",\n \"payment_method\": \"IMPS\",\n \"sending_amount\": \"51\",\n \"receiving_amount\": \"5100\"\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("X-API-KEY", "<api-key>")
req.Header.Add("X-TIMESTAMP", "<api-key>")
req.Header.Add("X-SIGNATURE", "<api-key>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://sandbox.zapyd.com/pos/api/v1/payout/quotation")
.header("X-API-KEY", "<api-key>")
.header("X-TIMESTAMP", "<api-key>")
.header("X-SIGNATURE", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"asset\": \"usdt\",\n \"fiat\": \"inr\",\n \"customer_id\": \"def8b740-99f9-4cba-bc9e-99de57e927b4\",\n \"bank_id\": \"4e6f1b20-a73c-11ec-b909-0242ac120002\",\n \"risk_parameters\": {\n \"ip_address\": \"127.0.0.1\",\n \"device_id\": \"<string>\",\n \"suspicious_activity_report\": false,\n \"law_enforcement_agency_report\": false\n },\n \"network\": \"tron\",\n \"payment_method\": \"IMPS\",\n \"sending_amount\": \"51\",\n \"receiving_amount\": \"5100\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://sandbox.zapyd.com/pos/api/v1/payout/quotation")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["X-API-KEY"] = '<api-key>'
request["X-TIMESTAMP"] = '<api-key>'
request["X-SIGNATURE"] = '<api-key>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"asset\": \"usdt\",\n \"fiat\": \"inr\",\n \"customer_id\": \"def8b740-99f9-4cba-bc9e-99de57e927b4\",\n \"bank_id\": \"4e6f1b20-a73c-11ec-b909-0242ac120002\",\n \"risk_parameters\": {\n \"ip_address\": \"127.0.0.1\",\n \"device_id\": \"<string>\",\n \"suspicious_activity_report\": false,\n \"law_enforcement_agency_report\": false\n },\n \"network\": \"tron\",\n \"payment_method\": \"IMPS\",\n \"sending_amount\": \"51\",\n \"receiving_amount\": \"5100\"\n}"
response = http.request(request)
puts response.read_body{
"status": true,
"message": "Success",
"data": {
"id": "59bf60c3-e9af-40a7-9d5c-2a1aa191e769",
"customer_id": "84737c7d-7b62-4204-80d6-80f6ecb3ceb4",
"bank_id": "cab47575-bbcb-4294-81a3-30774104f3b6",
"asset": "USDT",
"fiat": "INR",
"network": "tron",
"sending_amount": "60.00",
"rate": "85.00",
"receiving_amount": "5100.00",
"fees": {
"zapyd_fee": "0.00",
"client_fee": "0.00",
"client_gst": "0.00",
"tds": "0"
},
"wallet_address": "TXqH4MnDw46f3yyrRwau3JF92Y1ie3pAXf",
"created_at": "2026-09-30T10:00:00Z",
"expiry_time": "2026-09-30T10:10:00Z"
}
}{
"status": false,
"message": "Bad Request",
"data": null,
"err_code": "REQ_FIELD_MISSING",
"errors": {
"amount": [
"receiving_amount is required"
]
}
}{
"status": false,
"message": "Internal Server Error",
"data": null,
"err_code": "SYS_INTERNAL_ERROR",
"errors": "Unexpected error occurred. Please try again later."
}{
"status": false,
"message": "Service unavailable",
"data": null,
"err_code": "SYS_SERVICE_UNAVAILABLE",
"errors": "Unexpected error occurred. Please try again later."
}Create Quotation
Creates a payout quotation that fixes the exchange rate. Returns a crypto deposit address and a quotation ID that is valid for a fixed period.
curl --request POST \
--url https://sandbox.zapyd.com/pos/api/v1/payout/quotation \
--header 'Content-Type: application/json' \
--header 'X-API-KEY: <api-key>' \
--header 'X-SIGNATURE: <api-key>' \
--header 'X-TIMESTAMP: <api-key>' \
--data '
{
"asset": "usdt",
"fiat": "inr",
"customer_id": "def8b740-99f9-4cba-bc9e-99de57e927b4",
"bank_id": "4e6f1b20-a73c-11ec-b909-0242ac120002",
"risk_parameters": {
"ip_address": "127.0.0.1",
"device_id": "<string>",
"suspicious_activity_report": false,
"law_enforcement_agency_report": false
},
"network": "tron",
"payment_method": "IMPS",
"sending_amount": "51",
"receiving_amount": "5100"
}
'import requests
url = "https://sandbox.zapyd.com/pos/api/v1/payout/quotation"
payload = {
"asset": "usdt",
"fiat": "inr",
"customer_id": "def8b740-99f9-4cba-bc9e-99de57e927b4",
"bank_id": "4e6f1b20-a73c-11ec-b909-0242ac120002",
"risk_parameters": {
"ip_address": "127.0.0.1",
"device_id": "<string>",
"suspicious_activity_report": False,
"law_enforcement_agency_report": False
},
"network": "tron",
"payment_method": "IMPS",
"sending_amount": "51",
"receiving_amount": "5100"
}
headers = {
"X-API-KEY": "<api-key>",
"X-TIMESTAMP": "<api-key>",
"X-SIGNATURE": "<api-key>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {
'X-API-KEY': '<api-key>',
'X-TIMESTAMP': '<api-key>',
'X-SIGNATURE': '<api-key>',
'Content-Type': 'application/json'
},
body: JSON.stringify({
asset: 'usdt',
fiat: 'inr',
customer_id: 'def8b740-99f9-4cba-bc9e-99de57e927b4',
bank_id: '4e6f1b20-a73c-11ec-b909-0242ac120002',
risk_parameters: {
ip_address: '127.0.0.1',
device_id: '<string>',
suspicious_activity_report: false,
law_enforcement_agency_report: false
},
network: 'tron',
payment_method: 'IMPS',
sending_amount: '51',
receiving_amount: '5100'
})
};
fetch('https://sandbox.zapyd.com/pos/api/v1/payout/quotation', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://sandbox.zapyd.com/pos/api/v1/payout/quotation",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'asset' => 'usdt',
'fiat' => 'inr',
'customer_id' => 'def8b740-99f9-4cba-bc9e-99de57e927b4',
'bank_id' => '4e6f1b20-a73c-11ec-b909-0242ac120002',
'risk_parameters' => [
'ip_address' => '127.0.0.1',
'device_id' => '<string>',
'suspicious_activity_report' => false,
'law_enforcement_agency_report' => false
],
'network' => 'tron',
'payment_method' => 'IMPS',
'sending_amount' => '51',
'receiving_amount' => '5100'
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json",
"X-API-KEY: <api-key>",
"X-SIGNATURE: <api-key>",
"X-TIMESTAMP: <api-key>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://sandbox.zapyd.com/pos/api/v1/payout/quotation"
payload := strings.NewReader("{\n \"asset\": \"usdt\",\n \"fiat\": \"inr\",\n \"customer_id\": \"def8b740-99f9-4cba-bc9e-99de57e927b4\",\n \"bank_id\": \"4e6f1b20-a73c-11ec-b909-0242ac120002\",\n \"risk_parameters\": {\n \"ip_address\": \"127.0.0.1\",\n \"device_id\": \"<string>\",\n \"suspicious_activity_report\": false,\n \"law_enforcement_agency_report\": false\n },\n \"network\": \"tron\",\n \"payment_method\": \"IMPS\",\n \"sending_amount\": \"51\",\n \"receiving_amount\": \"5100\"\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("X-API-KEY", "<api-key>")
req.Header.Add("X-TIMESTAMP", "<api-key>")
req.Header.Add("X-SIGNATURE", "<api-key>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://sandbox.zapyd.com/pos/api/v1/payout/quotation")
.header("X-API-KEY", "<api-key>")
.header("X-TIMESTAMP", "<api-key>")
.header("X-SIGNATURE", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"asset\": \"usdt\",\n \"fiat\": \"inr\",\n \"customer_id\": \"def8b740-99f9-4cba-bc9e-99de57e927b4\",\n \"bank_id\": \"4e6f1b20-a73c-11ec-b909-0242ac120002\",\n \"risk_parameters\": {\n \"ip_address\": \"127.0.0.1\",\n \"device_id\": \"<string>\",\n \"suspicious_activity_report\": false,\n \"law_enforcement_agency_report\": false\n },\n \"network\": \"tron\",\n \"payment_method\": \"IMPS\",\n \"sending_amount\": \"51\",\n \"receiving_amount\": \"5100\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://sandbox.zapyd.com/pos/api/v1/payout/quotation")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["X-API-KEY"] = '<api-key>'
request["X-TIMESTAMP"] = '<api-key>'
request["X-SIGNATURE"] = '<api-key>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"asset\": \"usdt\",\n \"fiat\": \"inr\",\n \"customer_id\": \"def8b740-99f9-4cba-bc9e-99de57e927b4\",\n \"bank_id\": \"4e6f1b20-a73c-11ec-b909-0242ac120002\",\n \"risk_parameters\": {\n \"ip_address\": \"127.0.0.1\",\n \"device_id\": \"<string>\",\n \"suspicious_activity_report\": false,\n \"law_enforcement_agency_report\": false\n },\n \"network\": \"tron\",\n \"payment_method\": \"IMPS\",\n \"sending_amount\": \"51\",\n \"receiving_amount\": \"5100\"\n}"
response = http.request(request)
puts response.read_body{
"status": true,
"message": "Success",
"data": {
"id": "59bf60c3-e9af-40a7-9d5c-2a1aa191e769",
"customer_id": "84737c7d-7b62-4204-80d6-80f6ecb3ceb4",
"bank_id": "cab47575-bbcb-4294-81a3-30774104f3b6",
"asset": "USDT",
"fiat": "INR",
"network": "tron",
"sending_amount": "60.00",
"rate": "85.00",
"receiving_amount": "5100.00",
"fees": {
"zapyd_fee": "0.00",
"client_fee": "0.00",
"client_gst": "0.00",
"tds": "0"
},
"wallet_address": "TXqH4MnDw46f3yyrRwau3JF92Y1ie3pAXf",
"created_at": "2026-09-30T10:00:00Z",
"expiry_time": "2026-09-30T10:10:00Z"
}
}{
"status": false,
"message": "Bad Request",
"data": null,
"err_code": "REQ_FIELD_MISSING",
"errors": {
"amount": [
"receiving_amount is required"
]
}
}{
"status": false,
"message": "Internal Server Error",
"data": null,
"err_code": "SYS_INTERNAL_ERROR",
"errors": "Unexpected error occurred. Please try again later."
}{
"status": false,
"message": "Service unavailable",
"data": null,
"err_code": "SYS_SERVICE_UNAVAILABLE",
"errors": "Unexpected error occurred. Please try again later."
}Create Quotation
sending_amount (crypto amount to send) or receiving_amount (fixed fiat amount the beneficiary should receive) — not both. For remittance payouts, use the dedicated Remittance Quotation endpoint instead.Error Codes and Messages
| API Status Code | Response | Reason |
|---|---|---|
| 400 | Customer is unverified | Customer is added but KYC is unverified |
| 400 | Customer is unverified | Customer does not belong to Organization |
| 400 | Bank account is unverified | Bank account is not added |
| 400 | Bank account is unverified | Bank account is added but under processing |
| 400 | Bank account is unverified | Name mismatch between PAN and Bank account |
| 400 | Bank account is unverified | Bank account is linked to some other customer |
| 400 | Entered amount is less than minimum transaction amount | Entered amount must be greater than INR 2500 |
| 400 | Entered amount exceeds maximum transaction amount | Entered amount must be less than: • INR 500,000 for IMPS |
| 400 | AML SCREENING FAILED | Customer appears in sanction lists and the Politically Exposed Persons (PEP) database and/or has material adverse media |
| 400 | EDD required | Suspicious activity or Red Flag Indicator is triggered |
| 400 | EDD required | Transaction milestone since last EDD is reached^ |
| 400 | EDD required | Annual EDD is due or overdue |
| 400 | Daily offramp limit exhausted | Daily offramp limit exhausted |
| 500 | Internal Server Error | Internal Server Error |
| 503 | Service unavailable | Unexpected Error Occurred |
Authorizations
API Key for authentication
Current timestamp in seconds since epoch
HMAC SHA256 signature of the request encoded in Base64
Body
The cryptocurrency asset code
"usdt"
The fiat currency code
"inr"
Customer's unique identifier
"def8b740-99f9-4cba-bc9e-99de57e927b4"
Customer's Bank's unique identifier that receives the payout
"4e6f1b20-a73c-11ec-b909-0242ac120002"
Required. Send every key listed in required_risk_parameters for the fiat in Fetch Configuration. Send {} if that list is empty.
Hide child attributes
Hide child attributes
End user's IP address (IPv4 or IPv6).
"127.0.0.1"
End user's device identifier.
true if you have filed a suspicious activity report on this user.
false
true if a law enforcement agency has reported this user.
false
Blockchain network of the asset, for example tron or polygon.
"tron"
Payout payment method, valid for the fiat (see Fetch Configuration).
"IMPS"
Crypto amount to send. Send exactly one of sending_amount or receiving_amount.
"51"
Fiat amount the beneficiary should receive. Send exactly one of sending_amount or receiving_amount.
"5100"
Response
Quotation created successfully
true
"Success"
Hide child attributes
Hide child attributes
Quotation ID
"59bf60c3-e9af-40a7-9d5c-2a1aa191e769"
Customer ID
"84737c7d-7b62-4204-80d6-80f6ecb3ceb4"
Bank account ID
"cab47575-bbcb-4294-81a3-30774104f3b6"
Crypto asset
"USDT"
Fiat currency
"INR"
Network
"tron"
Crypto amount to send
"60.00"
Fee-inclusive rate
"85.00"
Fiat amount the beneficiary receives
"5100.00"
Fee breakdown
{ "zapyd_fee": "0.00", "client_fee": "0.00", "client_gst": "0.00", "tds": "0" }
Deposit address: send the crypto here
"TXqH4MnDw46f3yyrRwau3JF92Y1ie3pAXf"
"2026-09-30T10:00:00Z"
Quotation expiry
"2026-09-30T10:10:00Z"