Generate delivery notes from HTML, in one API call
packing slip PDF API
A delivery note — or packing slip — ships in the box and tells the warehouse and the customer exactly what is inside. Render an itemised, branded slip with quantities and the shipping address from your order data in one call, ready to print into fulfilment.
No credit card · 25 free credits to start
OVERVIEW
What is the packing slip PDF API?
The packing slip PDF API is an HTTP endpoint that renders a branded delivery note from HTML in one request. You POST the shipment data as JSON to /v1/render — SKUs, item names, quantities and the shipping address, with no prices — and get a print-ready PDF back in about 400ms, ready to print straight into fulfilment.
A delivery note — or packing slip — is the document that travels in the box. It tells the warehouse what to pick and the customer what to check off on arrival, so it lists SKUs, item names and quantities against the shipping address. Crucially it leaves the money out: a packing slip carries no prices, subtotals or VAT, because it ships with the goods and is about contents, not the bill. That is the one rule that separates it from the invoice and the order confirmation.
Generating packing slips from HTML keeps them warehouse-ready and on-brand without a separate tool. You design the slip once as HTML and CSS — a clean, scannable layout with a ship-to block and a picked-items table of SKU, name and quantity — and let the order data fill it in. The item list is the only repeating part: because the merge engine is loop-free, you render the rows to HTML yourself and drop them in through one raw {{{ itemsHtml }}} placeholder, with the order number and address as ordinary {{ placeholders }}.
A render is a single synchronous call of roughly 400 milliseconds, so you generate the slip in the same flow that creates the shipment — POST the data to /v1/render and the PDF comes back ready to print, with no queue or polling to keep up with fulfilment volume. Drive it from the same order data as the order confirmation and the invoice so the documents for one order stay in sync — just omit the pricing on the slip. Nothing is stored on our side; the bytes are streamed back and discarded.
THE PROBLEM
Generating delivery notes in-house is a two-week project you'll maintain forever
Turning HTML into a clean PDF yourself means running headless Chrome and everything around it. Here's the work you skip.
- Generating warehouse-ready slips from a PDF library that does not match your brand.
- Laying out quantities, SKUs and a shipping-address block by hand for every order.
- Running a render service that has to keep up with fulfilment volume.
- Keeping the packing slip in sync with the order confirmation and invoice.
THE SOLUTION
From your data to a finished delivery note, in one request
Store your delivery notes layout once, then POST the values to /v1/render and get print-ready application/pdfbytes back in roughly 400ms. Merge is plain{{ }} /{{{ }}} and dotted keys — no template loops to learn, so repeating rows are rendered to HTML and dropped in through one raw placeholder.
- Warehouse-ready. SKUs, quantities and a shipping-address block in a clean, printable layout your team can pick from.
- Branded like everything else. Your logo and colours on the slip that ships in the box — your own HTML, no library defaults.
- One call per shipment. Generate the slip in the same flow that creates the shipment — no queue, no polling.
curl https://api.pdfinvoiceapi.com/v1/render \
-H "Authorization: Bearer sk_live_..." \
-H "Content-Type: application/json" \
-d '{
"template": "tpl_delivery_note",
"data": {
"orderNo": "ORD-58210",
"shipTo": { "name": "Priya Raman", "address": "12 Harbour St, Bristol BS1 4RW" },
"itemsHtml": "<tr><td>SKU-KB1</td><td>Mechanical keyboard</td><td>1</td></tr><tr><td>SKU-WR1</td><td>Wrist rest</td><td>1</td></tr>"
},
"pdf": { "format": "A4", "margin": "16mm", "printBackground": true }
}' \
-o delivery-note.pdfHOW TO
How to generate delivery notes from HTML
- 01
Design the packing slip in HTML
Build the slip as plain HTML and CSS — order number, a ship-to address block, and a picked-items table of SKU, name and quantity. Mark the dynamic values with {{ placeholders }} and leave prices off; a packing slip carries no money.
- 02
Store it once as a template
Save the layout in the dashboard for a tpl_ id. Every slip is then just shipment data, so the look stays consistent across every order your warehouse picks.
- 03
POST the shipment data to /v1/render
In the flow that creates the shipment, send the template id and a JSON data object with your API key. Render the picked items to HTML rows — SKU, name, quantity — and pass them through one raw {{{ itemsHtml }}} placeholder.
- 04
Stream the PDF back
The response body is the packing slip PDF, ready to print straight into fulfilment or attach to a shipping workflow — generated in the same request that created the shipment.
WHAT YOU GET
The features that matter for delivery notes
Warehouse-ready
SKUs, quantities and a shipping-address block in a clean, printable layout your team can pick from.
Branded like everything else
Your logo and colours on the slip that ships in the box — your own HTML, no library defaults.
One call per shipment
Generate the slip in the same flow that creates the shipment — no queue, no polling.
FAQ
Delivery notes on PDFInvoiceAPI — common questions
- How do I generate a packing slip PDF from HTML?
- Design the slip as HTML/CSS with {{ placeholders }}, store it once as a template, then POST the template id and a JSON data object to /v1/render. You get application/pdf bytes back in one synchronous call — no SDK to install and no browser to run yourself.
- Can I leave prices off the delivery note?
- Yes — and you should. A packing slip is about contents, not the bill, so you simply omit price, subtotal and VAT from the data and HTML. List SKU, item name and quantity against the shipping address; the renderer prints exactly what your template contains.
- How do I render the picked-items list?
- Because the merge engine is loop-free, you render the item rows to HTML yourself — SKU, name, quantity — join them into one string, and drop them in through a single raw {{{ itemsHtml }}} placeholder. A long pick list flows onto extra pages as needed.
- Can the slip stay in sync with the order confirmation and invoice?
- Yes. Drive the packing slip, the order confirmation and the invoice from the same order data — just omit the pricing on the slip — so every document for one order matches, in your own HTML/CSS.
- Can I use my own logo, fonts and brand colours?
- Always — the PDF is your own HTML/CSS, so the slip that ships in the box carries your brand, not a library default. Drive the logo and accent colour from data, or save a brand kit and {{brand.logo}} / {{brand.color}} fill in automatically.
- Are my delivery notes stored on your servers?
- No. Each slip is streamed back in the response and discarded — the content is processed transiently and never persisted on our side.
RELATED
Same API, more documents
The render call that makes delivery notes makes these too — one endpoint for everything your product hands a customer.
Render your first delivery note PDF in the next five minutes
One endpoint, real PDFs, 25 free credits to start. No credit card to begin.
Cancel anytime · no long-term contract