Last updated

Tracking

With ShipStation’s v2 REST API, you can retrieve tracking details for a specific label you’ve created in ShipStation using the GET method and the /v2/labels/{label_id}/track endpoint.

Upcoming Tracking Methods
  • ShipStation does not yet support webhook listeners for tracking events, but this capability is coming soon.
  • ShipStation has not yet implemented a dedicated tracking endpoint. However, this endpoint is coming in 2025. We will update this documentation with the details for the tracking endpoint when available.

Requirements

  • You must have the label_id of the label you wish to track.

Sample Request & Response

GET /v2/labels/:label_id/track

GET /v2/labels/se-324658/track HTTP/1.1
Host: api.shipstation.com
API-Key: __YOUR_API_KEY_HERE__
Cache-Control: no-cache

Sample Response

{
 "tracking_number": "1Z932R800390810600",
 "status_code": "DE",
 "status_description": "Delivered",
 "carrier_status_code": "D",
 "carrier_status_description": "DELIVERED",
 "shipped_date": "2024-10-25T11:59:03.289Z",
 "estimated_delivery_date": "2024-10-27T11:59:03.289Z",
 "actual_delivery_date": "2024-10-27T11:59:03.289Z",
 "exception_description": null,
 "events": [
   {
     "occurred_at": "2024-10-25T12:32:00Z",
     "carrier_occurred_at": "2024-10-25T05:32:00",
     "description": "Arrived at UPS Facility",
     "city_locality": "OCEANSIDE",
     "state_province": "CA",
     "postal_code": "92056",
     "country_code": "",
     "company_name": "",
     "signer": "",
     "event_code": "U1"
   }
 ]
}

About the Tracking Response

Event Timestamps:

  • carrier_occurred_at is the timestamp of the event received from the carrier. It is assumed to be the local time of where the event occurred. This event property is not yet fully supported across all carriers.
  • occurred_at is our best effort at converting the carrier_occurred_at field to UTC, based on the time of the event's occurrence.

Tracking Status Codes

Here's how the status_code and status_description fields correspond to each other and how they correspond to the tracking_status field of a label:

Status CodeStatus DescriptionTracking Status
ACAcceptedN/A
ITIn Transitin_transit
DEDelivereddelivered
EXExceptionerror
UNUnknownunknown
ATDelivery AttemptN/A
NYNot Yet in Systemin_transit
SPDelivered to the Collection Locationdelivered_to_service_point

Your integration should expect any of the above tracking events for any of the carriers you use.