---
title: "List Packages"
method: GET
path: "/inventory/packages/list"
tags: ["provider", "inventory"]
---

# List Packages

`GET /inventory/packages/list`

List packages with optional filtering and patient counts.

## Query parameters

- `page` integer, nullable
- `per_page` integer, nullable
- `sort_by` string, nullable
- `sort_direction` 'asc' | 'desc', nullable
- `location_id` string, nullable
- `ids` string[], nullable — List of package IDs to filter by
- `name` string, nullable — Name of the package
- `price` integer[], nullable — Price range [min, max] in cents
- `contains_items` string[], nullable — Filter by item names contained in package
- `number_of_active_patients` integer[], nullable — Filter by range of number of active patients [min, max]
- `category` string, nullable — Filter by category name (references category.name)

## Headers

- `TENANT` string, required
- `API-KEY` string, required

## Response `200`

Successful Response

- PagePackageDetail
  - `data` PackageDetail[], required
    - `id` string — Unique identifier for the package
    - `name` string, required — Name of the package
    - `description` string, nullable — Optional description of the package
    - `isArchived` boolean — Whether the package is archived
    - `price` integer, required — Price of the package in cents
    - `internalNotes` string, nullable — Optional internal notes for the package
    - `items` PackageItemOutput[], nullable — Items included in the package
      - `id` string — Unique identifier for the package item
      - `packageId` string, required — Package ID this item belongs to
      - `itemId` string, required — Item ID for this package item
      - `quantity` integer, nullable — Quantity of the item in the package
      - `price` integer, required — Price of the item in the package in cents
      - `item` ItemTiny
        - `id` string — Unique identifier for the item
        - `name` string, required — Name of the item
        - `brandName` string, nullable — Optional brand name of the item
        - `description` string, nullable — Optional description of the item
        - `price` integer, required — Price of the item in cents
        - `category` string, nullable — Category name (references category.name)
        - `unit` 'AMPOULES' | 'APPLICATORS' | 'BOTTLES' | 'BOXES' | 'CAPSULES' | 'CUPS' | 'DOSES' | 'G_PER_ML' | 'GRAMS' | 'IU' | 'IU_PER_ML' | 'OUNCES' | 'FLUID_OUNCES' | 'KG' | 'KITS' | 'LITERS' | 'MCG' | 'MG' | 'MG_PER_ML' | 'ML' | 'MMOL' | 'MICROGRAM_PER_ML' | 'PACKS' | 'PAIRS' | 'PATCHES' | 'PERCENTAGE' | 'PIECES' | 'POUCHES' | 'ROLLS' | 'SACHETS' | 'SHEETS' | 'SPRAYS' | 'STRIPS' | 'SYRINGES' | 'TABLETS' | 'TABLETS_PER_DAY' | 'TESTS' | 'TUBES' | 'UNITS' | 'VIALS' | 'TREATMENTS' | 'SESSIONS' | 'PULSES' | 'JOULES' | 'CENTIMETERS' | 'THREAD_COUNT' | 'INJECTIONS' | 'WRINKLE_UNITS' | 'POUNDS' | 'FEET' | 'INCHES'
        - `isPhysical` boolean — Whether the item is physical
        - `isArchived` boolean — Whether the item is archived
        - `internalNotes` string, nullable — Optional internal notes for the item
        - `taxable` boolean — Whether the item is subject to taxes
        - `sortOrder` integer, nullable — Optional sort order for the item
        - `allowCustomPricing` boolean — Whether custom pricing is allowed for this item
        - `type` 'ITEM' | 'PRODUCT' | 'MEDICATION' | 'SERVICE' | 'PACKAGE' | 'MEMBERSHIP'
    - `category` string, nullable — Category name (references category.name)
    - `numberOfActivePatients` integer — Number of active patients on this package
    - `numberOfPatients` integer — Total number of patients who have purchased this package
    - `createdDate` string, date-time, nullable — Date the package was created
  - `total` integer, required

## Other responses

- `422` — Validation Error

---

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