DocMake
The PDF DocMake makes from the Price List template

The first page of the document DocMake makes from the sample values on this page.

Sales

Price List

A price list is what a buyer asks for before they are ready for a quote. It carries the catalog, the unit each price applies to, and the two dates that keep it honest: when the prices took effect and when they stop being valid.

Without a validity window an old copy circulates for years and someone eventually quotes it back at renewal. With one, the document retires itself.

Volume tiers deserve their own rows rather than a footnote. Somebody comparing 50 units against 500 should be able to read the answer instead of calculating it.

Segments usually get their own version: a partner list, a retail list, an internal cost sheet. Because the catalog is data and the price is just another column, one template renders all three from three payloads, and a price change means a new render rather than an edited PDF.

Blanks to fill

list_name Price list name
currency Currency
effective_date Prices from
valid_until Prices until
company_name Company
company_address Company address
customer_segment Who this list is for
price_includes What the price includes
price_excludes What the price does not include
payment_terms Payment terms
delivery_terms Delivery terms
price_notes Notes on pricing
contact_name Sales contact
contact_email Contact email
contact_phone Contact telephone
products[] One per item, so a row is added for every item in the list
volume_discounts[] One per item, so a row is added for every item in the list

The data behind the preview

This is the exact JSON that produced the document above. Change the values, POST them to the API, and you get your version back as DOCX or PDF. Lists grow and shrink with your data; the layout adapts.

  1. 01 Sign up free and duplicate this template into your workspace.
  2. 02 Adjust the wording and branding in the visual editor.
  3. 03 Fill it in the app, share it as a form link, or call the API.
sample-data.json
{
  "company_name": "Thornbury Coffee Roasters",
  "company_address": "Mill Yard, Stroud GL5 2HP",
  "list_name": "Wholesale price list, autumn 2026",
  "customer_segment": "Cafes and independent shops",
  "currency": "US dollars",
  "effective_date": "September 1, 2026",
  "valid_until": "February 28, 2027",
  "products": [
    {
      "item_code": "TCR-ETH1",
      "item": "Ethiopia Guji",
      "description": "Washed, peach and jasmine. For filter.",
      "unit": "1 kg bag",
      "unit_price": "$27.40",
      "minimum_order": "6 bags"
    },
    {
      "item_code": "TCR-BRZ2",
      "item": "Brazil Cerrado",
      "description": "Natural, cocoa and hazelnut. For espresso.",
      "unit": "1 kg bag",
      "unit_price": "$21.80",
      "minimum_order": "6 bags"
    },
    {
      "item_code": "TCR-HSE5",
      "item": "House blend",
      "description": "The everyday espresso, five origins.",
      "unit": "5 kg box",
      "unit_price": "$96.00",
      "minimum_order": "2 boxes"
    },
    {
      "item_code": "TCR-DEC1",
      "item": "Decaf Colombia",
      "description": "Sugarcane process, no solvents.",
      "unit": "1 kg bag",
      "unit_price": "$29.60",
      "minimum_order": "4 bags"
    },
    {
      "item_code": "TCR-FLT2",
      "item": "Filter papers",
      "description": "Size two, unbleached, 100 a pack.",
      "unit": "pack",
      "unit_price": "$4.20",
      "minimum_order": "10 packs"
    }
  ],
  "volume_discounts": [
    {
      "tier": "Tier one",
      "from_quantity": "25 kg a month",
      "discount": "4%"
    },
    {
      "tier": "Tier two",
      "from_quantity": "60 kg a month",
      "discount": "8%"
    },
    {
      "tier": "Tier three",
      "from_quantity": "120 kg a month",
      "discount": "12%"
    }
  ],
  "price_includes": "Roasting to order, bags labelled with your own shop name, and delivery on our van inside the county.",
  "price_excludes": "Sales tax, pallet delivery outside the county, and any grinder or brewing equipment.",
  "payment_terms": "30 days from the invoice date. The first three orders are paid before the van leaves.",
  "delivery_terms": "We roast on Monday and Thursday and deliver the next morning. An order placed after 15:00 goes on the following run.",
  "price_notes": "Green coffee for this list is bought in advance, so these prices hold to the date above even when the market moves.",
  "contact_name": "Marek Sobczyk",
  "contact_email": "wholesale@thornburycoffee.example",
  "contact_phone": "01453 555 0108"
}

Generate this document via the API

One template plus changing data is the whole point. The list of blanks above is the contract, and every new set of values comes back in the same layout: fill it in the app, hand someone a form link, or POST the JSON and get the file straight back.

The request below carries this page's own values, so it runs as soon as the template exists in your workspace. Swap the values for yours and the response is your document.

make-price-list.sh
curl -X POST https://app.docmake.io/api/v1/render \
  -H "Authorization: Bearer $DOCMAKE_API_KEY" \
  -H "Content-Type: application/json" \
  -H "Accept: application/json" \
  --output price-list.pdf \
  --data-binary @- <<'JSON'
{
  "template_id": "tmpl_your_template_id",
  "format": "pdf",
  "data": {
    "company_name": "Thornbury Coffee Roasters",
    "company_address": "Mill Yard, Stroud GL5 2HP",
    "list_name": "Wholesale price list, autumn 2026",
    "customer_segment": "Cafes and independent shops",
    "currency": "US dollars",
    "effective_date": "September 1, 2026",
    "valid_until": "February 28, 2027",
    "products": [
      {
        "item_code": "TCR-ETH1",
        "item": "Ethiopia Guji",
        "description": "Washed, peach and jasmine. For filter.",
        "unit": "1 kg bag",
        "unit_price": "$27.40",
        "minimum_order": "6 bags"
      },
      {
        "item_code": "TCR-BRZ2",
        "item": "Brazil Cerrado",
        "description": "Natural, cocoa and hazelnut. For espresso.",
        "unit": "1 kg bag",
        "unit_price": "$21.80",
        "minimum_order": "6 bags"
      },
      {
        "item_code": "TCR-HSE5",
        "item": "House blend",
        "description": "The everyday espresso, five origins.",
        "unit": "5 kg box",
        "unit_price": "$96.00",
        "minimum_order": "2 boxes"
      },
      {
        "item_code": "TCR-DEC1",
        "item": "Decaf Colombia",
        "description": "Sugarcane process, no solvents.",
        "unit": "1 kg bag",
        "unit_price": "$29.60",
        "minimum_order": "4 bags"
      },
      {
        "item_code": "TCR-FLT2",
        "item": "Filter papers",
        "description": "Size two, unbleached, 100 a pack.",
        "unit": "pack",
        "unit_price": "$4.20",
        "minimum_order": "10 packs"
      }
    ],
    "volume_discounts": [
      {
        "tier": "Tier one",
        "from_quantity": "25 kg a month",
        "discount": "4%"
      },
      {
        "tier": "Tier two",
        "from_quantity": "60 kg a month",
        "discount": "8%"
      },
      {
        "tier": "Tier three",
        "from_quantity": "120 kg a month",
        "discount": "12%"
      }
    ],
    "price_includes": "Roasting to order, bags labelled with your own shop name, and delivery on our van inside the county.",
    "price_excludes": "Sales tax, pallet delivery outside the county, and any grinder or brewing equipment.",
    "payment_terms": "30 days from the invoice date. The first three orders are paid before the van leaves.",
    "delivery_terms": "We roast on Monday and Thursday and deliver the next morning. An order placed after 15:00 goes on the following run.",
    "price_notes": "Green coffee for this list is bought in advance, so these prices hold to the date above even when the market moves.",
    "contact_name": "Marek Sobczyk",
    "contact_email": "wholesale@thornburycoffee.example",
    "contact_phone": "01453 555 0108"
  }
}
JSON

tmpl_your_template_id is a stand-in: build this template in the visual editor and copy the id it shows, or create one with POST /api/v1/templates. Keys, formats, strict mode and batches are in the API reference.

Or let an AI assistant do it

The DocMake MCP server lets Claude and other assistants make this document the same way. Install it once:

claude mcp add docmake \
  --env DOCMAKE_API_KEY=dm_your_api_key \
  -- npx -y @docmake/mcp@latest

Then ask for the document in plain words:

Make a PDF from my Price List template with price list name "Wholesale price list, autumn 2026" and currency "US dollars".

How the MCP server works →

More sales templates