Developer API

Point-in-time US fundamentals. A source-checked API.

Company financials pulled from SEC filings, daily price data, and a research score for each stock — every number comes with a note on where it came from. The API is built for a repeatable research pipeline, not an ordered buy list. This is a separate research product from the rankings used in our videos and emails.

SEC filings Daily price data JSON responses
Research feedSource checked

GET /research/stocks/{symbol}.json

Filed company factsFiling date included
Daily price contextSource and coverage noted
Research scoreFactors and provenance included

New Developer API enrollment is paused

We are not accepting new API subscriptions. Existing customers can use the documentation below and recover their key through the original checkout email. For account or billing help, email top5stocksdaily@gmail.com.

Pull it, screen it, verify it.

Build a dependable daily research workflow in your own spreadsheet, script, or dashboard.

1 · PULL

Start with dated facts

Pull company financials exactly as they were filed with the SEC, plus a checked trailing-12-month summary, for whatever stocks you're tracking.

2 · SCREEN

Build your own view

Use the research score, how it ranks against other stocks, and what drove it, in your own dashboard, screener, or report.

3 · VERIFY

Know where each number came from

Every row shows the filing date and data source. Restricted or unverified vendor fields are omitted rather than substituted, with source attribution and terms links in its provenance metadata.

Want to see the exact response shape first? See a sample response or read the full technical spec.

This is a separate research product from the site's rankings. Full technical spec: /api/v1/openapi.json (OpenAPI 3.1, importable into Postman/codegen)

Free — no key, no signup (100 calls/day, 10/min)

GET Free /api/v1/stocks/public.json 5-row teaser of today's ranked stock picks
GET Free /api/v1/undervalued/public.json 5-row teaser of the value-screen picks
GET Free /api/v1/generational/public.json 5-row teaser of the long-hold quality screen
GET Free /api/v1/performance/cumulative.json Full live track record: win rate and avg return vs. the S&P 500
GET Free /api/v1/performance.json Win rates, avg returns, and S&P 500 comparison for every strategy
GET Free /api/v1/performance/history.json Full pick-by-pick history with entry/exit returns
GET Free /api/v1/performance/symbols.json Per-symbol win rates and average returns
GET Free /api/v1/metadata.json Coverage universe, field list, and update schedule

Stock scores & research data

GET Pro /api/v1/research/stocks/today.json Every stock's research score, how it ranks, the financials behind it, and where the data came from
GET Pro /api/v1/research/stocks/{symbol}.json One stock's research score and a breakdown of its data sources
GET Pro /api/v1/research/stocks/batch.json?symbols=AAPL,MSFT Research data for a list of stocks you choose, up to 25 at once
GET Starter /api/v1/fundamentals/{symbol} A company's financials exactly as filed with the SEC, with filing dates
GET Starter /api/v1/fundamentals/{symbol}/ttm A checked trailing-12-month summary built from actual filings
GET Starter /api/v1/fundamentals/batch?symbols=AAPL,MSFT SEC financials for up to 25 stocks in one request
GET Starter /api/v1/fundamentals/ttm/batch?symbols=AAPL,MSFT TTM summaries for multiple stocks, with any missing ones flagged
GET Starter /api/v1/fundamentals/coverage How current and complete our SEC data is right now
GET Starter /api/v1/bars/{symbol}/daily Daily closing price history, with a note on where it's licensed from

Rows we can't fully verify against SEC and price sources are left out. This is research data, not a ranked buy list, trade instruction, or real-time feed.

Website and membership data stay separate

The main website, videos, emails, and member tools run on their own separate data feeds. Those aren't part of this Developer API and can't be accessed with a Developer API key.

This feed is built to stay stable and is always sorted alphabetically by ticker. It gives you a research score, how that score ranks, what drove it, and where the numbers came from — it doesn't give you a ranked buy/sell list or trade levels.

GET /api/v1/research/stocks/today.json
GET /api/v1/research/stocks/NVDA.json
GET /api/v1/research/stocks/batch.json?symbols=AAPL,MSFT,NVDA
scoreThe overall research score — not a buy or sell signal
score_percentile_bandHow this score compares to other stocks we cover
factor_attributionA breakdown of what drove the score: quality, value, momentum, and where each piece came from
source_provenanceWhich licensed sources fed into this row
price_source_capabilitiesDetails on the price data's licensing terms and how current it is

This feed only shows current data — missing or outdated records are left out rather than filled in from another source. For batch requests, add a comma-separated symbols list (up to 25 tickers); results keep your requested order and flag anything missing.

Start with the public contract preview below. It shows what /research/stocks/today.json returns; you'll see real data once you're authenticated with an API key.

Loading...

Every endpoint returns JSON, with your actual data inside the data field — for example response.data.stocks[0].symbol

To authenticate, send Authorization: Bearer YOUR_API_KEY. Docs/discovery endpoints don't need a key. Data endpoints follow your plan's daily limit: Starter 500/day, Pro 2,000/day, Ultra 10,000/day.

import requests

# Source-checked research feed (Pro)
headers = {"Authorization": "Bearer YOUR_API_KEY"}
payload = requests.get(
  "https://top5stocks-api.top5stocks.workers.dev/api/v1/research/stocks/today.json",
  headers=headers, timeout=15
).json()

for stock in (payload.get("data") or {}).get("stocks", []):
    print(stock["symbol"], stock["score"], stock["score_percentile_band"])
    print(stock["factor_attribution"])

# Point-in-time SEC lookup (Starter)
fundamentals = requests.get(
  "https://top5stocks-api.top5stocks.workers.dev/api/v1/fundamentals/NVDA",
  headers=headers, timeout=15
).json()
print(fundamentals.get("data"))

For a watchlist or dashboard, use one batch request instead of one request per symbol:

batch = requests.get(
  "https://top5stocks-api.top5stocks.workers.dev/api/v1/fundamentals/batch?symbols=AAPL,MSFT,NVDA",
  headers=headers, timeout=15
).json()
for row in (batch.get("data") or {}).get("records", []):
    print(row["symbol"], row.get("latest_filed"))
const headers = { Authorization: "Bearer YOUR_API_KEY" };
const response = await fetch(
  "https://top5stocks-api.top5stocks.workers.dev/api/v1/research/stocks/today.json",
  { headers }
);
const payload = await response.json();
const stocks = payload.data?.stocks ?? [];
stocks.forEach(stock => {
  console.log(stock.symbol, stock.score, stock.score_percentile_band);
  console.log(stock.factor_attribution);
});
This Developer API is REST-only.
Use /api/v1/research/stocks/today.json for the Pro research feed and
/api/v1/fundamentals/{symbol} for Starter SEC lookups.

Website and membership features run on a separate system from this Developer API and aren't covered by this documentation.

Errors return JSON with an error code:

Status Error code Meaning
401invalid_or_missing_api_keyNo key, or the key doesn't exist. Send Authorization: Bearer YOUR_API_KEY.
401api_key_revokedKey was revoked (usually a cancelled subscription).
403insufficient_planEndpoint needs a higher plan. The response includes current_plan and required_plan.
429rate_limit_exceededPer-minute burst limit hit. Honor the Retry-After header (60s).
429daily_limit_exceededDaily call quota used up — resets at midnight UTC.

Rate limits (daily limit / per-minute limit): Starter 500 & 30/min, Pro 2,000 & 60/min, Ultra 10,000 & 200/min. Free endpoints are open for reasonable use; unusually heavy traffic may get throttled.

Successful authenticated data responses include X-DailyLimit-Limit and X-DailyLimit-Remaining headers so you can track usage without extra calls.

Lost your key? Your API key is emailed at purchase. To confirm which keys exist for your email:

curl -X POST https://top5stocks-api.top5stocks.workers.dev/api/v1/key/lookup \
  -H "Content-Type: application/json" \
  -d '{"email": "you@example.com"}'

For privacy, this request returns the same confirmation whether or not the address has an active API subscription. If it does, access details are emailed to its checkout address; no key appears in the browser response. Limited to 5 attempts per 15 minutes. If the email does not arrive, contact top5stocksdaily@gmail.com.

7-day first-charge refund. Request a full refund of an eligible first API charge within seven days by replying to your API-key email or contacting top5stocksdaily@gmail.com. Include the checkout email and the last four characters of the API key. One refund per customer; an issued refund cancels that API subscription and revokes its key.

This Developer API is a separate research product from the site. It pulls company financials straight from SEC filings and licensed daily price data, then turns that into research scores — with a note on where every number came from. It's not connected to the rankings used in our videos and emails.

  • No uptime guarantee. Data refreshes daily on a best-effort basis. If a data source goes down, we leave that field out rather than guess at a value.
  • Field availability: If we can't verify a number against a licensed source, we leave it out rather than substitute something else. Each endpoint only returns fields cleared for its plan. Where price data is included, the response notes exactly where it's licensed from.
  • This isn't an alert or trading-execution feed. It's latest-only research data. Telegram alerts and real-time model events are a separate beta feature with their own availability.
  • Scoring changes: The scoring formula and fields may change over time. Significant changes will be noted in the API changelog; build your integration to check the schema version and handle unexpected fields gracefully.
  • Cancel anytime using the manage-subscription link in your Stripe receipt, or email top5stocksdaily@gmail.com. No long-term contract.

Disclaimer: This API provides source-checked factor research for educational and informational purposes only. It is not an ordered recommendation, financial advice, a recommendation to buy, sell, or hold any security, or personalized investment guidance. We are not a registered investment advisor. Past model performance does not guarantee future results. Use this data at your own risk. Full disclaimer →