Trackers
Read the latest carrier scan, fetch the full event history, and subscribe to delivery + exception events. Tracking is automatically attached to every label we purchase — no separate subscribe step required.
How trackers attach
When you call /labels/create, we automatically register a tracker with the carrier using the label's tracking number. Every subsequent carrier scan fires a webhook from the carrier to our infrastructure, which we relay to your registered webhook endpoint and persist to the tracker's event history. You never have to call a "subscribe" endpoint separately.
Tracker id === label id
/labels/create to fetch tracker state — there is no separate trackerId.Get a tracker
/api/v1/labels/{id}/trackerScope: read:shipmentsLatest tracking event + a list of all events received so far, newest first.
Response (200 OK)
idstringSame as the label id.trackingNumberstringCarrier tracking number.carrierstringUSPS / UPS / FedEx / DHL.statusstringNormalised tracker status — one ofpre_transit,in_transit,out_for_delivery,delivered,exception,return_to_sender,unknown.estDeliveryDatestring | nullCarrier's current best estimate as a UTC calendar day, formattedYYYY-MM-DD(no time component). Updates as the shipment progresses; null when the carrier hasn't computed one. The other date fields on this endpoint (occurredAt, etc.) use full ISO-8601 timestamps with timezone.eventsarrayTracking events newest first. Each event: { status, statusDetail, message, occurredAt, location: { city, state, country, zip } }.
{
"id": "lbl_CCC...",
"trackingNumber": "9405511...",
"carrier": "USPS",
"status": "in_transit",
"estDeliveryDate": "2026-06-29",
"events": [
{
"status": "in_transit",
"statusDetail": "Arrived at USPS Regional Facility",
"message": "Arrived at USPS Regional Origin Facility",
"occurredAt": "2026-06-26T19:14:00Z",
"location": { "city": "San Francisco", "state": "CA", "country": "US", "zip": "94110" }
},
{
"status": "pre_transit",
"statusDetail": "Shipping Label Created",
"message": "Shipping Label Created, USPS Awaiting Item",
"occurredAt": "2026-06-26T12:14:00Z",
"location": null
}
]
}Public tracking page
Every label gets a public, no-auth tracking page at shiponline.app/track/<trackingNumber>. Pass this URL to your customer in your shipping confirmation email — it shows the same data as the API tracker, plus your branding if you're on a Pro plan with branded tracking configured.
Subscribe to events
Most production integrations subscribe to tracking events via webhooks rather than polling. The relevant event types are:
tracker.updated— fires on every new scan.shipment.delivered— fires once, when delivery is confirmed.shipment.exception— fires when the carrier flags a problem.shipment.return_to_sender— fires when the carrier marks the package as returning.
See Webhooks for subscription + signature verification.