curl --request POST \
--url https://sandbox.zapyd.com/pos/api/v1/payout/initiate \
--header 'Content-Type: application/json' \
--header 'X-API-KEY: <api-key>' \
--header 'X-SIGNATURE: <api-key>' \
--header 'X-TIMESTAMP: <api-key>' \
--data '
{
"quotation_id": "2e104290-07c8-49f1-a5ca-0d27f0078f8a",
"customer_id": "def8b740-99f9-4cba-bc9e-99de57e927b4",
"transaction_hash": "0x9f2c3b…",
"client_reference_id": "testUser123"
}
'import requests
url = "https://sandbox.zapyd.com/pos/api/v1/payout/initiate"
payload = {
"quotation_id": "2e104290-07c8-49f1-a5ca-0d27f0078f8a",
"customer_id": "def8b740-99f9-4cba-bc9e-99de57e927b4",
"transaction_hash": "0x9f2c3b…",
"client_reference_id": "testUser123"
}
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({
quotation_id: '2e104290-07c8-49f1-a5ca-0d27f0078f8a',
customer_id: 'def8b740-99f9-4cba-bc9e-99de57e927b4',
transaction_hash: '0x9f2c3b…',
client_reference_id: 'testUser123'
})
};
fetch('https://sandbox.zapyd.com/pos/api/v1/payout/initiate', 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/initiate",
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([
'quotation_id' => '2e104290-07c8-49f1-a5ca-0d27f0078f8a',
'customer_id' => 'def8b740-99f9-4cba-bc9e-99de57e927b4',
'transaction_hash' => '0x9f2c3b…',
'client_reference_id' => 'testUser123'
]),
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/initiate"
payload := strings.NewReader("{\n \"quotation_id\": \"2e104290-07c8-49f1-a5ca-0d27f0078f8a\",\n \"customer_id\": \"def8b740-99f9-4cba-bc9e-99de57e927b4\",\n \"transaction_hash\": \"0x9f2c3b…\",\n \"client_reference_id\": \"testUser123\"\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/initiate")
.header("X-API-KEY", "<api-key>")
.header("X-TIMESTAMP", "<api-key>")
.header("X-SIGNATURE", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"quotation_id\": \"2e104290-07c8-49f1-a5ca-0d27f0078f8a\",\n \"customer_id\": \"def8b740-99f9-4cba-bc9e-99de57e927b4\",\n \"transaction_hash\": \"0x9f2c3b…\",\n \"client_reference_id\": \"testUser123\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://sandbox.zapyd.com/pos/api/v1/payout/initiate")
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 \"quotation_id\": \"2e104290-07c8-49f1-a5ca-0d27f0078f8a\",\n \"customer_id\": \"def8b740-99f9-4cba-bc9e-99de57e927b4\",\n \"transaction_hash\": \"0x9f2c3b…\",\n \"client_reference_id\": \"testUser123\"\n}"
response = http.request(request)
puts response.read_body{
"status": true,
"message": "Success",
"data": {
"id": "b3f1c2d4-5e6f-4a7b-8c9d-0e1f2a3b4c5d",
"quotation_id": "59bf60c3-e9af-40a7-9d5c-2a1aa191e769",
"customer_id": "84737c7d-7b62-4204-80d6-80f6ecb3ceb4",
"bank_id": "cab47575-bbcb-4294-81a3-30774104f3b6",
"asset": "USDT",
"network": "tron",
"fiat": "INR",
"rate": "85.00",
"sending_amount": "60.00",
"receiving_amount": "5100.00",
"client_reference_id": "payout-ref-001",
"fees": {
"zapyd_fee": "0.00",
"client_fee": "0.00",
"client_gst": "0.00",
"tds": "0"
},
"status": "PROCESSING",
"wallet_address": "TXqH4MnDw46f3yyrRwau3JF92Y1ie3pAXf",
"transaction_hash": "0x9f2c…",
"created_at": "2026-09-30T10:00:00Z"
}
}{
"status": false,
"message": "Bad Request",
"err_code": "REQ_FIELD_MISSING",
"errors": {
"quotation_id": [
"This field is required."
]
},
"data": null
}{
"status": false,
"message": "Internal Server Error",
"data": null,
"err_code": "SYS_INTERNAL_ERROR",
"errors": "Unexpected error occurred. Please try again later."
}Create Payout
Starts a payout order from a valid quotation that has not expired. Check the wallet address and blockchain first: crypto sent to a wrong address cannot be recovered.
curl --request POST \
--url https://sandbox.zapyd.com/pos/api/v1/payout/initiate \
--header 'Content-Type: application/json' \
--header 'X-API-KEY: <api-key>' \
--header 'X-SIGNATURE: <api-key>' \
--header 'X-TIMESTAMP: <api-key>' \
--data '
{
"quotation_id": "2e104290-07c8-49f1-a5ca-0d27f0078f8a",
"customer_id": "def8b740-99f9-4cba-bc9e-99de57e927b4",
"transaction_hash": "0x9f2c3b…",
"client_reference_id": "testUser123"
}
'import requests
url = "https://sandbox.zapyd.com/pos/api/v1/payout/initiate"
payload = {
"quotation_id": "2e104290-07c8-49f1-a5ca-0d27f0078f8a",
"customer_id": "def8b740-99f9-4cba-bc9e-99de57e927b4",
"transaction_hash": "0x9f2c3b…",
"client_reference_id": "testUser123"
}
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({
quotation_id: '2e104290-07c8-49f1-a5ca-0d27f0078f8a',
customer_id: 'def8b740-99f9-4cba-bc9e-99de57e927b4',
transaction_hash: '0x9f2c3b…',
client_reference_id: 'testUser123'
})
};
fetch('https://sandbox.zapyd.com/pos/api/v1/payout/initiate', 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/initiate",
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([
'quotation_id' => '2e104290-07c8-49f1-a5ca-0d27f0078f8a',
'customer_id' => 'def8b740-99f9-4cba-bc9e-99de57e927b4',
'transaction_hash' => '0x9f2c3b…',
'client_reference_id' => 'testUser123'
]),
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/initiate"
payload := strings.NewReader("{\n \"quotation_id\": \"2e104290-07c8-49f1-a5ca-0d27f0078f8a\",\n \"customer_id\": \"def8b740-99f9-4cba-bc9e-99de57e927b4\",\n \"transaction_hash\": \"0x9f2c3b…\",\n \"client_reference_id\": \"testUser123\"\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/initiate")
.header("X-API-KEY", "<api-key>")
.header("X-TIMESTAMP", "<api-key>")
.header("X-SIGNATURE", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"quotation_id\": \"2e104290-07c8-49f1-a5ca-0d27f0078f8a\",\n \"customer_id\": \"def8b740-99f9-4cba-bc9e-99de57e927b4\",\n \"transaction_hash\": \"0x9f2c3b…\",\n \"client_reference_id\": \"testUser123\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://sandbox.zapyd.com/pos/api/v1/payout/initiate")
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 \"quotation_id\": \"2e104290-07c8-49f1-a5ca-0d27f0078f8a\",\n \"customer_id\": \"def8b740-99f9-4cba-bc9e-99de57e927b4\",\n \"transaction_hash\": \"0x9f2c3b…\",\n \"client_reference_id\": \"testUser123\"\n}"
response = http.request(request)
puts response.read_body{
"status": true,
"message": "Success",
"data": {
"id": "b3f1c2d4-5e6f-4a7b-8c9d-0e1f2a3b4c5d",
"quotation_id": "59bf60c3-e9af-40a7-9d5c-2a1aa191e769",
"customer_id": "84737c7d-7b62-4204-80d6-80f6ecb3ceb4",
"bank_id": "cab47575-bbcb-4294-81a3-30774104f3b6",
"asset": "USDT",
"network": "tron",
"fiat": "INR",
"rate": "85.00",
"sending_amount": "60.00",
"receiving_amount": "5100.00",
"client_reference_id": "payout-ref-001",
"fees": {
"zapyd_fee": "0.00",
"client_fee": "0.00",
"client_gst": "0.00",
"tds": "0"
},
"status": "PROCESSING",
"wallet_address": "TXqH4MnDw46f3yyrRwau3JF92Y1ie3pAXf",
"transaction_hash": "0x9f2c…",
"created_at": "2026-09-30T10:00:00Z"
}
}{
"status": false,
"message": "Bad Request",
"err_code": "REQ_FIELD_MISSING",
"errors": {
"quotation_id": [
"This field is required."
]
},
"data": null
}{
"status": false,
"message": "Internal Server Error",
"data": null,
"err_code": "SYS_INTERNAL_ERROR",
"errors": "Unexpected error occurred. Please try again later."
}Create Payout
- Deposits to unsupported asset/blockchain pairs will be lost
- Deposits to incorrect addresses will be lost
- These losses are permanent and non-recoverable
Error Codes and Messages
| API Status Code | Response | Reason |
|---|---|---|
| 400 | Client Reference ID already exists | Client Reference ID already exists |
| 400 | Quotation is not found | Quotation does not exist or does not belong to this organization |
| 400 | Customer ID does not match with the quotation | Customer ID mismatch between payin order and quotation |
| 400 | Quotation has expired | Quotation has expired |
| 400 | Quotation is already linked to another payout | Quotation is already linked to another payout |
| 400 | Transaction hash already linked to a payout that is either processing or successful | The hash already funded another payout |
| 500 | Internal Server Error | Internal Server Error |
Authorizations
API Key for authentication
Current timestamp in seconds since epoch
HMAC SHA256 signature of the request encoded in Base64
Body
The unique identifier of the quotation
"2e104290-07c8-49f1-a5ca-0d27f0078f8a"
The unique identifier of the customer
"def8b740-99f9-4cba-bc9e-99de57e927b4"
Hash of your on-chain transfer of sending_amount to the quotation's wallet_address. Each hash can fund one payout only.
"0x9f2c3b…"
Your reference for this payout. Optional, but must be unique if sent.
"testUser123"
Response
Payout created successfully
true
"Success"
Hide child attributes
Hide child attributes
Payout ID
"b3f1c2d4-5e6f-4a7b-8c9d-0e1f2a3b4c5d"
Quotation ID
"59bf60c3-e9af-40a7-9d5c-2a1aa191e769"
Customer ID
"84737c7d-7b62-4204-80d6-80f6ecb3ceb4"
Bank account ID
"cab47575-bbcb-4294-81a3-30774104f3b6"
"USDT"
Network
"tron"
"INR"
Fee-inclusive rate
"85.00"
Crypto amount
"60.00"
Fiat amount the beneficiary receives
"5100.00"
"payout-ref-001"
Fee breakdown
{ "zapyd_fee": "0.00", "client_fee": "0.00", "client_gst": "0.00", "tds": "0" }
Payout status
PROCESSING, SUCCESS, FAILED, REFUNDED, IN_REVIEW "PROCESSING"
Deposit address from the quotation
"TXqH4MnDw46f3yyrRwau3JF92Y1ie3pAXf"
On-chain funding transaction
"0x9f2c…"
"2026-09-30T10:00:00Z"