Template gallery / price-sheet
price-sheet
Multi-page wholesale price list: effective dates, tiered break pricing, category groups, MOQ and lead time per line, and terms. Column headers repeat on every page.
chromium default PDF 14 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 |
|---|---|---|---|
| title | string | optional | |
| list_number | string | optional | |
| effective_from | string (date) | required | |
| effective_to | string (date) | optional | |
| customer_tier | string | optional | Which tier this copy of the sheet is priced for. |
| currency | string | optional | |
| payment_terms | string | optional | |
| freight_terms | string | optional | |
| minimum_order | string | optional | |
| accent | string | optional | |
| company | object { name, address, email, phone, … } | required | |
| breaks | array of object { label } | required | Quantity break columns, left to right. Each item's `prices` array lines up with these. |
| categories | array of object { name, note, items } | required | |
| terms | array of string | 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.
{
"title": "Wholesale price sheet",
"list_number": "PL-2026-04",
"effective_from": "2026-10-01",
"effective_to": "2027-03-31",
"customer_tier": "Contractor A",
"currency": "USD",
"payment_terms": "Net 30, 2% 10",
"freight_terms": "FOB origin, prepaid over $2,500",
"minimum_order": "$500 or 1 pallet",
"accent": "#1e3a5f",
"company": {
"name": "Atlantic Building Supply",
"address": "1440 Industrial Blvd, Jacksonville, FL 32254",
"email": "orders@atlanticsupply.test",
"phone": "(904) 555-0133",
"website": "atlanticsupply.test"
},
"breaks": [
{
"label": "1–9"
},
{
"label": "10–49"
},
{
"label": "50–199"
},
{
"label": "200+"
}
],
"categories": [
{
"name": "Wall tile",
"note": "dye lots guaranteed within a single purchase order",
"items": [
{
"sku": "TIL-3060-MW",
"name": "Matte white wall tile, 3x6",
"uom": "CTN",
"moq": "10",
"lead_time": "3 d",
"prices": [
38.4,
35.9,
33.22,
30.72
],
"detail": "12 pcs per carton, 10.7 sq ft"
},
{
"sku": "TIL-3060-GL",
"name": "Gloss white wall tile, 3x6",
"uom": "CTN",
"moq": "10",
"lead_time": "3 d",
"prices": [
36.8,
34.41,
31.83,
29.44
],
"detail": "12 pcs per carton, 10.7 sq ft"
},
{
"sku": "TIL-4080-SG",
"name": "Sage green zellige, 4x8",
"uom": "CTN",
"moq": "6",
"lead_time": "12 d",
"prices": [
71.5,
66.85,
61.85,
57.2
],
"detail": "8 pcs per carton, 9.2 sq ft",
"is_new": true
},
{
"sku": "TIL-2448-LS",
"name": "Limestone look porcelain, 24x48",
"uom": "CTN",
"moq": "4",
"lead_time": "9 d",
"prices": [
118,
110.33,
102.07,
94.4
],
"detail": "2 pcs per carton, 16 sq ft"
},
{
"sku": "TIL-1224-CB",
"name": "Charcoal basalt, 12x24",
"uom": "CTN",
"moq": "8",
"lead_time": "6 d",
"prices": [
64.2,
60.03,
55.53,
51.36
],
"detail": "6 pcs per carton, 12 sq ft"
}
]
},
{
"name": "Floor and mosaic",
"items": [
{
"sku": "TIL-1212-HEX",
"name": "Hex mosaic floor tile, 12x12 sheet",
"uom": "SHT",
"moq": "20",
"lead_time": "3 d",
"prices": [
11.25,
10.52,
9.73,
9
]
},
{
"sku": "TIL-1212-PEN",
"name": "Penny round mosaic, 12x12 sheet",
"uom": "SHT",
"moq": "20",
"lead_time": "3 d",
"prices": [
13.6,
12.72,
11.76,
10.88
]
},
{
"sku": "TIL-1212-BSK",
"name": "Basketweave marble, 12x12 sheet",
"uom": "SHT",
"moq": "12",
"lead_time": "15 d",
"prices": [
28.9,
27.02,
25,
23.12
],
"detail": "Carrara and Thassos"
},
{
"sku": "TIL-0606-QRY",
"name": "Quarry tile, 6x6, unglazed",
"uom": "CTN",
"moq": "6",
"lead_time": "5 d",
"prices": [
52.4,
48.99,
45.33,
41.92
],
"detail": "44 pcs per carton"
}
]
},
{
"name": "Setting materials",
"items": [
{
"sku": "SET-MOD-50",
"name": "Modified thin-set mortar, 50 lb",
"uom": "BAG",
"moq": "20",
"lead_time": "2 d",
"prices": [
22.8,
21.32,
19.72,
18.24
],
"detail": "White and grey"
},
{
"sku": "SET-LFT-50",
"name": "Large format thin-set, 50 lb",
"uom": "BAG",
"moq": "20",
"lead_time": "2 d",
"prices": [
27.1,
25.34,
23.44,
21.68
]
},
{
"sku": "GRT-URE-9",
"name": "Urethane grout, 9 lb",
"uom": "PAL",
"moq": "6",
"lead_time": "4 d",
"prices": [
64.5,
60.31,
55.79,
51.6
],
"detail": "28 stock colours"
},
{
"sku": "GRT-CEM-25",
"name": "Cement grout, sanded, 25 lb",
"uom": "BAG",
"moq": "10",
"lead_time": "2 d",
"prices": [
19.4,
18.14,
16.78,
15.52
]
},
{
"sku": "MEM-UNC-323",
"name": "Uncoupling membrane, 323 sq ft roll",
"uom": "ROL",
"moq": "2",
"lead_time": "4 d",
"prices": [
289,
270.22,
249.98,
231.2
]
},
{
"sku": "MEM-UNC-054",
"name": "Uncoupling membrane, 54 sq ft roll",
"uom": "ROL",
"moq": "4",
"lead_time": "4 d",
"prices": [
58.75,
54.93,
50.82,
47
]
},
{
"sku": "WPF-LIQ-1G",
"name": "Liquid waterproofing, 1 gal",
"uom": "EA",
"moq": "6",
"lead_time": "3 d",
"prices": [
78.2,
73.12,
67.64,
62.56
]
}
]
},
{
"name": "Trim and transitions",
"items": [
{
"sku": "BND-EDG-SCH",
"name": "Schluter edge trim, satin anodized, 8 ft",
"uom": "EA",
"moq": "10",
"lead_time": "5 d",
"prices": [
27.9,
26.09,
24.13,
22.32
]
},
{
"sku": "BND-EDG-BRS",
"name": "Brushed brass edge trim, 8 ft",
"uom": "EA",
"moq": "10",
"lead_time": "18 d",
"prices": [
44.6,
41.7,
38.58,
35.68
],
"is_new": true
},
{
"sku": "BND-STR-SCH",
"name": "Stair nosing profile, 8 ft",
"uom": "EA",
"moq": "10",
"lead_time": "5 d",
"prices": [
51.3,
47.97,
44.37,
41.04
]
},
{
"sku": "BND-COV-SCH",
"name": "Cove base profile, 8 ft",
"uom": "EA",
"moq": "10",
"lead_time": "7 d",
"prices": [
33.1,
30.95,
28.63,
26.48
]
}
]
},
{
"name": "Vanities and tops",
"items": [
{
"sku": "VAN-3621-OAK",
"name": "White oak vanity, 36 in., undermount cut",
"uom": "EA",
"moq": "1",
"lead_time": "21 d",
"prices": [
1145,
1070.58,
990.42,
916
],
"detail": "Soft-close, factory finished"
},
{
"sku": "VAN-4821-OAK",
"name": "White oak vanity, 48 in., double cut",
"uom": "EA",
"moq": "1",
"lead_time": "21 d",
"prices": [
1485,
1388.48,
1284.53,
1188
]
},
{
"sku": "TOP-QTZ-3722",
"name": "Quartz vanity top, 37x22, eased edge",
"uom": "EA",
"moq": "1",
"lead_time": "14 d",
"prices": [
640,
598.4,
553.6,
512
]
},
{
"sku": "TOP-QTZ-4922",
"name": "Quartz vanity top, 49x22, eased edge",
"uom": "EA",
"moq": "1",
"lead_time": "14 d",
"prices": [
795,
743.33,
687.67,
636
]
},
{
"sku": "TOP-MAR-3722",
"name": "Carrara marble top, 37x22",
"uom": "EA",
"moq": "1",
"lead_time": "24 d",
"prices": [
905,
846.18,
782.83,
724
]
}
]
},
{
"name": "Tools and consumables",
"items": [
{
"sku": "TLS-TRW-14",
"name": "Notched trowel, 1/4 x 3/8 in.",
"uom": "EA",
"moq": "5",
"lead_time": "2 d",
"prices": [
21.4,
20.01,
18.51,
17.12
]
},
{
"sku": "TLS-LVL-100",
"name": "Levelling clip system, 100 ct",
"uom": "BOX",
"moq": "4",
"lead_time": "2 d",
"prices": [
34.9,
32.63,
30.19,
27.92
]
},
{
"sku": "TLS-SPG-12",
"name": "Hydro sponge, 12 ct",
"uom": "BOX",
"moq": "4",
"lead_time": "2 d",
"prices": [
28.6,
26.74,
24.74,
22.88
]
},
{
"sku": "TLS-BLD-10",
"name": "Continuous rim blade, 10 in.",
"uom": "EA",
"moq": "2",
"lead_time": "4 d",
"prices": [
96,
89.76,
83.04,
76.8
]
},
{
"sku": "CON-SEL-1G",
"name": "Penetrating sealer, 1 gal",
"uom": "EA",
"moq": "4",
"lead_time": "3 d",
"prices": [
84.5,
79.01,
73.09,
67.6
]
}
]
}
],
"terms": [
"Prices are subject to change with 30 days' written notice. Orders already acknowledged are honoured at the acknowledged price.",
"Quantity breaks apply per SKU per shipment, not per order. Mixed-SKU pallets do not combine for break pricing.",
"Lead times are working days from receipt of a signed acknowledgement and are not guaranteed during the December shutdown.",
"Tile is sold by full carton only. Partial cartons are billed at the 1–9 price plus a 15% break-pack fee.",
"Claims for shortage or visible damage must be noted on the delivery receipt at the time of delivery.",
"Returns require an RMA and are subject to a 20% restocking fee. Special order and cut-to-size items are non-returnable."
]
} Render it
curl -sS https://api.galleyrender.com/v1/render \
-H "Authorization: Bearer $GALLEY_API_KEY" \
-H 'content-type: application/json' \
-d '{
"template": "price-sheet@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": "price-sheet",
"format": "pdf",
"data": { … see the example payload above … }
}
}
}'
Pin the version — price-sheet@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 (14 top-level properties)
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"title": "Price sheet",
"type": "object",
"required": [
"company",
"effective_from",
"breaks",
"categories"
],
"additionalProperties": true,
"properties": {
"title": {
"type": "string",
"default": "Wholesale price sheet",
"examples": [
"Wholesale price sheet"
]
},
"list_number": {
"type": "string",
"examples": [
"PL-2026-04"
]
},
"effective_from": {
"type": "string",
"format": "date",
"examples": [
"2026-10-01"
]
},
"effective_to": {
"type": "string",
"format": "date",
"examples": [
"2027-03-31"
]
},
"customer_tier": {
"type": "string",
"description": "Which tier this copy of the sheet is priced for.",
"examples": [
"Contractor A"
]
},
"currency": {
"type": "string",
"default": "USD",
"examples": [
"USD"
]
},
"payment_terms": {
"type": "string",
"default": "Net 30",
"examples": [
"Net 30"
]
},
"freight_terms": {
"type": "string",
"default": "FOB origin",
"examples": [
"FOB origin, prepaid over $2,500"
]
},
"minimum_order": {
"type": "string",
"examples": [
"$500 or 1 pallet"
]
},
"accent": {
"type": "string",
"examples": [
"#1e3a5f"
]
},
"company": {
"type": "object",
"required": [
"name"
],
"properties": {
"name": {
"type": "string",
"examples": [
"Atlantic Building Supply"
]
},
"address": {
"type": "string",
"examples": [
"1440 Industrial Blvd, Jacksonville, FL 32254"
]
},
"email": {
"type": "string",
"format": "email",
"examples": [
"orders@atlanticsupply.test"
]
},
"phone": {
"type": "string",
"examples": [
"(904) 555-0133"
]
},
"website": {
"type": "string",
"examples": [
"atlanticsupply.test"
]
},
"logo_url": {
"type": "string",
"format": "uri",
"examples": [
"https://example.com/logo.png"
]
}
}
},
"breaks": {
"type": "array",
"minItems": 1,
"description": "Quantity break columns, left to right. Each item's `prices` array lines up with these.",
"items": {
"type": "object",
"required": [
"label"
],
"properties": {
"label": {
"type": "string",
"examples": [
"1–9"
]
}
}
}
},
"categories": {
"type": "array",
"minItems": 1,
"items": {
"type": "object",
"required": [
"name",
"items"
],
"properties": {
"name": {
"type": "string",
"examples": [
"Wall tile"
]
},
"note": {
"type": "string",
"examples": [
"dye lots guaranteed within a single PO"
]
},
"items": {
"type": "array",
"items": {
"type": "object",
"required": [
"sku",
"name",
"prices"
],
"properties": {
"sku": {
"type": "string",
"examples": [
"TIL-3060-MW"
]
},
"name": {
"type": "string",
"examples": [
"Matte white wall tile, 3x6"
]
},
"detail": {
"type": "string",
"examples": [
"12 pcs per carton, 10.7 sq ft"
]
},
"uom": {
"type": "string",
"default": "EA",
"examples": [
"CTN"
]
},
"moq": {
"type": "string",
"examples": [
"10"
]
},
"lead_time": {
"type": "string",
"examples": [
"3 d"
]
},
"is_new": {
"type": "boolean",
"default": false,
"examples": [
true
]
},
"prices": {
"type": "array",
"description": "One price per break column, in order.",
"items": {
"type": "number",
"minimum": 0,
"examples": [
38.4
]
},
"examples": [
[
38.4,
35.9,
33.2
]
]
}
}
}
}
}
}
},
"terms": {
"type": "array",
"items": {
"type": "string",
"examples": [
"Prices are subject to change with 30 days' written notice."
]
},
"examples": [
[
"Prices are subject to change with 30 days' written notice."
]
]
}
}
}