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.

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: 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).