curl --request POST \
--url https://sandbox.dollarpe.xyz/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
},
"sending_amount": "51",
"receiving_amount": "5100"
}
'import requests
url = "https://sandbox.dollarpe.xyz/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
},
"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
},
sending_amount: '51',
receiving_amount: '5100'
})
};
fetch('https://sandbox.dollarpe.xyz/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.dollarpe.xyz/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
],
'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.dollarpe.xyz/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 \"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.dollarpe.xyz/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 \"sending_amount\": \"51\",\n \"receiving_amount\": \"5100\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://sandbox.dollarpe.xyz/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 \"sending_amount\": \"51\",\n \"receiving_amount\": \"5100\"\n}"
response = http.request(request)
puts response.read_body{
"status": true,
"message": "Success",
"data": {
"id": "2e104290-07c8-49f1-a5ca-0d27f0078f8a",
"customer_id": "def8b740-99f9-4cba-bc9e-99de57e927b4",
"bank_id": "4e6f1b20-a73c-11ec-b909-0242ac120002",
"asset": "USDT",
"fiat": "INR",
"sending_amount": 51,
"rate": 82.5,
"receiving_amount": 4144.6,
"fees": {
"client_fee_fiat": 450,
"client_fee_crypto": 5,
"dollarpe_fee": 450,
"pg_fee": 18,
"client_gst_fiat": 81,
"client_gst_crypto": 0.9,
"dollarpe_gst": 81,
"pg_gst": 81,
"tds": 889.17,
"gross_effective_exchange_rate": 88.92
},
"created_at": "2025-03-08T07:31:11.163005Z",
"expiry_time": "2025-03-08T07:36:11.163005Z"
}
}{
"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 locking in the exchange rate. Returns a crypto deposit address and a quotation ID valid for a fixed time window.
curl --request POST \
--url https://sandbox.dollarpe.xyz/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
},
"sending_amount": "51",
"receiving_amount": "5100"
}
'import requests
url = "https://sandbox.dollarpe.xyz/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
},
"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
},
sending_amount: '51',
receiving_amount: '5100'
})
};
fetch('https://sandbox.dollarpe.xyz/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.dollarpe.xyz/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
],
'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.dollarpe.xyz/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 \"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.dollarpe.xyz/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 \"sending_amount\": \"51\",\n \"receiving_amount\": \"5100\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://sandbox.dollarpe.xyz/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 \"sending_amount\": \"51\",\n \"receiving_amount\": \"5100\"\n}"
response = http.request(request)
puts response.read_body{
"status": true,
"message": "Success",
"data": {
"id": "2e104290-07c8-49f1-a5ca-0d27f0078f8a",
"customer_id": "def8b740-99f9-4cba-bc9e-99de57e927b4",
"bank_id": "4e6f1b20-a73c-11ec-b909-0242ac120002",
"asset": "USDT",
"fiat": "INR",
"sending_amount": 51,
"rate": 82.5,
"receiving_amount": 4144.6,
"fees": {
"client_fee_fiat": 450,
"client_fee_crypto": 5,
"dollarpe_fee": 450,
"pg_fee": 18,
"client_gst_fiat": 81,
"client_gst_crypto": 0.9,
"dollarpe_gst": 81,
"pg_gst": 81,
"tds": 889.17,
"gross_effective_exchange_rate": 88.92
},
"created_at": "2025-03-08T07:31:11.163005Z",
"expiry_time": "2025-03-08T07:36:11.163005Z"
}
}{
"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 | UPI is not supported | UPI payout is currently not supported |
| 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 in which the payout will be maid
"4e6f1b20-a73c-11ec-b909-0242ac120002"
Show child attributes
Show child attributes
The crypto amount to be sent. Mutually exclusive with receiving_amount — provide exactly one.
"51"
The fixed fiat amount the beneficiary should receive. Mutually exclusive with sending_amount — provide exactly one. Used for remittance payouts where the recipient amount is fixed.
"5100"

