Track a shipment¶
Shipments
Movement data
Surface the live journey of any shipment by referencing the tracking ID, shipment ID, or booking ID you already have on hand. Each call returns the latest scan events, timestamps, and delivery ETA.
Verb
GET ยท stateless
Data freshness
Events stream in near real time
Retry guidance
Use exponential backoff when polling
Identifier options¶
| Identifier | When to use | Sample |
|---|---|---|
trackingId |
Most common; shared with customers via labels and emails. | 584E3DDF |
shipmentId |
Internal AAJ GUID used when you already have the shipment payload. | bf214001-b3bb-4d49-a433-e5ef5177a732 |
orderId |
Use when you only captured the commerce booking identifier. | ORD-109911 |
Endpoints¶
GET
Tracking ID
`{{ url }}/api/v2/shipments/{{ trackingId }}/track`
GET
Shipment ID
`{{ url }}/api/v2/shipments/{{ shipmentId }}/track`
GET
booking ID
`{{ url }}/api/v2/shipments/{{ orderId }}/track`
All endpoints share the same response schema and require the standard Authorization: Bearer {{ token }} header.
Response payload¶
{
"success": true,
"message": "Shipment tracked successfully",
"data": {
"carrier": "AAJ",
"serviceType": "",
"trackingNumber": "692986D4",
"events": [
{
"meta": {
"hub": null,
"hubId": null,
"status": 0,
"location": "Online Branch",
"userName": "Faith Philz"
},
"user": "68d51bf76d726a7296c52dbf",
"bagTag": "",
"category": "",
"dateTime": "2025-11-28T12:26:25.000000+01:00",
"exception": null,
"scanType": "LABEL_CREATED",
"description": "Label documents have been created",
"manifestId": "",
"objectType": "SHIPMENT",
"shipmentTrackingId": "692986D4",
"additionalInfo": null,
"_id": "692986e163136da39a6af133",
"createdAt": "2025-11-28T11:26:25.775Z",
"updatedAt": "2025-11-28T11:26:25.775Z"
}
],
"status": 0,
"timestamp": "2025-11-28T11:26:25.777Z",
"description": "Label documents have been created",
"weight": 90,
"packageDimension": {
"length": 32,
"width": 25,
"height": 2,
"unit": "KGS",
"dimensionalWeight": 0.32,
"actualWeight": 90
},
"labelCreated": "2025-11-28T11:26:25.777Z",
"eta": {
"numberOfDays": 3,
"dateOfArrival": "2025-12-01T11:26:12.000000+01:00",
"lastTrack": "2025-11-28T11:26:12.843Z"
},
"senderLocation": {
"name": "Enohense Idemudia",
"city": "iKEJA",
"state": "LA",
"country": "Nigeria",
"countryCode": "NG",
"postcode": "23949",
"address": "",
"location": "location"
},
"receiverLocation": {
"name": "Amos Obaide",
"city": "Ikeja",
"state": "LA",
"country": "Nigeria",
"countryCode": "NG",
"postcode": "23994",
"address": "",
"location": "location"
},
"shipmentTrackingId": "692986D4",
"bookingSearchId": "09130967",
"searchedBy": "692986D4",
"acknowledgementCopy": null
}
}
Response fields¶
| Field | Description |
|---|---|
trackingNumber |
The public-facing tracking value printed on labels. |
carrier |
The carrier handling the shipment (e.g., "AAJ"). |
events |
Chronological list of scan milestones with metadata about hub, user, and scan type. |
status |
Integer status that maps to the shipment lifecycle (see shipment reference). |
timestamp |
When the shipment was last updated in the network. |
description |
Human-readable summary of the latest state. |
weight |
Total weight of the shipment in the configured unit. |
packageDimension |
Declared dimension + chargeable weight for billing reconciliation. |
labelCreated |
Timestamp when the shipping label was generated. |
eta |
Promise window, including arrival estimate and last update date. |
senderLocation / receiverLocation |
Sanitized address data for sender and receiver contacts. |
shipmentTrackingId |
The unique shipment tracking identifier. |
bookingSearchId |
Alternative search ID linked to the original booking. |
searchedBy |
The identifier used to perform this tracking lookup. |
Tip: For real-time customer notifications, poll until
statusreaches4(delivered), then confirm proof-of-delivery via the single-shipment endpoint.