Developers
Get Started
OpenAPI ↗
REST API v1 · Developer previewLive API credentials are not yet generally available. Hosted test access is not enabled.

API reference

Tracking

Read persisted normalized events. UTC instants are preserved across UK daylight-saving time. Duplicate equivalent instants are suppressed; timezone-naive input is not guessed.

Local sandbox only

Set PX_BASE_URL to http://127.0.0.1:4010/v1. Intended live host: https://api.parcelxpert.com/v1. Live requests are not released. Set PX_IDEMPOTENCY_KEY to one stored unique value per write; replace all example quote and shipment IDs with returned IDs.

Retrieve tracking

GET/v1/shipments/{id}/tracking

Returns persisted normalized events with UTC ISO 8601 timestamps. No carrier call on GET. Equivalent instants and descriptions are deduplicated; naive timestamps are excluded rather than interpreted as UTC. Production access remains disabled. Unreleased server adapters and database controls are under certification; hosted test credentials are unavailable.

Required scope: tracking:read

Parameters

NameLocationMeaning
id
required
pathPX resource ID, scoped to account and environment.
Response schema
FieldTypeDescription
shipment_id
required
stringPX shipment ID.
reference
required
stringPX reference.
tracking_number
required
string | null
status
required
stringCurrent PX status.
events
required
array
events[].status
required
stringNormalized PX status.
events[].description
required
stringEvent description.
events[].timestamp
required
stringISO 8601 timestamp with timezone. Responses use UTC Z.
events[].location
required
stringDisplay location or empty string.
HTTP responses and errors
200Success.
400Malformed JSON, cursor or idempotency header.
401Missing, invalid, expired or revoked key.
403Required scope not granted.
404Resource unavailable in this account and environment, or label format unavailable.
405Method not supported.
409Idempotency conflict, request in progress, expired/mismatched quote or cancellation unavailable.
413Body exceeds 256 KiB.
422Schema or capability validation failure.
429Enforced sandbox rate limit reached.
500Unexpected PX failure.
502Provider operation not confirmed. No blind booking retry.
503Provider unavailable or live API not released.

Request example

curl --request GET \
  --url "$PX_BASE_URL/shipments/$PX_SHIPMENT_ID/tracking" \
  --header "Authorization: Bearer $PX_API_KEY"

Response example

{
  "shipment_id": "shp_00000000-0000-4000-8000-000000000002",
  "reference": "PX-TEST-000001",
  "tracking_number": "TEST001",
  "status": "booked",
  "events": [
    {
      "status": "label_ready",
      "description": "Test label created. No carrier purchase.",
      "timestamp": "2026-10-04T10:25:00Z",
      "location": ""
    }
  ]
}

Find tracking by number

GET/v1/tracking/{tracking_number}

Account-scoped primary-number lookup. The local sandbox returns 404 for unknown or ambiguous numbers; the unreleased domain adapter returns 404 for unknown and 409 for ambiguous numbers. Shipment ID lookup is preferred for multi-parcel consignments. Production access remains disabled; hosted test credentials are unavailable.

Required scope: tracking:read

Parameters

NameLocationMeaning
tracking_number
required
pathExact tracking number.
Response schema
FieldTypeDescription
shipment_id
required
stringPX shipment ID.
reference
required
stringPX reference.
tracking_number
required
string | null
status
required
stringCurrent PX status.
events
required
array
events[].status
required
stringNormalized PX status.
events[].description
required
stringEvent description.
events[].timestamp
required
stringISO 8601 timestamp with timezone. Responses use UTC Z.
events[].location
required
stringDisplay location or empty string.
HTTP responses and errors
200Success.
400Malformed JSON, cursor or idempotency header.
401Missing, invalid, expired or revoked key.
403Required scope not granted.
404Resource unavailable in this account and environment, or label format unavailable.
405Method not supported.
409Idempotency conflict, request in progress, expired/mismatched quote or cancellation unavailable.
413Body exceeds 256 KiB.
422Schema or capability validation failure.
429Enforced sandbox rate limit reached.
500Unexpected PX failure.
502Provider operation not confirmed. No blind booking retry.
503Provider unavailable or live API not released.

Request example

curl --request GET \
  --url "$PX_BASE_URL/tracking/$PX_TRACKING_NUMBER" \
  --header "Authorization: Bearer $PX_API_KEY"

Response example

{
  "shipment_id": "shp_00000000-0000-4000-8000-000000000002",
  "reference": "PX-TEST-000001",
  "tracking_number": "TEST001",
  "status": "booked",
  "events": [
    {
      "status": "label_ready",
      "description": "Test label created. No carrier purchase.",
      "timestamp": "2026-10-04T10:25:00Z",
      "location": ""
    }
  ]
}