# `POST /ownership/transaction-ids`

**Purpose:** Fetch transactions by id — the detail companion to the `transaction_ids` returned by [`POST /ownership/stats`](/documents/post-ownershipstats.md).

**Request:**

| Field | Type | Default | Notes |
|---|---|---|---|
| `transaction_ids` | int[] | — | **Required.** 1–100 positive integers. Duplicates are removed with a `_warnings` entry. |
| `page` | int ≥ 1 | 1 | |
| `page_size` | int 1–100 | 100 | Counts filings. |
| `detail` | string | `"full"` | `"light"` leaves out each filing's `footnotes` and each transaction's `footnote_refs`. See [Response detail](/documents/responses.md#response-detail). |

**Response:** the paging fields and `filings` of [`POST /ownership/transactions`](/documents/post-ownershiptransactions.md), plus `missing_ids` when some ids were not found and `restricted_ids` when some exist but are outside your plan's history window or coverage scope. Both are charged for.

**Credits:** **ceil(n / 5) × 10** on the deduplicated id count (max **100**).

**Errors:** `404 OWNERSHIP_TRANSACTION_NOT_FOUND` when **none** of the requested ids exist (charged; the response carries `missing_ids`). `403 PLAN_TIER_INSUFFICIENT` when every requested id that exists is outside your plan's scope (charged; the response carries `restricted_ids`). Partial misses and partial restrictions return 200. `422 VALIDATION_ERROR`, `402 CREDITS_INSUFFICIENT`.

**Example Request:**

```json
{
  "transaction_ids": [5144965, 5144966, 5144967]
}
```
