# Intelcom (Dragonfly) Tracking API & MCP

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

Query live **Intelcom / Dragonfly** (`intelcom`) package status, scan history, and driver drop-off notes in a single synchronous `GET` request or MCP tool call. Intelcom is Amazon Canada's largest private last-mile carrier and also operates internationally under the **Dragonfly** brand; `lastscanned` auto-detects 16-character `INTLCM…` tracking numbers in Pass 1 and returns a normalized `TrackingResult` JSON payload.

## Overview & Quick Facts

| Property | Value |
|---|---|
| **Carrier slug (`?carrier=`)** | `intelcom` |
| **Brand & service aliases** | Intelcom, Dragonfly, Intelcom Express, Dragonfly Shipping (`intelcom.ca`, `dragonflyshipping.ca`) |
| **Category** | Canadian & regional e-commerce last-mile courier (Detection precedence **#20 of 31**) |
| **Single-package REST endpoint** | `GET https://api.lastscanned.com/v1/track/{trackingNumber}` |
| **Batch REST endpoint** | `GET https://api.lastscanned.com/v1/track?numbers=INTLCM...,INTLCM...` (up to 35 numbers per carrier in a 100-number call) |
| **MCP server (`https://mcp.lastscanned.com`)** | `track_package`, `track_packages`, `list_carriers` (`claude mcp add --transport http lastscanned https://mcp.lastscanned.com`) |
| **Authentication & pricing** | `Authorization: Bearer lsk_live_...` · **1 free keyless lookup/day per IP** · **Free tier** (5 unique numbers/day, $0) · **Pro** ($4.99/mo for 1,000 unique numbers, unlimited re-polls, $0.015/extra) · **HTTP 402 Stripe MPP** ($0.50 for 25-number `lsk_pack_` key or $0.02/number in USDC on Tempo) |

## Why developers use `lastscanned` for Intelcom / Dragonfly

- **Unified Intelcom + Dragonfly coverage with zero enterprise onboarding**: Intelcom rebranded its consumer-facing operations outside Quebec (and in Australia) to **Dragonfly**, and does not offer self-serve API keys to merchants or third-party developers. `lastscanned` tracks `INTLCM…` barcodes across both brands out of the box.
- **Template interpolation & cleanup**: Intelcom's raw tracking responses contain uninterpolated placeholders like `"{driver} has delivered your package."` or trailing internal suffixes like `"First delivery attempt / REASON"`. `lastscanned` interpolates `driver_name` / `client_code`, strips internal suffixes, filters out hidden steps, and maps step numbers (`1`–`4`, negative steps for exceptions) into the 7 standard statuses.
- **Drop-off location notes in `message`**: When an Intelcom driver leaves a package, `lastscanned` surfaces the English drop-off location note (for example, *"Your package was left at your front door"* or *"left in your mailbox or mail slot"*) in top-level `message`.

## Tracking Number Formats & Auto-Detection (`matches` vs `mayMatch`)

Intelcom is evaluated **twentieth (#20)** in `lastscanned`'s two-pass detector:

| Pass | Rule / Regex | Check Digit | Examples |
|---|---|---|---|
| **Pass 1 (`matches`)** | `/^INTLCM[A-Z]\d{9}$/i` (`INTLCM` + 1 letter + 9 digits = 16 chars) | — | `INTLCMK204815937`, `INTLCMI719662704` |
| **Pass 2 (`mayMatch`)** | *None* | — | — |

### When is `?carrier=intelcom` optional vs required?

- **Optional (auto-detected)**: All 16-character `INTLCM` + letter + 9-digit barcodes auto-detect in Pass 1 (the letter increments as the 9-digit counter wraps, e.g. `INTLCME…`, `INTLCMI…`, `INTLCMK…`).
- **Amazon Canada `TBC…` numbers**: Amazon Logistics Canada numbers starting `TBC` + 12 digits route to [Amazon](/carriers/amazon) (`amazon`) by default. If you have a non-`INTLCM` partner reference billed directly through Intelcom, pass `?carrier=intelcom`.

## Synchronous `GET` Request & Normalized JSON Response

### `curl`

```bash
curl -s "https://api.lastscanned.com/v1/track/INTLCMK204815937" \
  -H "Authorization: Bearer $LASTSCANNED_API_KEY"
```

### JavaScript / TypeScript (`fetch`)

```ts
const res = await fetch("https://api.lastscanned.com/v1/track/INTLCMK204815937", {
  headers: { Authorization: `Bearer ${process.env.LASTSCANNED_API_KEY}` },
});
const pkg = await res.json();
console.log(pkg.status, pkg.message, pkg.events[0]);
```

### MCP `track_package` tool call

```json
{
  "tool": "track_package",
  "arguments": {
    "tracking_number": "INTLCMK204815937"
  }
}
```

### Normalized `TrackingResult` JSON response

```json
{
  "carrier": "intelcom",
  "trackingNumber": "INTLCMK204815937",
  "status": "delivered",
  "statusDescription": "Delivered - No Signature",
  "service": "STANDARD",
  "deliveredAt": "2026-10-25T17:42:10Z",
  "deliveredAtLocal": "2026-10-25T13:42:10",
  "signedBy": null,
  "destination": {
    "city": "Montreal",
    "state": "QC",
    "country": "CA"
  },
  "estimatedDelivery": null,
  "estimatedDeliveryAt": null,
  "message": "Marc has delivered your package.",
  "events": [
    {
      "timestamp": "2026-10-25T17:42:10Z",
      "localTime": "2026-10-25T13:42:10",
      "status": "delivered",
      "description": "Delivered - No Signature",
      "location": "Montreal, QC",
      "code": "601"
    },
    {
      "timestamp": "2026-10-25T12:15:04Z",
      "localTime": "2026-10-25T08:15:04",
      "status": "out_for_delivery",
      "description": "Loaded",
      "location": null,
      "code": "300"
    },
    {
      "timestamp": "2026-10-25T08:03:51Z",
      "localTime": "2026-10-25T04:03:51",
      "status": "in_transit",
      "description": "Delivery station inbound scan",
      "location": null,
      "code": "108"
    },
    {
      "timestamp": "2026-10-24T19:20:00Z",
      "localTime": "2026-10-24T15:20:00",
      "status": "label_created",
      "description": "Data received",
      "location": null,
      "code": "0"
    }
  ]
}
```

> **Raw status & step codes**: `events[].code` preserves Intelcom's numeric status code (`"0"` data received, `"105"` received, `"108"` delivery station inbound scan, `"300"` loaded / out for delivery, `"590"` first delivery attempt, `"601"` delivered without signature), while `status` maps Intelcom's `step` (`1` → `label_created`, `2` → `in_transit`, `3` → `out_for_delivery`, `4` → `delivered`, `< 0` → `exception`).

## Carrier-Specific Status & Integration Notes

- **UTC & local timestamps**: Intelcom reports scan times as Unix epoch milliseconds alongside an offset-qualified `eta` timestamp (e.g. `2026-10-25T12:32:23.000000-04:00`), which `lastscanned` uses to compute both UTC `timestamp` and local wall-clock `localTime` (plus `estimatedDelivery` and `estimatedDeliveryAt` while in transit).
- **Retention window**: Intelcom retains delivered parcels in its tracking system for roughly 90 days after delivery; older numbers return `404 not_found`.

## Related Resources

- **Live browser lookup tool**: [Track an Intelcom / Dragonfly package live on lastscanned.com/lookup/intelcom](https://lastscanned.com/lookup/intelcom)
- **Carrier hub**: [All 31 supported carriers](/carriers)
- **Regex & check digits**: [Tracking number formats & auto-detection](/formats)
- **AI support workflows**: [WISMO AI agents & synchronous tracking](/wismo)
