# `POST /ownership/institutional-holdings/portfolio`

**Purpose:** One manager × one quarter — the holdings detail as [institutional holding objects](/documents/institutional-holding-object.md), under a quarter header that repeats the snapshot numbers and carries the amendment archive.

**Request:**

| Field | Type | Default | Notes |
|---|---|---|---|
| `cik` / `name` | string | — | Exactly one, as in [`POST /ownership/institutional-holdings/manager-history`](/documents/post-ownershipinstitutional-holdingsmanager-history.md). |
| `quarter` | string | — | **Required.** Calendar quarter label `YYYYQn`, e.g. `2026Q1` (Q1 = Mar 31, Q2 = Jun 30, Q3 = Sep 30, Q4 = Dec 31). |
| `type` | string | omitted | `positions` / `derivatives` / `exited`. Omitted = all three; each row carries its own `type`. The response echoes the filter as `types`. |
| `activity` | string[] | omitted | ≤ 6 of `NEW`, `ADD`, `REDUCE`, `HOLD`, `CUSIP_CHANGE`. Unknown values are dropped with a `_warnings` entry. With `type="exited"` it matches nothing (exited rows have no activity) and `_warnings` says so. |
| `restated` | string[] | omitted | ≤ 3 of `added`, `modified`, `cancelled`. |
| `cusip` | string | omitted | 9 characters; pins one security inside the quarter. Give `cusip` or `ticker`, not both. |
| `ticker` | string | omitted | Uppercased automatically; any symbol the company has traded under. |
| `sort_by` | string | omitted | `period`, `d_shares`, `ticker`, `issuer_norm`, `type` (row kind as text, alphabetical: `derivatives` < `exited` < `positions`). Omitted = the filed row order. |
| `sort_order` | `"desc"` \| `"asc"` | `"desc"` | |
| `page` | int ≥ 1 | 1 | |
| `page_size` | int 1–100 | 50 | Counts rows after filtering, all kinds together. |
| `detail` | string | `"full"` | `"light"` leaves out each holding's `submgr_breakdown` and the `types` echo. With `sort_by` `issuer_norm`, `"minimal"` returns the light view. See [Response detail](/documents/responses.md#response-detail). |

**Response:** `manager` (as in [`POST /ownership/institutional-holdings/manager-history`](/documents/post-ownershipinstitutional-holdingsmanager-history.md)); `quarter` — a [snapshot object](/documents/snapshot-object.md) plus `accessions` (every filing applied to the quarter, in order), `sec_locators` (accession → EDGAR index-page path; combine with the manager's `sec_url_prefix`), `amendments_merged` (see below) and `prior_versions` (superseded cover pages); then `types`, `transactions`, `page`, `page_size`, `total_items`, `has_more`, `next_page`, `credits_used`, and `_warnings` (see the [institutional holding object](/documents/institutional-holding-object.md)).

`amendments_merged` — one entry per amendment applied to the quarter: `accession`, `filing_date`, `claimed_type` (the type the amendment declared for itself, or null), `action` (what it actually did: `REPLACE` / `MERGE_ADD` / `DUPLICATE_SUPERSEDED` / `REJECTED`), `cover_total`, `confidential`, and `positions_added` / `positions_restated` / `positions_cancelled`.

**Credits:** **30 per page.**

**Errors:** `404 OWNERSHIP_MANAGER_NOT_FOUND` (charged); `404 OWNERSHIP_MANAGER_QUARTER_NOT_FOUND` when the manager exists but no 13F data was found for that quarter (charged); `422 VALIDATION_ERROR`, `402 CREDITS_INSUFFICIENT`.

**Example Request:**

```json
{
  "cik": "1067983",
  "quarter": "2026Q2",
  "type": "positions",
  "sort_by": "d_shares",
  "page_size": 20
}
```
