Generate Customer Invoice PDF
curl --request POST \
--url https://production-api.puppetvendors.com/documents/customer-invoice \
--header 'Content-Type: application/json' \
--header 'x-access-token: <api-key>' \
--data '
{
"orderId": "<string>",
"vendorId": "<string>"
}
'import requests
url = "https://production-api.puppetvendors.com/documents/customer-invoice"
payload = {
"orderId": "<string>",
"vendorId": "<string>"
}
headers = {
"x-access-token": "<api-key>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {'x-access-token': '<api-key>', 'Content-Type': 'application/json'},
body: JSON.stringify({orderId: '<string>', vendorId: '<string>'})
};
fetch('https://production-api.puppetvendors.com/documents/customer-invoice', 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://production-api.puppetvendors.com/documents/customer-invoice",
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([
'orderId' => '<string>',
'vendorId' => '<string>'
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json",
"x-access-token: <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://production-api.puppetvendors.com/documents/customer-invoice"
payload := strings.NewReader("{\n \"orderId\": \"<string>\",\n \"vendorId\": \"<string>\"\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("x-access-token", "<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://production-api.puppetvendors.com/documents/customer-invoice")
.header("x-access-token", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"orderId\": \"<string>\",\n \"vendorId\": \"<string>\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://production-api.puppetvendors.com/documents/customer-invoice")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["x-access-token"] = '<api-key>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"orderId\": \"<string>\",\n \"vendorId\": \"<string>\"\n}"
response = http.request(request)
puts response.read_bodyDocuments
Generate Customer Invoice PDF
Generate a customer-facing invoice PDF (S3 URL, 48h expiry)
POST
/
documents
/
customer-invoice
Generate Customer Invoice PDF
curl --request POST \
--url https://production-api.puppetvendors.com/documents/customer-invoice \
--header 'Content-Type: application/json' \
--header 'x-access-token: <api-key>' \
--data '
{
"orderId": "<string>",
"vendorId": "<string>"
}
'import requests
url = "https://production-api.puppetvendors.com/documents/customer-invoice"
payload = {
"orderId": "<string>",
"vendorId": "<string>"
}
headers = {
"x-access-token": "<api-key>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {'x-access-token': '<api-key>', 'Content-Type': 'application/json'},
body: JSON.stringify({orderId: '<string>', vendorId: '<string>'})
};
fetch('https://production-api.puppetvendors.com/documents/customer-invoice', 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://production-api.puppetvendors.com/documents/customer-invoice",
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([
'orderId' => '<string>',
'vendorId' => '<string>'
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json",
"x-access-token: <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://production-api.puppetvendors.com/documents/customer-invoice"
payload := strings.NewReader("{\n \"orderId\": \"<string>\",\n \"vendorId\": \"<string>\"\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("x-access-token", "<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://production-api.puppetvendors.com/documents/customer-invoice")
.header("x-access-token", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"orderId\": \"<string>\",\n \"vendorId\": \"<string>\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://production-api.puppetvendors.com/documents/customer-invoice")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["x-access-token"] = '<api-key>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"orderId\": \"<string>\",\n \"vendorId\": \"<string>\"\n}"
response = http.request(request)
puts response.read_bodyV2 Preview — This endpoint is part of the V2 API preview. Breaking changes may occur.
Overview
Generate a customer-facing invoice PDF. Returns an S3 URL that expires in 48 hours. Vendor tokens are scoped automatically. Merchants may omit vendor scope for a shop-level invoice, or passvendorId via query param and/or body to scope to a vendor. The query parameter takes precedence when both are supplied.
Query Parameters
string
Optional vendor ObjectId (merchants). Takes precedence over body
vendorId.Request Body
string
required
Order ObjectId.
string
Optional vendor ObjectId (merchants).
Response
200
{
"success": true,
"data": {
"url": "https://puppetvendors-pdfs.s3.amazonaws.com/customer-invoices/...",
"expiresAt": "2026-04-17T14:22:31Z"
}
}
Example
curl -X POST "https://production-api.puppetvendors.com/documents/customer-invoice" \
-H "x-access-token: YOUR_VENDOR_JWT" \
-H "Content-Type: application/json" \
-d '{ "orderId": "507f1f77bcf86cd799439014" }'
Was this page helpful?
⌘I