Skip to content
/api/v1/xbrl/filing/{accession}/index

List the roles and assembled statements inside a parsed filing.

List the roles and assembled statements inside a parsed filing.

Why use this

Return the filing's presentation-role inventory (role URI, definition, group type, menu category, canonical statement slot, R-file-as-data) plus the assembled-statement headings — so a client knows which `statement=` slots it can request.

Common use case

Building a statement picker / table-of-contents for a filing; discovering note and parenthetical roles; sizing a request before pulling the full statements payload.

The lightweight table-of-contents for a parsed filing, from the filing_roles inventory plus the assembled finradar_v1 statement headings. Lists every presentation role with its statement_slot (what you pass to GET /api/v1/xbrl/filing/{accession}/statements as statement=), menu_category, group_type, and the DATA-only r_file, alongside assembled_statements[] (the roles actually rendered into face statements). Call it first to drive a statement picker or size a request. A filing not yet in the engine returns 404 NOT_COVERED.

Parameters

NameInRequiredDefaultAllowedDescriptionExample
accessionpathrequiredSEC accession number (dashed or 18-digit no-dash). Malformed -> 400 INVALID_PARAM; a filing not yet in the engine (or unknown) -> 404 NOT_COVERED.0000950170-25-100235

Response schema

FieldTypeNullableDescription
data.reports[]arraynoThe filing's presentation roles in order. Each: `role_seq`, `role_uri`, `definition`, `group_type` (statement | disclosure | document | ...), `menu_category`, `statement_slot` (the normalized slot to pass to the statements endpoint's `statement=`, or null for non-statement roles), and `r_file`.
data.reports[].statement_slotstringyesNormalized statement slot (`StatementsOfIncome`, `BalanceSheets`, `StatementsOfCashFlows`, ...). Pass it as `statement=` to GET /api/v1/xbrl/filing/{accession}/statements. Null for roles that do not normalize to a face-statement slot (many note/disclosure roles).
data.reports[].r_filestringyesThe R-file id (e.g. `R4`) — DATA only. R-numbers are per-filing renderer output, NOT a stable cross-filing identifier; key off `statement_slot`, never `r_file`.
data.assembled_statements[]arraynoThe subset of roles the engine actually assembled into face statements (`slot`, `role_uri`, `definition`) — i.e. exactly the slots GET /api/v1/xbrl/filing/{accession}/statements can return. `meta.report_count`/`assembled_count` give the two counts.
data.is_currentbooleannoWhether this accession is the current filing for its (cik, form family, period). `packaging` records the XBRL era (`native` | `ixbrl` | `embedded`); `is_inline_xbrl` is the inline-vs-separate flag.

Sample response

·
  • "status": "success"
  • "data":
    • "accession_no": "0000950170-25-100235"
    • "cik": "0000789019"
    • "form_type": "10-K"
    • "period_of_report": "2025-06-30"
    • "filed_at": "2025-07-29"
    • "is_current": true
    • "packaging": "ixbrl"
    • "is_inline_xbrl": true
    • "reports":
    • "assembled_statements":
    }
  • "meta":
    • "report_count": 2
    • "assembled_count": 1
    }
}

Errors

StatusLabelDescription
200OKRequest succeeded.
400Bad RequestInvalid query, body, or path parameter.
401UnauthorizedMissing or invalid Authorization header / api_Token.
402Payment RequiredInsufficient token balance for this call. Top up
429Too Many RequestsRate limit exceeded for your tier (see /pricing for tier limits). Tier limits
500Server ErrorUnexpected server-side failure. Retry with backoff; report if persistent.

Code samples

curl "https://api.finradar.ai/api/v1/xbrl/filing/0000950170-25-100235/index?api_Token=YOUR_API_KEY" \
  -H "Authorization: Bearer YOUR_JWT_TOKEN"

Generate an API key in /account/credentials to run live queries (literal YOUR_API_KEY placeholder shown until then).