Logo

Welcome to the CargoOffice help portal

Get help straight from our team...

API

SHIPMENTS

The Shipments API provides access to shipment information within the customer scope assigned to the API key.

Last updated on 23 Sept, 2026

The following shipment operations are included in the API documentation:

Operation

Method

Endpoint

Availability

Retrieve shipment details

GET

/shipments/details.php

LIVE

List shipments

GET

/shipments/list.php

LIVE

Create a shipment

POST

/shipments/create.php

WIP

Update a shipment

POST

/shipments/update.php

WIP

Update shipment status

POST

/shipments/update-status.php

WIP

Data scope

This API returns data from the "active" database for the customer. That is, shipments that have not progressed to the historical/archive databases. The timing for archiving shipments varies by customer. This API is not intended for historical reporting and bulk data extraction. Please contact CargoOffice support if you are after bulk data extraction.

Common conventions

Authentication

All requests require an API key supplied in the X-API-KEY request header.

See the Authentication article for complete authentication and API key handling requirements.

Response format

Responses are returned as JSON.

Clients should send the following header:

ShellAccept: application/json

Identifiers and references

Shipment identifiers, tracking numbers and reference numbers are returned as strings.

Values that contain only digits must still be treated as strings. This is important because customer references may contain leading zeroes, such as:

Shell0075052479

Unavailable values

A field with no available value may be returned as:

  • null

  • An empty string

  • An omitted optional object, such as proofOfDelivery or temperature

Consumers should handle these representations without assuming that an unavailable value is zero.


Retrieve shipment details

Returns the details of a single shipment using the shipmentID/connote number (preferred, default) or an external customer reference. If both id and ref are provided, id will be used.

Request

ShellGET /API/external/shipments/details.php?id={shipmentID}
GET /API/external/shipments/details.php?ref={reference}

Production URL:

Shellhttps://api.cargooffice.com.au/API/external/shipments/details.php

Query parameters

Parameter

Type

Required

Wildcard allowed?

Description

id

string

Yes, if reference not provided

No

The shipmentID used within CargoOffice. This is unique within a CargoOffice instance and the best way to query data.

ref

string

Yes, if id not provided

No

The external order or shipment reference. Must be an exact match unless partial matching is enabled.
Partial matching can be enabled on request. This could result in multiple matches, so it is off by default.

The reference is resolved within the customer scope assigned to the API key.

Please note:
ShipmentID's will be unique in the scope of typical access, but customer provided references may not be. To that end, if multiple shipments match the reference, only the most recently created shipment will be returned.
Special characters will be removed, only alphanumeric references are supported.

Example request

Shellcurl --request GET \
  --url "https://api.cargooffice.com.au/API/external/shipments/details.php?id=12345678" \
  --header "Accept: application/json" \
  --header "X-API-KEY: <API key>"

Example success response

The following response is representative and has been sanitised for documentation:

JavaScript{
  "success": true,
  "shipment": {
    "id": "224446",
    "trackingNumber": "19248.224446",
    "customerID": "EXAMPLE",
    "references": {
      "order": "ORDER-001",
      "pickup": null,
      "delivery": "ORDER-001"
    },
    "remarks": null,
    "createdDate": "2026-06-29",
    "pickupDate": "2026-06-30",
    "deliveryDate": "2026-07-07",
    "serviceType": "Local",
    "depot": null,
    "tracking": {
      "realTime": "",
      "trackAndTrace": "https://example.cargooffice.com.au/tracking/?s=224446",
      "trackAndTraceMilestones": {
        "received": {
          "timestamp": "2026-08-04 12:24",
          "status": "EDI Import"
        },
        "planned": {
          "timestamp": "2026-08-04 13:07",
          "status": "assigned delivery"
        },
        "pickedup": {
          "timestamp": "",
          "status": ""
        },
        "enroute": {
          "timestamp": "2026-08-05 06:01:13",
          "status": "en route"
        },
        "delivered": {
          "timestamp": "2026-08-06 13:21:17",
          "status": "delivery ok"
        }
      },
      "externalTracking": {
        "source": "EXTERNAL CARRIER",
        "currentStatus": "In Transit",
        "trackAndTraceUrl": "https://external-tracking.example.com/?id=1234567",
        "trackAndTraceMilestones": [
          {
            "sequence": "1",
            "status": "Pickup",
            "note": "CHC",
            "timestamp": "",
            "expected": ""
          },
          {
            "sequence": "2",
            "status": "InDepot",
            "note": "CHC",
            "timestamp": "2026-09-18T16:19:11.0000000",
            "expected": ""
          },
          {
            "sequence": "3",
            "status": "OnLinehaul",
            "note": "CHC",
            "timestamp": "2026-09-18T17:37:03.0000000",
            "expected": ""
          },
          {
            "sequence": "4",
            "status": "Unload",
            "note": "AKL",
            "timestamp": "",
            "expected": "2026-09-22T00:00:00.0000000"
          },
          {
            "sequence": "5",
            "status": "OFD",
            "note": "AKL",
            "timestamp": "",
            "expected": "2026-09-22T00:00:00.0000000"
          },
          {
            "sequence": "6",
            "status": "Delivered",
            "note": "AKL",
            "timestamp": "",
            "expected": "2026-09-22T00:00:00.0000000"
          }
        ]
      }
    },
    "status": {
      "current": "delivery ok",
      "pickup": null,
      "delivery": "delivery ok",
      "events": [
        {
          "sequence": 1,
          "timestamp": "2026-06-29 09:32",
          "status": "EDI Import",
          "note": null
        },
        {
          "sequence": 2,
          "timestamp": "2026-07-07 10:21:40",
          "status": "POD",
          "note": "signed by: Example Receiver"
        }
      ]
    },
    "stops": [
      {
        "sequence": 1,
        "type": "pickup",
        "date": "2026-06-30",
        "name": "Example Sender",
        "notes": null,
        "reference": null,
        "timeslot": null,
        "address": {
          "address": "1 Example Street",
          "suburb": "Example Suburb",
          "state": "VIC",
          "postcode": "3000",
          "country": "Australia",
          "coordinates": {
            "latitude": -37.8136,
            "longitude": 144.9631
          }
        },
        "contact": {
          "contact": null,
          "phone": null,
          "email": null
        }
      },
      {
        "sequence": 2,
        "type": "delivery",
        "date": "2026-07-07",
        "name": "Example Receiver",
        "notes": null,
        "reference": "ORDER-001",
        "timeslot": null,
        "address": {
          "address": "2 Example Road",
          "suburb": "Example Suburb",
          "state": "QLD",
          "postcode": "4000",
          "country": "Australia",
          "coordinates": {
            "latitude": -27.4698,
            "longitude": 153.0251
          }
        },
        "contact": {
          "contact": "Example Receiver",
          "phone": "0400000000",
          "email": "receiver@example.com"
        },
        "proofOfDelivery": {
          "signedBy": "Example Receiver",
          "signedAt": "2026-07-07 10:21:40"
        }
      }
    ],
    "goods": {
      "lines": [
        {
          "lineNumber": 1,
          "description": "MIXED GOODS",
          "status": "2026-08-03 12:46:40 in transit",
          "notes": null,
          "quantity": 1,
          "weight": {
            "value": 25,
            "unit": "kg"
          },
          "dimensions": {
            "length": null,
            "width": null,
            "height": null
          },
          "volume": {
            "value": 0.2,
            "unit": "m3"
          },
          "packaging": {
            "type": "CTN",
            "temperature": null
          }
        }
      ],
      "totals": {
        "quantity": 1,
        "weight": {
          "value": 25,
          "unit": "kg"
        },
        "volume": {
          "value": 0.2,
          "unit": "m3"
        }
      }
    }
  },
  "remainingDailyQuota": "4996"
}

Top-level response fields

Field

Type

Description

success

boolean

Indicates whether the request was successful.

shipment

object

The shipment returned for the supplied reference.

Shipment fields

Field

Type

Description

shipment.id

string

CargoOffice shipment identifier.

shipment.trackingNumber

string

CargoOffice tracking number.

shipment.customerID

string

Customer identifier associated with the shipment.

shipment.references

object

Customer and operational reference numbers.

shipment.remarks

string or null

General shipment remarks.

shipment.createdDate

string or null

Date the shipment was created.

shipment.pickupDate

string or null

Scheduled or recorded pickup date.

shipment.deliveryDate

string or null

Scheduled or recorded delivery date.

shipment.serviceType

string or null

Requested shipment service.

shipment.depot

string or null

Servicing depot, where available.

shipment.tracking

object

Available tracking links.

shipment.status

object

Current shipment statuses and status history.

shipment.stops

array

Ordered pickup and delivery locations.

shipment.goods

object

Goods lines and shipment totals.

Dates are returned in YYYY-MM-DD format.

Reference fields

Field

Type

Description

shipment.references.order

string or null

Customer order reference.

shipment.references.pickup

string or null

Pickup reference.

shipment.references.delivery

string or null

Delivery reference.

Tracking fields

Field

Type

Description

shipment.tracking.realTime

string

Real-time tracking URL, or an empty string when unavailable.

shipment.tracking.trackAndTrace

string

CargoOffice track-and-trace URL, or an empty string when unavailable.

shipment.tracking.trackAndTraceMilestones

object

Simplified track and trace milestones

shipment.tracking.externalTracking

object

External tracking, when available and provided by a system external to CargoOffice.

Applications should verify that a tracking value is non-empty before displaying it as a link.

Track and trace milestone fields

Field

Type

Description

received

object

When a shipment is first entered into CargoOffice.
Aligns with example statuses like: "EDI Import" and "orderentry".
The FIRST occurrence is selected for this milestone.

recieved.timestamp

string

Local date and time recorded for the milestone.

recieved.status

string

The specific status that matches the milestone timestamp.

planned

object

When a shipment is assigned to a driver in CargoOffice.
Aligns with example statuses like: "assigned", "assigned pickup", "assigned delivery".
The LAST occurrence is selected for this milestone.

planned.timestamp

string

Local date and time recorded for the milestone.

planned.status

string

The specific status that matches the milestone timestamp.

pickedup

object

When a shipment is picked up or in transit in CargoOffice. i.e. when the goods have started to move.
Aligns with example statuses like: "pick-up ok", "pick-up not ok", "pick-up with remarks", "pickup ok", "pickup not ok", "pickup with remarks", "in transit".
The LAST occurrence is selected for this milestone.

pickedup.timestamp

string

Local date and time recorded for the milestone.

pickedup.status

string

The specific status that matches the milestone timestamp.

enroute

object

When a shipment is flagged as out for delivery in CargoOffice. i.e. the goods are heading to the final delivery location.
Aligns with example statuses like: "en route".
The LAST occurrence is selected for this milestone.

enroute.timestamp

string

Local date and time recorded for the milestone.

enroute.status

string

The specific status that matches the milestone timestamp.

delivered

object

When a shipment marked as delivered or complete in CargoOffice.
Aligns with example statuses like: "delivery ok", "delivery not ok", "delivery with remarks", "delivered".
The LAST occurrence is selected for this milestone.

delivered.timestamp

string

Local date and time recorded for the milestone.

delivered.status

string

The specific status that matches the milestone timestamp.

Milestones are a high level overview of the status events, with an internal mapping of statuses to milestones. Not all CargoOffice customers have the same set of statuses and not all shipments have all milestones, milestones can happen more than once.

If a milestone is not detected, the object will contain an empty string for both timestamp and status.

The source of truth is still: shipment.status.events.

External tracking fields

Field

Type

Description

source

string

The source of the external milestone data.

currentStatus

string

The top level or current status provided by the external system.

trackAndTraceUrl

string

When available, a direct link to the external track and trace web page.

trackAndTraceMilestones

array

Track and trace milestone events as reported by the external track and trace system.

CargoOffice takes no responsibility for the accuracy or quality of external tracking. Consumers of this data are expected to exercise caution and take practical steps to handle unexpected values.

External milestones

Field

Type

Description

sequence

string

The sequence as provided by the external system. Indexed at 1.

status

string

The status or name of the milestone in the external system. e.g. "InDepot"

note

string

Additional information or notes. e.g. "Melbourne depot"

timestamp

sstring

A string representing a time or date when the milestone happened.
CAUTION: This field is not normalized and will be exactly the format the external system provides. i.e. do not assume a specific format unless you know what the external system provides.

expected

string

A string representing a time or date when the milestone is expected.
CAUTION: This field is not normalized and will be exactly the format the external system provides. i.e. do not assume a specific format unless you know what the external system provides.

External milestones are saved as-is from the external system when they are provided. There is no additional mapping to CargoOffice statuses or milestones and no agreed standardization. Any mapping to CargoOffice statuses and milestones would have already happened.

Shipment status fields

Field

Type

Description

shipment.status.current

string or null

Most recently recorded overall shipment status.

shipment.status.pickup

string or null

Current pickup status, where available.

shipment.status.delivery

string or null

Current delivery status, where available.

shipment.status.events

array

Status events in their recorded sequence.

Statuses in CargoOffice are heavily customizable, they can be almost any value, do not need to follow a specific order, can happen more than once or may never happen.

Status descriptions may reflect customer-specific CargoOffice workflows. Consumers should treat them as strings unless a separate agreed status mapping has been provided.

Please contact your CargoOffice customer for an up to date list of their statuses and for assistance mapping them to your needs.

Status event fields

Field

Type

Description

sequence

integer

Recorded position of the event in the shipment history.

timestamp

string

Local date and time recorded for the event.

status

string

Status or event description.

note

string or null

Additional information associated with the event.

Status event ordering and timestamps

Status event timestamps are recorded in the local time of the entity that generated the event. They do not include a UTC offset or timezone identifier.

The sequence field represents the recorded event order. Consumers should use sequence, rather than sorting by timestamp, when displaying shipment history.

Timestamps may contain either minutes or seconds:

HTML2026-06-29 09:32
2026-07-07 10:21:40

Consumers should support both:

HTMLYYYY-MM-DD HH:mm
YYYY-MM-DD HH:mm:ss

Stop fields

Each entry in shipment.stops represents a pickup or delivery location.

Field

Type

Description

sequence

integer

Position of the stop within the shipment.

type

string

Stop type, normally pickup or delivery.

date

string or null

Pickup or delivery date in YYYY-MM-DD format.

name

string or null

Location, company or recipient name.

notes

string or null

Instructions or notes for the stop.

reference

string or null

Reference associated with the stop.

timeslot

string or null

Pickup or delivery time slot, where recorded.

address

object

Address and coordinate information.

contact

object

Contact details for the stop.

proofOfDelivery

object

Proof-of-delivery information, when available.

proofOfDelivery is optional and may be omitted entirely when proof of delivery is unavailable.

Address fields

Field

Type

Description

address.address

string or null

Street address.

address.suburb

string or null

Suburb or locality.

address.state

string or null

State, province or region.

address.postcode

string or null

Postal code.

address.country

string or null

Country name.

address.coordinates.latitude

number or null

Latitude in decimal degrees.

address.coordinates.longitude

number or null

Longitude in decimal degrees.

Contact fields

Field

Type

Description

contact.contact

string or null

Contact person's name.

contact.phone

string or null

Contact telephone number.

contact.email

string or null

Contact email address.

Phone numbers should be treated as strings because their formatting may vary.

Proof-of-delivery fields

Field

Type

Description

proofOfDelivery.signedBy

string or null

Name recorded for the recipient or signatory.

proofOfDelivery.signedAt

string or null

Local date and time at which proof of delivery was recorded.

Goods fields

Field

Type

Description

shipment.goods.lines

array

Individual goods lines.

shipment.goods.totals

object

Totals calculated across the shipment.

Goods line fields

Field

Type

Description

lineNumber

integer

Goods line number.

description

string or null

Description of the goods.

notes

string or null

Additional goods-line notes.

status

string or null

The status of the individual goods line if available. Does not need to match the overall status.

quantity

number or null

Quantity recorded for the line.

weight.value

number or null

Recorded weight.

weight.unit

string

Weight unit, such as kg.

dimensions.length

number or null

Recorded length.

dimensions.width

number or null

Recorded width.

dimensions.height

number or null

Recorded height.

volume.value

number or null

Recorded volume.

volume.unit

string

Volume unit, such as m3.

packaging.type

string or null

Packaging type or code.

packaging.temperature

string or null

Temperature classification, where applicable.

The current response does not include a unit alongside the dimension fields. The applicable dimension unit should be confirmed as part of the integration specification before these values are consumed.

Goods total fields

Field

Type

Description

totals.quantity

number

Total goods quantity.

totals.weight.value

number

Total shipment weight.

totals.weight.unit

string

Weight unit.

totals.volume.value

number

Total shipment volume.

totals.volume.unit

string

Volume unit.

A null line value should not automatically be interpreted as zero. A numeric 0 represents the value returned by CargoOffice.

Daily Quota

Field

Type

Description

remainingDailyQuota

string

The number of requests remaining of the daily API usage quota.

Quotas reset daily and are shared across all API requests. When this number reaches 0, a 429 status code error will be returned informing the consumer that they have exceeded their quota.


List shipments

Returns a paginated list of shipments within the customer scope assigned to the API key.

The endpoint is read-only. Customer scope restrictions are applied automatically and cannot be overridden using filters.

Request

ShellGET /API/external/shipments/list.php

Production URL:

Shellhttps://api.cargooffice.com.au/API/external/shipments/list.php

Query parameters

Parameter

Type

Required

Description

filter

object

No

One or more shipment filters. Filters can be combined using implicit AND conditions or explicit and and or groups.

sort[]

string array

No

One or more sorting rules in field:direction format. Defaults to createdDate:desc.

page

integer

No

The requested page number, beginning at 1. Defaults to 1.

limit

integer

No

The maximum number of shipments returned per page. Defaults to 50 and cannot exceed 100.

The customer scope assigned to the API key is always applied before the requested filters.

Please note:
Filter fields and operators must use the exact spelling and capitalisation documented below.
Query parameter values should be URL encoded. For example, a space should be represented as %20.
The square brackets shown in the examples form part of the query parameter names.

Example request

Shellcurl --globoff 
  --request GET \ 
  --url "https://api.cargooffice.com.au/API/external/shipments/list.php?filter[deliveryDate][gte]=2026-08-07&filter[goods][contains]=4000000015351218&page=1&limit=50" \ 
  --header "Accept: application/json" \ 
  --header "X-API-KEY: <API key>"

The --globoff option prevents curl from interpreting the square brackets in the filter parameters.

Filtering

A filter uses the following structure:

Shellfilter[field][operator]=value

For example:

ShellGET /API/external/shipments/list.php?filter[deliveryDate][gte]=2026-08-07

This returns shipments where the delivery date is on or after 7 August 2026.

Combining filters with AND

Filters at the same level are automatically combined using AND.

ShellGET /API/external/shipments/list.php?filter[deliveryDate][gte]=2026-08-07&filter[goods][contains]=pickles

This means:

ShelldeliveryDate is on or after 2026-08-07
AND
a goods identifier contains pickles

Multiple different operators can be applied to the same field:

ShellGET /API/external/shipments/list.php?filter[deliveryDate][gte]=2026-08-01&filter[deliveryDate][lte]=2026-08-31

This returns shipments with a delivery date between 1 August and 31 August 2026, inclusive.

Explicit AND and OR groups

Numbered and and or groups can be used for more complex conditions.

The general formats are:

Shellfilter[and][0][field][operator]=value
filter[and][1][field][operator]=value

and:

Shellfilter[or][0][field][operator]=value
filter[or][1][field][operator]=value

For example:

ShellGET /API/external/shipments/list.php?filter[or][0][currentStatus][eq]=Acknowledged&filter[or][1][currentStatus][eq]=In%20Transit

This means:

ShellcurrentStatus equals Acknowledged 
OR 
currentStatus equals In Transit

Numbered groups also allow the same field and operator to be used more than once without one query parameter replacing another.

Nested groups

Logical groups can be nested.

The following condition:

Shell( 
    deliveryDate is on or after 2026-08-07 
    AND 
    deliveryDate is on or before 2026-08-31 
) 
OR 
( 
    currentStatus equals Invoiced 
    AND 
    totalVolume is greater than 0 
)

Can be represented as:

ShellGET /API/external/shipments/list.php 
    ?filter[or][0][and][0][deliveryDate][gte]=2026-08-07 
    &filter[or][0][and][1][deliveryDate][lte]=2026-08-31 
    &filter[or][1][and][0][currentStatus][eq]=Invoiced 
    &filter[or][1][and][1][totalVolume][gt]=0 
    &sort[]=deliveryDate:asc 
    &sort[]=createdDate:desc

NOTE: The line breaks above are included for readability. The actual request URL should be sent as one continuous URL.

Please note:

Each logical group must contain either an and key or an or key.

A group cannot contain both and and or, and a logical key cannot be mixed with direct field filters at the same level.

Group entries must use numeric indexes such as [0], [1], and [2].

Filter operators

Not every operator is available for every field. Refer to the field tables for the exact operators supported by each field.

Operator

Description

eq

The field must equal the supplied value.

ne

The field must not equal the supplied value.

contains

The field must contain the supplied text anywhere in its value.

notContains

The field must not contain the supplied text.

startsWith

The field must begin with the supplied text.

in

The field must equal one of the supplied values.

notIn

The field must not equal any of the supplied values.

gt

The field must be greater than the supplied value.

gte

The field must be greater than or equal to the supplied value.

lt

The field must be less than the supplied value.

lte

The field must be less than or equal to the supplied value.

isNull

Tests whether the field has a null value. The filter value must be true or false.

Values supplied to contains, notContains, and startsWith are treated as literal text. Characters such as % and _ are not treated as client-supplied wildcard characters.

Using IN and NOT IN

The in and notIn operators require an array of values.

ShellGET /API/external/shipments/list.php?filter[currentStatus][in][]=Acknowledged&filter[currentStatus][in][]=In%20Transit

This returns shipments where the current status is either Acknowledged or In Transit.

A comma-separated string should not be used:

Shellfilter[currentStatus][in]=Acknowledged,In Transit

Each value must be supplied separately using [].

Available filter fields

Shipment identifiers and references

Field

Type

Supported operators

Sortable

Maximum filter length

shipmentID

string

eq, ne, in, notIn

Yes

40 characters

trackingNumber

string

eq, ne, in, notIn

Yes

40 characters

reference

string

eq, ne, contains, startsWith, in, notIn

Yes

100 characters

pickupReference

string

eq, ne, contains, startsWith, in, notIn

Yes

100 characters

deliveryReference

string

eq, ne, contains, startsWith, in, notIn

Yes

100 characters

serviceType

string

eq, ne, contains, startsWith, in, notIn

Yes

17 characters

customerID

string

eq, ne, contains, startsWith, in, notIn

Yes

13 characters

Shipment IDs should be treated as strings because they may contain leading zeroes.

Example customer filter:

ShellGET /API/external/shipments/list.php?filter[customerID][eq]=TESTCUSTOMER

The supplied customer ID must still be within the customer scope assigned to the API key.

Dates

Date filter values must use YYYY-MM-DD format.

Field

Type

Supported operators

Sortable

createdDate

date

eq, ne, gt, gte, lt, lte, isNull

Yes

pickupDate

date

eq, ne, gt, gte, lt, lte, isNull

Yes

deliveryDate

date

eq, ne, gt, gte, lt, lte, isNull

Yes

Example date range:

ShellGET /API/external/shipments/list.php?filter[createdDate][gte]=2026-08-01&filter[createdDate][lt]=2026-09-01

This returns shipments created during August 2026.

Statuses

Field

Description

Supported operators

Sortable

Maximum filter length

currentStatus

The shipment's current status.

eq, ne, contains, in, notIn

No

100 characters

pickupStatus

The shipment's current pickup status.

eq, ne, contains, in, notIn

No

100 characters

deliveryStatus

The shipment's current delivery status.

eq, ne, contains, in, notIn

No

100 characters

statusHistory

The shipment's complete status history.

contains, notContains

No

500 characters

currentStatus examines only the current status.

statusHistory searches the complete status history. It can be used to find shipments that previously passed through a particular status, even if that status is no longer current.

Example:

ShellGET /API/external/shipments/list.php?filter[statusHistory][contains]=in%20transit&filter[statusHistory][notContains]=Invoiced

This returns shipments whose status history contains in transit but does not contain Invoiced.

Pickup details

Field

Type

Supported operators

Sortable

Maximum filter length

pickupName

string

eq, ne, contains, startsWith, in, notIn

Yes

500 characters

pickupAddress

string

eq, ne, contains, startsWith, in, notIn

Yes

500 characters

pickupSuburb

string

eq, ne, contains, startsWith, in, notIn

Yes

500 characters

pickupPostcode

string

eq, ne, contains, startsWith, in, notIn

Yes

500 characters

pickupState

string

eq, ne, contains, startsWith, in, notIn

Yes

500 characters

pickupContact

string

eq, ne, contains, startsWith, in, notIn

Yes

500 characters

pickupEmail

string

eq, ne, contains, startsWith, in, notIn

Yes

500 characters

pickupPhone

string

eq, ne, contains, startsWith, in, notIn

Yes

500 characters

Example:

ShellGET /API/external/shipments/list.php?filter[pickupSuburb][eq]=Mount%20Wellington&filter[pickupState][eq]=AKL

Delivery details

Field

Type

Supported operators

Sortable

Maximum filter length

deliveryName

string

eq, ne, contains, startsWith, in, notIn

Yes

500 characters

deliveryAddress

string

eq, ne, contains, startsWith, in, notIn

Yes

500 characters

deliverySuburb

string

eq, ne, contains, startsWith, in, notIn

Yes

500 characters

deliveryPostcode

string

eq, ne, contains, startsWith, in, notIn

Yes

500 characters

deliveryState

string

eq, ne, contains, startsWith, in, notIn

Yes

500 characters

deliveryContact

string

eq, ne, contains, startsWith, in, notIn

Yes

500 characters

deliveryEmail

string

eq, ne, contains, startsWith, in, notIn

Yes

500 characters

deliveryPhone

string

eq, ne, contains, startsWith, in, notIn

Yes

500 characters

Example:

ShellGET /API/external/shipments/list.php?filter[deliveryName][contains]=Building%20Services&filter[deliverySuburb][eq]=Dunedin

Shipment totals and goods

Field

Type

Description

Supported operators

Sortable

totalVolume

decimal

The total volume recorded for the shipment.

eq, ne, gt, gte, lt, lte, isNull

Yes

totalQuantity

integer

The total goods quantity recorded for the shipment.

eq, ne, gt, gte, lt, lte, isNull

Yes

goods

string

Searches goods text across all goods lines.

contains, notContains

No

The goods field searches every numbered goods line associated with a shipment. Clients do not need to know which goods line contains the identifier.

Example:

ShellGET /API/external/shipments/list.php?filter[goods][contains]=pickles

This matches when any goods text that contains "pickles".

Sorting

Sorting uses one or more sort[] query parameters:

Shellsort[]=field:direction

The supported directions are:

Direction

Description

asc

Ascending order.

desc

Descending order.

Example:

ShellGET /API/external/shipments/list.php?sort[]=deliveryDate:asc

Multiple sort fields are applied in the order supplied:

ShellGET /API/external/shipments/list.php?sort[]=deliveryDate:asc&sort[]=createdDate:desc

This sorts by delivery date first. Shipments with the same delivery date are then sorted by created date in descending order.

Please note:
A maximum of five sort fields may be supplied.
The same field cannot be included more than once.
Only fields marked as sortable in the field tables can be used.
If no sorting is supplied, results are sorted by createdDate:desc.

Pagination

Pagination is page-based.

ShellGET /API/external/shipments/list.php?page=2&limit=25

Parameter

Minimum

Maximum

Default

page

1

-

1

limit

1

100

50

Filtering and sorting are applied before pagination.

If there are more pages, the top-level attribute "hasNextPage" will be true

Exact total result and total page counts are not calculated by this endpoint. Clients can request successive pages until "hasNextPage" is false or a page contains fewer shipments than the requested limit.

Request limits

Limit

Maximum

Shipments returned per page

100

Filter conditions

50

Logical group nesting

8 levels

Values in one in or notIn filter

50

Sort fields

5

Default string filter length

500 characters

Some string fields have smaller limits, as shown in the field tables.

Requests must also fit within normal HTTP URL length limits. Avoid unnecessarily large filter trees or value lists.

Invalid requests

A request may be rejected when it contains:

  • An unsupported filter field.

  • An operator that is not available for the selected field.

  • An invalid date, integer, decimal, or boolean value.

  • An empty logical group.

  • An invalid combination of and and or.

  • Too many filter conditions or nested groups.

  • An unsupported or repeated sort field.

  • An invalid page or limit value.

  • More than 50 values in an in or notIn filter.

Invalid filtering, sorting, or pagination normally produces a 400 Bad Request response. Authentication failures are handled as described in the Authentication section.

Debug mode

Including the request parameter debug with a value of true will return the parsed filter as JSON. This can be useful for checking that the URL filtering is formatted correctly.

ShellGET /API/external/shipments/list.php?debug=true

For the example filter:

ShellGET API/external/shipments/list.php?filter[or][0][currentStatus][eq]=Acknowledged&filter[or][1][currentStatus][eq]=In%20Transit&page=1&limit=100&debug=true

The top-level JSON attribute "filters" is:

JavaScript"filters": {
        "or": [
            {
                "currentStatus": {
                    "eq": "Acknowledged"
                }
            },
            {
                "currentStatus": {
                    "eq": "In Transit"
                }
            }
        ]
    }

Further examples

Shipments due during August 2026

ShellGET /API/external/shipments/list.php?filter[deliveryDate][gte]=2026-08-01&filter[deliveryDate][lte]=2026-08-31

Shipments with one of several current statuses

ShellGET /API/external/shipments/list.php?filter[currentStatus][in][]=Acknowledged&filter[currentStatus][in][]=In%20Transit

Exclude invoiced and cancelled shipments

ShellGET /API/external/shipments/list.php?filter[currentStatus][notIn][]=Invoiced&filter[currentStatus][notIn][]=Cancelled

Search by the beginning of a reference

ShellGET /API/external/shipments/list.php?filter[reference][startsWith]=0075

Search by customer and delivery date

ShellGET /API/external/shipments/list.php?filter[customerID][eq]=TESTCUSTOMER&filter[deliveryDate][gte]=2026-08-07

Find shipments without a pickup date

ShellGET /API/external/shipments/list.php?filter[pickupDate][isNull]=true

Search the complete status history

ShellGET /API/external/shipments/list.php?filter[statusHistory][contains]=in%20transit

Exclude shipments that have ever been invoiced

ShellGET /API/external/shipments/list.php?filter[statusHistory][notContains]=Invoiced

Apply an OR condition

ShellGET /API/external/shipments/list.php?filter[or][0][currentStatus][eq]=Acknowledged&filter[or][1][currentStatus][eq]=In%20Transit

Apply a nested condition

ShellGET /API/external/shipments/list.php?filter[or][0][and][0][deliveryDate][gte]=2026-08-07&filter[or][0][and][1][deliveryDate][lte]=2026-08-31&filter[or][1][and][0][currentStatus][eq]=Invoiced&filter[or][1][and][1][totalVolume][gt]=0

Sort and paginate results

JavaScriptGET /API/external/shipments/list.php?page=2&limit=25&sort[]=deliveryDate:asc&sort[]=createdDate:desc


Update a shipment

NOT YET AVAILABLE

Documentation pending

Updates permitted fields on an existing shipment.

Provisional endpoint:

Shell/API/external/shipments/update.php


Update shipment status

EXTREMELY LIMITED AVAILABILITY

Documentation pending

Records a status update against an existing shipment.

Provisional endpoint:

Shell/API/external/shipments/update-status.php

Did you find this article helpful?