# Nova Global Tracking API & MCP

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

Query live **Nova Global** (`novaglobal`) package status and scan history in a single synchronous `GET` request or MCP tool call.

## Overview & Quick Facts

| Property | Value |
|---|---|
| **Carrier slug (`?carrier=`)** | `novaglobal` |
| **Brand aliases** | Nova Poshta Global, Nova Post, NPG, personal.nova.global |
| **Category** | Ukrainian international parcel service |
| **Region** | Ukraine |
| **Single-package REST endpoint** | `GET https://api.lastscanned.com/v1/track/{trackingNumber}` |
| **Batch REST endpoint** | `GET https://api.lastscanned.com/v1/track?numbers=WB0000000100001234NPG,...` |
| **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`)** | `/^WB\d{16}NPG$/` | none | `WB0000000100001234NPG` |
| **Pass 2 (`mayMatch`)** | none | none | none |

`WB` + 16 digits + `NPG` belongs to Nova Global alone, so `?carrier=novaglobal` is optional.

## Synchronous `GET` Request & Normalized JSON Response

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

```json
{
  "carrier": "novaglobal",
  "trackingNumber": "WB0000000100001234NPG",
  "status": "in_transit",
  "statusDescription": "Poland.Cargo departed from the transit sorting centre",
  "service": null,
  "deliveredAt": null,
  "deliveredAtLocal": null,
  "signedBy": null,
  "destination": {
    "city": null,
    "state": null,
    "country": "CA"
  },
  "message": "Handed to UPS as 1Z999AA10123456784",
  "events": [
    {
      "timestamp": "2026-02-05T16:31:30Z",
      "localTime": "2026-02-05T19:31:30",
      "status": "in_transit",
      "description": "Poland.Cargo departed from the transit sorting centre",
      "location": "PL",
      "code": "26"
    },
    {
      "timestamp": "2026-02-04T10:30:32Z",
      "localTime": "2026-02-04T13:30:32",
      "status": "in_transit",
      "description": "Ukraine.Flight departed for the destination",
      "location": "UA",
      "code": "54"
    },
    {
      "timestamp": "2026-02-01T19:33:24Z",
      "localTime": "2026-02-01T22:33:24",
      "status": "label_created",
      "description": "Order for delivery to the destination country placed",
      "location": null,
      "code": "1-0"
    }
  ]
}
```

## Notes

- **Language**: the API answers Ukrainian whatever `lang` is sent; the wording is kept as sent (the sample above is translated for illustration). Status comes from the numeric `code` where known.
- **Time zone**: `timestamp` is the real instant (epoch seconds); `localTime` is Kyiv time as the site prints it.
- **Handoff**: the reply's `bills` lists the numbers the parcel travels under; the last one is the partner's (`partner`, for example UPS).

## Related Resources

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