Packing Slip
Generate packing slips for e-commerce shipments as PDF with a single API call. Includes SKU support, shipping info, and optional pricing.
Headers
| Header | Value | Required |
|---|---|---|
Authorization | Bearer YOUR_API_KEY | Yes |
Content-Type | application/json | Yes |
Request Body
{"packing_slip_number": "PS-001","date": "2026-03-10","order_number": "ORD-4521","shipping_method": "FedEx Ground","tracking_number": "794644790132","from": {"name": "Acme Warehouse","address": "500 Fulfillment Way\nPhoenix, AZ 85001"},"to": {"name": "Sarah Johnson","address": "742 Evergreen Terrace\nSpringfield, IL 62704"},"items": [{"description": "Classic Blue T-Shirt (Large)","quantity": 2,"sku": "BLU-TSHIRT-L","weight": "0.3 kg"},{"description": "Running Shoes — Black/White","quantity": 1,"sku": "RUN-SHOE-BW-42","weight": "0.8 kg"},{"description": "Water Bottle 750ml","quantity": 3,"sku": "WTR-BTL-750","weight": "0.4 kg"}],"notes": "Handle with care. Returns accepted within 30 days."}
Fields
| Field | Type | Required | Description |
|---|---|---|---|
packing_slip_number | string | Yes | Unique identifier (e.g. "PS-001") |
date | string | Yes | Ship date (e.g. "2026-03-10") |
order_number | string | Yes | Customer order reference (e.g. "ORD-4521") |
from | object | Yes | Warehouse/sender info |
from.name | string | Yes | Warehouse or company name |
from.address | string | No | Warehouse address |
to | object | Yes | Recipient info |
to.name | string | Yes | Recipient name |
to.address | string | No | Shipping address |
items | array | Yes | Items in the shipment (at least 1) |
items[].description | string | Yes | Item description |
items[].quantity | number | Yes | Quantity (must be > 0) |
items[].sku | string | No | Product SKU code |
items[].weight | string | No | Item weight (e.g. "0.5 kg") |
items[].unit_price | number | No | Unit price (only shown if show_prices is true) |
show_prices | boolean | No | Show price columns. Default: false |
currency | string | No | Currency code. Only used if show_prices is true. Default: "USD" |
shipping_method | string | No | Carrier/method (e.g. "FedEx Ground") |
tracking_number | string | No | Shipment tracking number |
direction | string | No | Text direction: "ltr" (default) or "rtl" for Arabic/Hebrew |
language | string | No | Language hint: "ar", "he", "fa", etc. Optional metadata |
notes | string | No | Special instructions, gift message, return policy |
Full Example
curl -X POST https://api.kagyz.com/v1/packing-slip \-H "Authorization: Bearer YOUR_API_KEY" \-H "Content-Type: application/json" \-d '{"packing_slip_number": "PS-001","date": "2026-03-10","order_number": "ORD-4521","shipping_method": "FedEx Ground","tracking_number": "794644790132","from": {"name": "Acme Warehouse","address": "500 Fulfillment Way\nPhoenix, AZ 85001"},"to": {"name": "Sarah Johnson","address": "742 Evergreen Terrace\nSpringfield, IL 62704"},"items": [{"description": "Classic Blue T-Shirt (Large)","quantity": 2,"sku": "BLU-TSHIRT-L","weight": "0.3 kg"},{"description": "Running Shoes — Black/White","quantity": 1,"sku": "RUN-SHOE-BW-42","weight": "0.8 kg"},{"description": "Water Bottle 750ml","quantity": 3,"sku": "WTR-BTL-750","weight": "0.4 kg"}],"notes": "Handle with care. Returns accepted within 30 days."}' \--output packing-slip.pdf
const response = await fetch('https://api.kagyz.com/v1/packing-slip', {method: 'POST',headers: {'Authorization': 'Bearer YOUR_API_KEY','Content-Type': 'application/json'},body: JSON.stringify({packing_slip_number: 'PS-001',date: '2026-03-10',order_number: 'ORD-4521',shipping_method: 'FedEx Ground',tracking_number: '794644790132',from: {name: 'Acme Warehouse',address: '500 Fulfillment Way\nPhoenix, AZ 85001'},to: {name: 'Sarah Johnson',address: '742 Evergreen Terrace\nSpringfield, IL 62704'},items: [{ description: 'Classic Blue T-Shirt (Large)', quantity: 2, sku: 'BLU-TSHIRT-L', weight: '0.3 kg' },{ description: 'Running Shoes — Black/White', quantity: 1, sku: 'RUN-SHOE-BW-42', weight: '0.8 kg' },{ description: 'Water Bottle 750ml', quantity: 3, sku: 'WTR-BTL-750', weight: '0.4 kg' }],notes: 'Handle with care. Returns accepted within 30 days.'})});const blob = await response.blob();// Save or send the PDF
Showing Prices
By default, packing slips don't show prices — they're fulfillment documents, not financial ones. To include pricing, set show_prices to true:
{"show_prices": true,"currency": "EUR","items": [{ "description": "Wireless Keyboard", "quantity": 1, "sku": "KB-01", "unit_price": 49.99 },{ "description": "USB-C Cable", "quantity": 3, "sku": "USB-C-2M", "unit_price": 9.99 }]}
When show_prices is true, the table adds Unit Price and Amount columns, and the total shows a monetary value instead of an item count.
SKU and Weight
Both sku and weight are optional per item. The columns only appear if at least one item has that field:
- If no items have
sku— SKU column is hidden - If no items have
weight— Weight column is hidden - If items have neither — table shows just Description and Qty
Shipping Info
Add shipping_method and tracking_number to show carrier and tracking details on the PDF:
{"shipping_method": "FedEx Ground","tracking_number": "794644790132"}
Both are optional. They appear in the info section next to the date and order number.
Minimal Example
Only required fields — no SKUs, no weights, no shipping info, no prices:
curl -X POST https://api.kagyz.com/v1/packing-slip \-H "Authorization: Bearer YOUR_API_KEY" \-H "Content-Type: application/json" \-d '{"packing_slip_number": "PS-003","date": "2026-03-10","order_number": "ORD-4523","from": { "name": "Quick Ship LLC" },"to": { "name": "John Doe" },"items": [{ "description": "Package Contents", "quantity": 1 }]}' \--output packing-slip.pdf
Packing Slip vs Invoice
| Packing Slip | Invoice | |
|---|---|---|
| Purpose | Verify shipment contents | Request payment |
| Prices | Hidden by default | Always shown |
| Tax | Never | Supported |
| Key fields | SKU, weight, tracking | Due date, currency |
| To field | Required (ship-to) | Required (bill-to) |
| Included in | Physical package | Email / billing system |
Response
Success (200)
- Content-Type:
application/pdf - Body: PDF binary data
Errors
| Status | Body |
|---|---|
400 | { "error": "packing_slip_number is required" } |
401 | { "error": "Invalid API key" } |
429 | { "error": "Monthly limit reached. Please upgrade." } |
All Six Endpoints
| Document | Endpoint | Key Fields |
|---|---|---|
| Invoice | POST /v1/invoice | invoice_number, issue_date, due_date |
| Receipt | POST /v1/receipt | receipt_number, date, payment_method, transaction_id |
| Quote | POST /v1/quote | quote_number, date, expiry_date, title |
| Credit Note | POST /v1/credit-note | credit_note_number, date, invoice_number, reason |
| Packing Slip | POST /v1/packing-slip | packing_slip_number, date, order_number, shipping_method, tracking_number |
| Timesheet | POST /v1/timesheet | timesheet_number, date, hourly_rate, period |
Need a billing document instead? See the Invoice API →
Send this document via email → See Email Delivery
Supports Arabic & RTL → See docs
X-Kagyz-Document-URL response header. Learn more →