curl --request POST \
--url https://api-pacb-uat.eximpe.com/pg/payments/{uid}/upload-verification-details/ \
--header 'Content-Type: application/json' \
--header 'X-API-Version: <api-key>' \
--header 'X-Client-ID: <api-key>' \
--header 'X-Client-Secret: <api-key>' \
--header 'X-Merchant-ID: <api-key>' \
--data '
{
"buyer_name": "John Doe",
"type_of_goods": "GOODS",
"product_description": "Electronics and accessories",
"buyer_address": "123 Main Street, City, State",
"invoice_number": "INV-2025-001",
"buyer_postal_code": "12345",
"hs_code": "8517.12.00"
}
'import requests
url = "https://api-pacb-uat.eximpe.com/pg/payments/{uid}/upload-verification-details/"
payload = {
"buyer_name": "John Doe",
"type_of_goods": "GOODS",
"product_description": "Electronics and accessories",
"buyer_address": "123 Main Street, City, State",
"invoice_number": "INV-2025-001",
"buyer_postal_code": "12345",
"hs_code": "8517.12.00"
}
headers = {
"X-Client-ID": "<api-key>",
"X-Client-Secret": "<api-key>",
"X-Merchant-ID": "<api-key>",
"X-API-Version": "<api-key>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {
'X-Client-ID': '<api-key>',
'X-Client-Secret': '<api-key>',
'X-Merchant-ID': '<api-key>',
'X-API-Version': '<api-key>',
'Content-Type': 'application/json'
},
body: JSON.stringify({
buyer_name: 'John Doe',
type_of_goods: 'GOODS',
product_description: 'Electronics and accessories',
buyer_address: '123 Main Street, City, State',
invoice_number: 'INV-2025-001',
buyer_postal_code: '12345',
hs_code: '8517.12.00'
})
};
fetch('https://api-pacb-uat.eximpe.com/pg/payments/{uid}/upload-verification-details/', 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://api-pacb-uat.eximpe.com/pg/payments/{uid}/upload-verification-details/",
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([
'buyer_name' => 'John Doe',
'type_of_goods' => 'GOODS',
'product_description' => 'Electronics and accessories',
'buyer_address' => '123 Main Street, City, State',
'invoice_number' => 'INV-2025-001',
'buyer_postal_code' => '12345',
'hs_code' => '8517.12.00'
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json",
"X-API-Version: <api-key>",
"X-Client-ID: <api-key>",
"X-Client-Secret: <api-key>",
"X-Merchant-ID: <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://api-pacb-uat.eximpe.com/pg/payments/{uid}/upload-verification-details/"
payload := strings.NewReader("{\n \"buyer_name\": \"John Doe\",\n \"type_of_goods\": \"GOODS\",\n \"product_description\": \"Electronics and accessories\",\n \"buyer_address\": \"123 Main Street, City, State\",\n \"invoice_number\": \"INV-2025-001\",\n \"buyer_postal_code\": \"12345\",\n \"hs_code\": \"8517.12.00\"\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("X-Client-ID", "<api-key>")
req.Header.Add("X-Client-Secret", "<api-key>")
req.Header.Add("X-Merchant-ID", "<api-key>")
req.Header.Add("X-API-Version", "<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://api-pacb-uat.eximpe.com/pg/payments/{uid}/upload-verification-details/")
.header("X-Client-ID", "<api-key>")
.header("X-Client-Secret", "<api-key>")
.header("X-Merchant-ID", "<api-key>")
.header("X-API-Version", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"buyer_name\": \"John Doe\",\n \"type_of_goods\": \"GOODS\",\n \"product_description\": \"Electronics and accessories\",\n \"buyer_address\": \"123 Main Street, City, State\",\n \"invoice_number\": \"INV-2025-001\",\n \"buyer_postal_code\": \"12345\",\n \"hs_code\": \"8517.12.00\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api-pacb-uat.eximpe.com/pg/payments/{uid}/upload-verification-details/")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["X-Client-ID"] = '<api-key>'
request["X-Client-Secret"] = '<api-key>'
request["X-Merchant-ID"] = '<api-key>'
request["X-API-Version"] = '<api-key>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"buyer_name\": \"John Doe\",\n \"type_of_goods\": \"GOODS\",\n \"product_description\": \"Electronics and accessories\",\n \"buyer_address\": \"123 Main Street, City, State\",\n \"invoice_number\": \"INV-2025-001\",\n \"buyer_postal_code\": \"12345\",\n \"hs_code\": \"8517.12.00\"\n}"
response = http.request(request)
puts response.read_body{
"success": true,
"message": "Payment verification details uploaded successfully; order updated.",
"data": {
"uploaded_documents": [
{
"doc_name": "importer_name",
"doc_type": "VALUE",
"doc_status": "VERIFIED",
"remarks": null,
"added_on": null,
"last_updated_on": null
}
],
"missing_documents": [],
"errors": []
}
}{
"success": false,
"error": {
"code": "<string>",
"message": "<string>",
"details": {}
}
}{
"success": false,
"error": {
"code": "<string>",
"message": "<string>",
"details": {}
}
}{
"success": false,
"error": {
"code": "<string>",
"message": "<string>",
"details": {}
}
}{
"success": false,
"error": {
"code": "<string>",
"message": "<string>",
"details": {}
}
}Upload Payment Verification Details
Upload payment verification details for a payment and update the associated order.
curl --request POST \
--url https://api-pacb-uat.eximpe.com/pg/payments/{uid}/upload-verification-details/ \
--header 'Content-Type: application/json' \
--header 'X-API-Version: <api-key>' \
--header 'X-Client-ID: <api-key>' \
--header 'X-Client-Secret: <api-key>' \
--header 'X-Merchant-ID: <api-key>' \
--data '
{
"buyer_name": "John Doe",
"type_of_goods": "GOODS",
"product_description": "Electronics and accessories",
"buyer_address": "123 Main Street, City, State",
"invoice_number": "INV-2025-001",
"buyer_postal_code": "12345",
"hs_code": "8517.12.00"
}
'import requests
url = "https://api-pacb-uat.eximpe.com/pg/payments/{uid}/upload-verification-details/"
payload = {
"buyer_name": "John Doe",
"type_of_goods": "GOODS",
"product_description": "Electronics and accessories",
"buyer_address": "123 Main Street, City, State",
"invoice_number": "INV-2025-001",
"buyer_postal_code": "12345",
"hs_code": "8517.12.00"
}
headers = {
"X-Client-ID": "<api-key>",
"X-Client-Secret": "<api-key>",
"X-Merchant-ID": "<api-key>",
"X-API-Version": "<api-key>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {
'X-Client-ID': '<api-key>',
'X-Client-Secret': '<api-key>',
'X-Merchant-ID': '<api-key>',
'X-API-Version': '<api-key>',
'Content-Type': 'application/json'
},
body: JSON.stringify({
buyer_name: 'John Doe',
type_of_goods: 'GOODS',
product_description: 'Electronics and accessories',
buyer_address: '123 Main Street, City, State',
invoice_number: 'INV-2025-001',
buyer_postal_code: '12345',
hs_code: '8517.12.00'
})
};
fetch('https://api-pacb-uat.eximpe.com/pg/payments/{uid}/upload-verification-details/', 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://api-pacb-uat.eximpe.com/pg/payments/{uid}/upload-verification-details/",
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([
'buyer_name' => 'John Doe',
'type_of_goods' => 'GOODS',
'product_description' => 'Electronics and accessories',
'buyer_address' => '123 Main Street, City, State',
'invoice_number' => 'INV-2025-001',
'buyer_postal_code' => '12345',
'hs_code' => '8517.12.00'
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json",
"X-API-Version: <api-key>",
"X-Client-ID: <api-key>",
"X-Client-Secret: <api-key>",
"X-Merchant-ID: <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://api-pacb-uat.eximpe.com/pg/payments/{uid}/upload-verification-details/"
payload := strings.NewReader("{\n \"buyer_name\": \"John Doe\",\n \"type_of_goods\": \"GOODS\",\n \"product_description\": \"Electronics and accessories\",\n \"buyer_address\": \"123 Main Street, City, State\",\n \"invoice_number\": \"INV-2025-001\",\n \"buyer_postal_code\": \"12345\",\n \"hs_code\": \"8517.12.00\"\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("X-Client-ID", "<api-key>")
req.Header.Add("X-Client-Secret", "<api-key>")
req.Header.Add("X-Merchant-ID", "<api-key>")
req.Header.Add("X-API-Version", "<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://api-pacb-uat.eximpe.com/pg/payments/{uid}/upload-verification-details/")
.header("X-Client-ID", "<api-key>")
.header("X-Client-Secret", "<api-key>")
.header("X-Merchant-ID", "<api-key>")
.header("X-API-Version", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"buyer_name\": \"John Doe\",\n \"type_of_goods\": \"GOODS\",\n \"product_description\": \"Electronics and accessories\",\n \"buyer_address\": \"123 Main Street, City, State\",\n \"invoice_number\": \"INV-2025-001\",\n \"buyer_postal_code\": \"12345\",\n \"hs_code\": \"8517.12.00\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api-pacb-uat.eximpe.com/pg/payments/{uid}/upload-verification-details/")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["X-Client-ID"] = '<api-key>'
request["X-Client-Secret"] = '<api-key>'
request["X-Merchant-ID"] = '<api-key>'
request["X-API-Version"] = '<api-key>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"buyer_name\": \"John Doe\",\n \"type_of_goods\": \"GOODS\",\n \"product_description\": \"Electronics and accessories\",\n \"buyer_address\": \"123 Main Street, City, State\",\n \"invoice_number\": \"INV-2025-001\",\n \"buyer_postal_code\": \"12345\",\n \"hs_code\": \"8517.12.00\"\n}"
response = http.request(request)
puts response.read_body{
"success": true,
"message": "Payment verification details uploaded successfully; order updated.",
"data": {
"uploaded_documents": [
{
"doc_name": "importer_name",
"doc_type": "VALUE",
"doc_status": "VERIFIED",
"remarks": null,
"added_on": null,
"last_updated_on": null
}
],
"missing_documents": [],
"errors": []
}
}{
"success": false,
"error": {
"code": "<string>",
"message": "<string>",
"details": {}
}
}{
"success": false,
"error": {
"code": "<string>",
"message": "<string>",
"details": {}
}
}{
"success": false,
"error": {
"code": "<string>",
"message": "<string>",
"details": {}
}
}{
"success": false,
"error": {
"code": "<string>",
"message": "<string>",
"details": {}
}
}Overview
The Upload Payment Verification Details endpoint allows you to upload payment verification details for a payment. This updates the associated order with the provided information and uploads the verification details to the payment gateway. Use this endpoint when you receive a PAYMENT_DETAILS_MISSING webhook and need to supply missing verification fields.Test Data
When testing this API in the sandbox environment, you must use the following specific test values for the API to work correctly:- buyer_name:
John - buyer_postal_code:
560034 - product_description:
This is a test product for test purpose.
📚 Test Data Reference
Authorizations
Client Application ID - Your unique application identifier used to authenticate API requests. You can find your Client ID in the Developer Settings section of the merchant dashboard.
Client Secret Key - Your secret key used alongside the Client ID for secure authentication. Keep this confidential and never expose it in client-side code. Available in the Developer Settings section of the merchant dashboard.
Merchant Identifier - The unique ID for the merchant account. This is required for PSP (Payment Service Provider) merchants who manage multiple merchant accounts. You can find merchant IDs in the Merchant Management section of the dashboard.
API Version - Specifies which version of the API to use (e.g., '1.X.X', '2.X.X', or '3.X.X'). This header allows you to control which API version your integration uses. Default version information is available in the Developer Settings.
Path Parameters
UID of the payment for which to upload verification details.
Body
Verification details for the payment's order. Every request rewrites the order's verification fields rather than patching them — a field left out is cleared — so send the complete set on each call. purpose_code and business_model are NOT accepted here: send them together in fields on POST /pg/payments/{payment_id}/verification/.
Name of the buyer/importer.
255Type of goods.
GOODS, PHYSICAL_GOODS, DIGITAL_GOODS, SERVICE Description of the product/goods.
Invoice number.
255Buyer's postal/ZIP code.
10Buyer's address. Accepted but not enforced. This request replaces the order's verification fields rather than patching them, so omitting it clears any address already on the order.
HS code of the goods. Required only when type_of_goods is PHYSICAL_GOODS; optional for GOODS, DIGITAL_GOODS and SERVICE.
30Response
Payment verification details uploaded successfully; order updated.
Relayed from the payment gateway, so the entries vary by rail: production Cashfree returns the gateway's own document records (shown here), while the sandbox SIMULATOR gateway returns plain order-field names as strings. Read the payment's state from the VERIFICATION_NEEDED webhook or Get Verification Requirements rather than from these arrays.
Show child attributes
Show child attributes