/api/v1/xbrl/share-classesPer-class shares outstanding for a multi-class issuer, from dei facts dimensioned by share class.
Per-class shares outstanding for a multi-class issuer, from dei facts dimensioned by share class.
Why use this
Common use case
Per-class shares outstanding for multi-class issuers, sourced from the dei EntityCommonStockSharesOutstanding facts dimensioned by us-gaap:StatementClassOfStockAxis and joined to each class's own dei:TradingSymbol cover fact for the member -> ticker mapping (BRK-A <-> CommonClassAMember). This structurally replaces the old single-ticker priority-list guess for issuers like Berkshire (A/B) and Alphabet (GOOGL/GOOG). entity_total is populated only when the filer independently tags an undimensioned entity-wide total — members are never summed to synthesize one. Selector is ticker | cik (+ optional as_of). Coverage is wide — every US filer is served presence-based — while historical depth loads incrementally; a ticker that matches no US filer returns 404 UNKNOWN_TICKER.
Parameters
| Name | In | Required | Default | Allowed | Description | Example |
|---|---|---|---|---|---|---|
| ticker | query | optional | — | — | Selector — provide exactly ONE of `ticker` | `cik`. Any listed class ticker resolves the whole issuer (`BRK.A` / `BRK.B` / `BRK-A` all fold to Berkshire). A ticker that matches no US filer -> 404 `UNKNOWN_TICKER`. | BRK.B |
| cik | query | optional | — | — | Selector: issuer CIK, zero-padded or bare (both match — compared with leading zeros stripped). Must be numeric (else 400 INVALID_PARAM). | 1067983 |
| as_of | query | optional | — | — | Optional point-in-time: return the per-class counts current as-of this date (latest dei fact with `filed_at <= as_of`). `YYYY-MM-DD`; malformed -> 400 INVALID_PARAM. Omit for the latest. | 2025-06-30 |
| basis | query | optional | latest | — | `latest` (default) elects the most recently filed qualifying filing (restated view); `original` elects the earliest-filed qualifying filing (as-known-then). Composes with `as_of` (which bounds the eligible filings). Any other value -> 400 INVALID_PARAM. | original |
Response schema
| Field | Type | Nullable | Description |
|---|---|---|---|
| data.company_name | string | yes | The issuer's display name, embedded beside `data.ticker`/`data.cik` so a client can label the issuer without a second lookup (mirrors the SEC companyfacts `entityName`). Resolved from the always-updated company catalog by the resolved CIK; present with `null` when the catalog has no name for the issuer (never a fabricated value). Additive — every existing field is unchanged. |
| data.classes[] | array | no | One entry per common-stock class the issuer tags on `us-gaap:StatementClassOfStockAxis`. Each: `member` (the class member qname), `class_ticker` (from the class's `dei:TradingSymbol` cover fact, when present), `shares_outstanding` (number), `context_end_date` (the dei fact's context end date, ISO), and `unit`. |
| data.classes[].member | string | no | The class member qname (e.g. `us-gaap:CommonClassAMember`) the dei fact is dimensioned by. `class_ticker` is the per-class ticker mapping (null when the filer did not tag a class-dimensioned `dei:TradingSymbol`). |
| data.filing | object | yes | The single latest qualifying filing (`filed_at <= as_of`) the per-class facts were read from: `{accession_no, form_type, period_of_report, filed_at}`. Null when the filer tagged no dei `EntityCommonStockSharesOutstanding` fact at/before `as_of` (then `classes` is empty). |
| data.entity_total | number | yes | The undimensioned, entity-wide shares-outstanding fact — present ONLY when the filer ALSO tags an all-classes total. Null when the issuer tags only per-class facts (the common case; members are never summed to synthesize one). |
Sample response
- "status": "success"
- "data":
- "ticker": "BRK.B"
- "cik": "0001067983"
- "company_name": "BERKSHIRE HATHAWAY INC"
- "covered": true
- "phase": "wide"
- "as_of": null
- "filing":
- "classes":
- "entity_total": null
- "meta":
- "class_count": 2
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/share-classes?api_Token=YOUR_API_KEY&ticker=BRK.B&cik=1067983&as_of=2025-06-30&basis=original" \
-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).