# Track a shipment

> Track shipments that are booked through MyParcelParcel.

`GET https://services.parcelparcel.com/partners-api/v1/track/{trackingNumber}`

This endpoint allows you to track your shipments. See the [example response](#example-response) below.

## Header

You need to add the following headers:

| Name         | Value                          |
| :----------- | :----------------------------- |
| Content-Type | application/json               |
| X-PP-API     | `{YourAPIKey}@{YourAPISecret}` |

Don't you have an API Key and API Secret yet? Check our [Authentication](https://www.parcelparcel.com/api-docs/authentication/) page and how to get them in under a minute.

## Body

There is no body needed; you just put the tracking number at the end, and you are all set.

For example:

```
https://services.parcelparcel.com/partners-api/v1/track/123456789
```

You can use *123456789* as a dummy tracking number if you haven't created a shipment with us yet.

## Response

The following response elements are returned:

| Name | Value | Comments |
| :--- | :--- | :--- |
| status | string | The tracking status of the shipment could be: *info\_received = Shipment created but not in transit yet in\_transit = After the shipment is collected exception = When there is a problem with a shipment delivered = When the shipment is delivered* |
| pod | boolean | If the proof of delivery (signed) is available or not |
| checkpoints | array | A collection of all the tracking events that a shipment has gone through. |
| checkpoints.time | string | The timestamp when the event occured |
| checkpoints.code | string | A code that is returned from the carrier |
| checkpoints.location | string | The location of the checkpoint |
| checkpoints.signedBy | string | When available, the name of the person who signed for the delivery. |

### Example Response

```json
{
  "status": "in_transit",
  "pod": false,
  "checkpoints": [
    {
      "time": "2025-06-12T01:15:30-05:00",
      "code": "OC",
      "message": "Label created",
      "description": "Shipment information sent to FedEx",
      "location": "",
      "signedBy": ""
    },
    {
      "time": "2025-06-12T11:33:00+02:00",
      "code": "PU",
      "message": "Picked up",
      "description": "Picked up",
      "location": "6662, ELST, Netherlands (Holland)",
      "signedBy": ""
    },
    {
      "time": "2025-06-12T14:32:00+02:00",
      "code": "CC",
      "message": "In transit",
      "description": "International shipment release - Export",
      "location": "6662, ELST, Netherlands (Holland)",
      "signedBy": ""
    }
  ]
}
```

## Examples

Don't know how to test these requests? Check [our guide](https://www.parcelparcel.com/api-docs/postman-guide/).

### Request example - Track a shipment with a dummy tracking number

```bash cURL
curl --location --request GET 'https://services.parcelparcel.com/partners-api/v1/track/123456789' \
--header 'X-PP-API: {YourAPIKey}@{YourAPISecret}' \
--header 'Content-Type: application/json'
```
```http HTTP
GET /partners-api/v1/track/123456789 HTTP/1.1
Host: services.parcelparcel.com
X-PP-API: {YourAPIKey}@{YourAPISecret}
Content-Type: application/json
```

Don't forget to change the **X-PP-API** element in the header for this request to work. You can keep *123456789* as a dummy tracking number to try it out.
