Packing Slip

POST/v1/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

HeaderValueRequired
AuthorizationBearer YOUR_API_KEYYes
Content-Typeapplication/jsonYes

Request Body

json
{
"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

FieldTypeRequiredDescription
packing_slip_numberstringYesUnique identifier (e.g. "PS-001")
datestringYesShip date (e.g. "2026-03-10")
order_numberstringYesCustomer order reference (e.g. "ORD-4521")
fromobjectYesWarehouse/sender info
from.namestringYesWarehouse or company name
from.addressstringNoWarehouse address
toobjectYesRecipient info
to.namestringYesRecipient name
to.addressstringNoShipping address
itemsarrayYesItems in the shipment (at least 1)
items[].descriptionstringYesItem description
items[].quantitynumberYesQuantity (must be > 0)
items[].skustringNoProduct SKU code
items[].weightstringNoItem weight (e.g. "0.5 kg")
items[].unit_pricenumberNoUnit price (only shown if show_prices is true)
show_pricesbooleanNoShow price columns. Default: false
currencystringNoCurrency code. Only used if show_prices is true. Default: "USD"
shipping_methodstringNoCarrier/method (e.g. "FedEx Ground")
tracking_numberstringNoShipment tracking number
directionstringNoText direction: "ltr" (default) or "rtl" for Arabic/Hebrew
languagestringNoLanguage hint: "ar", "he", "fa", etc. Optional metadata
notesstringNoSpecial instructions, gift message, return policy

Full Example

bash
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
javascript
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:

json
{
"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:

json
{
"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:

bash
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 SlipInvoice
PurposeVerify shipment contentsRequest payment
PricesHidden by defaultAlways shown
TaxNeverSupported
Key fieldsSKU, weight, trackingDue date, currency
To fieldRequired (ship-to)Required (bill-to)
Included inPhysical packageEmail / billing system

Response

Success (200)

  • Content-Type: application/pdf
  • Body: PDF binary data

Errors

StatusBody
400{ "error": "packing_slip_number is required" }
401{ "error": "Invalid API key" }
429{ "error": "Monthly limit reached. Please upgrade." }

All Six Endpoints

DocumentEndpointKey Fields
InvoicePOST /v1/invoiceinvoice_number, issue_date, due_date
ReceiptPOST /v1/receiptreceipt_number, date, payment_method, transaction_id
QuotePOST /v1/quotequote_number, date, expiry_date, title
Credit NotePOST /v1/credit-notecredit_note_number, date, invoice_number, reason
Packing SlipPOST /v1/packing-slippacking_slip_number, date, order_number, shipping_method, tracking_number
TimesheetPOST /v1/timesheettimesheet_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

Every generated PDF is automatically stored and gets a shareable URL. Check the X-Kagyz-Document-URL response header. Learn more →