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 freePut 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}} · 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.