Upload Document
curl --request POST \
--url https://api-staging.eximpe.com/pg/orders/{order_id}/documents/ \
--header 'Content-Type: multipart/form-data' \
--header 'X-Client-ID: <api-key>' \
--header 'X-Client-Secret: <api-key>' \
--form identifier=IN1123213 \
--form document_type=invoice \
--form file='@example-file'import requests
url = "https://api-staging.eximpe.com/pg/orders/{order_id}/documents/"
files = { "file": ("example-file", open("example-file", "rb")) }
payload = {
"identifier": "IN1123213",
"document_type": "invoice"
}
headers = {
"X-Client-ID": "<api-key>",
"X-Client-Secret": "<api-key>"
}
response = requests.post(url, data=payload, files=files, headers=headers)
print(response.text)const form = new FormData();
form.append('identifier', 'IN1123213');
form.append('document_type', 'invoice');
form.append('file', 'your-invoice.pdf');
const options = {
method: 'POST',
headers: {'X-Client-ID': '<api-key>', 'X-Client-Secret': '<api-key>'}
};
options.body = form;
fetch('https://api-staging.eximpe.com/pg/orders/{order_id}/documents/', 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-staging.eximpe.com/pg/orders/{order_id}/documents/",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => "-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"identifier\"\r\n\r\nIN1123213\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"document_type\"\r\n\r\ninvoice\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"file\"; filename=\"example-file\"\r\nContent-Type: application/octet-stream\r\n\r\nyour-invoice.pdf\r\n-----011000010111000001101001--",
CURLOPT_HTTPHEADER => [
"Content-Type: multipart/form-data",
"X-Client-ID: <api-key>",
"X-Client-Secret: <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-staging.eximpe.com/pg/orders/{order_id}/documents/"
payload := strings.NewReader("-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"identifier\"\r\n\r\nIN1123213\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"document_type\"\r\n\r\ninvoice\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"file\"; filename=\"example-file\"\r\nContent-Type: application/octet-stream\r\n\r\nyour-invoice.pdf\r\n-----011000010111000001101001--")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("X-Client-ID", "<api-key>")
req.Header.Add("X-Client-Secret", "<api-key>")
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-staging.eximpe.com/pg/orders/{order_id}/documents/")
.header("X-Client-ID", "<api-key>")
.header("X-Client-Secret", "<api-key>")
.body("-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"identifier\"\r\n\r\nIN1123213\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"document_type\"\r\n\r\ninvoice\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"file\"; filename=\"example-file\"\r\nContent-Type: application/octet-stream\r\n\r\nyour-invoice.pdf\r\n-----011000010111000001101001--")
.asString();require 'uri'
require 'net/http'
url = URI("https://api-staging.eximpe.com/pg/orders/{order_id}/documents/")
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.body = "-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"identifier\"\r\n\r\nIN1123213\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"document_type\"\r\n\r\ninvoice\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"file\"; filename=\"example-file\"\r\nContent-Type: application/octet-stream\r\n\r\nyour-invoice.pdf\r\n-----011000010111000001101001--"
response = http.request(request)
puts response.read_body{
"success": true,
"message": "Documents uploaded successfully",
"data": {
"order_id": "OD9411897512",
"reference_id": "TEST_FOB46D",
"amount": 1000,
"currency": "INR",
"mop_type": "UPI",
"buyer": {
"name": "John Doe",
"email": "john.doe@example.com",
"phone": "+919876543210",
"address": {
"line_1": "123 Main Street",
"line_2": "Apt 4B",
"city": "City",
"state": "State",
"postal_code": "123456"
},
"pan_number": "BNYPG9212K",
"dob": "2010-01-23"
},
"product": {
"name": "Sample Product",
"description": "This is a sample product description",
"hs_code": "98051000",
"hs_code_description": "Portable automatic data processing machines",
"type_of_goods": "goods"
},
"invoice": {
"number": "IN1123213",
"date": "2025-06-22",
"file": "https://eximpe.com/inv-12312312.pdf"
},
"air_waybills": [
{
"number": "AWB-23343",
"file": "https://eximpe.com/awb-8F3F51D2.pdf"
}
],
"payments": [
{
"payment_id": "PR1469384681",
"mop_type": "UPI",
"status": "captured",
"status_message": null,
"settlement": {
"status": "ready_for_settlement",
"message": null,
"settlement_details": null
},
"created_at": "2025-06-23T10:44:14.344135Z"
}
],
"status": "payment_successful",
"status_message": "Payment captured successfully",
"created_at": "2025-06-23T10:44:11.702363Z"
}
}{
"success": true,
"error": {
"code": "<string>",
"message": "<string>",
"details": {}
}
}{
"success": true,
"error": {
"code": "<string>",
"message": "<string>",
"details": {}
}
}{
"success": true,
"error": {
"code": "<string>",
"message": "<string>",
"details": {}
}
}Order
Upload Invoice
Upload an invoice or other document for an existing order.
POST
/
pg
/
orders
/
{order_id}
/
documents
/
Upload Document
curl --request POST \
--url https://api-staging.eximpe.com/pg/orders/{order_id}/documents/ \
--header 'Content-Type: multipart/form-data' \
--header 'X-Client-ID: <api-key>' \
--header 'X-Client-Secret: <api-key>' \
--form identifier=IN1123213 \
--form document_type=invoice \
--form file='@example-file'import requests
url = "https://api-staging.eximpe.com/pg/orders/{order_id}/documents/"
files = { "file": ("example-file", open("example-file", "rb")) }
payload = {
"identifier": "IN1123213",
"document_type": "invoice"
}
headers = {
"X-Client-ID": "<api-key>",
"X-Client-Secret": "<api-key>"
}
response = requests.post(url, data=payload, files=files, headers=headers)
print(response.text)const form = new FormData();
form.append('identifier', 'IN1123213');
form.append('document_type', 'invoice');
form.append('file', 'your-invoice.pdf');
const options = {
method: 'POST',
headers: {'X-Client-ID': '<api-key>', 'X-Client-Secret': '<api-key>'}
};
options.body = form;
fetch('https://api-staging.eximpe.com/pg/orders/{order_id}/documents/', 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-staging.eximpe.com/pg/orders/{order_id}/documents/",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => "-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"identifier\"\r\n\r\nIN1123213\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"document_type\"\r\n\r\ninvoice\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"file\"; filename=\"example-file\"\r\nContent-Type: application/octet-stream\r\n\r\nyour-invoice.pdf\r\n-----011000010111000001101001--",
CURLOPT_HTTPHEADER => [
"Content-Type: multipart/form-data",
"X-Client-ID: <api-key>",
"X-Client-Secret: <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-staging.eximpe.com/pg/orders/{order_id}/documents/"
payload := strings.NewReader("-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"identifier\"\r\n\r\nIN1123213\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"document_type\"\r\n\r\ninvoice\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"file\"; filename=\"example-file\"\r\nContent-Type: application/octet-stream\r\n\r\nyour-invoice.pdf\r\n-----011000010111000001101001--")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("X-Client-ID", "<api-key>")
req.Header.Add("X-Client-Secret", "<api-key>")
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-staging.eximpe.com/pg/orders/{order_id}/documents/")
.header("X-Client-ID", "<api-key>")
.header("X-Client-Secret", "<api-key>")
.body("-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"identifier\"\r\n\r\nIN1123213\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"document_type\"\r\n\r\ninvoice\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"file\"; filename=\"example-file\"\r\nContent-Type: application/octet-stream\r\n\r\nyour-invoice.pdf\r\n-----011000010111000001101001--")
.asString();require 'uri'
require 'net/http'
url = URI("https://api-staging.eximpe.com/pg/orders/{order_id}/documents/")
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.body = "-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"identifier\"\r\n\r\nIN1123213\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"document_type\"\r\n\r\ninvoice\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"file\"; filename=\"example-file\"\r\nContent-Type: application/octet-stream\r\n\r\nyour-invoice.pdf\r\n-----011000010111000001101001--"
response = http.request(request)
puts response.read_body{
"success": true,
"message": "Documents uploaded successfully",
"data": {
"order_id": "OD9411897512",
"reference_id": "TEST_FOB46D",
"amount": 1000,
"currency": "INR",
"mop_type": "UPI",
"buyer": {
"name": "John Doe",
"email": "john.doe@example.com",
"phone": "+919876543210",
"address": {
"line_1": "123 Main Street",
"line_2": "Apt 4B",
"city": "City",
"state": "State",
"postal_code": "123456"
},
"pan_number": "BNYPG9212K",
"dob": "2010-01-23"
},
"product": {
"name": "Sample Product",
"description": "This is a sample product description",
"hs_code": "98051000",
"hs_code_description": "Portable automatic data processing machines",
"type_of_goods": "goods"
},
"invoice": {
"number": "IN1123213",
"date": "2025-06-22",
"file": "https://eximpe.com/inv-12312312.pdf"
},
"air_waybills": [
{
"number": "AWB-23343",
"file": "https://eximpe.com/awb-8F3F51D2.pdf"
}
],
"payments": [
{
"payment_id": "PR1469384681",
"mop_type": "UPI",
"status": "captured",
"status_message": null,
"settlement": {
"status": "ready_for_settlement",
"message": null,
"settlement_details": null
},
"created_at": "2025-06-23T10:44:14.344135Z"
}
],
"status": "payment_successful",
"status_message": "Payment captured successfully",
"created_at": "2025-06-23T10:44:11.702363Z"
}
}{
"success": true,
"error": {
"code": "<string>",
"message": "<string>",
"details": {}
}
}{
"success": true,
"error": {
"code": "<string>",
"message": "<string>",
"details": {}
}
}{
"success": true,
"error": {
"code": "<string>",
"message": "<string>",
"details": {}
}
}Overview
The Upload Invoice endpoint is used to attach required documents to an order after it has been created. This is crucial for compliance and record-keeping. The request must be sent asmultipart/form-data.
This endpoint allows you to upload a document (like an invoice or air waybill), associated with an existing order.Authorizations
Client app ID. You can find your app id in the merchant dashboard.
Client secret key. You can find your secret in the merchant dashboard.
Path Parameters
Unique identifier of the order
Body
multipart/form-data
Document upload request. The body must be multipart/form-data.
⌘I