---
title: "PUT /public/v3/orders/{external_id}"
method: PUT
path: "/public/v3/orders/{external_id}"
tags: ["Manage orders"]
---

# PUT /public/v3/orders/{external_id}

`PUT /public/v3/orders/{external_id}`

Updates the order of the `external_id` specified in the path parameter.<br /><br />Note that you can update only some fields from the create (POST) request. You cannot update `external_id`, `cod_value`, `cod_currency`, `delivery_type`, `service_type`, `customer.has_gdpr_consent`, `order_details["sale_number"]`, `delivery_instructions`, and `pick_up_instructions`. There is no validation performed if you try to update those fields.<br /><br />In case you need to update the pickup address, cancel the order and use a different external ID to create an order with the correct pickup address.

## Path parameters

- `external_id` string, required — Order's ID assigned by the retailer; unique within all the retailer's orders manifested to Paack. Can include special characters, excluding a comma, though for further use you need to [encode them](./special-characters). `external_id` equals `tracking_id`.

## Request body

- UpdateOrderRequest — Defines the request to update the specified order.
  - `customer` UpdateCustomer, required — Information on the person receiving the parcels.
    - `first_name` string, required — Customer's first or full name. If the `last_name` value is not specified, the full name is split and persisted in both fields.
    - `last_name` string — Customer's last name. If not specified in the input, the last part of the first name is persisted in this field.
    - `email` string — Customer's email address.
    - `phone` string — Customer's phone number with the country prefix.
  - `delivery_address` object, required — Delivery address.
    - `city` string, required — City.
    - `country` 'ES' | 'FR' | 'GB' | 'IT' | 'PT', required — Country in ISO 3166 alpha 2 format.
    - `line1` string, required — Primary address.
    - `post_code` string, required — Postcode.
    - `line2` string — Additional address information.
  - `expected_delivery_ts` WindowObject, required — Timeslot defined by the objects `start` and `end`.
    - `start` WindowDatetime, required — UTC time defined by the properties `date` and `time`.
      - `date` string, date, required — Date in `YYYY-MM-DD` format.
      - `time` string, time, required — UTC time in `hh:mm:ss` format.
    - `end` WindowDatetime, required — UTC time defined by the properties `date` and `time`.
      - `date` string, date, required — Date in `YYYY-MM-DD` format.
      - `time` string, time, required — UTC time in `hh:mm:ss` format.
  - `parcels` AddOrderRequestParcelsElem[] — Parcels included in the order. If you don't want to update the parcels, keep the array null or empty. If you want to update, add, or remove parcels, define them all one per object as this array overwrites whatever was persisted for the parcels before the update.
    - `barcode` string, required — Barcode of the parcel.
    - `height` number, double — Height of the parcel in cm.
    - `length` number, double — Length of the parcel in cm.
    - `width` number, double — Width of the parcel in cm.
    - `weight` number, double — Actual weight of the parcel in kg.
    - `type` 'standard' — :construction: Currently input for this information is not persisted by Paack. Value equals `standard` when retrieved through the GET method.
    - `parcel_details` unknown
  - `expected_pick_up_ts` WindowObject — Timeslot defined by the objects `start` and `end`.
    - `start` WindowDatetime, required — UTC time defined by the properties `date` and `time`.
      - `date` string, date, required — Date in `YYYY-MM-DD` format.
      - `time` string, time, required — UTC time in `hh:mm:ss` format.
    - `end` WindowDatetime, required — UTC time defined by the properties `date` and `time`.
      - `date` string, date, required — Date in `YYYY-MM-DD` format.
      - `time` string, time, required — UTC time in `hh:mm:ss` format.
  - `clusters` string[] — :construction: Identifiers that associate orders with each other. Learn more [here](./reverse-logistics). Note that, as of now, the array cannot be retrieved through a GET request.

## Response `201`

Confirms the order of the provided `external_id` has been updated.

- object — Defines the response to a PUT `/public/v3/orders/{external_id}` request.
  - `success` object — Contains the order's external ID that can be used for tracking.
    - `external_id` string, required — Order's ID assigned by the retailer; unique within all the retailer's orders manifested to Paack. Can include special characters, excluding a comma, though for further use you need to [encode them](./special-characters). `external_id` equals `tracking_id`.

## Other responses

- `400` — Returned in case of validation errors. The details are displayed in the `error` array. Note that the response can return only one error at once.<br /><br />To ensure a correct validation of a request:<br />- Body of the request must use a structured JSON format.<br />- All mandatory fields must be defined.<br />- Values for fields in the request must match the specific data type and format, including all limitations (e.g., `external_id` must be unique).
- `401` — Communicates a missing or expired access token for authorization. Currently used also in case of no rights to access the API.
- `403` — :construction: Communicates no rights to access the API. Contact our Customer Solutions team for help. While this HTTP error code is currently not supported the API returns 401.
- `404` — In case the external ID specified in the path parameter doesn't correspond to any order.
- `500` — Returned in case of internal errors, which means the problem is on Paack's side.

---

[API](https://skmtc.dev/paack/apis/orders-api.md) · [All operations](https://skmtc.dev/paack/apis/orders-api/llms.txt) · [OpenAPI document](https://skmtc-service-production.skmtc.workers.dev/v1/apis/paack/orders-api/revisions/2582c46598cc/schema)
