> ## 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

> Approve, reject, or amend a Return and its Return Shipment.

`POST /v5/return/update/` updates an existing Return — the ticket, the Return Shipment, or both. 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>

## Identify the Return

One query parameter identifies it — `return_uuid`, `return_id`, or `shipment_uuid`:

```bash theme={null}
curl --request POST \
  --url 'https://api.perform.ai/v5/return/update/?return_id=RMA-2026-0042' \
  --header 'Authorization: Bearer YOUR_ACCESS_TOKEN' \
  --header 'Content-Type: application/json' \
  --data '{
    "return_ticket": {
      "approver_email": "returns-team@yourstore.com",
      "internal_notes": "Approved after photo review."
    }
  }'
```

(For returns created through the [preprinted-label flow](/guides/update-return-preprinted-label), identify by `shipment_id`/`shipment_uuid` instead.)

## What you can change

Both body objects are optional — send only what changes.

**`return_ticket`** fields replace their stored values: `total_refund_amount`, `comment`, `return_proofs` (the whole array), `refund_method`, `return_method`, `reject_reason`, `approver_email`, `additional_cost`, `internal_notes`.

**`shipment`** follows [Update Shipment](/guides/update-shipment) semantics — most fields replace entirely (whole `line_items`, whole address objects); `tags`, `events`, `linked_shipments`, `documents` are add-only.

**Locked:**

| Rule          | Detail                                                                                                            |
| ------------- | ----------------------------------------------------------------------------------------------------------------- |
| Write-once    | `return_id`, `cost_of_return`, `requested_date`, `shipment_id` — settable once, never changed.                    |
| Never send    | `tracking_number`, `carrier_reference` — the Return Booking Service sets them when the return label is generated. |
| After booking | A Return Shipment cannot be updated once its carrier booking succeeded.                                           |

<Tip>
  Identical update requests are deduplicated for 30 seconds — harmless for retries, but don't rely on it for concurrency control.
</Tip>

The response is the same nested `data.shipment` + `data.return_ticket` shape as [Create a Return](/guides/create-return), with the updated `updated_date`.
