/api/v1/xbrl/filing/{accession}/indexList the roles and assembled statements inside a parsed filing.
List the roles and assembled statements inside a parsed filing.
5 tokensSince v3.86.0
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
| Name | In | Required | Default | Allowed | Description | Example |
|---|---|---|---|---|---|---|
| accession | path | required | — | — | SEC 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
| Field | Type | Nullable | Description |
|---|---|---|---|
| data.reports[] | array | no | The 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_slot | string | yes | Normalized 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_file | string | yes | The 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[] | array | no | The 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_current | boolean | no | Whether 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
| Status | Label | Description |
|---|---|---|
| 200 | OK | Request succeeded. |
| 400 | Bad Request | Invalid query, body, or path parameter. |
| 401 | Unauthorized | Missing or invalid Authorization header / api_Token. |
| 402 | Payment Required | Insufficient token balance for this call. Top up |
| 429 | Too Many Requests | Rate limit exceeded for your tier (see /pricing for tier limits). Tier limits |
| 500 | Server Error | Unexpected 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).