Track one number
The carrier is detected from the number's format (and check digit, where it has one). Detection sends the number to exactly one carrier and never falls back to another; pass carrier to ask a different one.
Counts one tracking number toward the account's usage.
AuthorizationBearer <token>Authorization: Bearer lsk_live_…
trackingNumber*stringCase-insensitive; spaces at either end are trimmed.
carrier?stringSkip detection and ask this carrier. Needed for numbers too generic to detect.
"ups""usps""dhl""fedex""amazon""ontrac""uniuni""gofo""veho""speedee""cdl""bettertrucks""axlehire""cirro""yanwen""4px""cainiao""yunexpress"The tracking result.
application/json- response
carrier*CarrierIdSupported carrier identifier (ontrac covers LaserShip; axlehire covers Jitsu; amazon covers Amazon Logistics / MCF).
"ups""usps""dhl""fedex""amazon""ontrac""uniuni""gofo""veho""speedee""cdl""bettertrucks""axlehire""cirro""yanwen""4px""cainiao""yunexpress"trackingNumber*stringstatus*TrackingStatus"label_created""in_transit""out_for_delivery""delivered""exception""returned""unknown"statusDescription*stringservice*string|nulldeliveredAt*|UTC, like events[].timestamp.
deliveredAtLocal?|The delivery time as the carrier printed it, no zone.
signedBy*string|nulldestination*|nullestimatedDelivery?|Expected delivery as local time with no zone, often a date only.
estimatedDeliveryAt?|The same moment in UTC, only when the carrier states its zone (FedEx, DHL).
message?|The carrier's own latest-update sentence, e.g. why a delivery is delayed or which carrier a cross-border parcel was handed to.
events*array<>Newest first.
curl -X GET 'https://api.lastscanned.com/v1/track/1Z999AA10123456784'{ "carrier": "ups", "trackingNumber": "1Z999AA10123456784", "status": "delivered", "statusDescription": "Delivered", "service": "UPS Ground", "deliveredAt": "2026-08-07T21:17:14Z", "deliveredAtLocal": "2026-08-07T16:17:00", "signedBy": null, "destination": { "city": "AUSTIN", "state": "TX", "country": "US" }, "estimatedDelivery": "2026-08-07", "estimatedDeliveryAt": null, "events": [ { "timestamp": "2026-08-07T21:17:14Z", "localTime": "2026-08-07T16:17:00", "status": "delivered", "description": "DELIVERED", "location": "AUSTIN, TX, US", "code": "FS" }, { "timestamp": "2026-08-07T13:02:41Z", "localTime": "2026-08-07T08:02:00", "status": "out_for_delivery", "description": "Out For Delivery Today", "location": "AUSTIN, TX, US", "code": "OT" } ]}List carriers GET
Carrier ids accepted by `carrier`. No API key needed.
Track several numbers GET
Up to 100 numbers per call and 35 per carrier. Duplicates are removed; numbers from different carriers can be mixed. `results` has one entry per number, in the order requested, each with either `result` or `error`; one bad number never fails the others. Counts each distinct number toward the account's usage.