---
title: "List shipments"
method: GET
path: "/shipments"
tags: ["Shipments"]
---

# List shipments

`GET /shipments`

Returns a paginated list of shipments, with optional filtering by payment, company, or user.

Required permissions:
 - `shipment:basic:read`
 - `payment:basic:read`

## Query parameters

- `after` string, nullable — Returns the elements in the list that come after the specified cursor.
- `before` string, nullable — Returns the elements in the list that come before the specified cursor.
- `first` integer, nullable — Returns the first _n_ elements from the list.
- `last` integer, nullable — Returns the last _n_ elements from the list.
- `payment_id` string, nullable — Filter shipments to only those associated with this specific payment.
- `company_id` string, nullable — Filter shipments to only those belonging to this company.
- `user_id` string, nullable — Filter shipments to only those for this specific user.

## Response `200`

A successful response

- object — The connection type for Shipment.
  - `data` ShipmentListItem[], required — A list of nodes.
    - `created_at` string, date-time, required — The datetime the shipment was created.
    - `delivery_estimate` string, date-time, nullable, required — The estimated delivery date for this shipment. Null if the carrier has not provided an estimate.
    - `id` string, required — The unique identifier for the shipment.
    - `payment` object, nullable, required — The payment associated with this shipment. Null if the payment has been deleted or is inaccessible.
      - `id` string, required — The unique identifier for the payment.
    - `service` string, nullable, required — The shipping service level used for this shipment. Null if the carrier does not specify a service tier.
    - `status` 'unknown' | 'pre_transit' | 'in_transit' | 'out_for_delivery' | 'delivered' | 'available_for_pickup' | 'return_to_sender' | 'failure' | 'cancelled' | 'error', required — The status of a shipment
    - `substatus` 'address_correction' | 'arrived_at_destination' | 'arrived_at_facility' | 'arrived_at_pickup_location' | 'awaiting_information' | 'substatus_cancelled' | 'damaged' | 'delayed' | 'delivery_exception' | 'departed_facility' | 'departed_origin_facility' | 'expired' | 'substatus_failure' | 'held' | 'substatus_in_transit' | 'label_created' | 'lost' | 'missorted' | 'substatus_out_for_delivery' | 'received_at_destination_facility' | 'received_at_origin_facility' | 'refused' | 'return' | 'status_update' | 'transferred_to_destination_carrier' | 'transit_exception' | 'substatus_unknown' | 'weather_delay', required — The substatus of a shipment
    - `tracking_code` string, required — The carrier-assigned tracking number used to look up shipment progress.
    - `updated_at` string, date-time, required — The datetime the shipment was last updated.
  - `page_info` PageInfo, required — Information about pagination in a connection.
    - `end_cursor` string, nullable, required — When paginating forwards, the cursor to continue.
    - `has_next_page` boolean, required — When paginating forwards, are there more items?
    - `has_previous_page` boolean, required — When paginating backwards, are there more items?
    - `start_cursor` string, nullable, required — When paginating backwards, the cursor to continue.

## Other responses

- `400` — Bad request
- `401` — Unauthorized
- `403` — Forbidden
- `404` — Not found
- `422` — Verification required
- `429` — Too many requests
- `500` — Internal server error

## Changes

- **2026-07-26** `60bbb4a6ffbc` — 1 breaking
  - removed the required property `data/items/carrier` from the response with the `200` status

[Change history](https://skmtc.dev/whop/apis/whop-api/changes/shipments/get.md)

---

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