# Holding object

Returned by `POST /ownership/initial-holdings`, `POST /ownership/initial-holding-ids`, and `POST /screener/initial-holdings`. A Form 3 reports the positions held on becoming an insider.

| Field | Meaning |
|-------|---------|
| `id` | Holding id. Pass to `POST /ownership/initial-holding-ids`. |
| `is_derivative` | Derivative table row (`true`) or non-derivative (`false`). |
| `security_title`, `direct_or_indirect`, `nature_of_ownership` | As filed. |
| `shares_owned` | Amount of securities beneficially owned, as filed. `null` on derivative rows and on cancelled rows. |
| `footnote_refs` | Footnote ids for this holding. Resolve against the filing's `footnotes` map. |
| `source_locator` | Combine with the filing's `source_url_prefix` to build the SEC URL. |
| `restated` | `null`, `"cancelled"`, `"modified"`, or `"added"` — set when an amendment changed this holding. |
| `prior` | Present only when `restated` is set. The pre-amendment values. |
| `split_adjusted` | Present only when the filed values are not on the current per-share basis. See below. |
| `data_quality_flags` | Present only when at least one rule fires. See below. |

Derivative rows additionally carry `conversion_or_exercise_price`, `exercise_date`, `expiration_date`, `underlying_security_title`, `underlying_security_shares`, and `underlying_security_value`.

## `split_adjusted`

Same meaning and presence rule as on the [transaction object](/documents/transaction-object.md#split_adjusted): present only when the filed values are not on the current per-share basis.

```json
"split_adjusted": {
  "shares_owned": 4000.0,
  "underlying_security_shares": null,
  "conversion_or_exercise_price": null,
  "split_adjustment_factor": 4.0
}
```

## `data_quality_flags`

Rows that fail a consistency check carry one or more of:

`missing_shares_owned`, `missing_underlying_amount`, `derivative_date_order`, `negative_shares_owned`, `negative_underlying_security_shares`, `negative_underlying_security_value`, `negative_conversion_or_exercise_price`, `manual_flags`.

Rows flagged `manual_flags` also carry a `manual_flags` array of `{code, note}` entries describing the issue.

Flagged rows are excluded from `POST /ownership/initial-holdings`, `POST /ownership/initial-holdings/stats` and `POST /screener/initial-holdings` unless `include_anomalies=true` (`holding_filters.include_anomalies` on the screener). Each endpoint reports how many it withheld: the listing in `anomalies_excluded_on_page` (this page only), stats and the screener in `anomalies_excluded_count` (the whole requested range).
