Skip to main content
Conduit serves US company fundamentals assembled from SEC XBRL filings as structured, period-keyed statements. Two endpoints cover the workflow:

Company universe

GET /v1/public/companies lists the curated fundamentals universe (S&P 500 union Nasdaq-100) with sector and industry inline.

Financial statements

GET /v1/companies/{idOrLookup}/financials returns income, balance-sheet, and cash-flow statements per reporting period.
All fundamentals are derived from public SEC XBRL filings. Values are official-source and redistribution-safe. The /v1/public/companies feed is part of the public surface; the /financials endpoint requires the data:read scope.

The universe

/v1/public/companies is the curated, scored fundamentals universe: the constituents of the S&P 500 and the Nasdaq-100, deduplicated. Membership is defined by carrying a SEC-derived sector, which excludes raw ticker-directory filers. The feed is intentionally lean: identity plus classification inline, so sector-aware logic resolves without a per-company fan-out. Pull the underlying metrics through the financials endpoint or the observations API.
Coverage totals change as index membership and filings update. Read live breadth from GET /v1/public/coverage rather than hard-coding counts.

List the scored universe

limit
integer
default:"100"
Page size, 1 to 500.
cursor
string
Opaque pagination cursor from meta.pagination.next_cursor.
sort
string
Field to sort by (endpoint-supported).
order
string
default:"asc"
Sort direction: asc or desc.
curl "https://data.quantoraresearch.com/v1/public/companies?limit=2" \
  -H "x-api-key: $CONDUIT_API_KEY"
Response
{
  "data": [
    {
      "entityId": "ent_aapl",
      "name": "Apple Inc.",
      "ticker": "AAPL",
      "cik": "0000320193",
      "exchange": "NASDAQ",
      "country": "USA",
      "sector": "Information Technology",
      "industry": "Technology Hardware, Storage & Peripherals"
    }
  ],
  "meta": {
    "api_version": "v1",
    "pagination": { "limit": 2, "cursor": null, "next_cursor": "...", "has_more": true }
  },
  "requestId": "..."
}
entityId
string
Conduit entity identifier. Use this (or the ticker / CIK) as the idOrLookup for financials.
name
string
Registered company name.
ticker
string
Primary listing ticker. May be null.
cik
string
SEC Central Index Key, zero-padded. May be null.
exchange
string
Primary exchange. May be null.
country
string
Domicile country (ISO 3, e.g. USA).
sector
string
SEC-derived sector. Every universe member carries one.
industry
string
Industry within the sector. May be null.

Resolve a company

The idOrLookup path segment for the financials endpoint accepts a Conduit entity id, a ticker, or a CIK. If you only have a ticker and want to confirm the entity first, resolve it:
curl "https://data.quantoraresearch.com/v1/entities/resolve?alias=AAPL&alias_type=ticker" \
  -H "x-api-key: $CONDUIT_API_KEY"
You can skip resolution entirely. GET /v1/companies/AAPL/financials works directly because the path lookup matches ticker and CIK as well as entity id.

Pull financial statements

GET /v1/companies/{idOrLookup}/financials returns three arrays: income statements, balance sheets, and cash-flow statements. Each array element is one reporting period, newest first. Line items are mapped from SEC XBRL concepts into stable keys.
idOrLookup
string
required
Entity id, ticker, or CIK.
period
string
Restrict to a reporting frequency: annual or quarterly. Omit to return both.
limit
integer
default:"8"
Maximum statements per type, newest first. 1 to 100.
Unknown query parameters are rejected with bad_request. Only period and limit are accepted here.
curl "https://data.quantoraresearch.com/v1/companies/AAPL/financials?period=annual&limit=3" \
  -H "x-api-key: $CONDUIT_API_KEY"
Response
{
  "data": {
    "entity_id": "ent_aapl",
    "ticker": "AAPL",
    "cik": "0000320193",
    "income_statements": [
      {
        "period": "annual",
        "periodEnd": "2025-09-27",
        "currency": "USD",
        "revenue": 416161000000,
        "cost_of_revenue": 210352000000,
        "gross_profit": 205809000000,
        "operating_income": 132972000000,
        "net_income": 112010000000,
        "earnings_per_share_diluted": 7.39,
        "weighted_average_shares_diluted": 15150000000
      }
    ],
    "balance_sheets": [
      {
        "period": "annual",
        "periodEnd": "2025-09-27",
        "currency": "USD",
        "total_assets": 364980000000,
        "current_assets": 152987000000,
        "cash_and_equivalents": 30299000000,
        "total_liabilities": 290437000000,
        "long_term_debt": 85750000000,
        "shareholders_equity": 74543000000
      }
    ],
    "cash_flow_statements": [
      {
        "period": "annual",
        "periodEnd": "2025-09-27",
        "currency": "USD",
        "net_cash_flow_from_operations": 118254000000
      }
    ]
  },
  "meta": { "api_version": "v1" },
  "requestId": "..."
}
Example figures above are illustrative. Pull live values from the endpoint.

Response shape

entity_id
string
Conduit entity id for the resolved company.
ticker
string
Resolved ticker. May be null.
cik
string
Resolved CIK. May be null.
income_statements
array
Income statements, newest first.
balance_sheets
array
Balance sheets, newest first.
cash_flow_statements
array
Cash-flow statements, newest first.
Every statement object shares three common fields plus its line items:
period
string
Reporting frequency of the statement (annual or quarterly).
periodEnd
string
Period-end date the statement describes (ISO date). Statements are keyed and sorted by this field.
currency
string
Reporting currency (USD for SEC filers).
A line item is absent from a statement object when the company did not report that concept for the period. Treat missing keys as “not reported”, not zero.

Line items by statement

revenue, cost_of_revenue, gross_profit, operating_expenses, research_and_development, selling_general_and_administrative, operating_income, net_income, earnings_per_share_diluted, weighted_average_shares_diluted.
total_assets, current_assets, cash_and_equivalents, inventory, accounts_receivable, accounts_payable, current_liabilities, total_liabilities, long_term_debt, shareholders_equity.
net_cash_flow_from_operations.

Worked example: resolve, then pull

1

Find the company in the universe

List /v1/public/companies (or resolve a ticker) to get the identity and sector. You can also confirm membership and classification here before fetching statements.
2

Request statements by ticker

Call /v1/companies/{ticker}/financials with period=annual and a limit. No separate id lookup is required because the path accepts ticker and CIK.
3

Read period-keyed line items

Iterate income_statements, balance_sheets, and cash_flow_statements. Each element is one period; line items are stable keys. Missing keys mean the concept was not reported.
4

Trace any value to its filing

Each statement value originates from an observation. Pull the same fundamentals through GET /v1/entities/{entityId}/observations and follow GET /v1/provenance/observations/{observationId} to the named SEC source and ingestion run.

Notes and caveats

Statements are assembled from individual SEC XBRL fundamentals observations, one per line item per period. The financials endpoint groups them into per-period statement objects so you do not have to.
When a period has multiple reported vintages, the most recent value is used for each line item. The full history, including superseded values, remains queryable through the observations API with the as_of and knowledge-time filters. Note that as_of currently approximates the ingestion timestamp rather than full provider-vintage reconstruction.
The universe is US issuers in the S&P 500 and Nasdaq-100. Use GET /v1/public/coverage for the current catalog totals and covered categories rather than assuming a fixed count.

Economic calendar & events

SEC filings also surface as issuer-filing events in the unified events feed.

Sync & changes

Keep a downstream copy of fundamentals fresh with incremental sync.