PAB Logistics Shipping API
Public client endpoints for creating and managing shipments through PAB Logistics. Examples below follow the current canonical request schema and are intended as a starting point for ERP, WMS and OMS developers.
POSTCreate shipment
/api/v1/shipments?dryRun=false
Creates a shipment and submits the requested service, packages and advertised carrier options to the carrier platform.
POSTValidate request
/api/v1/shipments/validate
Checks the canonical request structure and client configuration without creating a carrier shipment.
GETShipment
/api/v1/shipments/{id}
Returns the PAB shipment record and current carrier/tracking state.
GETLabel
/api/v1/shipments/{id}/label
Returns the carrier label directly as application/pdf once available.
Canonical request example
Use the exact serviceId supplied for your PAB account. Package dimensions are optional, but when used, length, width and height must be supplied together. Every package must contain at least one item.
POST /api/v1/shipments?dryRun=false
X-PAB-Client: AAA111
Authorization: Bearer YOUR_PAB_API_KEY
Content-Type: application/json
{
"clientCode": "AAA111",
"source": "erp",
"sourceOrderId": "ERP-104582",
"orderReference": "WEB-104582",
"shippingDate": "2026-09-04",
"orderValue": 49.95,
"currency": "GBP",
"deliveryInstructions": "Leave with goods in",
"recipient": {
"name": "Joe Bloggs",
"companyName": "Example Retail Ltd",
"email": "customer@example.com",
"phone": "07123456789",
"address1": "10 Example Street",
"city": "Manchester",
"postcode": "M17 1AB",
"country": "GB"
},
"packages": [
{
"reference": "WEB-104582-1",
"description": "Customer order",
"weightKg": 4.5,
"lengthCm": 30,
"widthCm": 20,
"heightCm": 15,
"items": [
{
"name": "Example product",
"sku": "SKU-1001",
"quantity": 1,
"value": 49.95,
"weightKg": 4.5,
"countryOfOrigin": "GB"
}
]
}
],
"shipping": {
"serviceId": "UKMail|Next Day",
"carrierOptions": {
"Delivery Option": "Leave at safe place or sign at neighbour (YYY/Safe)",
"Pre Delivery Notification": "Not required",
"COD Amount": "0",
"Insurance Units (Each unit corresponds to £1000)": "0"
}
}
}Package type and enhancements
"packages": [{
"reference": "ORDER-1001-1",
"description": "Paint products",
"packageType": "Standard Next Day Parcel",
"weightKg": 12,
"lengthCm": 40,
"widthCm": 30,
"heightCm": 30,
"items": [{ "name": "Product", "quantity": 1 }]
}],
"shipping": {
"serviceId": "APC Overnight|Next Day By 16.00",
"carrierOptions": {
"Fragile Content": "No",
"Increased Liability": "No",
"Limited Quantity": "Yes",
"Liquid Product": "Yes",
"Own Packaging": "No",
"Saturday Delivery": "No",
"Security Consignment": "No",
"Type of Export": "None"
}
}The API passes client-requested operational values to the carrier platform. Known carrier limits are used by Packing Station as correction guidance; they do not silently rewrite the source shipment.
Validate without carrier creation
POST /api/v1/shipments/validate validates the canonical request and client/service configuration. It is useful during integration development. The create endpoint also accepts ?dryRun=true to translate without sending a live carrier shipment.
Retrieve, refresh and cancel
| Method | Endpoint | Purpose |
|---|---|---|
| GET | /api/v1/shipments | List recent shipments for the authenticated client. |
| GET | /api/v1/shipments/{id} | Read the current PAB shipment record. |
| POST | /api/v1/shipments/{id}/refresh | Refresh carrier allocation/tracking information. |
| DELETE | /api/v1/shipments/{id} | Cancel the carrier consignment where a carrier identifier exists. |
Carrier label PDF
Use GET /api/v1/shipments/{id}/label. When the carrier label is ready, the response is application/pdf. A shipment that has not yet reached a printable carrier state may return a conflict or carrier-document error instead.
Allocation errors remain visible
A syntactically valid shipment may be created successfully but remain Unallocated because the requested carrier/service/package combination is not accepted by the carrier. PAB deliberately preserves that response so the warehouse can correct the shipment in Packing Station.
orderReference is preserved exactly. If a carrier-facing reference of 20 characters or fewer is required, Packing Station asks for a separate carrierReference; the original client reference remains unchanged and searchable.{
"ok": true,
"pabShipmentId": "...",
"scurriIdentifier": "...",
"carrier": "APC Overnight",
"service": "Next Day By 16.00",
"status": {
"short_form": "Unallocated",
"status": "Label not available",
"rejection_reason": "Liquids not allowed for selected package type"
}
}