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

Rendered preview of the price-sheet template
Rendered by Galley from the example payload below, at 816px wide , scale 2.

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.

example.jsonjson
{
  "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

With an API keyshell
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 …"
}'
With no API key, over MCPshell
# 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 →

Try a free tool

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."
        ]
      ]
    }
  }
}