EN
Sign up

Template library

Packing slip PDF templates for your orders

Choose a packing slip, add your branding, and connect each order’s data. Present items, quantities, and fulfillment notes in a document that travels inside the package.

03designs available
06categories

3 templates

Prepare every order

A clear packing slip for packing and receiving

Organize what the warehouse needs to check and what the customer should find inside the package.

Order and recipient

Connect the order reference, shipping date, and delivery name and address. Keep the reference visible on orders spanning several pages.

Items and quantities

Use a dynamic table for SKUs, descriptions, and quantities. For partial shipments, distinguish the quantity ordered from the quantity packed in this shipment.

Fulfillment notes

Add packing instructions, observations, and a reference for the team that prepared the parcel.

Print layout

Adjust the page size, margins, and branding. Test a short order and one with many items before publishing.

From order to packing slip

  1. Copy a design

    Open a packing slip on this page and save a copy in your team’s project.

  2. Connect the items

    Bind the address and reference to your data and configure the table rows for the order’s items.

  3. Publish and generate

    Publish your copy and generate a packing slip per shipment from the app or with your template ID in the API.

Your data, your layout

Example data for a packing slip

This order has two items with ordered and packed quantities. Adapt the example to the references and fields in your own system.

The order fields are illustrative: each design may use a different schema. Match the names to “Schema & default data” in your copy and replace template_id with your published template’s ID.

Download packing-slip-request.json Understand data field bindings
packing-slip-request.json
{
  "template_id": "YOUR_PUBLISHED_TEMPLATE_ID",
  "expiry_minutes": 60,
  "data": {
    "order": {
      "number": "ORD-2048",
      "ship_date": "2026-10-30",
      "recipient": {
        "name": "Alex Morgan",
        "address": "18 Example Street",
        "city": "Portland",
        "postal_code": "97201",
        "country": "US"
      },
      "items": [
        {
          "sku": "MUG-01",
          "description": "Ceramic mug",
          "ordered_quantity": 2,
          "packed_quantity": 2
        },
        {
          "sku": "TOTE-02",
          "description": "Canvas tote",
          "ordered_quantity": 1,
          "packed_quantity": 1
        }
      ],
      "instructions": "Pack fragile items separately.",
      "packed_by": "Warehouse team"
    }
  }
}

From template to PDF

Generate a packing slip with the API

Save the file as packing-slip-request.json, replace the template ID, and adapt its data. Create an API token with documents:create and documents:read and access to that template. Run these commands from your terminal or server.

1. Submit the order data

POST /v1/documents
export SHIPPDF_API_TOKEN='YOUR_API_TOKEN'

curl --fail-with-body https://api.shippdf.com/v1/documents \
  -H "Authorization: Bearer $SHIPPDF_API_TOKEN" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: packing-ORD-2048" \
  --data-binary @packing-slip-request.json

A successful request uses one generation credit and returns HTTP 202 with a queued document. Keep the token out of browser code. Reuse the idempotency key only when retrying the same request; use a new one for a different document.

Example response · HTTP 202{"id":"doc_example","status":"queued","pdf_url":null}

2. Check the document and open the PDF

GET /v1/documents/{document_id}
export SHIPPDF_DOCUMENT_ID='YOUR_RETURNED_DOCUMENT_ID'

curl --fail-with-body \
  "https://api.shippdf.com/v1/documents/$SHIPPDF_DOCUMENT_ID" \
  -H "Authorization: Bearer $SHIPPDF_API_TOKEN"

Use the actual ID from your response. If the status is queued or processing, wait before checking again. When it is completed, open the returned pdf_url. If it is failed, inspect failure before generating again.

Example response when complete{"id":"doc_example","status":"completed","expiry_minutes":60,"pdf_url":"https://…/document.pdf"}

The example sets expiry_minutes: 60 for one-hour download links. Read the same document again to get a fresh link without generating another PDF.

Packing slip questions

Can I show orders with many items?

Yes. Configure a dynamic table and test page breaks with a long order. Check references, headers, and quantities in the preview.

Does a packing slip need to show prices?

The layout is editable. Choose the columns your workflow needs: SKUs, descriptions, and quantities may be enough, and you can add prices when needed.

How do I represent a partial shipment?

Send ordered and packed quantities as separate fields and display them in the table. The template presents your data; it does not update your inventory.

Is a packing slip a shipping label?

They are different documents. A packing slip describes the order’s contents. Use an address-label template on the outside and obtain postage from your carrier.

Complete your fulfillment workflow

Prepare your next order’s packing slip

Choose a design, connect your items, and preview the document before publishing.

Back to packing slip designs
← Explore all templates