Integration

Tracking API

A read-only HTTP API that returns the current status and movement history of a shipment. Intended for tracking aggregators and marketplace integrations.

Tracking number format

Pattern^ASL[0-9]{11}$
StructureASL + 10 digits + 1 check digit
Length14 characters
Check digitLuhn (mod 10), computed over the 10 digits that precede it
ExampleASL48271930652

The check digit makes the format self-validating, so an invalid number can be rejected before any lookup. Numbers are randomly allocated, not sequential.

Endpoint

GET https://asltrack.com/api/v1/track/{tracking_number}

A query form is also accepted, which some clients find easier to template:

GET https://asltrack.com/api/v1/track?n={tracking_number}

Authentication

None is required — a tracking number is the only credential, as with any carrier. Integration partners are issued a key to send as an x-api-key header, which exempts them from the rate limit described below.

Response

200 — shipment found

{
  "found": true,
  "carrier": "ASLTrack",
  "tracking_number": "ASL48271930652",
  "status": "in_transit",
  "estimated_delivery": "Arriving tomorrow",
  "origin": "AUBURN, WA",
  "destination": "ERIE, PA",
  "destination_country": "US",
  "last_event_at": "2026-09-20T10:31:00.000Z",
  "delivered_at": null,
  "events": [
    {
      "occurred_at": "2026-09-20T10:31:00.000Z",
      "status": "out_for_delivery",
      "description": "Out for delivery",
      "location": "ERIE, PA"
    },
    {
      "occurred_at": "2026-09-20T04:22:00.000Z",
      "status": "in_transit",
      "description": "Arrived at sorting facility",
      "location": "ERIE, PA"
    }
  ]
}

Events are ordered newest first and capped at 50. Timestamps are ISO 8601 in UTC. location is city and state only, and is null when a precise enough location is not available.

404 — not found

{ "found": false, "carrier": "ASLTrack" }

A malformed number and an unknown number return the same status and the same body. The two are deliberately not distinguished, so a client cannot use the response to discover which numbers are in use. Validate the format yourself before calling if you need to tell the difference — the pattern above is all that is required.

Other statuses

429Rate limit reached. Retry after the window, or send a partner key.
503Temporarily unavailable. Safe to retry with backoff.
405Method not allowed. Only GET is supported.

Status values

info_receivedShipping label created; the parcel has not moved yet
in_transitMoving through the network
out_for_deliveryWith the delivery driver
deliveredDelivered to the address
exceptionA delivery attempt did not succeed

The same vocabulary is used for the shipment-level status and for each event's status. Shipment status only moves forward; it never regresses to an earlier stage.

Rate limits

  • Successful lookups are not counted.
  • Repeated lookups that find nothing are counted per IP address, with a default allowance of 30 in 5 minutes.
  • Requests carrying a valid partner key are exempt.

The limit exists to make number-space scanning impractical, not to restrict legitimate polling.

Caching

Responses for delivered shipments may be cached for up to an hour; a shipment still in transit may be cached for one minute. The Cache-Control header on each response states which applies.

Integration support

For partner keys, sample live tracking numbers, or a webhook-based feed instead of polling, see the contact page.