# GAASH Worldwide Tracking API & MCP

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

Query live **GAASH Worldwide** (`gaash`) package status and scan history in a single synchronous `GET` request or MCP tool call.

## Overview & Quick Facts

| Property | Value |
|---|---|
| **Carrier slug (`?carrier=`)** | `gaash` |
| **Brand aliases** | GAASH, GAASH Worldwide, Gaash WD, GWD |
| **Category** | Israeli cross-border e-commerce |
| **Single-package REST endpoint** | `GET https://api.lastscanned.com/v1/track/{trackingNumber}` |
| **Batch REST endpoint** | `GET https://api.lastscanned.com/v1/track?numbers=PH8001877691,...` |
| **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`)** | `/^GAIH\d{8}$/` | none | `PH8001877691` |
| **Pass 2 (`mayMatch`)** | `/^(?:GWD\d{9}|PH\d{10})$/` | none | `PH8001877691` |

`GAIH` numbers belong to GAASH alone. `GWD` + 9 digits (also Purolator's loose shape) and `PH` + 10 digits are tried only when no other carrier claims them; `?carrier=gaash` is the sure way.

## Synchronous `GET` Request & Normalized JSON Response

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

```json
{
  "carrier": "gaash",
  "trackingNumber": "PH8001877691",
  "status": "delivered",
  "statusDescription": "Delivered",
  "service": null,
  "deliveredAt": "2026-03-27T07:12:13Z",
  "deliveredAtLocal": "2026-03-27T10:12:13",
  "signedBy": null,
  "destination": null,
  "events": [
    {
      "timestamp": "2026-03-27T07:12:13Z",
      "localTime": "2026-03-27T10:12:13",
      "status": "delivered",
      "description": "Delivered",
      "location": null,
      "code": "16"
    },
    {
      "timestamp": "2026-03-26T09:26:53Z",
      "localTime": "2026-03-26T12:26:53",
      "status": "exception",
      "description": "Arrived at pickup location",
      "location": null,
      "code": "15"
    },
    {
      "timestamp": "2026-03-10T16:50:43Z",
      "localTime": "2026-03-10T19:50:43",
      "status": "in_transit",
      "description": "Parcel is on the way to destination country",
      "location": null,
      "code": "1001"
    }
  ]
}
```

## Notes

- **Customs**: parcels held at the Ministry of Transportation or waiting on a payment show those steps as `in_transit` events with GAASH's own codes (`813`, `912`, `849`).
- **Pickup points**: `Arrived at pickup location` reads `exception` (ready for collection), as other carriers' ready-for-pickup scans do.
- **Time zone**: each scan carries its own offset (`GMT+02:00` / `GMT+03:00`), so `timestamp` is exact.

## Related Resources

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