Skip to content

Reference

Every endpoint answers GET at https://api.thaler.sh/v1 with the key in Authorization: Bearer. Responses are JSON with data and meta; errors are problem details.

The same reference as an OpenAPI 3.1 document: openapi.json. Press j and k to step through the endpoints.

19 endpoints

Try , or .

Companies

Search

GET/securities

Search active securities by ticker prefix or entity name

Parameters

querystringin queryRequired
limitintegerin query
Default 25At most 500
curl https://api.thaler.sh/v1/securities \  --get \  -d query=apple \  -H "Authorization: Bearer $THALER_API_KEY"
Response
{  "data": [    {      "cik": integer,      "company_coverage_state": string,      "entity_name": string,      "exchange": string,      "security_coverage_state": string,      "ticker": string,      "ticker_normalized": string    }  ],  "meta": {    "limit": integer,    "query": string,    "release": {      "checks": "passed" | "failed",      "date": date,      "published_at": date-time,      "stamp": string    } | null,    "request_id": string,    "route": string,    "schema": "thaler.data.v1"  }}

Profile

GET/securities/{ticker}/profile

Security profile

Parameters

tickerstringin pathRequired
Ticker symbol addressed by Thaler's security list
curl https://api.thaler.sh/v1/securities/AAPL/profile \  -H "Authorization: Bearer $THALER_API_KEY"
Response
{  "data": {    "cik": integer,    "company_coverage_state": string,    "entity_name": string,    "exchange": string,    "filing_count": integer,    "is_active": boolean,    "is_primary": boolean,    "latest_filing_at": date | null,    "metric_value_count": integer,    "price": {      "day": date,      "last_sale_at": date-time | null,      "market_cap": decimal string | null,      "price": decimal string,      "prior_day": date | null,      "prior_price": decimal string | null,      "record_close": decimal string | null,      "record_day": date | null,      "record_source": string | null,      "shares": decimal string | null,      "shares_as_of": date | null,      "source": string,      "symbol": string,      "updated_at": date-time    } | null,    "raw_fact_count": integer,    "security_coverage_state": string,    "security_id": uuid,    "ticker": string,    "ticker_normalized": string  },  "meta": {    "release": {      "checks": "passed" | "failed",      "date": date,      "published_at": date-time,      "stamp": string    } | null,    "request_id": string,    "route": string,    "schema": "thaler.data.v1",    "ticker": string  }}

Metrics

Values

GET/securities/{ticker}/metrics

Canonical metric values for a security

Parameters

tickerstringin pathRequired
Ticker symbol addressed by Thaler's security list
periodstringin query
latestannualquarterlyallDefault latest
keyslist of stringin query
Canonical metric keys to include, comma-separated. Omit for every metric.
collapsebooleanin query
Keep the original discrete row for each metric, unit, period kind, and period end.Default false
limitintegerin query
Limits are capped at 500 unless keys and collapse are both supplied.Default 25At most 5,000
as_ofdatein query
Read the record as it stood on this day (YYYY-MM-DD): each figure from the latest statement filed on or before the day, the standing statement when it was already on file (so today's date is the standing read), figures no filing had stated by then absent, and a derived figure recomputed from its inputs' statements of that day or withheld. Every row names the filing it is read from in read_from. Filed dates are EDGAR's filing dates on the ledger. Values without a revision chain on the ledger yet are absent from an as-of read.
curl https://api.thaler.sh/v1/securities/AAPL/metrics \  --get \  -d period=annual \  -d keys=revenue,net_income \  -H "Authorization: Bearer $THALER_API_KEY"
Response
{  "data": [    {      "cik": integer,      "confidence": decimal string,      "end_date": date,      "entity_name": string,      "exchange": string | null,      "fiscal_period": string | null,      "fiscal_year": integer | null,      "metric_key": string,      "metric_label": string,      "metric_value_id": uuid,      "period_kind": string,      "read_from": {        "accession_number": string,        "filed_at": date | null,        "form": string | null,        "kind": "first" | "same" | "revised" | "re_expressed",        "revision_rank": integer      } | null,      "revised": boolean,      "revision_count": integer,      "start_date": date | null,      "statement": string | null,      "ticker": string | null,      "unit": string,      "value": decimal string,      "value_kind": "reported" | "derived"    }  ],  "meta": {    "as_of": date,    "collapse": boolean,    "keys": [string],    "limit": integer,    "period": "latest" | "annual" | "quarterly" | "all",    "release": {      "checks": "passed" | "failed",      "date": date,      "published_at": date-time,      "stamp": string    } | null,    "request_id": string,    "route": string,    "schema": "thaler.data.v1",    "ticker": string  }}

Catalog

GET/metrics

Metric catalog: canonical figures plus screen-surface ratios with coverage counts

Responses200304401429500503504
curl https://api.thaler.sh/v1/metrics \  -H "Authorization: Bearer $THALER_API_KEY"
Response
{  "data": [    {      "covered_company_count": integer,      "description": string,      "formula": string | null,      "key": string,      "label": string,      "mappings": [        {          "concept": string,          "priority": integer,          "sign_multiplier": integer,          "taxonomy": string,          "unit": string | null        }      ],      "statement": string | null,      "unit": string | null,      "value_kind": "reported" | "derived"    }  ],  "meta": {    "release": {      "checks": "passed" | "failed",      "date": date,      "published_at": date-time,      "stamp": string    } | null,    "request_id": string,    "route": string,    "schema": "thaler.data.v1"  }}

Source trail

GET/securities/{ticker}/metrics/{metric_key}/lineage

Metric lineage back to source facts

Parameters

tickerstringin pathRequired
Ticker symbol addressed by Thaler's security list
metric_keystringin pathRequired
Thaler metric key such as revenue or free_cash_flow
metric_value_iduuidin query
Return lineage for one exact metric value.
limitintegerin query
Default 25At most 500
as_ofdatein query
Read the record as it stood on this day (YYYY-MM-DD): each figure from the latest statement filed on or before the day, the standing statement when it was already on file (so today's date is the standing read), figures no filing had stated by then absent, and a derived figure recomputed from its inputs' statements of that day or withheld. Every row names the filing it is read from in read_from. Filed dates are EDGAR's filing dates on the ledger. Values without a revision chain on the ledger yet are absent from an as-of read.
curl https://api.thaler.sh/v1/securities/AAPL/metrics/revenue/lineage \  -H "Authorization: Bearer $THALER_API_KEY"
Response
{  "data": [    {      "accession_number": string | null,      "cik": integer,      "concept": string,      "end_date": date,      "entity_name": string,      "exchange": string | null,      "filed_at": date | null,      "fiscal_period": string | null,      "fiscal_year": integer | null,      "form": string | null,      "frame": string | null,      "location": {        "concept": string | null,        "context": string | null,        "document": string | null,        "line_id": string | null,        "match_quality": "unique" | "ambiguous" | "hidden_only" | "none"      },      "metric_key": string,      "metric_label": string,      "metric_unit": string,      "metric_value": decimal string,      "metric_value_id": uuid,      "period_kind": string,      "raw_fact_id": uuid,      "raw_ingestion_run_id": uuid | null,      "raw_unit": string,      "raw_value": decimal string,      "role": string,      "source_payload_id": uuid | null,      "start_date": date | null,      "taxonomy": string,      "ticker": string | null    }  ],  "meta": {    "as_of": date,    "limit": integer,    "metric_key": string,    "release": {      "checks": "passed" | "failed",      "date": date,      "published_at": date-time,      "stamp": string    } | null,    "request_id": string,    "route": string,    "schema": "thaler.data.v1",    "ticker": string  }}

Revisions

GET/securities/{ticker}/metrics/{metric_key}/revisions

Every filing's statement of a metric's figures: what each read when first reported and every time since

The revision chain behind a company's values for one metric. One row per metric value and filing, newest period first and each chain in filing order (revision_rank), with the value that filing stated, its form, filed date and accession. kind is first for the earliest filing on the ledger, same where the filing carried the previous figure (exactly, or the same figure at a coarser precision), revised where it stated a different figure (delta is the change), and re_expressed where a per-share or share-count figure is the previous one divided or multiplied by the stock splits the ledger knows between the two filings (split_ratio, new shares per old). standing marks the statement whose fact is the metric value's source lineage.

Parameters

tickerstringin pathRequired
Ticker symbol addressed by Thaler's security list
metric_keystringin pathRequired
Thaler metric key such as revenue or free_cash_flow
metric_value_iduuidin query
Return lineage for one exact metric value.
fiscal_yearintegerin query
Only the chains of values placed in this fiscal year.
fiscal_periodstringin query
Only the chains of values with this fiscal period label (FY, Q1 to Q4), case-insensitive.
limitintegerin query
Default 25At most 500
curl https://api.thaler.sh/v1/securities/AAPL/metrics/revenue/revisions \  --get \  -d fiscal_period=FY \  -H "Authorization: Bearer $THALER_API_KEY"
Response
{  "data": [    {      "accession_number": string,      "cik": integer,      "delta": decimal string | null,      "end_date": date,      "entity_name": string,      "exchange": string | null,      "filed_at": date | null,      "fiscal_period": string | null,      "fiscal_year": integer | null,      "form": string | null,      "kind": "first" | "same" | "revised" | "re_expressed",      "metric_key": string,      "metric_label": string,      "metric_unit": string,      "metric_value_id": uuid,      "period_kind": string,      "previous_value": decimal string | null,      "raw_fact_id": uuid,      "revision_rank": integer,      "split_ratio": decimal string | null,      "standing": boolean,      "start_date": date | null,      "ticker": string | null,      "value": decimal string    }  ],  "meta": {    "limit": integer,    "metric_key": string,    "release": {      "checks": "passed" | "failed",      "date": date,      "published_at": date-time,      "stamp": string    } | null,    "request_id": string,    "route": string,    "schema": "thaler.data.v1",    "ticker": string  }}

Raw concepts

GET/securities/{ticker}/raw-concepts

Raw XBRL concepts observed for a security

Parameters

tickerstringin pathRequired
Ticker symbol addressed by Thaler's security list
limitintegerin query
Default 25At most 500
curl https://api.thaler.sh/v1/securities/AAPL/raw-concepts \  -H "Authorization: Bearer $THALER_API_KEY"
Response
{  "data": [    {      "cik": integer,      "concept": string,      "earliest_end_date": date | null,      "entity_name": string,      "exchange": string,      "fact_count": integer,      "latest_end_date": date | null,      "taxonomy": string,      "ticker": string,      "unit": string    }  ],  "meta": {    "limit": integer,    "release": {      "checks": "passed" | "failed",      "date": date,      "published_at": date-time,      "stamp": string    } | null,    "request_id": string,    "route": string,    "schema": "thaler.data.v1",    "ticker": string  }}

Filings

A company’s filings

GET/securities/{ticker}/filings

Filing timeline for a security

Parameters

tickerstringin pathRequired
Ticker symbol addressed by Thaler's security list
formslist of stringin query
SEC form codes to include, comma-separated and matched exactly after uppercase normalization. Omit for every form on file.
itemslist of stringin query
8-K item numbers a filing must carry, comma-separated: 2.02 for earnings announcements. Omit for every filing.
limitintegerin query
Default 25At most 500
curl https://api.thaler.sh/v1/securities/AAPL/filings \  --get \  -d forms=10-Q,10-K \  -H "Authorization: Bearer $THALER_API_KEY"
Response
{  "data": [    {      "accepted_at": date-time | null,      "accession_number": string,      "announcement_timing": "before_open" | "during_market" | "after_close" | null,      "cik": integer,      "entity_name": string,      "exchange": string | null,      "filed_at": date | null,      "fiscal_period": string | null,      "fiscal_year": integer | null,      "form": string,      "items": [string],      "primary_document": string | null,      "report_date": date | null,      "source_url": string | null,      "ticker": string | null    }  ],  "meta": {    "forms": string,    "limit": integer,    "release": {      "checks": "passed" | "failed",      "date": date,      "published_at": date-time,      "stamp": string    } | null,    "request_id": string,    "route": string,    "schema": "thaler.data.v1",    "ticker": string  }}

A day’s filings

GET/filings/day

One day of the covered universe's filings

The day's filings across every covered company, shaped for News: the lines worth reading (current reports and event notices, earliest acceptance first), the day's reports with the revenue they carried, the day's reported insider purchases and sales, every form filed with its count, and filings per day over the fourteen days ending on the day. Without a date, the latest day on file.

Parameters

datedatein query
The filing day to read, as YYYY-MM-DD. Omitted, the latest day on file. A day past the latest is not found.
curl https://api.thaler.sh/v1/filings/day \  -H "Authorization: Bearer $THALER_API_KEY"
Response
{  "data": {    "companies": integer,    "date": date,    "days": [      {        "date": date,        "filings": integer      }    ],    "filings": integer,    "forms": [      {        "filings": integer,        "form": string      }    ],    "insiders": {      "largest": [        {          "accession_number": string,          "cik": integer,          "entity_name": string,          "is_director": boolean,          "is_officer": boolean,          "is_ten_percent_owner": boolean,          "kind": "purchase" | "sale",          "officer_title": string | null,          "owner_name": string | null,          "shares": decimal string,          "source_url": string,          "ticker": string | null,          "value": decimal string        }      ],      "purchase_value": decimal string,      "purchases": integer,      "sale_value": decimal string,      "sales": integer    },    "latest": date,    "lines": [      {        "accepted_at": date-time | null,        "accession_number": string,        "announcement_timing": "before_open" | "during_market" | "after_close" | null,        "cik": integer,        "entity_name": string,        "exchange": string | null,        "filed_at": date | null,        "fiscal_period": string | null,        "fiscal_year": integer | null,        "form": string,        "items": [string],        "primary_document": string | null,        "report_date": date | null,        "source_url": string | null,        "ticker": string | null      }    ],    "lines_total": integer,    "live": boolean,    "reports": [      {        "accepted_at": date-time | null,        "accession_number": string,        "cik": integer,        "entity_name": string,        "exchange": string | null,        "fiscal_period": string | null,        "fiscal_year": integer | null,        "form": string,        "prior_revenue": decimal string | null,        "report_date": date | null,        "revenue": decimal string | null,        "revenue_end": date | null,        "revenue_start": date | null,        "source_url": string | null,        "ticker": string | null      }    ],    "updated_at": date-time  },  "meta": {    "date": date,    "release": {      "checks": "passed" | "failed",      "date": date,      "published_at": date-time,      "stamp": string    } | null,    "request_id": string,    "route": string,    "schema": "thaler.data.v1"  }}

One filing

GET/filings/{accession}

A filing by accession

The company, the form, when it was filed, the filing folder on EDGAR, and its documents (the form's own document first, then the exhibits Thaler read), without fetching any of them.

Parameters

accessionstringin pathRequired
curl https://api.thaler.sh/v1/filings/0000320193-25-000079 \  -H "Authorization: Bearer $THALER_API_KEY"
Response
{  "data": {    "accepted_at": date-time | null,    "accession_number": string,    "cik": integer,    "documents": [      {        "document": string,        "kind": string,        "read": boolean,        "url": string      }    ],    "entity_name": string,    "filed_at": date | null,    "folder": string,    "form": string,    "ticker": string | null  },  "meta": {    "release": {      "checks": "passed" | "failed",      "date": date,      "published_at": date-time,      "stamp": string    } | null,    "request_id": string,    "route": string,    "schema": "thaler.data.v1"  }}

Insider trades

Across companies

GET/insider-activity

Reported insider purchases and sales across covered companies

Form 4 and Form 5 non-derivative open-market purchase and sale transactions. Superseded originals and amendments that cannot be matched unambiguously are excluded.

Parameters

tickerslist of stringin query
Several companies at once: their tickers, comma-separated, at most sixty.
sincedatein query
Include transactions on or after this reported transaction date.
kindstringin query
allpurchasesaleDefault all
limitintegerin query
Maximum number of ownership filings returned.Default 25At most 100
offsetintegerin query
Default 0At most 1,000,000
curl https://api.thaler.sh/v1/insider-activity \  --get \  -d kind=purchase \  -H "Authorization: Bearer $THALER_API_KEY"
Response
{  "data": {    "filings": [      {        "accession_number": string,        "aff10b5_one": boolean | null,        "cik": integer,        "entity_name": string,        "filed_at": date | null,        "footnotes": [          {            "id": string,            "text": string          }        ],        "form": "4" | "4/A" | "5" | "5/A",        "is_amendment": boolean,        "owners": [          {            "cik": integer,            "is_director": boolean,            "is_officer": boolean,            "is_other": boolean,            "is_ten_percent_owner": boolean,            "name": string,            "officer_title": string | null,            "other_text": string | null          }        ],        "period_of_report": date | null,        "source_url": string,        "ticker": string | null,        "transactions": [          {            "acquired_disposed_code": string | null,            "direct_indirect_ownership": string | null,            "footnote_ids": [string],            "nature_of_ownership": string | null,            "ordinal": integer,            "price_per_share": decimal string | null,            "security_title": string,            "shares": decimal string | null,            "shares_owned_following": decimal string | null,            "transaction_code": "P" | "S",            "transaction_date": date | null,            "transaction_value": decimal string | null,            "value_status": "counted" | "suspect" | "not_equity"          }        ]      }    ],    "purchase_transactions": integer,    "reported_purchase_value": decimal string,    "reported_sale_value": decimal string,    "sale_transactions": integer,    "total_transactions": integer,    "uncounted_transactions": integer  },  "meta": {    "kind": "purchase" | "sale",    "limit": integer,    "offset": integer,    "release": {      "checks": "passed" | "failed",      "date": date,      "published_at": date-time,      "stamp": string    } | null,    "request_id": string,    "route": string,    "schema": "thaler.data.v1",    "since": date  }}

One company

GET/securities/{ticker}/insider-activity

Reported insider purchases and sales for a security

Ticker-scoped Form 4 and Form 5 non-derivative open-market purchase and sale transactions with the reporting owners, filing dates, footnotes, and SEC source URLs.

Parameters

tickerstringin pathRequired
Ticker symbol addressed by Thaler's security list
sincedatein query
Include transactions on or after this reported transaction date.
kindstringin query
allpurchasesaleDefault all
limitintegerin query
Maximum number of ownership filings returned.Default 25At most 100
offsetintegerin query
Default 0At most 1,000,000
curl https://api.thaler.sh/v1/securities/AAPL/insider-activity \  -H "Authorization: Bearer $THALER_API_KEY"
Response
{  "data": {    "filings": [      {        "accession_number": string,        "aff10b5_one": boolean | null,        "cik": integer,        "entity_name": string,        "filed_at": date | null,        "footnotes": [          {            "id": string,            "text": string          }        ],        "form": "4" | "4/A" | "5" | "5/A",        "is_amendment": boolean,        "owners": [          {            "cik": integer,            "is_director": boolean,            "is_officer": boolean,            "is_other": boolean,            "is_ten_percent_owner": boolean,            "name": string,            "officer_title": string | null,            "other_text": string | null          }        ],        "period_of_report": date | null,        "source_url": string,        "ticker": string | null,        "transactions": [          {            "acquired_disposed_code": string | null,            "direct_indirect_ownership": string | null,            "footnote_ids": [string],            "nature_of_ownership": string | null,            "ordinal": integer,            "price_per_share": decimal string | null,            "security_title": string,            "shares": decimal string | null,            "shares_owned_following": decimal string | null,            "transaction_code": "P" | "S",            "transaction_date": date | null,            "transaction_value": decimal string | null,            "value_status": "counted" | "suspect" | "not_equity"          }        ]      }    ],    "purchase_transactions": integer,    "reported_purchase_value": decimal string,    "reported_sale_value": decimal string,    "sale_transactions": integer,    "total_transactions": integer,    "uncounted_transactions": integer  },  "meta": {    "kind": "purchase" | "sale",    "limit": integer,    "offset": integer,    "release": {      "checks": "passed" | "failed",      "date": date,      "published_at": date-time,      "stamp": string    } | null,    "request_id": string,    "route": string,    "schema": "thaler.data.v1",    "since": date,    "ticker": string  }}

Institutional holders

A company’s holders

GET/securities/{ticker}/holders

Who holds a company, from Form 13F

Institutional managers' positions in the company in the latest quarter on file, largest by value first, each with the manager's position a quarter earlier (null when the manager did not hold it) and its share of the manager's reported portfolio. Totals: managers holding it now and a quarter ago, shares held, value held, managers who opened and closed the position. Form 13F covers managers with $100 million or more; positions are as of the quarter end and filed up to 45 days later, and the latest quarter fills in as reports land.

Parameters

tickerstringin pathRequired
Ticker symbol addressed by Thaler's security list
limitintegerin query
Default 50At most 200
offsetintegerin query
Default 0At most 1,000,000
curl https://api.thaler.sh/v1/securities/AAPL/holders \  -H "Authorization: Bearer $THALER_API_KEY"
Response
{  "data": {    "amount_held": decimal string,    "cik": integer,    "closed": integer | null,    "entity_name": string,    "holders": integer,    "opened": integer | null,    "period": date,    "prior_amount_held": decimal string | null,    "prior_holders": integer | null,    "prior_period": date | null,    "rows": [      {        "accession_number": string,        "amount": decimal string,        "amount_type": string,        "filed_at": date,        "holder_cik": integer,        "holder_name": string,        "prior_amount": decimal string | null,        "prior_known": boolean,        "prior_value": decimal string | null,        "value": decimal string,        "weight": decimal string | null      }    ],    "rows_total": integer,    "ticker": string,    "updated_at": date-time | null,    "value_held": decimal string  },  "meta": {    "limit": integer,    "offset": integer,    "release": {      "checks": "passed" | "failed",      "date": date,      "published_at": date-time,      "stamp": string    } | null,    "request_id": string,    "route": string,    "schema": "thaler.data.v1",    "ticker": string  }}

Managers

GET/holders

Managers by name, or the largest

Institutional investment managers on file, matched by name when query is given, otherwise the largest by the value of their latest report.

Parameters

querystringin query
limitintegerin query
Default 10At most 50
curl https://api.thaler.sh/v1/holders \  --get \  -d query=berkshire \  -H "Authorization: Bearer $THALER_API_KEY"
Response
{  "data": [    {      "cik": integer,      "latest_period": date | null,      "latest_positions": integer | null,      "latest_value": decimal string | null,      "name": string    }  ],  "meta": {    "limit": integer,    "query": string,    "release": {      "checks": "passed" | "failed",      "date": date,      "published_at": date-time,      "stamp": string    } | null,    "request_id": string,    "route": string,    "schema": "thaler.data.v1"  }}

One manager

GET/holders/{cik}

What a manager holds, from its latest Form 13F

The manager's latest report position by position, largest by value first, each with its share of the report and the position a quarter earlier (null when new), the security resolved to a covered company where the CUSIP maps to one, the quarter's totals, positions opened and closed, and the quarters on file.

Parameters

cikintegerin pathRequired
limitintegerin query
Default 100At most 500
offsetintegerin query
Default 0At most 1,000,000
curl https://api.thaler.sh/v1/holders/1067983 \  -H "Authorization: Bearer $THALER_API_KEY"
Response
{  "data": {    "accession_number": string,    "cik": integer,    "closed": integer | null,    "filed_at": date,    "name": string,    "opened": integer | null,    "other_managers": integer,    "period": date,    "positions": integer,    "prior_period": date | null,    "quarters": [      {        "accession_number": string,        "filed_at": date,        "period": date,        "positions": integer,        "value_total": decimal string      }    ],    "rows": [      {        "amount": decimal string,        "amount_type": string,        "cik": integer | null,        "class": string,        "cusip": string,        "entity_name": string | null,        "issuer": string,        "prior_amount": decimal string | null,        "prior_value": decimal string | null,        "put_call": string,        "ticker": string | null,        "value": decimal string,        "weight": decimal string | null      }    ],    "rows_total": integer,    "value_total": decimal string  },  "meta": {    "limit": integer,    "offset": integer,    "release": {      "checks": "passed" | "failed",      "date": date,      "published_at": date-time,      "stamp": string    } | null,    "request_id": string,    "route": string,    "schema": "thaler.data.v1"  }}

Segments

Segments

GET/securities/{ticker}/segments

Figures by segment, geography and product

Revenue, operating income and other measures broken down by business segment, geography and product, read from each annual and quarterly report's own XBRL. One concept per axis and measure (the one that names the most members and periods), the latest filing's figure for every member and period (later reports restate), and the consolidated total the same filings reported. Annual by default; period=quarterly gives the quarters, with a fourth quarter derived as the year less the three reported quarters where a filing never tags it (derived: true on the period). Members are labelled as the filer labels them.

Parameters

tickerstringin pathRequired
Ticker symbol addressed by Thaler's security list
periodstringin query
annualquarterlyDefault annual
curl https://api.thaler.sh/v1/securities/AAPL/segments \  -H "Authorization: Bearer $THALER_API_KEY"
Response
{  "data": {    "axes": [      {        "axis": "segment" | "geography" | "product",        "measures": [          {            "concept": string,            "measure": "revenue" | "operating_income" | "gross_profit" | "cost_of_revenue" | "assets" | "long_lived_assets" | "capital_expenditure" | "depreciation",            "members": list of SegmentMember,            "periods": list of SegmentPeriod,            "totals": [decimal string | null],            "unit": string          }        ]      }    ],    "cik": integer,    "documents": integer,    "entity_name": string,    "period": "annual" | "quarterly",    "ticker": string,    "updated_at": date-time | null  },  "meta": {    "period": "latest" | "annual" | "quarterly" | "all",    "release": {      "checks": "passed" | "failed",      "date": date,      "published_at": date-time,      "stamp": string    } | null,    "request_id": string,    "route": string,    "schema": "thaler.data.v1",    "ticker": string  }}

Prices

Prices

GET/securities/{ticker}/prices

Prices, from IEX and the record

One figure per trading day: IEX's last regular-session sale, read from the exchange's free historical files (data provided for free by IEX; an IEX print is not the consolidated close), replaced by an official close where the record carries one for the day: the SEC's fails-to-deliver files, Form 13F quarter ends and Form N-PORT month ends (value over shares across reporting managers, the median of three or more). days, price and source are parallel columns; marks lists every close of record in the range with the reports behind it; latest is the newest price with the market cap it makes with the company's latest certified share count, dated. A year by default; range (1m, 3m, 1y, 5y, max) or from and to widen it. Prices are as traded on their day, unadjusted.

Parameters

tickerstringin pathRequired
Ticker symbol addressed by Thaler's security list
rangestringin query
1m3m1y5ymaxDefault 1y
fromdatein query
todatein query
curl https://api.thaler.sh/v1/securities/AAPL/prices \  --get \  -d range=3m \  -H "Authorization: Bearer $THALER_API_KEY"
Response
{  "data": {    "actions": [      {        "evidence": string | null,        "ex_date": date,        "kind": "split" | "dividend" | "ticker_change",        "ratio": decimal string | null,        "source": string      }    ],    "adj_price": [decimal string],    "cik": integer,    "days": [date],    "entity_name": string,    "from": date,    "latest": {      "day": date,      "last_sale_at": date-time | null,      "market_cap": decimal string | null,      "price": decimal string,      "prior_day": date | null,      "prior_price": decimal string | null,      "record_close": decimal string | null,      "record_day": date | null,      "record_source": string | null,      "shares": decimal string | null,      "shares_as_of": date | null,      "source": string,      "symbol": string,      "updated_at": date-time    } | null,    "market_cap": [decimal string | null],    "marks": [      {        "agreement": decimal string | null,        "close": decimal string,        "day": date,        "sample": integer,        "source": string      }    ],    "price": [decimal string],    "source": ["iex" | "fails" | "iex_official" | "thirteen_f" | "nport"],    "ticker": string,    "to": date  },  "meta": {    "release": {      "checks": "passed" | "failed",      "date": date,      "published_at": date-time,      "stamp": string    } | null,    "request_id": string,    "route": string,    "schema": "thaler.data.v1",    "ticker": string  }}

Screener

Screen

GET/screen

Screen the company universe by reported figures

One row per company with core metrics on file and an active security, filtered by repeatable where clauses over the closed screen column set. Companies missing a filtered figure are excluded and counted in meta.set_aside, never silently dropped.

Parameters

wherelist of stringin query
Repeatable filter clause of the form column:op:value, where op is gte, lte, gt, or lt and value is a plain decimal (no exponents) of at most 32 characters, e.g. revenue:gte:1000000000.
sortstringin query
Screen column to sort by: ticker or any screen figure key. Figure sorts always place missing figures last.Default ticker
dirstringin query
ascdescDefault asc
limitintegerin query
Default 25At most 500
offsetintegerin query
Default 0At most 1,000,000
columnslist of stringin query
Comma-separated figures to return in each row, beside its cik, ticker, exchange and entity_name. Omit for every figure.coverage_statefiscal_yearannual_end_dateinstant_end_dateprior_annual_end_datepublic_float_end_date
curl https://api.thaler.sh/v1/screen \  --get \  -d where=revenue:gte:1000000000 \  -d sort=net_margin \  -d dir=desc \  -d columns=revenue,net_margin,market_cap \  -H "Authorization: Bearer $THALER_API_KEY"
Response
{  "data": [    {      "annual_end_date": date | null,      "assets": decimal string | null,      "capex_intensity": decimal string | null,      "capital_expenditures": decimal string | null,      "capital_returns": decimal string | null,      "capital_returns_to_fcf": decimal string | null,      "cash_and_equivalents": decimal string | null,      "cash_ratio": decimal string | null,      "cik": integer,      "common_shares_outstanding": decimal string | null,      "coverage_state": string,      "current_assets": decimal string | null,      "current_liabilities": decimal string | null,      "current_ratio": decimal string | null,      "depreciation_and_amortization": decimal string | null,      "dividend_yield": decimal string | null,      "dividends_paid": decimal string | null,      "dividends_per_share": decimal string | null,      "entity_name": string,      "eps_diluted": decimal string | null,      "exchange": string,      "fcf_margin": decimal string | null,      "fcf_yield": decimal string | null,      "fcf_yield_ttm": decimal string | null,      "fiscal_year": integer | null,      "free_cash_flow": decimal string | null,      "free_cash_flow_ttm": decimal string | null,      "gross_margin": decimal string | null,      "gross_profit": decimal string | null,      "instant_end_date": date | null,      "liabilities": decimal string | null,      "liabilities_to_equity": decimal string | null,      "market_cap": decimal string | null,      "net_income": decimal string | null,      "net_income_prior": decimal string | null,      "net_income_ttm": decimal string | null,      "net_income_yoy": decimal string | null,      "net_margin": decimal string | null,      "operating_cash_flow": decimal string | null,      "operating_cash_flow_ttm": decimal string | null,      "operating_income": decimal string | null,      "operating_margin": decimal string | null,      "payout_ratio": decimal string | null,      "pb": decimal string | null,      "pe": decimal string | null,      "pe_ttm": decimal string | null,      "price": decimal string | null,      "price_day": date | null,      "prior_annual_end_date": date | null,      "ps": decimal string | null,      "ps_ttm": decimal string | null,      "public_float": decimal string | null,      "public_float_end_date": date | null,      "revenue": decimal string | null,      "revenue_prior": decimal string | null,      "revenue_ttm": decimal string | null,      "revenue_yoy": decimal string | null,      "roa": decimal string | null,      "roe": decimal string | null,      "sbc_intensity": decimal string | null,      "share_based_compensation": decimal string | null,      "share_repurchases": decimal string | null,      "shares_change": decimal string | null,      "shares_outstanding_end_date": date | null,      "stockholders_equity": decimal string | null,      "ticker": string,      "ttm_end_date": date | null    }  ],  "meta": {    "columns": [string],    "dir": "asc" | "desc",    "limit": integer,    "offset": integer,    "release": {      "checks": "passed" | "failed",      "date": date,      "published_at": date-time,      "stamp": string    } | null,    "request_id": string,    "route": string,    "schema": "thaler.data.v1",    "sort": string,    "where": [string]  }}

Release

Current release

GET/release

The current data release

The daily data release: its date, whether its checks passed, when it was published, and a stamp that identifies it exactly. A release covers companies, securities, filings and metric values; filings, insider trades, holders, segments and prices are also updated between releases. Every response names the release it was served from in meta.release. Answers 503 before the first release.

Responses200304401429500503504
curl https://api.thaler.sh/v1/release \  -H "Authorization: Bearer $THALER_API_KEY"
Response
{  "data": {    "checks": "passed" | "failed",    "date": date,    "published_at": date-time,    "stamp": string  },  "meta": {    "release": {      "checks": "passed" | "failed",      "date": date,      "published_at": date-time,      "stamp": string    } | null,    "request_id": string,    "route": string,    "schema": "thaler.data.v1"  }}