# Post Haste Tracking API & MCP

URL: https://docs.lastscanned.com/carriers/posthaste

Query live **Post Haste** (`posthaste`) package status and scan history in a single synchronous `GET` request or MCP tool call. Post Haste is part of the Freightways group in New Zealand.

## Overview & Quick Facts

| Property | Value |
|---|---|
| **Carrier slug (`?carrier=`)** | `posthaste` |
| **Brand aliases** | Post Haste, Posthaste, Freightways |
| **Category** | Regional courier (New Zealand) |
| **Single-package REST endpoint** | `GET https://api.lastscanned.com/v1/track/{trackingNumber}?carrier=posthaste` |
| **Batch REST endpoint** | `GET https://api.lastscanned.com/v1/track?numbers=...,...&carrier=posthaste` |
| **MCP server (`https://mcp.lastscanned.com`)** | `track_package`, `track_packages`, `list_carriers` |
| **Authentication & pricing** | `Authorization: Bearer lsk_live_...` · 1 free keyless lookup/day per IP |

## Tracking Number Formats & Auto-Detection

| Pass | Rule / Regex | Check Digit | Examples |
|---|---|---|---|
| **Pass 1 (`matches`)** | none | none | none |
| **Pass 2 (`mayMatch`)** | none | none | none |

Post Haste tickets, charge labels and consignment numbers share shapes with other carriers and with the other Freightways brands, so there is no auto-detection: always pass `?carrier=posthaste`.

## Synchronous `GET` Request & Normalized JSON Response

```bash
curl -s "https://api.lastscanned.com/v1/track/AB%2012345678?carrier=posthaste" \
  -H "Authorization: Bearer $LASTSCANNED_API_KEY"
```

```json
{
  "carrier": "posthaste",
  "trackingNumber": "AB 12345678",
  "status": "in_transit",
  "statusDescription": "We've picked up your parcel",
  "service": null,
  "deliveredAt": null,
  "deliveredAtLocal": null,
  "signedBy": null,
  "destination": null,
  "message": null,
  "events": [
    {
      "timestamp": "2026-10-21T01:00:17Z",
      "localTime": "2026-10-21T14:00:17",
      "status": "in_transit",
      "description": "Picked Up",
      "location": "Whanganui, Whanganui District",
      "code": "P"
    },
    {
      "timestamp": "2026-10-20T22:30:00Z",
      "localTime": "2026-10-21T11:30:00",
      "status": "label_created",
      "description": "Label Created",
      "location": "Penrose, Auckland",
      "code": "P"
    }
  ]
}
```

## Notes

- **Time zone**: the carrier sends scan times in UTC; `timestamp` keeps them and `localTime` is the same moment on the New Zealand clock (`Pacific/Auckland`).
- **Networks**: NZ Couriers, Post Haste and Castle Parcels are Freightways brands that answer from one tracking service. Each network only knows its own consignments, so use the carrier slug of the brand that sent the parcel.
- **Number shapes**: a courier ticket or pack is a product code and a number (`AB 12345678`, the space or hyphen is kept). Anything else is searched as typed, without leading zeros. Customer-printed labels that need the sender's account number as well are not supported.
- **Errors**: a number the network does not know is `not_found`. A short query (under 6 characters) is also `not_found`, and a query that matches several consignments is a `carrier_error` asking for a longer number.

## Related Resources

- **Regex & check digits**: [Tracking number formats & auto-detection](/formats)
