# Grand Slam Express Tracking API & MCP

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

Query live **Grand Slam Express** (`grandslamexpress`) shipment status, scan history and forwarding handoff in a single synchronous `GET` request or MCP tool call. AWB numbers are plain digits; pass `?carrier=grandslamexpress`.

## Overview & Quick Facts

| Property | Value |
|---|---|
| **Carrier slug (`?carrier=`)** | `grandslamexpress` |
| **Brand aliases** | Grand Slam Express, GSE India, grandslamexpress.in |
| **Category** | Cross-border courier into India (import from China, forwarding to Indian carriers) |
| **Single-package REST endpoint** | `GET https://api.lastscanned.com/v1/track/{trackingNumber}` |
| **Batch REST endpoint** | `GET https://api.lastscanned.com/v1/track?numbers=915504406,...` |
| **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 |

This carrier is not auto-detected. AWB numbers are 9 digits, a shape too common to detect, so `?carrier=grandslamexpress` is required.

## Synchronous `GET` Request & Normalized JSON Response

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

```json
{
  "carrier": "grandslamexpress",
  "trackingNumber": "915504406",
  "status": "delivered",
  "statusDescription": "Packet has been DELIVERED",
  "service": null,
  "deliveredAt": null,
  "deliveredAtLocal": "2021-05-25T19:18:00",
  "signedBy": null,
  "destination": null,
  "message": "Handed to DTDC as 915504406",
  "events": [
    {
      "timestamp": null,
      "localTime": "2021-05-25T19:18:00",
      "status": "delivered",
      "description": "Packet has been DELIVERED",
      "location": "New Delhi",
      "code": null
    },
    {
      "timestamp": null,
      "localTime": "2021-05-25T16:42:00",
      "status": "in_transit",
      "description": "Update Forwarding No: 915504406 And Forwarding Party: DTDC",
      "location": "New Delhi",
      "code": null
    },
    {
      "timestamp": null,
      "localTime": "2021-05-24T11:40:00",
      "status": "in_transit",
      "description": "Packet Received",
      "location": "New Delhi",
      "code": null
    },
    {
      "timestamp": null,
      "localTime": "2021-05-14T12:52:00",
      "status": "in_transit",
      "description": "Shipment Received at HUB",
      "location": "Shenzhen(China)",
      "code": null
    }
  ]
}
```

## Notes

- **Source**: the "Packet History" table returned by the track form's AJAX endpoint (date, location, activity).
- **Time zone**: the table prints no zone and its facilities span India and China, so only `localTime` is set.
- **Handoff**: an activity like `Update Forwarding No: … And Forwarding Party: DTDC` becomes `message`; pass that number to the partner carrier for its own scans.

## Related Resources

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