/data/statement

Return one or more financial statement block(s) (JSON) for a filing. Three mutually exclusive lookup modes:

POST/api/v1/data/statement
Rate limit120 per minute
  • role_label mode — the filer's original XBRL role string (varies per filer; e.g. "CONSOLIDATED STATEMENTS OF OPERATIONS" for Apple). Returns the one matched block.
  • statement_type mode — the canonical statement name (e.g. "Income Statement", "Balance Sheet", "Comprehensive Income", "Stockholders Equity", "Cash Flow Statement"). Call POST /data/filing-statements for the valid values in a specific filing. Case-insensitive; trailing (N) suffix is ignored. Returns every matching block; a block that combines several statements matches each of its names. Available for SEC filings only; use role_label mode for other jurisdictions.
  • block_index mode — the block's block_index as POST /data/filing-statements currently lists it. Returns that block.

The 5 main statements also have their own statement endpoints (/data/income-statement etc.) with the same response shape.

Filing selection: same pattern as POST /data/facts (filing_id or ticker + fiscal_year + form_type + optional quarter).

Request:

filing_idintegerconditional

Same rules as facts.

tickerstringconditional
form_typestring

Default 10-K.

fiscal_yearintegerconditional
quarterstring
role_labelstringOne of role_label / statement_type / block_index

1–4000 characters; original filer XBRL role string.

statement_typestringOne of role_label / statement_type / block_index

1–4000 characters; canonical statement-type label.

block_indexintegerOne of role_label / statement_type / block_index

0–32767; as listed by POST /data/filing-statements.

detailstring

Default "full". "light" leaves out concept_ns, concept_local, item_type, decimals, sign_attr and format from each fact's xbrl_fact. "minimal" keeps only line_items and, for each fact, its row label, ix_id, concept, calculated_value (raw_value when that is empty), unit, period and dimensions (China A-share filings: also note_scope); a fact repeated under child_components is listed once. See Response detail.

Credits:

  • role_label mode: tiered 28 / 48. 28 is debited before the filing is resolved (balance below 28 → HTTP 402); the extra 20 of the higher (48-credit) tier is debited after matching, up to your remaining balance.
  • statement_type and block_index modes: 28 flat, debited before the filing is resolved (balance below 28 → HTTP 402).

Response:

ticker, form_type, fiscal_year, quarter

Filing identity.

matches

Array of match objects (length 1 for role_label and block_index mode; length 1+ for statement_type mode). Each has block_index, role_label, statement_type (array of names; more than one when the block combines several statements), matched_via (describes how it was selected), and block (the statement block content; an entry under block.child_components that repeats the block.parent_xbrl_table.mapped_xbrl_facts entry with the same html_locator.ix_id carries only that ix_id).

credits_used

Number of credits deducted.

amendment_context

Optional; restatement or amendment information.

_correction

Optional; present on the 48-credit tier.

_warnings

Optional.

calculated_value (on each fact in block) is the XBRL value as filed.

Errors:

HTTPerror_codeWhen
400DATA_FILING_QUARTER_REQUIREDAmbiguous quarterly filings (charged).
404DATA_FILING_NOT_FOUNDFiling not found. Still charged 28 credits.
404DATA_STATEMENT_ROLE_LABEL_UNRESOLVEDrole_label mode: no block matched; charged for the match tier reached.
404DATA_STATEMENT_NOT_AVAILABLE_IN_FILINGstatement_type mode: no block has this statement_type (charged).
400DATA_STATEMENT_TYPE_UNSUPPORTED_FOR_KRstatement_type mode on a Korean (DART) filing; use role_label mode (charged).
400DATA_STATEMENT_TYPE_UNSUPPORTED_FOR_JPstatement_type mode on a Japanese (EDINET) filing; use role_label mode (charged).
400DATA_STATEMENT_TYPE_UNSUPPORTED_FOR_EUstatement_type mode on a European (ESEF) filing; use role_label mode (charged).
400DATA_STATEMENT_TYPE_UNSUPPORTED_FOR_CNstatement_type mode on a China A-share filing; use role_label mode (charged).
404DATA_STATEMENT_BLOCK_INDEX_NOT_FOUNDblock_index mode: the filing has no block at that position (charged).
404DATA_STATEMENT_BLOCK_JSON_MISSINGThe block was found but its content is unavailable (charged).
403PLAN_TIER_INSUFFICIENT_HISTORYThe filing, named by ticker and fiscal_year, is before your plan's history window. Not charged.
403PLAN_TIER_INSUFFICIENT, PLAN_TIER_INSUFFICIENT_COVERAGEThe filing (by filing_id) or the company (by ticker) is outside your plan. Charged 28.
402CREDITS_INSUFFICIENTBalance below 28.
422—Validation (e.g. more than one of role_label, statement_type, block_index given, or none).

Example Request (statement_type mode):

JSON
{
  "ticker": "AAPL",
  "form_type": "10-K",
  "fiscal_year": 2024,
  "statement_type": "Income Statement"
}