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

# Update a Return with a preprinted label

> Amend a Return Shipment registered through the preprinted-label flow.

The update counterpart of the [preprinted-label create flow](/guides/create-return-preprinted-label): same endpoint as [Update a Return](/guides/update-return), but the Return is identified by its **Shipment** — `shipment_id` or `shipment_uuid` as the query parameter — and the body carries **only the `shipment` object**. Full specs: [API reference](/api-reference/v5/returns/update-return).

<Info>
  The Returns APIs are available to accounts using the **Perform.AI Returns Experience**. Contact your account team to enable it.
</Info>

```bash theme={null}
curl --request POST \
  --url 'https://api.perform.ai/v5/return/update/?shipment_id=SHP-RET-2026-000043' \
  --header 'Authorization: Bearer YOUR_ACCESS_TOKEN' \
  --header 'Content-Type: application/json' \
  --data '{
    "shipment": {
      "note": "Consumer confirmed drop-off on 22 Sep",
      "tags": ["preprinted-return"]
    }
  }'
```

The rules mirror the standard [Update a Return](/guides/update-return):

* Most `shipment` fields **replace** stored values entirely (whole `line_items`, whole address objects); `tags`, `events`, `linked_shipments`, `documents` are **add-only**.
* `shipment_id` is write-once.
* **Don't send `tracking_number` or `carrier_reference`** — in this flow they were set at creation from the preprinted label and are managed by the system afterwards.
* No updates after a successful carrier booking.

The response is the nested `data.shipment` + `data.return_ticket` shape.
