> ## Documentation Index
> Fetch the complete documentation index at: https://www.zippendo.com/docs/llms.txt
> Use this file to discover all available pages before exploring further.

# Hold, cancel, or delete a shipment

> Delete a pending shipment from the list, when On Hold and Cancelled appear, and why there is no Hold or Cancel button on shipment detail.

The Shipments list can **delete** a **Pending** shipment. **On Hold** and **Cancelled** are **statuses** (filters, badges). There is **no Hold** and **no Cancel** button on shipment detail. Those status changes come from [automations](/docs/how-to/automations), not from a header action.

Related: [Send a shipment](/docs/how-to/send-a-shipment), [Create a shipment](/docs/tutorials/create-a-shipment).

<Warning>
  **Delete** permanently removes the row. Type the shipment **reference** to confirm. Only **Pending** shipments can be deleted. The API rejects any other status with **The request was invalid.** (`BAD_REQUEST`: *Shipment is not pending, it cannot be deleted*).
</Warning>

## What exists on each surface

| Action     | On the shipment screen?                          | How it happens                                                                                                                   |
| ---------- | ------------------------------------------------ | -------------------------------------------------------------------------------------------------------------------------------- |
| **Delete** | **Shipments** list row menu only — not on detail | **Delete** → confirm modal                                                                                                       |
| **Hold**   | No button                                        | Status **On Hold**. Automation **Set Shipment On Hold** (pending → on hold)                                                      |
| **Cancel** | No button                                        | Status **Cancelled**. Automation **Cancel Shipment**. Deleting a pending shipment emits the **Shipment Cancelled** webhook event |

Shipment detail header actions are **Send Shipment** / **Retry Send** (pending or error) and sometimes **Create Return Shipment** — never hold, cancel, or delete. [Send a shipment](/docs/how-to/send-a-shipment).

## Delete (list)

Open **Shipments**. Each row menu (`data-testid="table.row-actions"`):

| Item       | What it does                                                                            |
| ---------- | --------------------------------------------------------------------------------------- |
| **View**   | Opens `/dashboard/shipments/:id`                                                        |
| **Delete** | Opens the confirm modal. Shown on **every** row; the API still only accepts **Pending** |

<Frame caption="Shipments row menu — View and Delete">
  <img src="https://mintcdn.com/zippendo/-jr41VsJfvHKJJ2U/images/how-to/hold-cancel-and-delete-shipments/01-row-delete-menu-light.png?fit=max&auto=format&n=-jr41VsJfvHKJJ2U&q=85&s=19c2261fec4a2eb2b938667511ff821c" alt="Shipments table row menu with View and Delete" className="block dark:hidden" width="2880" height="1800" data-path="images/how-to/hold-cancel-and-delete-shipments/01-row-delete-menu-light.png" />

  <img src="https://mintcdn.com/zippendo/-jr41VsJfvHKJJ2U/images/how-to/hold-cancel-and-delete-shipments/01-row-delete-menu-dark.png?fit=max&auto=format&n=-jr41VsJfvHKJJ2U&q=85&s=dcafbbc01b6317d3250f7bfeb103def5" alt="Shipments table row menu with View and Delete" className="hidden dark:block" width="2880" height="1800" data-path="images/how-to/hold-cancel-and-delete-shipments/01-row-delete-menu-dark.png" />
</Frame>

### Delete Shipment modal

`modalId="global-delete-modal"`. Destructive.

| Control       | Copy                                                                                                                      |
| ------------- | ------------------------------------------------------------------------------------------------------------------------- |
| Title         | **Delete Shipment**                                                                                                       |
| Subtitle      | **You are about to delete Order \{reference}.**                                                                           |
| Body          | **This will permanently delete shipment \{reference}. This action cannot be undone.**                                     |
| Confirm field | **Type \{reference} to confirm**. Placeholder is the reference. **Delete** stays disabled until the value matches exactly |
| Footer        | **Cancel** · **Delete** (disabled reason: **Type "\{reference}" to confirm.**)                                            |

If delete fails in the modal: **Delete failed. Please try again.** Toasts from the list mutation: **Shipment deleted successfully** / **Failed to delete shipment**.

<Frame caption="Delete Shipment — type the reference to enable Delete">
  <img src="https://mintcdn.com/zippendo/-jr41VsJfvHKJJ2U/images/how-to/hold-cancel-and-delete-shipments/02-delete-modal-light.png?fit=max&auto=format&n=-jr41VsJfvHKJJ2U&q=85&s=c7362ed9f65343fd47af0d3ece937dd2" alt="Delete Shipment confirmation asking to type the shipment reference" className="block dark:hidden" width="2880" height="1800" data-path="images/how-to/hold-cancel-and-delete-shipments/02-delete-modal-light.png" />

  <img src="https://mintcdn.com/zippendo/-jr41VsJfvHKJJ2U/images/how-to/hold-cancel-and-delete-shipments/02-delete-modal-dark.png?fit=max&auto=format&n=-jr41VsJfvHKJJ2U&q=85&s=9d67803c1aa1eff97c4f43f2f070c6b9" alt="Delete Shipment confirmation asking to type the shipment reference" className="hidden dark:block" width="2880" height="1800" data-path="images/how-to/hold-cancel-and-delete-shipments/02-delete-modal-dark.png" />
</Frame>

Deleting a **Pending** shipment fires app event `shipment.cancelled` (payload status `"cancelled"`). That is the **Shipment Cancelled** automation trigger. Setting status to cancelled with **Cancel Shipment** does **not** emit that event. [Automations](/docs/how-to/automations) · [Webhooks](/docs/how-to/webhooks).

## Statuses: On Hold and Cancelled

**Status** filter on **Shipments** (`?status=`). Options include **Draft**, **Pending**, **Processing**, **Dispatched**, **Partly Dispatched**, **Error**, **Cancelled**, **On Hold**. Same labels as the row badge. [Search and filters](/docs/how-to/search-and-filters).

<Frame caption="Shipments Status filter — Cancelled and On Hold are filter values, not buttons">
  <img src="https://mintcdn.com/zippendo/-jr41VsJfvHKJJ2U/images/how-to/hold-cancel-and-delete-shipments/03-status-filter-light.png?fit=max&auto=format&n=-jr41VsJfvHKJJ2U&q=85&s=28636d7f0c42d91bc0539fd652c49488" alt="Filters popover with Status options including Cancelled and On Hold" className="block dark:hidden" width="2880" height="1800" data-path="images/how-to/hold-cancel-and-delete-shipments/03-status-filter-light.png" />

  <img src="https://mintcdn.com/zippendo/-jr41VsJfvHKJJ2U/images/how-to/hold-cancel-and-delete-shipments/03-status-filter-dark.png?fit=max&auto=format&n=-jr41VsJfvHKJJ2U&q=85&s=d724278ecc5e1d6f79a76fa6b5b7886f" alt="Filters popover with Status options including Cancelled and On Hold" className="hidden dark:block" width="2880" height="1800" data-path="images/how-to/hold-cancel-and-delete-shipments/03-status-filter-dark.png" />
</Frame>

| Status                                                              | Send button                     | Delete (API) | Typical path                                                                                                             |
| ------------------------------------------------------------------- | ------------------------------- | ------------ | ------------------------------------------------------------------------------------------------------------------------ |
| **Pending**                                                         | **Send Shipment**               | Yes          | Created, not booked                                                                                                      |
| **On Hold**                                                         | Hidden                          | No           | Automation **Set Shipment On Hold** from **pending** only. Already on hold is a no-op. Any other status fails the action |
| **Cancelled**                                                       | Hidden                          | No           | Automation **Cancel Shipment** (already cancelled is a no-op)                                                            |
| **Error**                                                           | **Retry Send**                  | No           | Failed send                                                                                                              |
| **Dispatched** / **Partly Dispatched** / **Processing** / **Draft** | No send (draft is not sendable) | No           | See [Send a shipment](/docs/how-to/send-a-shipment)                                                                           |

**On Hold** is grouped with pending-like shipments on the dashboard pending count; it is **not** sendable until something else changes the status (there is no “release hold” button on detail).

## Automations (hold and cancel)

Palette, category **Shipments**. No inspector fields on either action.

| Node                     | Description in the palette      | Worker rule                                                                                  |
| ------------------------ | ------------------------------- | -------------------------------------------------------------------------------------------- |
| **Set Shipment On Hold** | **Places the shipment on hold** | Only **pending** → **on\_hold**                                                              |
| **Cancel Shipment**      | **Cancels the shipment**        | Sets **cancelled**. Does **not** call the carrier and does **not** emit `shipment.cancelled` |

There is **no** “Also cancel at carrier” control on **Carriers** connect/edit in the client today. Do not look for it on shipment detail or on [Carrier credentials](/docs/how-to/carrier-credentials).

<Check>
  To remove a shipment you have not sent: **Shipments** → row **Delete** → type the **reference**. To stop sending without deleting: use an automation **Set Shipment On Hold** or **Cancel Shipment**, then filter by **On Hold** / **Cancelled**.
</Check>
