Shipping Integration APILogistics Simplified
PAB Logistics Shipping API API Documentation
Client Integration Guide

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.

CreateValidateRetrieveLabelsErrorsCarrier Guide

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.

Create Shipment

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"
    }
  }
}
Customer-facing name: UKMail service identifiers remain unchanged in the API/carrier platform for compatibility, while the Packing Station and public portal display the carrier as DHL eCommerce.
APC Example

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.

Preflight

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.

Shipment Lifecycle

Retrieve, refresh and cancel

MethodEndpointPurpose
GET/api/v1/shipmentsList recent shipments for the authenticated client.
GET/api/v1/shipments/{id}Read the current PAB shipment record.
POST/api/v1/shipments/{id}/refreshRefresh carrier allocation/tracking information.
DELETE/api/v1/shipments/{id}Cancel the carrier consignment where a carrier identifier exists.
Labels

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.

Error Model

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.

References: the client 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"
  }
}