# HR Parcel Tracking API & MCP

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

Query live **HR Parcel** (`hrparcel`) shipment status and scan history in a single synchronous `GET` request or MCP tool call. 14-digit barcodes are shared with other carriers, so pass `?carrier=hrparcel`.

## Overview & Quick Facts

| Property | Value |
|---|---|
| **Carrier slug (`?carrier=`)** | `hrparcel` |
| **Brand aliases** | HR Parcel, HRParcel, HR Parcel Italia |
| **Category** | Parcel delivery (Italy) |
| **Single-package REST endpoint** | `GET https://api.lastscanned.com/v1/track/{trackingNumber}` |
| **Batch REST endpoint** | `GET https://api.lastscanned.com/v1/track?numbers=16000000012345,...` |
| **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. Barcodes are 14 digits starting `16`, a shape other carriers also use, so `?carrier=hrparcel` is required.

## Synchronous `GET` Request & Normalized JSON Response

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

```json
{
  "carrier": "hrparcel",
  "trackingNumber": "16000000012345",
  "status": "delivered",
  "statusDescription": "Spedizione Consegnata",
  "service": null,
  "deliveredAt": "2024-05-31T11:13:58Z",
  "deliveredAtLocal": "2024-05-31T13:13:58",
  "signedBy": "MARIO ROSSI",
  "destination": null,
  "events": [
    {
      "timestamp": "2024-05-31T11:13:58Z",
      "localTime": "2024-05-31T13:13:58",
      "status": "delivered",
      "description": "Spedizione Consegnata",
      "location": "Reggio nell'Emilia RE (RE)",
      "code": "1003"
    },
    {
      "timestamp": "2024-05-31T06:20:58Z",
      "localTime": "2024-05-31T08:20:58",
      "status": "out_for_delivery",
      "description": "In Consegna",
      "location": "REGGIO EMILIA (RE)",
      "code": "1002"
    },
    {
      "timestamp": "2024-05-30T12:56:34Z",
      "localTime": "2024-05-30T14:56:34",
      "status": "in_transit",
      "description": "Presa in carico all'HUB",
      "location": null,
      "code": "1001"
    },
    {
      "timestamp": "2024-05-29T01:45:33Z",
      "localTime": "2024-05-29T03:45:33",
      "status": "label_created",
      "description": "Spedizione non ancora ricevuta presso i nostri magazzini",
      "location": null,
      "code": "1000"
    }
  ]
}
```

## Notes

- **Source**: the WordPress `admin-ajax.php` action behind hrparcel.com's tracking box. An unknown barcode returns an empty shipment.
- **Status**: from HR Parcel's codes: 1000 not yet received, 1001/1010 in transit, 1002 out for delivery, 1003 delivered.
- **Time zone**: scan times are read as `Europe/Rome`. `signedBy` is the signatory on the delivery scan when it is a name (not "mano", by hand).

## Related Resources

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