/api/v1/xbrl/coverageCheck whether a ticker's as-filed XBRL is parsed yet, or list the covered universe.
Check whether a ticker's as-filed XBRL is parsed yet, or list the covered universe.
Why use this
Common use case
The cheap (1-token) coverage gate for the XBRL as-filed surface. Coverage is wide — every US filer is parsed on arrival — but historical depth is loading incrementally, so this is the source of truth for exactly which filings are in the engine right now. Call it with ?ticker= before hitting GET /api/v1/xbrl/filing/{accession}/statements or GET /api/v1/xbrl/facts to avoid a 404 NOT_COVERED (which still charges its token). covered:false is a normal HTTP 200 answer (this discovery route never 404s). With no param it returns the paginated covered universe with per-company parsed/total filing counts and strata. Mirrors, for the as-filed surface, the coverage-gate role the standardized surface has.
Parameters
| Name | In | Required | Default | Allowed | Description | Example |
|---|---|---|---|---|---|---|
| ticker | query | optional | — | — | Optional. With a ticker (folded case-insensitively; `BRK.A`/`BRK/A`/`BRK-A` all match): returns `{ticker, covered, phase, cik, stratum, filings_indexed, filings_total, first_period, last_period}` when covered, or `{ticker, covered:false, phase, coverage_endpoint, fallback_endpoint}` (still HTTP 200) when not. Without it: the paginated covered universe (`limit` <= 500, `offset`). | MSFT |
Response schema
| Field | Type | Nullable | Description |
|---|---|---|---|
| data.covered | boolean | no | `true` when the issuer's filings have been parsed by the XBRL engine. Serving is wide — every US filer is covered presence-based — while historical depth is still loading incrementally, so `covered:false` here means this issuer has no filing parsed into the engine yet (poll again as the corpus fills). When `false` the response is still HTTP 200 (this discovery route never returns NOT_COVERED) and carries `coverage_endpoint` + `fallback_endpoint` pointers — the statements/facts endpoints are what return 404 NOT_COVERED for a not-yet-parsed filing. |
| data.phase | string | no | Coverage phase. Serving is `wide` — every US filer is served presence-based (go-wide is active); historical depth is still loading incrementally, which `filings_indexed`/`first_period` report per company. |
| data.stratum | string | yes | The stratification bucket the ticker belongs to, in kebab-case as served (e.g. `mega-cap-tech`, `reit`, `bank`, `biotech`, `ifrs`). Present only when covered. |
| data.filings_indexed | number | no | Count of the issuer's filings PARSED into the engine (`filings_total` is the count discovered). Both 0 / absent when not covered. |
| data.first_period | string | yes | `YYYY-MM-DD` fiscal-period-end of the earliest indexed filing (~2009 for early-XBRL large-caps); `last_period` the most recent. No-ticker calls instead return a paginated array of `{cik, ticker, stratum, filings_indexed, filings_total, first_period, last_period}` with `meta.phase = wide`. |
Sample response
- "status": "success"
- "data":
- "ticker": "MSFT"
- "covered": true
- "phase": "wide"
- "cik": "0000789019"
- "stratum": "mega-cap-tech"
- "filings_indexed": 47
- "filings_total": 48
- "first_period": "2009-06-30"
- "last_period": "2025-06-30"
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/coverage?api_Token=YOUR_API_KEY&ticker=MSFT" \
-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).