> For the complete documentation index, see [llms.txt](https://docs.payments.thalescloud.io/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.payments.thalescloud.io/central-issuance/implement-central-issuance/tracking-hub.md).

# Tracking hub

Use tracking hub to receive production, shipment, or return updates for a physical card produced outside Thales D1.

### Flow

<figure><img src="/files/Ehmrot2VpOIHSeK8dFEu" alt=""><figcaption></figcaption></figure>

1. Issuer back-end request to track the card
2. D1 Connects to carriers to retrieve shipment information
3. Carriers sends regular shipment statuses
4. D1 formats and sends the statuses to Issuer back-end

### Sequence diagram

<figure><img src="/files/qC05K9AMbyqlMYi5ySRJ" alt=""><figcaption></figcaption></figure>

### How it works

{% tabs %}
{% tab title="PRODUCTION" %}

* Use `trackingType = PRODUCTION` to receive a production completion update.
* Thales D1 sends one notification with `status = SUCCESSFUL`.
* The notification includes `details.status = CARD_SHIPPED`.
  {% endtab %}

{% tab title="SHIPMENT" %}

* Use `trackingType = SHIPMENT` to receive shipment progress updates.
* Thales D1 first sends a notification with `status = PENDING`.
* Thales D1 then sends one or more notifications with `status = SUCCESSFUL` as shipment data changes.
* When available, the notification includes `details.shipment`. See [Track shipment](/central-issuance/implement-central-issuance/card-order-tracking/track-shipment.md).
  {% endtab %}

{% tab title="RETURN" %}

* Use `trackingType = RETURN` to receive a returned-card update.
* Thales D1 sends one notification with `status = SUCCESSFUL`.
* The notification includes `details.status = CARD_RETURNED`.
  {% endtab %}
  {% endtabs %}

### Required APIs

| API                                                                                                                                                        | Inbound/Outbound    | Description                                                           |
| ---------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------- | --------------------------------------------------------------------- |
| [Tracking hub](/central-issuance/integrate-d1-api/d1-api-reference/inbound-api-to-d1/tracking-hub-api.md#post-issuers-issuerid-physicalcards-cardid-track) | Issuer -> Thales D1 | Request production, shipment, or return tracking for a physical card. |
| [Notifications](/central-issuance/integrate-d1-api/d1-api-reference/outbound-api-from-d1/card-api.md#post-notifications-d1-v2-issuers-issuerid-cards)      | Issuer <- Thales D1 | Receive notifications for the `STANDALONE_TRACKING` operation.        |

### API Inputs

Required D1 API inputs:

* `issuerId`: Unique identifier of the issuer.
* `cardId`: Unique identifier of the card.
* `trackingType`: Type of tracking to perform. Supported values are `PRODUCTION`, `SHIPMENT`, and `RETURN`.

#### Examples

**Tracking type = PRODUCTION**

```json
{
  "trackingType": "PRODUCTION",
  "productionSite": "London"
}
```

**Tracking type = SHIPMENT**

```json
{
  "trackingType": "SHIPMENT",
  "trackingNumber": "61293150000079650811",
  "shipmentDate": "2023-01-21T17:32:28Z",
  "productionSite": "London",
  "postalCode": "WC2N5DU",
  "countryCode": "GB"
}
```

**Tracking type = RETURN**

```json
{
  "trackingType": "RETURN",
  "productionSite": "London"
}
```

### Track the result

Consume notifications on the `STANDALONE_TRACKING` operation.

Key fields:

* `operation`: Always `STANDALONE_TRACKING`.
* `status`: Operation status. Values are `PENDING`, `SUCCESSFUL`, or `FAILED`.
* `cardId`: Card identifier used in the request.
* `details.trackingType`: `PRODUCTION`, `SHIPMENT`, or `RETURN`.
* `details.productionSite`: Production site identifier, when available.
* `details.status`: Tracking result, such as `CARD_SHIPPED` or `CARD_RETURNED`.
* `details.shipment`: Shipment tracking details for `SHIPMENT` updates. See [Track shipment](/central-issuance/implement-central-issuance/card-order-tracking/track-shipment.md).

Top-level `status` is the operation status.

`details.status` is the business tracking status.

{% hint style="info" %}
Notifications can arrive more than once, and they can arrive out of order. Use `operationId` to de-duplicate events.
{% endhint %}

Notification sequence by tracking type:

| trackingType | Notifications sent                                                                                                                        |
| ------------ | ----------------------------------------------------------------------------------------------------------------------------------------- |
| `PRODUCTION` | One notification with `status = SUCCESSFUL` and `details.status = CARD_SHIPPED`.                                                          |
| `RETURN`     | One notification with `status = SUCCESSFUL` and `details.status = CARD_RETURNED`.                                                         |
| `SHIPMENT`   | One notification with `status = PENDING`, then one or more notifications with `status = SUCCESSFUL` as shipment updates become available. |

#### Notification examples

**Tracking type = PRODUCTION**

```json
{
  "operationId": "op-7a3f2c1e-9b4d-4f8a-bc12-1a2b3c4d5e6f",
  "operation": "STANDALONE_TRACKING",
  "status": "SUCCESSFUL",
  "issuerId": "issuer-001",
  "cardId": "c-9f8e7d6c5b4a",
  "timestamp": "2026-05-22T09:38:00Z",
  "details": {
    "trackingType": "PRODUCTION",
    "productionSite": "PERSO-CENTER-FR-01",
    "status": "CARD_SHIPPED"
  }
}
```

**Tracking type = SHIPMENT — first notification**&#x20;

```json
{
  "operationId": "op-7a3f2c1e-9b4d-4f8a-bc12-1a2b3c4d5e6f",
  "operation": "STANDALONE_TRACKING",
  "status": "PENDING",
  "issuerId": "issuer-001",
  "cardId": "c-9f8e7d6c5b4a",
  "timestamp": "2026-05-22T09:38:05Z",
  "details": {
    "trackingType": "SHIPMENT",
    "productionSite": "PERSO-CENTER-FR-01",
    "status": "CARD_SHIPPED"
  }
}
```

**Tracking type = SHIPMENT — subsequent notification (with shipment details)**

```json
{
  "operationId": "op-7a3f2c1e-9b4d-4f8a-bc12-1a2b3c4d5e6f",
  "operation": "STANDALONE_TRACKING",
  "status": "SUCCESSFUL",
  "issuerId": "issuer-001",
  "cardId": "c-9f8e7d6c5b4a",
  "timestamp": "2026-05-22T14:12:33Z",
  "details": {
    "trackingType": "SHIPMENT",
    "productionSite": "PERSO-CENTER-FR-01",
    "status": "CARD_SHIPPED",
    "shipment": {
      "carrier": "fedex",
      "trackingNumber": "1234567890",
      "status": "IN_TRANSIT",
      "message": "In transit",
      "trackingUrl": "https://www.fedex.com/track?trk=1234567890",
      "estimatedDeliveryDate": "2026-05-24T00:00:00Z",
      "lastUpdatedAt": "2026-05-22T13:55:00Z",
      "lastCheckpoint": {
        "checkpointTime": "2026-05-22T13:55:00Z",
        "city": "Paris",
        "countryName": "France",
        "message": "Arrived at facility"
      }
    }
  }
}
```

**Tracking type = RETURN**

```json
{
  "operationId": "op-7a3f2c1e-9b4d-4f8a-bc12-1a2b3c4d5e6f",
  "operation": "STANDALONE_TRACKING",
  "status": "SUCCESSFUL",
  "issuerId": "issuer-001",
  "cardId": "c-9f8e7d6c5b4a",
  "timestamp": "2026-05-25T10:02:11Z",
  "details": {
    "trackingType": "RETURN",
    "productionSite": "PERSO-CENTER-FR-01",
    "status": "CARD_RETURNED"
  }
}
```


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://docs.payments.thalescloud.io/central-issuance/implement-central-issuance/tracking-hub.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
