Template gallery / packing-slip
packing-slip
Letter-size packing slip: order and ship-to blocks, ordered / shipped / backordered quantities per line, carton manifest, and a returns note. No prices by default. Table headers repeat across pages.
chromium default PDF 18 top-level fields 1 unit per page
Fields
The full JSON Schema is below. Required fields are marked; anything missing comes back as a 422 naming the path, the expected type and a value that would be accepted.
| Field | Type | Required | Description |
|---|---|---|---|
| order_number | string | required | |
| shipment_number | string | optional | This shipment, when an order ships in more than one. |
| purchase_order | string | optional | |
| ordered_on | string (date) | optional | |
| shipped_on | string (date) | optional | |
| carrier | string | optional | |
| service | string | optional | |
| tracking_number | string | optional | |
| shipped_from | string | optional | |
| accent | string | optional | |
| notice | string | optional | |
| returns_policy | string | optional | |
| backorder_note | string | optional | |
| shipper | object { name, address, email, phone, … } | required | |
| ship_to | object { name, company, address, phone } | required | |
| bill_to | object { name, address, email } | optional | Defaults to ship_to. |
| line_items | array of object { sku, description, detail, carton, … } | required | |
| cartons | array of object { number, weight, dimensions, tracking_number } | optional |
Default render options
Applied unless you override them. Options are part of the cache key.
| page_size | "Letter" |
| margin | "0.5in" |
| print_background | true |
Example payload
This exact object renders the preview above. It is also what the API echoes back in a validation error, so an agent can repair a payload without a round trip to the docs.
{
"order_number": "SO-44120",
"shipment_number": "SHP-44120-1",
"purchase_order": "PO-24118",
"ordered_on": "2026-09-11",
"shipped_on": "2026-09-16",
"carrier": "Atlantic Freight",
"service": "2-Day Air",
"tracking_number": "1Z999AA10123456784",
"shipped_from": "Jacksonville DC",
"shipper": {
"name": "Galley Supply Co.",
"address": "2727 Jean Lafitte Dr, Fernandina Beach, FL 32034",
"email": "orders@galleysupply.test",
"phone": "(904) 555-0110"
},
"ship_to": {
"name": "Lena Ortiz",
"company": "Acme Robotics",
"address": "100 Market St, Floor 9, Dock B, Austin, TX 78701",
"phone": "(512) 555-0163"
},
"bill_to": {
"name": "Acme Robotics — Accounts Payable",
"address": "PO Box 2211, Austin, TX 78767",
"email": "ap@acme.test"
},
"line_items": [
{
"sku": "TIL-3060-MW",
"description": "Matte white wall tile, 3x6",
"detail": "Dye lot 22-A. 12 pcs per carton.",
"carton": "1–3",
"quantity_ordered": 46,
"quantity_shipped": 46
},
{
"sku": "TIL-1212-HEX",
"description": "Hex mosaic floor tile, 12x12 sheet",
"carton": "4",
"quantity_ordered": 62,
"quantity_shipped": 62
},
{
"sku": "SET-MOD-50",
"description": "Modified thin-set mortar, 50 lb",
"carton": "5",
"quantity_ordered": 14,
"quantity_shipped": 14
},
{
"sku": "GRT-URE-9",
"description": "Urethane grout, Delorean Gray, 9 lb",
"detail": "Two pails held at the DC — colour batch pending.",
"carton": "5",
"quantity_ordered": 6,
"quantity_shipped": 4
},
{
"sku": "MEM-UNC-323",
"description": "Uncoupling membrane, 323 sq ft roll",
"carton": "6",
"quantity_ordered": 1,
"quantity_shipped": 1
},
{
"sku": "VAN-3621-OAK",
"description": "White oak vanity, 36 in., undermount cut",
"detail": "Ships separately from the millwork shop.",
"quantity_ordered": 1,
"quantity_shipped": 0
},
{
"sku": "TOP-QTZ-3722",
"description": "Quartz vanity top, 37x22, eased edge",
"carton": "7",
"quantity_ordered": 1,
"quantity_shipped": 1
}
],
"cartons": [
{
"number": "1",
"weight": "41.0 lb",
"dimensions": "18 x 14 x 10 in",
"tracking_number": "1Z999AA10123456784"
},
{
"number": "2",
"weight": "41.0 lb",
"dimensions": "18 x 14 x 10 in",
"tracking_number": "1Z999AA10123456785"
},
{
"number": "3",
"weight": "38.4 lb",
"dimensions": "18 x 14 x 10 in",
"tracking_number": "1Z999AA10123456786"
},
{
"number": "4",
"weight": "52.6 lb",
"dimensions": "16 x 16 x 12 in",
"tracking_number": "1Z999AA10123456787"
},
{
"number": "5",
"weight": "76.2 lb",
"dimensions": "20 x 16 x 14 in",
"tracking_number": "1Z999AA10123456788"
},
{
"number": "6",
"weight": "29.5 lb",
"dimensions": "44 x 6 x 6 in",
"tracking_number": "1Z999AA10123456789"
},
{
"number": "7",
"weight": "88.0 lb",
"dimensions": "40 x 26 x 6 in",
"tracking_number": "1Z999AA10123456790"
}
],
"notice": "Inspect all cartons before signing. Note any visible damage on the carrier's delivery receipt; concealed damage must be reported within 5 business days.",
"returns_policy": "Returns accepted within 30 days in original packaging. Start a return at galleysupply.test/returns with the order number above. Tile is non-returnable once a carton is opened."
} Render it
curl -sS https://api.galleyrender.com/v1/render \
-H "Authorization: Bearer $GALLEY_API_KEY" \
-H 'content-type: application/json' \
-d '{
"template": "packing-slip@1",
"format": "pdf",
"data": "… the example payload above …"
}' # No API key. The first call mints a 50-render trial.
curl -sS https://mcp.galleyrender.com/mcp \
-H 'content-type: application/json' \
-H 'accept: application/json, text/event-stream' \
-d '{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "render",
"arguments": {
"template": "packing-slip",
"format": "pdf",
"data": { … see the example payload above … }
}
}
}'
Pin the version — packing-slip@1 — in anything you ship. Publishing a new
version never changes an old one. Render endpoint reference →
Renders the example payload on the production service. No account, no key.
JSON Schema
schema.json (18 top-level properties)
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"title": "Packing slip",
"type": "object",
"required": [
"order_number",
"shipper",
"ship_to",
"line_items"
],
"additionalProperties": true,
"properties": {
"order_number": {
"type": "string",
"examples": [
"SO-44120"
]
},
"shipment_number": {
"type": "string",
"description": "This shipment, when an order ships in more than one.",
"examples": [
"SHP-44120-1"
]
},
"purchase_order": {
"type": "string",
"examples": [
"PO-24118"
]
},
"ordered_on": {
"type": "string",
"format": "date",
"examples": [
"2026-09-11"
]
},
"shipped_on": {
"type": "string",
"format": "date",
"examples": [
"2026-09-16"
]
},
"carrier": {
"type": "string",
"examples": [
"Atlantic Freight"
]
},
"service": {
"type": "string",
"examples": [
"2-Day Air"
]
},
"tracking_number": {
"type": "string",
"examples": [
"1Z999AA10123456784"
]
},
"shipped_from": {
"type": "string",
"examples": [
"Jacksonville DC"
]
},
"accent": {
"type": "string",
"examples": [
"#334155"
]
},
"notice": {
"type": "string",
"examples": [
"Inspect all cartons before signing. Note any visible damage on the carrier's delivery receipt; concealed damage must be reported within 5 business days."
]
},
"returns_policy": {
"type": "string",
"examples": [
"Returns accepted within 30 days in original packaging. Start a return at galleysupply.test/returns with the order number above. Tile is non-returnable once a carton is opened."
]
},
"backorder_note": {
"type": "string",
"examples": [
"Backordered items ship at no additional freight charge as soon as stock arrives."
]
},
"shipper": {
"type": "object",
"required": [
"name"
],
"properties": {
"name": {
"type": "string",
"examples": [
"Galley Supply Co."
]
},
"address": {
"type": "string",
"examples": [
"2727 Jean Lafitte Dr, Fernandina Beach, FL 32034"
]
},
"email": {
"type": "string",
"format": "email",
"examples": [
"orders@galleysupply.test"
]
},
"phone": {
"type": "string",
"examples": [
"(904) 555-0110"
]
},
"logo_url": {
"type": "string",
"format": "uri",
"examples": [
"https://example.com/logo.png"
]
}
}
},
"ship_to": {
"type": "object",
"required": [
"name"
],
"properties": {
"name": {
"type": "string",
"examples": [
"Lena Ortiz"
]
},
"company": {
"type": "string",
"examples": [
"Acme Robotics"
]
},
"address": {
"type": "string",
"examples": [
"100 Market St, Floor 9, Dock B, Austin, TX 78701"
]
},
"phone": {
"type": "string",
"examples": [
"(512) 555-0163"
]
}
}
},
"bill_to": {
"type": "object",
"description": "Defaults to ship_to.",
"properties": {
"name": {
"type": "string",
"examples": [
"Acme Robotics — Accounts Payable"
]
},
"address": {
"type": "string",
"examples": [
"PO Box 2211, Austin, TX 78767"
]
},
"email": {
"type": "string",
"format": "email",
"examples": [
"ap@acme.test"
]
}
}
},
"line_items": {
"type": "array",
"minItems": 1,
"items": {
"type": "object",
"required": [
"description",
"quantity_ordered"
],
"properties": {
"sku": {
"type": "string",
"examples": [
"TIL-3060-MW"
]
},
"description": {
"type": "string",
"examples": [
"Matte white wall tile, 3x6"
]
},
"detail": {
"type": "string",
"examples": [
"Dye lot 22-A. 12 pcs per carton."
]
},
"carton": {
"type": "string",
"description": "Which carton the line is packed in.",
"examples": [
"1–3"
]
},
"quantity_ordered": {
"type": "number",
"minimum": 0,
"examples": [
46
]
},
"quantity_shipped": {
"type": "number",
"minimum": 0,
"description": "Anything short of ordered prints as backordered.",
"examples": [
46
]
}
}
}
},
"cartons": {
"type": "array",
"items": {
"type": "object",
"required": [
"number"
],
"properties": {
"number": {
"type": "string",
"examples": [
"1"
]
},
"weight": {
"type": "string",
"examples": [
"41.0 lb"
]
},
"dimensions": {
"type": "string",
"examples": [
"18 x 14 x 10 in"
]
},
"tracking_number": {
"type": "string",
"examples": [
"1Z999AA10123456784"
]
}
}
}
}
}
}