> ## Documentation Index
> Fetch the complete documentation index at: https://developers.e-cross.tech/llms.txt
> Use this file to discover all available pages before exploring further.

# Update parcel trackings

> Send tracking events from fulfillment to e-CROSS TMS

<Note>
  When you already know the order, retrieve `parcelId` from `order.shipping.deliveries[].parcels[].parcelId` after the order reaches `READY_TO_SHIP`. Use this endpoint to send fulfillment tracking events to e-CROSS.
</Note>

<RequestExample>
  ```bash cURL theme={null}
  curl -X PUT 'https://hermes.api.e-cross.tech/ext/parcelTrackings' \
    -H 'Authorization: Bearer YOUR_TOKEN' \
    -H 'Content-Type: application/json' \
    -d '{
      "carrierId": "ACME",
      "events": [
        {
          "parcelId": "ACME800413194788BR",
          "externalParcelId": "NL970165916BR",
          "eventDate": "2023-08-07T19:48:04+00:00",
          "externalCode": "AWAITING_PICK_UP",
          "description": "Order packed",
          "location": "Paris, FR"
        },
        {
          "parcelId": "ACME800413194788BR",
          "externalParcelId": "NL970165916BR",
          "eventDate": "2023-08-08T05:20:29+00:00",
          "externalCode": "LEFT_FULFILLMENT",
          "description": "Parcel delivered to logistic operator",
          "location": "Paris, FR"
        }
      ]
    }'
  ```
</RequestExample>

<ResponseExample>
  ```json Success theme={null}
  {
    "status": "UPDATE IN PROGRESS"
  }
  ```
</ResponseExample>

### Request Parameters

<ParamField body="carrierId" type="string" required>
  ID of the partner (fulfillment), registered within e-CROSS. This is a constant value that uniquely identifies your fulfillment and is informed by e-CROSS.
</ParamField>

<ParamField body="events" type="array" required>
  List of tracking events. Maximum 500 events per request.

  <Expandable title="event fields">
    <ParamField body="parcelId" type="string">
      The parcel ID within e-CROSS. You can find it in `order.shipping.deliveries[].parcels[].parcelId` after the order reaches `READY_TO_SHIP`. Either `parcelId` or `externalParcelId` must be provided.
    </ParamField>

    <ParamField body="externalParcelId" type="string">
      The ID of the parcel on the external system. This is usually the value encoded in a barcode on the shipping label. You can identify this by:

      * Using a barcode scanner to read the barcode on the shipping label
      * Finding it in the order: `order.shipping.deliveries[].lastMileTrackingNumber`

      Either `parcelId` or `externalParcelId` must be provided.
    </ParamField>

    <ParamField body="eventDate" type="string" required>
      ISO 8601 date and time informing the exact date and time when the event happened (e.g., `2023-08-07T19:48:04+00:00`).
    </ParamField>

    <ParamField body="externalCode" type="string" required>
      Code of the tracking event on the external system. Supported events:

      * `AWAITING_PICK_UP` - Parcel was picked and packed, ready to be picked up by first mile operator
      * `LEFT_FULFILLMENT` - Parcel was picked by first mile operator and left the fulfillment facility
    </ParamField>

    <ParamField body="description" type="string" required>
      Human-readable description of the event (e.g., "Order packed", "Parcel delivered to logistic operator").
    </ParamField>

    <ParamField body="location" type="string" required>
      Location where the event happened. Can be a city, state, country, etc. Format: `{city}, {state}, {country}` (e.g., "Paris, FR").
    </ParamField>
  </Expandable>
</ParamField>

### Response Fields

<ResponseField name="status" type="string" required>
  Current status of the update. Returns `UPDATE IN PROGRESS` when the request is accepted.
</ResponseField>
