---
title: "Get Portfolio"
method: GET
path: "/v1/portfolios/{portfolio_id}"
tags: ["portfolios"]
---

# Get Portfolio

`GET /v1/portfolios/{portfolio_id}`

## Request

- Base URL: `https://api.knownwell.com` (the document declares no server; this is the origin it was published from)
- URL: `https://api.knownwell.com/v1/portfolios/{portfolio_id}`
- Auth: API key in header `X-API-Key`
- TypeScript: <https://skmtc.dev/knownwell/apis/knownwell-api/docs/v1/portfolios/:portfolio_id/get.ts> (a function with typed inputs; its response is checked against the schema)

## Path parameters

- `portfolio_id` string, required

## Query parameters

- `include_clients` boolean
- `limit` integer
- `offset` integer: Members to skip. `clientCount` is the unpaginated total, so page until you have collected that many.

## Response `200`

Successful Response

- PortfolioDetailResponse: Detailed portfolio response with clients and health metrics.
  - `id` string, required
  - `name` string, required
  - `color` string, nullable
  - `description` string, nullable
  - `customerId` string, required
  - `clientCount` integer, required: Number of clients in portfolio
  - `userIds` string[], nullable: User IDs with access
  - `isSystem` boolean: Whether this is a system portfolio
  - `createdAt` string, date-time, nullable
  - `updatedAt` string, date-time, nullable
  - `clients` ClientResponse[], required
    - `id` string, required
    - `customerId` string, required
    - `name` string, required
    - `score` integer, required
    - `scoreSource` string, nullable: Score data source: chr1 or chr2
    - `scoreChanges` ScoreChanges: Score changes over different time periods.
      - `7day` ScoreChange: Score change over a time period.
        - `change` number, required: Absolute change in score
        - `percentage` number, nullable: Percentage change
        - `previousScore` number, required: Score at start of period
      - `30day` ScoreChange: Score change over a time period.
        - `change` number, required: Absolute change in score
        - `percentage` number, nullable: Percentage change
        - `previousScore` number, required: Score at start of period
    - `lastContactDate` string, date-time, nullable
    - `lastUpdatedAt` string, date-time, nullable
    - `hasInsufficientData` boolean, nullable
    - `metadata` ClientMetadata: Client metadata.
      - `accountOwner` string, nullable
      - `annualRevenue` string, nullable
      - `industry` string, nullable
      - `location` string, nullable
      - `active` boolean, nullable
      - `accountStatus` string, nullable
      - `domain` string, nullable
      - `clientType` string, nullable
      - `revenueTTM` number, nullable
      - `revenueF12M` number, nullable
    - `extraColumns` object, nullable: Custom column values
    - `portfolios` ClientPortfolioRef[]: Portfolios this client belongs to. Empty list when it belongs to none -- never null, so a consumer can iterate without a guard.
      - `id` string, required: Portfolio id -- stable, use this to match
      - `name` string, required: Portfolio name -- not guaranteed unique within an account
    - `historicalData` integer[], nullable
    - `archived` boolean, nullable
  - `users` PortfolioUser[], nullable
    - `id` string, required
    - `displayName` string, nullable
    - `email` string, nullable
  - `health` PortfolioHealthResponse: Portfolio health metrics.
    - `score` integer, required
    - `breakdown` object, required
    - `distribution` object, required
    - `customerId` string, required
    - `chr2CutoverDate` string, nullable: CHR 2.0 cutover date if enabled
    - `portfolioId` string, nullable: The portfolio scope that was actually applied, echoed back. Null on an unscoped response.

## Other responses

- `422`: Validation Error

## Changes

- **2026-08-31** `88246c119184`: 3 info
  - added the new optional `query` request parameter `offset`
  - added the optional property `clients/items/portfolios` to the response with the `200` status
  - added the optional property `health/anyOf[subschema #1: PortfolioHealthResponse]/portfolioId` to the response with the `200` status

[Operation history](https://skmtc.dev/knownwell/apis/knownwell-api/changes/v1/portfolios/:portfolio_id/get.md)

---

[API](https://skmtc.dev/knownwell/apis/knownwell-api.md) - [All operations](https://skmtc.dev/knownwell/apis/knownwell-api/llms.txt) - [OpenAPI document](https://skmtc.dev/knownwell/apis/knownwell-api/revisions/88246c119184?raw)
