---
title: "Filtered paginated package list"
method: GET
path: "/ossprey/packages"
tags: ["Packages"]
---

# Filtered paginated package list

`GET /ossprey/packages`

Returns a paginated, filtered, sorted list of critical packages with their stewardship state and risk signals.

Used by three tabs:
- **Queue tab** — full table with all filters
- **Triage Board** — one request per status column, fired in parallel
  (`?status=X&pageSize=50`)

- **Summary panel** — click-through navigates to Queue with pre-filled filter

The response always includes `statusCounts` — per-status counts computed without the active `status` filter, used to drive the tab bar badge numbers.

## Query parameters

- `page` integer
- `pageSize` integer
- `name` string
- `ecosystem` string
- `lifecycle` 'active' | 'stable' | 'declining' | 'abandoned' | 'archived'
- `status` 'unassigned' | 'open' | 'assessing' | 'active' | 'needs_attention' | 'escalated' | 'blocked' | 'inactive'
- `healthBand` 'excellent' | 'healthy' | 'fair' | 'concerning' | 'critical' — Tinybird band when enriched (excellent ≥85, healthy 70–84, fair 50–69, concerning 30–49, critical <30). Falls back to scorecard thresholds: `null or < 3.0` → critical · `< 5.0` → concerning · `< 7.0` → fair · `≥ 7.0` → healthy.
- `vulnSeverity` 'any' | 'high' | 'critical' | 'none'
- `staleOnly` boolean
- `unstewardedOnly` boolean
- `busFactor1Only` boolean
- `sortBy` 'risk' | 'name' | 'impact' | 'openVulns' | 'health'
- `sortDir` 'asc' | 'desc'

## Response `200`

Paginated package list.

- object
  - `rows` PackageRow[], required
    - `purl` string, required
    - `name` string, required
    - `ecosystem` string, required
    - `stewardshipId` string, nullable
    - `stewardshipStatus` 'unassigned' | 'open' | 'assessing' | 'active' | 'needs_attention' | 'escalated' | 'blocked' | 'inactive'
    - `openVulns` integer, required — Count of advisory_packages rows for this package.
    - `maxVulnSeverity` 'critical' | 'high' | 'medium' | 'low', nullable — Worst advisory severity. Null if no advisories.
    - `maintainerCount` integer, required — Count of package_maintainers rows. Bus factor proxy.
    - `criticalityScore` number, nullable — Raw criticality score (0–1 float). Use `impact` for display.
    - `impact` integer, nullable — Display score (0–100). criticalityScore × 100, rounded. Null if no score.
    - `scorecardScore` number, nullable — OpenSSF Scorecard score (0–10). Null if no repo mapped.
    - `health` object, required
      - `score` integer, nullable, required — Health score (0–100). Tinybird composite score when enriched, OpenSSF Scorecard × 10 otherwise. Null if neither is available.
      - `label` 'excellent' | 'healthy' | 'fair' | 'concerning' | 'critical' | 'null', nullable, required — Tinybird band when enriched (excellent ≥85, healthy 70–84, fair 50–69, concerning 30–49, critical <30), scorecard band otherwise.
    - `lifecycle` 'active' | 'stable' | 'declining' | 'abandoned' | 'archived' | 'null', nullable — Tinybird-enriched lifecycle label. Null if not yet enriched.
    - `latestReleaseAt` string, date-time, nullable — Used by the frontend to derive the stale flag (≥ 18 months).
    - `lastActivity` object, nullable — Most recent stewardship activity for this package. Null if none.
      - `type` string, nullable, required
      - `content` string, nullable
      - `at` string, date-time, required
    - `stewards` Steward[], required — Active stewards (deleted_at IS NULL). Empty array if none.
      - `userId` string, required — Auth0 sub of the assigned steward.
      - `role` 'lead' | 'co_steward', required
      - `assignedAt` string, date-time, required
  - `total` integer, required
  - `page` integer, required
  - `pageSize` integer, required
  - `statusCounts` StatusCounts, required — Per-status package counts for the tab bar. Computed without the active status filter.
    - `all` integer, required
    - `unassigned` integer, required
    - `open` integer, required
    - `assessing` integer, required
    - `active` integer, required
    - `needs_attention` integer, required
    - `escalated` integer, required
    - `blocked` integer, required
    - `inactive` integer, required

## Other responses

- `400` — Validation error.
- `401` — Missing or invalid bearer token.

## Changes

- **2026-07-17** (v1) `0156203371f5` — 1 breaking, 5 info
  - removed the required property `rows/items/healthBand` from the response with the `200` status
  - added the new enum value `archived` to the `query` request parameter `lifecycle`
  - added the new enum value `excellent` to the `query` request parameter `healthBand`
  - added the optional property `rows/items/impact` to the response with the `200` status
  - …2 more
- **2026-06-16** (v1) `92d8d646c7d3` — 3 breaking, 2 warning, 1 info
  - removed the enum value `archived` from the `query` request parameter `lifecycle`
  - removed the enum value `excellent` from the `query` request parameter `healthBand`
  - removed the required property `rows/items/health` from the response with the `200` status
  - removed the optional property `rows/items/impact` from the response with the `200` status
  - …2 more

[Change history](https://skmtc.dev/linuxfoundation/apis/cdp-public-api-ossprey-admin-dashboard-v2/changes/ossprey/packages/get.md)

---

[API](https://skmtc.dev/linuxfoundation/apis/cdp-public-api-ossprey-admin-dashboard-v2.md) · [All operations](https://skmtc.dev/linuxfoundation/apis/cdp-public-api-ossprey-admin-dashboard-v2/llms.txt) · [OpenAPI document](https://skmtc-service-production.skmtc.workers.dev/v1/apis/linuxfoundation/cdp-public-api-ossprey-admin-dashboard-v2/revisions/0156203371f5/schema)
