Research Data API — documentation.

Structured data, filing analysis, research context, and agentic workflows for modern value investing. 48 authenticated endpoints organized into three bundles, plus two async add-on services.

The full endpoint catalog remains below. Current access is a paid beta with manual token provisioning, three live Fly services, and some features kept contact-only.

Current beta access

Paid beta

Access is currently provisioned directly. Contact me through the homepage to request a token.

item current rule
Auth header X-API-Key: YOUR_TOKEN
Provisioning Manual paid-beta onboarding
Utility route GET /api/billing/me to confirm plan and quota
Security Keep tokens server-side when possible; do not expose them in public frontend code

Live beta hosts

service base URL public route authenticated route
Data API Lite data-api-lite.fly.dev GET /api/health GET /api/billing/me
Meta-Thinking Lite meta-thinking-lite.fly.dev GET /api/health GET /api/billing/me
Corporate Sim corporate-sim.fly.dev GET /api/health GET /api/billing/me

Public vs private in the current rollout

The catalog below documents the broader API surface. Availability in the current paid beta depends on bundle and provisioning.

capability status current treatment
Screening and market data Available now Public paid-beta access.
Selected financials and filing capabilities Available now Provisioned by bundle and usage tier.
Meta-thinking and corporate simulation Available now Paid-beta add-ons.
Close Read full delivery Available upon conversation Private delivery or private provisioning.
RAG, ProQuest, CRSP, ad hoc SQL, graph traversal, Bayesian inference Contact-only Not public in the current lite deployment.

Public Close Read samples

index
Sample index
Public sample artifacts for website display.
pdf
NTES PDF
Public sample report.
pdf
MOH PDF
Public sample report.

Authentication

All endpoints require an X-API-Key header except /data/health. Keys are issued per account and scoped to the endpoint bundles you subscribe to.

$ curl https://api.chenyu-li.info/data/screening/NVDA \
  -H "X-API-Key: YOUR_KEY"

Quick start

The fastest way to see the product: call the combined screening endpoint for any ticker.

$ curl https://api.chenyu-li.info/data/screening/NVDA \
  -H "X-API-Key: YOUR_KEY"

{
  "veto": { /* pass/fail quality checks */ },
  "durability": { /* competitive position scores */ },
  "price": { /* valuation metrics */ },
  "two_track": { /* bull/bear scenario ranges */ }
}

Errors & rate limits

All errors return JSON. The current paid beta distinguishes invalid keys, plan restrictions, and features that are not public in the lite deployment.

statuscodemeaning
401invalid_api_keyMissing, malformed, revoked, or unknown token
402Payment RequiredPlan does not include the requested endpoint family, add-on, or quota band
403feature_not_publicEndpoint is intentionally not part of the current public lite deployment
404not_foundTicker, CIK, or resource not found
429rate_limitedRate limit exceeded
500internal_errorInternal error

System endpoints

GET /data/health

Health check. No authentication required. Returns service status and version.

GET /data/docs/reference

Machine-readable endpoint reference. Returns the curated contract with version hash, endpoint list, and parameter schemas.

GET /data/schema

Lists all available data tables, source families, and their update frequencies.

GET /data/schema/{table}

Column definitions, types, and sample values for a specific table.

params
table — table name from /data/schema

Bundle 1: Core Screening & Market

Resolution, screening, market snapshots, ADR lookups, and special situations. The fastest entry point for dashboard builders and screener tools.

GET /data/resolve

Batch ticker resolution. Accepts a comma-separated list and returns canonical identifiers, CIKs, and exchange info.

query
tickers — comma-separated list (e.g. NVDA,AAPL,KSPI)
GET /data/resolve/{ticker}

Single ticker resolution. Returns canonical name, CIK, exchange, sector, and industry.

GET /data/screening/{ticker}

Combined screening output: veto checks, durability scores, valuation metrics, and bull/bear two-track ranges. The single most useful endpoint for a first look at any company.

units
1 unit per call
$ curl https://api.chenyu-li.info/data/screening/KSPI \
  -H "X-API-Key: YOUR_KEY"
GET /data/screening/{ticker}/veto

Quality veto checks only. Pass/fail flags for accounting red flags, governance issues, and structural concerns.

GET /data/screening/{ticker}/durability

Competitive durability scores. Moat strength, margin stability, reinvestment quality, and capital allocation history.

GET /data/screening/{ticker}/price

Valuation metrics. Current multiples, historical ranges, and implied growth rates.

GET /data/screening/{ticker}/two-track

Bull/bear scenario ranges. Upside and downside price targets with key assumptions and probability-weighted expected value.

GET /data/market/{category}

Market data by category. Returns latest snapshots for a predefined group (e.g. semiconductors, financials, adr-japan).

params
category — group name from available market categories
units
1 unit per call
GET /data/market/snapshot/{ticker}

Single-ticker market snapshot. Price, volume, 52-week range, and basic technicals.

GET /data/market/movers

Top gainers, losers, and most active across the research universe.

GET /data/adr/japan/{ticker}

Japanese ADR data. Local-listed price, ADR premium/discount, FX-adjusted fair value, and cross-listing details.

GET /data/adr/list

Full list of tracked ADRs with current premium/discount and liquidity metrics.

GET /data/special-situations

Active special situations watchlist. Spin-offs, mergers, restructurings, and catalyst-driven events being tracked.

GET /data/special-situations/{ticker}

Special situation detail for a specific ticker. Event type, timeline, catalyst, and current status.

Bundle 2: Filings, Financials & ML

Company financials, SEC filing analytics, RAG retrieval, ML-based scoring, and one-call context assembly. The bundle for deep issuer-level research.

GET /data/financials/{ticker}

Annual financial statements. Income statement, balance sheet, and cash flow with standardized line items.

units
1 unit per call
GET /data/financials/{ticker}/quarterly

Quarterly financial statements. Same structure as annual, with TTM calculations.

GET /data/financials/{ticker}/ratios

Derived financial ratios. Profitability, leverage, efficiency, and growth metrics across available history.

GET /data/filing/{cik}/{year}/{item}/summary

Filing section summary. Gap map, topic extraction, and specificity scores for a specific 10-K/10-Q item.

params
cik — SEC CIK number; year — filing year; item — section (e.g. 1A, 7)
units
5 units per call
$ curl https://api.chenyu-li.info/data/filing/1045810/2024/7/summary \
  -H "X-API-Key: YOUR_KEY"
GET /data/filing/{cik}/{year}/topics

Topic extraction across all sections of a filing year. Identifies key themes, risks, and strategic shifts.

GET /data/filing/{cik}/latest

Metadata for the most recent filing. Filing date, type, period, and available section items.

GET /data/filing/{cik}/{year}/gap-map

Gap map across all filing sections for a given year. Highlights sections with thin disclosure or boilerplate language.

GET /data/filing/{cik}/{year}/{item}/specificity

Specificity analysis for a filing section. Measures concrete vs. vague language with sentence-level annotations.

GET /data/ml/scores/{ticker}

ML-derived quality and risk scores. Composite scoring across financial health, disclosure quality, and competitive position.

GET /data/ml/features/{ticker}

Raw feature vectors used in ML scoring. Useful for building custom models on top of the platform's feature extraction.

GET /data/ml/universe

Current ML scoring universe. Lists all tickers with available scores and the date of last model run.

POST /data/context

One-call context assembly for a ticker. Pulls screening, financials, filing data, and ML scores into a single structured response. Designed for LLM and agent workflows.

body
{"ticker": "...", "sections": ["screening", "financials", "filing", "ml"]}
units
5 units per call
$ curl -X POST https://api.chenyu-li.info/data/context \
  -H "X-API-Key: YOUR_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "ticker": "KSPI",
    "sections": ["screening", "financials", "filing", "ml"]
  }'
GET /data/context/fields

Lists all available context sections and their fields. Useful for discovering what data the context endpoint can assemble.

Bundle 3: Graph, Macro & Query

Entity graph search, government and economic datasets, historical research tables, and read-only SQL. The bundle for advanced analysts and institutional workflows.

GET /data/graph/path

Shortest path between two entities in the research graph. Finds connections through shared directors, subsidiaries, suppliers, or institutional holders.

query
from — source entity; to — target entity; max_hops — optional (default 4)
units
5 units per call
GET /data/graph/neighbors

Direct neighbors of an entity. Returns all first-degree connections with relationship types and edge weights.

query
entity — entity ID or ticker; type — optional filter (e.g. director, supplier)
GET /data/graph/entity/{id}

Entity detail. Full metadata for a node in the research graph — type, name, properties, and connection count.

GET /data/gov/{source}

Government dataset by source. Returns the latest available data for a specific source (e.g. bls, census, bea).

GET /data/gov/fred/{series}

FRED economic series. Returns time series data for any FRED series ID (e.g. GDP, UNRATE, DGS10).

query
start — optional start date; end — optional end date
GET /data/gov/treasury

Treasury yield curve. Current and historical yields across maturities.

GET /data/gov/list

Available government data sources and their last update timestamps.

POST /data/query

Read-only SQL on unified research tables. Execute analytical queries across financials, filings, market data, and derived scores.

body
{"sql": "SELECT ..."}
units
5 units per call
limits
Read-only. Max 10,000 rows. 30-second timeout.
$ curl -X POST https://api.chenyu-li.info/data/query \
  -H "X-API-Key: YOUR_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "sql": "SELECT ticker, roe, roic FROM financials WHERE roe > 0.2 ORDER BY roic DESC LIMIT 20"
  }'
GET /data/query/tables

Lists all tables available for SQL queries, with column schemas. Use this before constructing queries.

GET /data/proquest/financials

Historical financial data from the ProQuest research dataset. Longer time series than the standard financials endpoint.

query
ticker — company ticker; years — optional range (default all available)
GET /data/crsp/{ticker}

CRSP historical data for a ticker. Returns, delisting info, share adjustments, and distribution history.

GET /data/historical/returns/{ticker}

Historical return series. Daily, monthly, and annual returns with drawdown and volatility statistics.

query
perioddaily, monthly, or annual; start / end — date range

Async APIs (add-ons)

Meta-Thinking and Corporate Simulation are async job-based services billed separately from the data API. Submit a job, poll for status, consume the result.

POST /meta-thinking/jobs

Submit an async belief-state analysis job. Produces a structured interpretation layer over the raw data for a given ticker and catalyst.

body
{"ticker": "...", "catalyst": "..."}
pricing
1 job per call (not unit-metered)
$ curl -X POST https://api.chenyu-li.info/meta-thinking/jobs \
  -H "X-API-Key: YOUR_KEY" \
  -H "Content-Type: application/json" \
  -d '{ "ticker": "NVDA", "catalyst": "AI capex digestion" }'

{ "job_id": "mt-abc123", "status": "pending" }
GET /meta-thinking/jobs/{job_id}

Poll job status and retrieve results when complete. Status transitions: pendingrunningcomplete.

POST /sim/run

Submit an async corporate strategy simulation. Round-based competitive simulation with configurable scenarios.

body
{"scenario": "...", "rounds": 5, "companies": [...]}
pricing
1 run per call (not unit-metered)
$ curl -X POST https://api.chenyu-li.info/sim/run \
  -H "X-API-Key: YOUR_KEY" \
  -H "Content-Type: application/json" \
  -d '{ "scenario": "semiconductor" }'

{ "job_id": "sim-xyz789", "status": "pending" }
GET /sim/run/{job_id}

Poll simulation status and retrieve completed results with round-by-round output and final rankings.

GET /sim/run/{job_id}/stream

Server-sent events stream for a running simulation. Receive round results as they complete.