DataShift
FreightAPI Reference

Pickups | Freight API

Freight API reference for pickups: book, list and check carrier pickups, and see which ones failed before a driver doesn't turn up.

Book a pickup

POST
/{connectorId}/pickups

Books a pickup — either derived from an existing consignment (shipmentId, address/items locked to that consignment) or standalone (collection, items, and receiver supplied directly, all three required together). A partial standalone submission (e.g. collection without items/receiver) is rejected with a 400.

Authorization

FreightApiKey
headerAuthorizationBearer <dsfrt_<64-hex-chars>>

API key issued from Settings → Freight → API Keys. The raw key is shown once at creation.

Path Parameters

connectorId*string

Database ID of the carrier connector account (from GET /connectors)

Request Body

application/json
  1. body

Provide either shipmentId alone (derived mode — books against that existing consignment) or all three of collection, items, and receiver together (standalone mode). A partial standalone submission (e.g. collection without items/receiver) is rejected with a 400.

shipmentId?string

Derived mode — book against this existing consignment. Omit for standalone.

pickupDate*string
Match^\d{4}-\d{2}-\d{2}$
readyTime*string
Match^\d{2}:\d{2}$
closeTime*string
Match^\d{2}:\d{2}$
serviceCode?string

Required for standalone (non-derived) pickups on TNT AU and TGE AU connectors — both reject a booking with no service code. Ignored by BEX AU. In derived mode (shipmentId given), the original shipment's service code is used automatically and this field is optional for every carrier.

collection?

Standalone mode only — required together with items and receiver

items?

Standalone mode only — required together with collection and receiver

receiver?

Standalone mode only — required together with collection and items

Response Body

Pickup booked successfully (or recorded as failed — check status)

application/json
  1. response
pickupBookingId?string
orderNumber?string
status?string
Value in"BOOKED""FAILED"
connectorId?string
Example Request
curl -X POST 'https://datashift.com.au/api/freight/string/pickups' \  -H 'Content-Type: application/json' \  -d '{  "shipmentId": "cm9x1a2b3c4d5e6f7g8h9i0j",  "pickupDate": "2026-07-10",  "readyTime": "09:00",  "closeTime": "17:00",  "serviceCode": "76"}'
Example Response
{  "pickupBookingId": "cm9y2b3c4d5e6f7g8h9i0j1k",  "orderNumber": "SYD734506",  "status": "BOOKED",  "connectorId": "conn_tnt_01"}
GET
/pickups/{id}

Authorization

FreightApiKey
headerAuthorizationBearer <dsfrt_<64-hex-chars>>

API key issued from Settings → Freight → API Keys. The raw key is shown once at creation.

Path Parameters

id*string

Response Body

Pickup booking detail

application/json
  1. response
pickup*

One pickup-booking attempt. Every attempt is its own row — for a shipment with a retry history, this is a single row, not the latest-of-many; use the shipment's own pickupStatus for the current outcome.

Example Request
curl -X GET 'https://datashift.com.au/api/freight/pickups/string'
Example Response
{  "pickup": {    "id": "string",    "tenantId": "string",    "connectorId": "string",    "carrier": "TNT_AU",    "status": "BOOKED",    "orderNumber": "string",    "shipmentId": "string",    "pickupDate": "string",    "readyTime": "string",    "closeTime": "string",    "serviceCode": "string",    "collection": {      "companyName": "string",      "contactName": "string",      "phoneAreaCode": "string",      "phoneNumber": "string",      "address1": "string",      "address2": "string",      "suburb": "string",      "state": "string",      "postcode": "string",      "email": "user@example.com"    },    "items": {      "count": 1,      "totalWeightKg": 0,      "maxLengthCm": 0,      "maxWidthCm": 0,      "maxHeightCm": 0    },    "lastErrorCode": "string",    "lastErrorMessage": "string",    "source": "API",    "createdByUserId": "string",    "createdAt": "2019-08-24T14:15:22Z"  }}