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

# List Appointment Shipments

> Retrieve shipments linked to a specific appointment

Retrieve the full shipment objects linked to a given appointment. Each shipment includes a
`status_updates` array of lifecycle events observed by the logistics provider — use this to
derive in-transit / delivered state for the appointment without polling the appointment status
itself.

The lighter `shipments` array on the appointment response itself (see
[Get Appointment](/api/appointments/get-appointment)) carries the same link set as
`{ id, added_at }` entries — use that when you only need to know what's linked. This endpoint is
the bulk full-payload shortcut.

Shipments are linked to appointments at creation time via the `appointment_id` field on
[Create Shipment](/api/shipments/create-shipment), and managed afterwards via [Attach Shipments
to Appointment](/api/appointments/attach-shipments-to-appointment) and the inverse [Attach
Appointments to Shipment](/api/shipments/attach-appointments-to-shipment). Returns an empty
array when no shipments are linked.

<Note>
  Shipments returned here are refreshed from the logistics provider if their last sync was more than
  3 hours ago, otherwise they're served from the DB. Stale-by-up-to-3-hours is the trade-off to
  avoid re-fetching on every poll. For force-refreshed truth on a single shipment, use [Get
  Shipment](/api/shipments/get-shipment).
</Note>

<Note>Requires `shipments_manage` or `test_sessions_view` scope.</Note>

## Request

### Path parameters

<ParamField path="id" type="string" required>
  Unique identifier (UUID) of the appointment.
</ParamField>

## Response

On success, the API returns `200 OK` with an array of shipment objects. See
[Get Shipment](/api/shipments/get-shipment) for the full field list — each entry has the same
shape, including `status_updates`.

## Error responses

| Status | Description                                                                                                |
| ------ | ---------------------------------------------------------------------------------------------------------- |
| `400`  | Invalid ID format.                                                                                         |
| `403`  | Forbidden — your API key does not have access to this operation, or the appointment is outside your scope. |
| `404`  | Appointment not found.                                                                                     |
| `500`  | Internal server error.                                                                                     |

<RequestExample>
  ```bash cURL theme={null}
  curl --request GET \
    --url https://anivahealth.com/api/v1/appointments/c9f3e2a1-7d6b-4c5e-b3a2-1f0e9d8c7b6a/shipments \
    --header 'x-api-key: YOUR_API_KEY'
  ```
</RequestExample>

<ResponseExample>
  ```json 200 theme={null}
  [
    {
      "id": "P2604154821",
      "status": "in_transit",
      "logistics_provider": "go",
      "tracking_number": "GO1234567890",
      "origin": {
        "location_id": "b7e2d1f5-3c4a-4e8b-a2f1-9d0c1e2f3a4b",
        "name": "Aniva Berlin Mitte",
        "street": "Unter den Linden",
        "house_number": "42",
        "postal_code": "10117",
        "city": "Berlin",
        "country": "DE",
        "phone": "+4930987654321",
        "email": "berlin-mitte@anivahealth.com"
      },
      "destination": {
        "location_id": null,
        "name": "LabClinic GmbH",
        "street": "Laborstraße",
        "house_number": "10",
        "postal_code": "80331",
        "city": "München",
        "country": "DE",
        "phone": null,
        "email": null
      },
      "pickup": {
        "from": "2026-04-15T07:00:00Z",
        "till": "2026-04-15T10:00:00Z",
        "timezone": "Europe/Berlin"
      },
      "notes": null,
      "status_updates": [
        { "status": "Shipment picked up", "time": "2026-04-15T09:42:00Z" },
        { "status": "Receiving station", "time": "2026-04-15T11:18:00Z" }
      ],
      "created_at": "2026-04-14T16:00:00Z",
      "updated_at": "2026-04-15T11:20:00Z"
    }
  ]
  ```

  ```json 404 theme={null}
  {
    "error": "Appointment not found"
  }
  ```
</ResponseExample>
