Business

Packing slip PDF generator API

An order packing slip with ship-to, SKUs and ordered vs shipped quantities — one for every parcel.

Just need one? Fill it in and download it free

Put an accurate packing slip in every box. Pass the order, the ship-to and bill-to addresses and the line items, and PDFgen renders a slip showing what was ordered and what is in this shipment — including backordered items.

Pair it with the shipping label template to print everything a parcel needs from one order record.

Generate a Packing Slip PDF via the API

POST your data to /api/v1/generate and get a PDF back. Copy-paste an example, swap in your API key, and loop over a list to render thousands — one packing slip per record.

curl -X POST https://pdfgen.com/api/v1/generate \
-H "Authorization: Bearer pdfg_live_xxx" \
-H "Content-Type: application/json" \
-d '{
"data": {
"store": {
"name": "Bloom & Co.",
"address": "210 Alder Street\nPortland, OR 97204"
},
"orderNumber": "#10482",
"orderDate": "2026-10-20",
"shipDate": "2026-10-22",
"shippingMethod": "USPS Priority Mail",
"shipTo": {
"name": "Alex Carter",
"address": "742 Evergreen Terrace\nPortland, OR 97201"
},
"billTo": {
"name": "Alex Carter",
"address": "742 Evergreen Terrace\nPortland, OR 97201"
},
"items": [
{
"sku": "BC-CND-014",
"name": "Soy candle, fig & cedar",
"ordered": 2,
"shipped": 2
},
{
"sku": "BC-MUG-002",
"name": "Stoneware mug, sage",
"ordered": 1,
"shipped": 1
},
{
"sku": "BC-TEA-120",
"name": "Loose-leaf tea sampler",
"ordered": 1,
"shipped": 0
}
],
"totalShipped": 3,
"note": "The tea sampler is backordered and will ship separately at no extra cost."
},
"format": "A4",
"engine": "handlebars",
"html": "<div style=\"max-width:760px;margin:0 auto;padding:48px;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica,Arial,sans-serif;color:#111827;\">\n <div style=\"display:flex;justify-content:space-between;align-items:flex-start;margin-bottom:32px;\">\n <div>\n {{#if logo}}<img src=\"{{logo}}\" alt=\"\" style=\"display:block;max-width:200px;max-height:56px;margin:0 0 10px;\">{{/if}}\n <h1 style=\"font-size:22px;font-weight:800;margin:0;\">{{store.name}}</h1>\n <p style=\"margin:4px 0 0;font-size:12px;color:#6b7280;white-space:pre-line;\">{{store.address}}</p>\n </div>\n <div style=\"text-align:right;\">\n <h2 style=\"font-size:24px;letter-spacing:2px;margin:0;font-weight:800;color:#ea580c;\">PACKING SLIP</h2>\n <p style=\"margin:6px 0 0;font-size:13px;color:#6b7280;\">Order {{orderNumber}}</p>\n <p style=\"margin:2px 0 0;font-size:12px;color:#6b7280;\">Ordered {{formatDate orderDate}} &middot; Shipped {{formatDate shipDate}}</p>\n </div>\n </div>\n <div style=\"display:flex;gap:16px;margin-bottom:24px;\">\n <div style=\"flex:1;border:1px solid #e5e7eb;border-radius:8px;padding:14px;\">\n <p style=\"font-size:11px;text-transform:uppercase;letter-spacing:1.5px;color:#9ca3af;font-weight:700;margin:0 0 8px;\">Ship to</p>\n <p style=\"margin:0;font-weight:700;\">{{shipTo.name}}</p>\n <p style=\"margin:2px 0 0;font-size:13px;color:#6b7280;white-space:pre-line;\">{{shipTo.address}}</p>\n </div>\n <div style=\"flex:1;border:1px solid #e5e7eb;border-radius:8px;padding:14px;\">\n <p style=\"font-size:11px;text-transform:uppercase;letter-spacing:1.5px;color:#9ca3af;font-weight:700;margin:0 0 8px;\">Bill to</p>\n <p style=\"margin:0;font-weight:700;\">{{billTo.name}}</p>\n <p style=\"margin:2px 0 0;font-size:13px;color:#6b7280;white-space:pre-line;\">{{billTo.address}}</p>\n </div>\n <div style=\"width:170px;border:1px solid #e5e7eb;border-radius:8px;padding:14px;\">\n <p style=\"font-size:11px;text-transform:uppercase;letter-spacing:1.5px;color:#9ca3af;font-weight:700;margin:0 0 8px;\">Shipping</p>\n <p style=\"margin:0;font-size:13px;font-weight:600;\">{{shippingMethod}}</p>\n </div>\n </div>\n <table style=\"width:100%;border-collapse:collapse;font-size:13px;\">\n <thead>\n <tr style=\"background:#fff7ed;text-align:left;\">\n <th style=\"padding:10px 12px;border-bottom:1px solid #fed7aa;\">SKU</th>\n <th style=\"padding:10px 12px;border-bottom:1px solid #fed7aa;\">Item</th>\n <th style=\"padding:10px 12px;border-bottom:1px solid #fed7aa;text-align:center;\">Ordered</th>\n <th style=\"padding:10px 12px;border-bottom:1px solid #fed7aa;text-align:center;\">Shipped</th>\n </tr>\n </thead>\n <tbody>\n {{#each items}}\n <tr>\n <td style=\"padding:10px 12px;border-bottom:1px solid #f3f4f6;font-family:monospace;color:#6b7280;\">{{sku}}</td>\n <td style=\"padding:10px 12px;border-bottom:1px solid #f3f4f6;\">{{name}}</td>\n <td style=\"padding:10px 12px;border-bottom:1px solid #f3f4f6;text-align:center;\">{{ordered}}</td>\n <td style=\"padding:10px 12px;border-bottom:1px solid #f3f4f6;text-align:center;font-weight:700;\">{{shipped}}</td>\n </tr>\n {{/each}}\n </tbody>\n </table>\n <p style=\"margin:14px 0 0;font-size:13px;text-align:right;\">Items in this shipment: <strong>{{totalShipped}}</strong></p>\n {{#if note}}<p style=\"margin:20px 0 0;font-size:13px;background:#f9fafb;border-left:3px solid #ea580c;padding:10px 14px;color:#374151;\">{{note}}</p>{{/if}}\n <div style=\"display:flex;gap:40px;margin-top:48px;font-size:12px;color:#6b7280;\">\n <span style=\"flex:1;border-top:1px solid #9ca3af;padding-top:4px;\">Packed by</span>\n <span style=\"flex:1;border-top:1px solid #9ca3af;padding-top:4px;\">Checked by</span>\n </div>\n</div>"
}' --output packing-slip.pdf

Working in another language? Follow a full guide for your stack:

What you can build

  • Printing a slip automatically when an order is marked as fulfilled
  • Showing partial shipments and backorders clearly
  • Warehouses batch-printing slips for the day’s orders
  • Marketplaces generating slips for many sellers

Frequently asked questions

Can I trigger packing slips from Shopify or WooCommerce?
Yes — use an order webhook or a Zapier / Make step to call /api/v1/generate with the order data, then print or store the PDF.
Does it show prices?
Packing slips usually leave prices off. If you want them, ask the AI to add unit price and total columns.
How are backorders shown?
Each line has ordered and shipped quantities, and an optional note explains anything shipping separately.

Related templates

Ship your packing slip PDF endpoint today

Generate this template with AI, tweak it to match your brand, then render at scale with a single API call — no headless browsers to babysit.