Wisesheets

Wisesheets

API Dashboard

REST API reference

Wisesheets Financial Data API

Standardized income statements, balance sheets, cash flow, and financial metrics for US stocks, sourced from SEC filings and built so every number can be traced back to XBRL.

SourceSEC EDGAR XBRL filings
TraceabilityCitation on every value
FreshnessSynced within 15 minutes
Coverage10,412 US stocks

Create a free account to get your API key.

Get your API key

Use with AI agents

Wisesheets ships a hosted MCP (Model Context Protocol) server, so AI agents and code editors that support MCP can pull financial data directly, no code required. Add the URL below as a custom connector or MCP server — the first time you connect, you'll sign in to Wisesheets and authorize access over OAuth, so there's no API key to paste. Then ask for company financials, prices, or metrics in plain language.

https://mcp.wisesheets.io/v1/mcp

No API key required. When you connect, your agent sends you to Wisesheets to sign in and approve access.


Every app calls this feature something slightly different, but the flow is the same: add a custom connector or MCP server that points at the URL above, then sign in and authorize when prompted.

In Claude, look for the Wisesheets connector or MCP.

Recommended: use the Wisesheets connector

Open Claude, go to Settings → Connectors, search for Wisesheets, then click Connect. A Wisesheets window opens where you can sign in and authorize access. After connecting, enable Wisesheets in a chat from the tools (+) menu.

Alternative: add the MCP server manually if you do not see the Wisesheets connector or prefer a manual setup.

  1. 1Open Settings → Connectors in Claude.
  2. 2Scroll to the bottom and click "Add custom connector".
  3. 3Enter Wisesheets as the name and paste the MCP server URL above as the Remote MCP server URL, then click Add.
  4. 4Click Connect on the connector. A Wisesheets window opens — sign in and authorize access, then enable it in a chat from the tools (+) menu.

Custom connectors are in beta and available on Free, Pro, Max, Team, and Enterprise (Free is limited to one). On Team and Enterprise, an Owner must first add the connector under Organization settings → Connectors before members can connect.

Quick Start

The Wisesheets API is a standard REST API that authenticates with a Bearer token. The base URL is https://api.wisesheets.io/v1/. Every response follows the same envelope structure with a data array and a meta object, so you write your parsing logic once and reuse it across every endpoint. The examples below cover Python, JavaScript, cURL, and Google Sheets Apps Script.

1. Set your environment variable

Terminal
export WISESHEETS_API_KEY="wsh_live_your_key_here"

2. Make your first call

1import requests, os23api_key = os.environ["WISESHEETS_API_KEY"]4resp = requests.get(5    "https://api.wisesheets.io/v1/financials/?tickers=AAPL&metrics=revenue&period=latest",6    headers={"Authorization": f"Bearer {api_key}"},7)8data = resp.json()["data"][0]9print(f"{data['companyName']} revenue: {data['value']{"}"}")

Authentication

Every request to the Wisesheets API requires a Bearer token passed in the Authorization header. Your API key is a secret, so store it in an environment variable or a secrets manager and read it at runtime. Keys are scoped to your account and plan, and you can inspect your current quota and capabilities at any time via the /v1/me/ endpoint.

Terminal
# Good: key in an environment variable
curl "https://api.wisesheets.io/v1/financials/?tickers=AAPL&metrics=revenue" \
  -H "Authorization: Bearer $WISESHEETS_API_KEY"

# Bad: key hardcoded in source
curl "https://api.wisesheets.io/v1/financials/?tickers=AAPL&metrics=revenue" \
  -H "Authorization: Bearer wsh_live_abc123..."

Ask your AI Assistant

Store my Wisesheets API key in a .env file and read it from there in my script, don't paste the key directly into the code.

Contact us

Need help with an endpoint or your integration? Contact our team directly or connect with other Wisesheets developers.

Email API support

Get help with authentication, endpoints, account access, or implementation questions.

Email info@wisesheets.io

Returns a reference profile for a single company. Pass a ticker symbol like AAPL or a 10-digit CIK. The API treats all-digit tokens as CIKs (left-padded to 10 digits) and everything else as a case-insensitive ticker. The response tells you which datasets are available for that company, which is useful for checking coverage before you build a workflow around a specific ticker.

GEThttps://api.wisesheets.io/v1/companies/AAPL
Name
Type
Description
ticker_or_cikRequired
stringpath
Ticker or CIK in the URL path. Tickers are case-insensitive; numeric values are treated as CIKs.
1import requests, os23api_key = os.environ["WISESHEETS_API_KEY"]4resp = requests.get(5    "https://api.wisesheets.io/v1/companies/AAPL",6    headers={"Authorization": f"Bearer {api_key}"},7)8print(resp.json())
Try It Live

Start with the common fields. Advanced parameters use API defaults until you open and edit them.

Common parameters

Required · path

Ticker or CIK in the URL path. Tickers are case-insensitive; numeric values are treated as CIKs.

GET /v1/companies/{ticker_or_cik}

Get an API key to run live requests

You can still review the example response below. Create a free key when you're ready to try this endpoint with real data.

Create free API key
Example response
{
  "data": {
    "name": "Apple Inc.",
    "ticker": "AAPL",
    "cik": "0000320193",
    "exchange": "Nasdaq",
    "sic": "3571",
    "sicDescription": "Electronic Computers",
    "fiscalYearEnd": "0926",
    "availableDatasets": ["financials", "filings"]
  }
}

Ask your AI Assistant

Using the Wisesheets API with my key in .env, call the Company Profile endpoint and summarize the result for me.

Returns persisted end-of-day price rows from the Wisesheets historical price store. Use period=latest for one row per ticker, period=last252d for a trailing trading-day window, period=2024-01-03 for a single date, or period=2024-01-01..2024-03-31 for a paginated date range. Values come back as strings to preserve DECIMAL/BIGINT precision, so parse them client-side. The GET variant resolves up to 25 tickers and 10,000 rows per request; for larger batches use the POST variant below. Date and date-range periods paginate via meta.nextCursor, while latest and trailing-day periods set meta.truncated when more rows exist than the limit.

GEThttps://api.wisesheets.io/v1/prices/eod?tickers=AAPL,MSFT&period=latest&fields=close,adjClose,volume
Name
Type
Description
tickersRequired
stringquery
Ticker symbols to query, such as AAPL,MSFT. Separate multiple tickers with commas. Symbols are uppercased and de-duplicated; up to 25 per request.
periodRequired
stringquery
Time selector. One of latest (most recent row per ticker), lastNd such as last252d (trailing N trading days, N up to 25,000), YYYY-MM-DD (a single date), or YYYY-MM-DD..YYYY-MM-DD (an inclusive date range). Future dates are rejected for exact-date and range periods.
fieldsOptional
stringquery
Price fields to return, comma-separated. Allowed: open, low, high, close, adjClose, volume, unadjustedVolume, change, changePercent, vwap, changeOverTime, label, lastUpdated. Defaults to close,adjClose,volume. symbol and date are always included.
orderOptional
enumquery
Sort direction, asc or desc. Defaults to asc for trailing-day periods and desc for all others. An explicit value always wins.
limitOptional
integerquery
Maximum rows to return, between 1 and 10,000. Defaults to 10,000 when omitted.
cursorOptional
stringquery
Opaque pagination token from meta.nextCursor. Only valid for single-date and date-range periods. Keep the same parameters when paging.
includeLiveOptional
booleanquery
Reserved for merging the current live quote. Not yet supported; passing true returns a 400.
1import requests, os23api_key = os.environ["WISESHEETS_API_KEY"]4resp = requests.get(5    "https://api.wisesheets.io/v1/prices/eod?tickers=AAPL,MSFT&period=latest&fields=close,adjClose,volume",6    headers={"Authorization": f"Bearer {api_key}"},7)8print(resp.json())
Try It Live

Start with the common fields. Advanced parameters use API defaults until you open and edit them.

Common parameters

Required · query

Ticker symbols to query, such as AAPL,MSFT. Separate multiple tickers with commas. Symbols are uppercased and de-duplicated; up to 25 per request.

Required · query

Time selector. One of latest (most recent row per ticker), lastNd such as last252d (trailing N trading days, N up to 25,000), YYYY-MM-DD (a single date), or YYYY-MM-DD..YYYY-MM-DD (an inclusive date range). Future dates are rejected for exact-date and range periods.

Optional · query

Price fields to return, comma-separated. Allowed: open, low, high, close, adjClose, volume, unadjustedVolume, change, changePercent, vwap, changeOverTime, label, lastUpdated. Defaults to close,adjClose,volume. symbol and date are always included.

GET /v1/prices/eod

Get an API key to run live requests

You can still review the example response below. Create a free key when you're ready to try this endpoint with real data.

Create free API key
Example response
{
    "data": [
        { "symbol": "AAPL", "date": "2024-03-28", "close": "171.48", "adjClose": "170.94", "volume": "65672690" }
    ],
    "meta": {
        "requested": {
            "tickers": ["AAPL", "NOQUOTE1"],
            "period": "2024-01-01..2024-03-31",
            "fields": ["close", "adjClose", "volume"],
            "order": "desc",
            "includeLive": false
        },
        "returned": 1,
        "nextCursor": "eyJ2IjoxLCJzIjoiQUFQTCIsImQiOiIyMDI0LTAzLTI3In0",
        "truncated": false,
        "missingSymbols": ["NOQUOTE1"],
        "unknownSymbols": []
    }
}

Ask your AI Assistant

Using the Wisesheets API with my key in .env, call the EOD Prices endpoint and summarize the result for me.

The same end-of-day price endpoint as the GET, with parameters sent in a JSON body. Use this for batch workflows: it resolves up to 250 tickers and 50,000 rows per request. The batch endpoint requires the bulk_access plan feature in addition to price_data. Pagination, period grammar, field selection, and the string-typed response values all behave exactly as in the GET variant.

POSThttps://api.wisesheets.io/v1/prices/eod
Name
Type
Description
tickersRequired
string[]body
Ticker symbols to query, such as ["AAPL", "MSFT"]. Symbols are uppercased and de-duplicated; up to 250 per request.
periodRequired
stringbody
Time selector. One of latest, lastNd such as last252d (trailing N trading days, N up to 25,000), YYYY-MM-DD, or YYYY-MM-DD..YYYY-MM-DD. Future dates are rejected for exact-date and range periods.
fieldsOptional
string[]body
Price fields to return, such as ["open", "high", "low", "close", "volume"]. Allowed: open, low, high, close, adjClose, volume, unadjustedVolume, change, changePercent, vwap, changeOverTime, label, lastUpdated. Defaults to ["close", "adjClose", "volume"]. symbol and date are always included.
orderOptional
enumbody
Sort direction, asc or desc. Defaults to asc for trailing-day periods and desc for all others. An explicit value always wins.
limitOptional
integerbody
Maximum rows to return, between 1 and 50,000. Defaults to 50,000 when omitted.
cursorOptional
stringbody
Opaque pagination token from meta.nextCursor. Only valid for single-date and date-range periods. Keep the same parameters when paging.
includeLiveOptional
booleanbody
Reserved for merging the current live quote. Not yet supported; passing true returns a 400.
1import requests, os23api_key = os.environ["WISESHEETS_API_KEY"]4resp = requests.post(5    "https://api.wisesheets.io/v1/prices/eod",6    headers={"Authorization": f"Bearer {api_key}"},7    json={"tickers": ["AAPL", "MSFT", "GOOGL"], "period": "last252d", "fields": ["close", "adjClose", "volume"]},8)9print(resp.json())
Try It Live

Start with the common fields. Advanced parameters use API defaults until you open and edit them.

Body parameters

Required · body

Ticker symbols to query, such as ["AAPL", "MSFT"]. Symbols are uppercased and de-duplicated; up to 250 per request.

Required · body

Time selector. One of latest, lastNd such as last252d (trailing N trading days, N up to 25,000), YYYY-MM-DD, or YYYY-MM-DD..YYYY-MM-DD. Future dates are rejected for exact-date and range periods.

Optional · body

Price fields to return, such as ["open", "high", "low", "close", "volume"]. Allowed: open, low, high, close, adjClose, volume, unadjustedVolume, change, changePercent, vwap, changeOverTime, label, lastUpdated. Defaults to ["close", "adjClose", "volume"]. symbol and date are always included.

JSON body preview
{
  "tickers": [
    "AAPL",
    "MSFT",
    "GOOGL"
  ],
  "period": "last252d",
  "fields": [
    "close",
    "adjClose",
    "volume"
  ]
}
POST /v1/prices/eod

Get an API key to run live requests

You can still review the example response below. Create a free key when you're ready to try this endpoint with real data.

Create free API key
Example response
{
    "data": [
        { "symbol": "AAPL", "date": "2024-03-28", "close": "171.48", "adjClose": "170.94", "volume": "65672690" }
    ],
    "meta": {
        "requested": {
            "tickers": ["AAPL", "NOQUOTE1"],
            "period": "2024-01-01..2024-03-31",
            "fields": ["close", "adjClose", "volume"],
            "order": "desc",
            "includeLive": false
        },
        "returned": 1,
        "nextCursor": "eyJ2IjoxLCJzIjoiQUFQTCIsImQiOiIyMDI0LTAzLTI3In0",
        "truncated": false,
        "missingSymbols": ["NOQUOTE1"],
        "unknownSymbols": []
    }
}

Ask your AI Assistant

Using the Wisesheets API with my key in .env, call the Batch EOD Prices endpoint and summarize the result for me.

Live Prices

15-minute delayGET

Returns current quote rows for in-universe symbols. Use this when you need the latest quote snapshot rather than persisted end-of-day history. The GET variant resolves up to 25 tickers and 25 rows per request; for larger batches use the POST variant below. Numeric quote values are serialized as strings for precision-safe client parsing, while timestamp remains an integer Unix epoch. unknownSymbols contains requested tickers outside the universe, and missingSymbols contains in-universe tickers with no returned quote row.

GEThttps://api.wisesheets.io/v1/prices/live?tickers=AAPL,NOQUOTE1,FAKE999&fields=price,change,volume,timestamp,name&limit=2
Name
Type
Description
tickersRequired
stringquery
Ticker symbols to query, such as AAPL,MSFT. Separate multiple tickers with commas. Symbols are uppercased and de-duplicated; up to 25 per request.
fieldsOptional
stringquery
Quote fields to return, comma-separated. Allowed: name, price, changesPercentage, change, dayLow, dayHigh, yearHigh, yearLow, marketCap, priceAvg50, priceAvg200, exchange, volume, avgVolume, open, previousClose, eps, pe, earningsAnnouncement, sharesOutstanding, timestamp. Defaults to price,changesPercentage,change,previousClose,volume.
limitOptional
integerquery
Maximum rows to return, between 1 and 25. Defaults to 25 when omitted.
1import requests, os23api_key = os.environ["WISESHEETS_API_KEY"]4resp = requests.get(5    "https://api.wisesheets.io/v1/prices/live?tickers=AAPL,NOQUOTE1,FAKE999&fields=price,change,volume,timestamp,name&limit=2",6    headers={"Authorization": f"Bearer {api_key}"},7)8print(resp.json())
Try It Live

Start with the common fields. Advanced parameters use API defaults until you open and edit them.

Common parameters

Required · query

Ticker symbols to query, such as AAPL,MSFT. Separate multiple tickers with commas. Symbols are uppercased and de-duplicated; up to 25 per request.

Optional · query

Quote fields to return, comma-separated. Allowed: name, price, changesPercentage, change, dayLow, dayHigh, yearHigh, yearLow, marketCap, priceAvg50, priceAvg200, exchange, volume, avgVolume, open, previousClose, eps, pe, earningsAnnouncement, sharesOutstanding, timestamp. Defaults to price,changesPercentage,change,previousClose,volume.

Optional · query

Maximum rows to return, between 1 and 25. Defaults to 25 when omitted.

GET /v1/prices/live

Get an API key to run live requests

You can still review the example response below. Create a free key when you're ready to try this endpoint with real data.

Create free API key
Example response
{
    "data": [
        {
            "symbol": "AAPL",
            "price": "190.12",
            "change": "1.25",
            "volume": "1200",
            "timestamp": 1710000000,
            "name": "Apple Inc."
        }
    ],
    "meta": {
        "requested": {
            "tickers": ["AAPL", "NOQUOTE1", "FAKE999"],
            "fields": ["price", "change", "volume", "timestamp", "name"],
            "limit": 2
        },
        "returned": 1,
        "unknownSymbols": ["FAKE999"],
        "missingSymbols": ["NOQUOTE1"]
    }
}

Ask your AI Assistant

Using the Wisesheets API with my key in .env, call the Live Prices endpoint and summarize the result for me.

Batch Live Prices

15-minute delayPOST

The same live quote endpoint as the GET, with parameters sent in a JSON body. Use this for batch workflows: it resolves up to 250 tickers and 250 rows per request. The batch endpoint requires the bulk_access plan feature in addition to price_data. unknownSymbols and missingSymbols semantics, along with numeric string serialization, behave exactly as in the GET variant.

POSThttps://api.wisesheets.io/v1/prices/live
Name
Type
Description
tickersRequired
string[]body
Ticker symbols to query, such as ["AAPL", "MSFT"]. Symbols are uppercased and de-duplicated; up to 250 per request.
fieldsOptional
string[]body
Quote fields to return, such as ["price", "change", "volume"]. Allowed: name, price, changesPercentage, change, dayLow, dayHigh, yearHigh, yearLow, marketCap, priceAvg50, priceAvg200, exchange, volume, avgVolume, open, previousClose, eps, pe, earningsAnnouncement, sharesOutstanding, timestamp. Defaults to ["price", "changesPercentage", "change", "previousClose", "volume"].
limitOptional
integerbody
Maximum rows to return, between 1 and 250. Defaults to 250 when omitted.
1import requests, os23api_key = os.environ["WISESHEETS_API_KEY"]4resp = requests.post(5    "https://api.wisesheets.io/v1/prices/live",6    headers={"Authorization": f"Bearer {api_key}"},7    json={"tickers": ["AAPL", "MSFT", "GOOGL"], "fields": ["price", "change", "volume", "timestamp", "name"], "limit": 100},8)9print(resp.json())
Try It Live

Start with the common fields. Advanced parameters use API defaults until you open and edit them.

Body parameters

Required · body

Ticker symbols to query, such as ["AAPL", "MSFT"]. Symbols are uppercased and de-duplicated; up to 250 per request.

Optional · body

Quote fields to return, such as ["price", "change", "volume"]. Allowed: name, price, changesPercentage, change, dayLow, dayHigh, yearHigh, yearLow, marketCap, priceAvg50, priceAvg200, exchange, volume, avgVolume, open, previousClose, eps, pe, earningsAnnouncement, sharesOutstanding, timestamp. Defaults to ["price", "changesPercentage", "change", "previousClose", "volume"].

Optional · body

Maximum rows to return, between 1 and 250. Defaults to 250 when omitted.

JSON body preview
{
  "tickers": [
    "AAPL",
    "MSFT",
    "GOOGL"
  ],
  "fields": [
    "price",
    "change",
    "volume",
    "timestamp",
    "name"
  ],
  "limit": 100
}
POST /v1/prices/live

Get an API key to run live requests

You can still review the example response below. Create a free key when you're ready to try this endpoint with real data.

Create free API key
Example response
{
    "data": [
        {
            "symbol": "AAPL",
            "price": "190.12",
            "change": "1.25",
            "volume": "1200",
            "timestamp": 1710000000,
            "name": "Apple Inc."
        }
    ],
    "meta": {
        "requested": {
            "tickers": ["AAPL", "NOQUOTE1", "FAKE999"],
            "fields": ["price", "change", "volume", "timestamp", "name"],
            "limit": 2
        },
        "returned": 1,
        "unknownSymbols": ["FAKE999"],
        "missingSymbols": ["NOQUOTE1"]
    }
}

Ask your AI Assistant

Using the Wisesheets API with my key in .env, call the Batch Live Prices endpoint and summarize the result for me.

Returns per-ex-date historical dividend rows for in-universe symbols. Dividend amounts come back as strings to preserve DECIMAL precision, so parse them client-side. from and to filter on the ex-dividend date; announced future dividends are included, so pass to set to today's date to exclude them. Rows are grouped per requested ticker and then capped at limit, so a small limit fills earlier tickers first — when meta.truncated is true, narrow the ticker list or date window to see the rest. The GET variant resolves up to 25 tickers and 10,000 rows per request; for larger batches use the POST variant below. unknownSymbols lists requested tickers outside the universe, and missingSymbols lists in-universe tickers with no dividend rows, such as non-payers.

GEThttps://api.wisesheets.io/v1/dividends/?tickers=AAPL,MSFT&fields=adjDividend,dividend,recordDate,paymentDate&from=2023-01-01
Name
Type
Description
tickersRequired
stringquery
Ticker symbols to query, such as AAPL,MSFT. Separate multiple tickers with commas. Symbols are uppercased and de-duplicated; up to 25 per request.
fieldsOptional
stringquery
Dividend fields to return, comma-separated. Allowed: label, adjDividend, dividend, recordDate, paymentDate, declarationDate. Defaults to adjDividend,dividend,recordDate,paymentDate. symbol and date are always included.
fromOptional
stringquery
Inclusive lower bound on the ex-dividend date, as YYYY-MM-DD. Omit to start from the earliest dividend available within your plan's history window.
toOptional
stringquery
Inclusive upper bound on the ex-dividend date, as YYYY-MM-DD. Pass today's date to exclude announced future dividends.
orderOptional
enumquery
Sort direction, asc or desc, applied to the ex-dividend date. Defaults to desc.
limitOptional
integerquery
Maximum rows to return, between 1 and 10,000. Defaults to 10,000 when omitted.
1import requests, os23api_key = os.environ["WISESHEETS_API_KEY"]4resp = requests.get(5    "https://api.wisesheets.io/v1/dividends/?tickers=AAPL,MSFT&fields=adjDividend,dividend,recordDate,paymentDate&from=2023-01-01",6    headers={"Authorization": f"Bearer {api_key}"},7)8print(resp.json())
Try It Live

Start with the common fields. Advanced parameters use API defaults until you open and edit them.

Common parameters

Required · query

Ticker symbols to query, such as AAPL,MSFT. Separate multiple tickers with commas. Symbols are uppercased and de-duplicated; up to 25 per request.

Optional · query

Dividend fields to return, comma-separated. Allowed: label, adjDividend, dividend, recordDate, paymentDate, declarationDate. Defaults to adjDividend,dividend,recordDate,paymentDate. symbol and date are always included.

Optional · query

Inclusive lower bound on the ex-dividend date, as YYYY-MM-DD. Omit to start from the earliest dividend available within your plan's history window.

GET /v1/dividends/

Get an API key to run live requests

You can still review the example response below. Create a free key when you're ready to try this endpoint with real data.

Create free API key
Example response
{
    "data": [
        { "symbol": "AAPL", "date": "2024-02-09", "adjDividend": "0.24", "dividend": "0.24", "recordDate": "2024-02-12", "paymentDate": "2024-02-15" },
        { "symbol": "MSFT", "date": "2024-02-14", "adjDividend": "0.75", "dividend": "0.75", "recordDate": "2024-02-15", "paymentDate": "2024-03-14" }
    ],
    "meta": {
        "requested": {
            "tickers": ["AAPL", "MSFT", "TSLA", "FAKE999"],
            "fields": ["adjDividend", "dividend", "recordDate", "paymentDate"],
            "from": "2023-01-01",
            "to": null,
            "order": "desc",
            "limit": 10000
        },
        "returned": 2,
        "truncated": false,
        "unknownSymbols": ["FAKE999"],
        "missingSymbols": ["TSLA"]
    }
}

Ask your AI Assistant

Using the Wisesheets API with my key in .env, call the Historical Dividends endpoint and summarize the result for me.

The same historical dividend endpoint as the GET, with parameters sent in a JSON body. Use this for batch workflows: it resolves up to 250 tickers and 50,000 rows per request. The batch endpoint requires the bulk_access plan feature in addition to dividends_data. Ex-dividend date filtering, field selection, per-ticker grouping, and the string-typed dividend amounts all behave exactly as in the GET variant.

POSThttps://api.wisesheets.io/v1/dividends/
Name
Type
Description
tickersRequired
string[]body
Ticker symbols to query, such as ["AAPL", "MSFT"]. Symbols are uppercased and de-duplicated; up to 250 per request.
fieldsOptional
string[]body
Dividend fields to return, such as ["adjDividend", "dividend", "paymentDate"]. Allowed: label, adjDividend, dividend, recordDate, paymentDate, declarationDate. Defaults to ["adjDividend", "dividend", "recordDate", "paymentDate"]. symbol and date are always included.
fromOptional
stringbody
Inclusive lower bound on the ex-dividend date, as YYYY-MM-DD. Omit to start from the earliest dividend available within your plan's history window.
toOptional
stringbody
Inclusive upper bound on the ex-dividend date, as YYYY-MM-DD. Pass today's date to exclude announced future dividends.
orderOptional
enumbody
Sort direction, asc or desc, applied to the ex-dividend date. Defaults to desc.
limitOptional
integerbody
Maximum rows to return, between 1 and 50,000. Defaults to 50,000 when omitted.
1import requests, os23api_key = os.environ["WISESHEETS_API_KEY"]4resp = requests.post(5    "https://api.wisesheets.io/v1/dividends/",6    headers={"Authorization": f"Bearer {api_key}"},7    json={"tickers": ["AAPL", "MSFT", "KO"], "fields": ["adjDividend", "dividend", "recordDate", "paymentDate"], "from": "2020-01-01"},8)9print(resp.json())
Try It Live

Start with the common fields. Advanced parameters use API defaults until you open and edit them.

Body parameters

Required · body

Ticker symbols to query, such as ["AAPL", "MSFT"]. Symbols are uppercased and de-duplicated; up to 250 per request.

Optional · body

Dividend fields to return, such as ["adjDividend", "dividend", "paymentDate"]. Allowed: label, adjDividend, dividend, recordDate, paymentDate, declarationDate. Defaults to ["adjDividend", "dividend", "recordDate", "paymentDate"]. symbol and date are always included.

Optional · body

Inclusive lower bound on the ex-dividend date, as YYYY-MM-DD. Omit to start from the earliest dividend available within your plan's history window.

JSON body preview
{
  "tickers": [
    "AAPL",
    "MSFT",
    "KO"
  ],
  "fields": [
    "adjDividend",
    "dividend",
    "recordDate",
    "paymentDate"
  ],
  "from": "2020-01-01"
}
POST /v1/dividends/

Get an API key to run live requests

You can still review the example response below. Create a free key when you're ready to try this endpoint with real data.

Create free API key
Example response
{
    "data": [
        { "symbol": "AAPL", "date": "2024-02-09", "adjDividend": "0.24", "dividend": "0.24", "recordDate": "2024-02-12", "paymentDate": "2024-02-15" },
        { "symbol": "MSFT", "date": "2024-02-14", "adjDividend": "0.75", "dividend": "0.75", "recordDate": "2024-02-15", "paymentDate": "2024-03-14" }
    ],
    "meta": {
        "requested": {
            "tickers": ["AAPL", "MSFT", "TSLA", "FAKE999"],
            "fields": ["adjDividend", "dividend", "recordDate", "paymentDate"],
            "from": "2023-01-01",
            "to": null,
            "order": "desc",
            "limit": 10000
        },
        "returned": 2,
        "truncated": false,
        "unknownSymbols": ["FAKE999"],
        "missingSymbols": ["TSLA"]
    }
}

Ask your AI Assistant

Using the Wisesheets API with my key in .env, call the Batch Historical Dividends endpoint and summarize the result for me.

The core endpoint. Returns standardized financial observations for one or more companies as (company, metric, period) tuples. Every value comes back as a decimal string with a source object that includes the XBRL tag, accession number, and filing date, so your application always knows exactly where a number came from. The GET variant resolves up to 100 tickers; for batch workflows across larger universes, use the POST variant below. Choose layout=long for time-series analysis, layout=wide to get a company per row with metrics as columns, or layout=grouped to get statements organized by period. The asReported flag lets you read raw XBRL facts before standardization.

GEThttps://api.wisesheets.io/v1/financials/?tickers=AAPL&metrics=revenue&period=latest
Name
Type
Description
tickersOne required
stringquery
Ticker symbols to query, such as AAPL or MSFT. Separate multiple tickers with commas. Required unless you provide ciks or sic.
ciksOne required
stringquery
SEC CIKs to query, such as 320193. Separate multiple CIKs with commas. Required unless you provide tickers or sic.
sicOne required
stringquery
SIC industry codes to query, such as 3571. Returns all covered companies in that industry. Required unless you provide tickers or ciks.
metricsRequired
stringquery
Metric keys to return, such as revenue,net_income,gross_margin. Use /v1/metrics to discover valid keys.
periodOptional
stringquery
Periods to return. Examples: latest, last5y, last8q, FY2024, Q3-2025, 2021..2025, 2024-09-30, or asof:2024-12-31. Default is latest.
frequencyOptional
enumquery
Use annual or quarterly when the period is ambiguous, such as latest or an exact date. Fiscal-year and fiscal-quarter selectors choose automatically.
layoutOptional
enumquery
Response shape. long is one observation per row (default), wide puts metrics in columns, grouped nests results by company and period.
includeOptional
stringquery
Optional response extras. Use source for XBRL provenance, quality for completeness flags, links for related resources, or none for smaller responses.
formatOptional
enumquery
Response format. json is the default; csv returns pipe-delimited long-form rows.
asReportedOptional
booleanquery
Set true to read raw as-reported XBRL facts instead of standardized metrics. Rolling selectors like last5y are not supported with asReported=true.
1import requests, os23api_key = os.environ["WISESHEETS_API_KEY"]4resp = requests.get(5    "https://api.wisesheets.io/v1/financials/?tickers=AAPL&metrics=revenue&period=latest",6    headers={"Authorization": f"Bearer {api_key}"},7)8print(resp.json())
Try It Live

Start with the common fields. Advanced parameters use API defaults until you open and edit them.

Common parameters

One required · query

Ticker symbols to query, such as AAPL or MSFT. Separate multiple tickers with commas. Required unless you provide ciks or sic.

Required · query

Metric keys to return, such as revenue,net_income,gross_margin. Use /v1/metrics to discover valid keys.

Optional · query

Periods to return. Examples: latest, last5y, last8q, FY2024, Q3-2025, 2021..2025, 2024-09-30, or asof:2024-12-31. Default is latest.

GET /v1/financials/

Get an API key to run live requests

You can still review the example response below. Create a free key when you're ready to try this endpoint with real data.

Create free API key
Example response
{
  "data": [
    {
      "cik": "0000320193",
      "ticker": "AAPL",
      "companyName": "Apple Inc.",
      "metric": "revenue",
      "periodEnd": "2025-09-27",
      "fiscalYear": 2025,
      "fiscalPeriod": "FY",
      "value": "416161000000",
      "unit": "USD",
      "source": {
        "kind": "reported",
        "tag": "RevenueFromContractWithCustomerExcludingAssessedTax",
        "taxonomy": "us-gaap",
        "accession": "0000320193-25-000079",
        "filingDate": "2025-10-31"
      }
    }
  ],
  "meta": {
    "requested": {
      "tickers": ["AAPL"],
      "metrics": ["revenue"],
      "period": "latest",
      "layout": "long",
      "frequency": "annual",
      "asReported": false
    },
    "returned": 1,
    "missing": [],
    "layout": "long",
    "period": { "selector": "latest", "frequency": "annual" }
  }
}

Ask your AI Assistant

Using the Wisesheets API with my key in .env, call the Query Financials endpoint and summarize the result for me.

The same canonical observation endpoint as the GET, with parameters sent in a JSON body. Use this when you're working with more than 100 tickers or when URL length would otherwise be a constraint. The batch endpoint resolves up to 1,000 tickers per request, making it the right choice for full-universe screeners, sector-wide pulls, or any workflow that touches a large equity universe in one shot.

POSThttps://api.wisesheets.io/v1/financials/
Name
Type
Description
tickersOne required
string[]body
Ticker symbols to query, such as ["AAPL", "MSFT"]. Batch requests support up to 1,000 resolved companies. Required unless you provide ciks or sic.
ciksOne required
string[]body
SEC CIKs to query, such as ["320193"]. Required unless you provide tickers or sic.
sicOne required
string[]body
SIC industry codes to query, such as ["3571"]. Returns all covered companies in each industry. Required unless you provide tickers or ciks.
metricsRequired
string[]body
Metric keys to return, such as ["revenue", "net_income"]. Use /v1/metrics to discover valid keys.
periodOptional
stringbody
Periods to return. Examples: latest, last5y, last8q, FY2024, Q3-2025, 2021..2025, 2024-09-30, or asof:2024-12-31. Default is latest.
frequencyOptional
enumbody
Use annual or quarterly when the period is ambiguous, such as latest or an exact date. Fiscal-year and fiscal-quarter selectors choose automatically.
layoutOptional
enumbody
Response shape. long is one observation per row (default), wide puts metrics in columns, grouped nests results by company and period.
includeOptional
stringbody
Optional response extras. Use source for XBRL provenance, quality for completeness flags, links for related resources, or none for smaller responses.
formatOptional
enumbody
Response format. json is the default; csv returns pipe-delimited long-form rows.
asReportedOptional
booleanbody
Set true to read raw as-reported XBRL facts instead of standardized metrics. Rolling selectors like last5y are not supported with asReported=true.
1import requests, os23api_key = os.environ["WISESHEETS_API_KEY"]4resp = requests.post(5    "https://api.wisesheets.io/v1/financials/",6    headers={"Authorization": f"Bearer {api_key}"},7    json={"tickers": ["AAPL", "MSFT"], "metrics": ["revenue", "net_income"], "period": "last5y"},8)9print(resp.json())
Try It Live

Start with the common fields. Advanced parameters use API defaults until you open and edit them.

Body parameters

One required · body

Ticker symbols to query, such as ["AAPL", "MSFT"]. Batch requests support up to 1,000 resolved companies. Required unless you provide ciks or sic.

Required · body

Metric keys to return, such as ["revenue", "net_income"]. Use /v1/metrics to discover valid keys.

Optional · body

Periods to return. Examples: latest, last5y, last8q, FY2024, Q3-2025, 2021..2025, 2024-09-30, or asof:2024-12-31. Default is latest.

JSON body preview
{
  "tickers": [
    "AAPL",
    "MSFT"
  ],
  "metrics": [
    "revenue",
    "net_income"
  ],
  "period": "last5y",
  "layout": "long"
}
POST /v1/financials/

Get an API key to run live requests

You can still review the example response below. Create a free key when you're ready to try this endpoint with real data.

Create free API key
Example response
{
  "data": [
    {
      "cik": "0000320193",
      "ticker": "AAPL",
      "companyName": "Apple Inc.",
      "metric": "revenue",
      "periodEnd": "2025-09-27",
      "fiscalYear": 2025,
      "fiscalPeriod": "FY",
      "value": "416161000000",
      "unit": "USD",
      "source": {
        "kind": "reported",
        "tag": "RevenueFromContractWithCustomerExcludingAssessedTax",
        "taxonomy": "us-gaap",
        "accession": "0000320193-25-000079",
        "filingDate": "2025-10-31"
      }
    }
  ],
  "meta": {
    "requested": {
      "tickers": ["AAPL"],
      "metrics": ["revenue"],
      "period": "latest",
      "layout": "long",
      "frequency": "annual",
      "asReported": false
    },
    "returned": 1,
    "missing": [],
    "layout": "long",
    "period": { "selector": "latest", "frequency": "annual" }
  }
}

Ask your AI Assistant

Using the Wisesheets API with my key in .env, call the Batch Financials endpoint and summarize the result for me.

A convenience endpoint for the standard three-statement model. Pass a ticker and get back the income statement, balance sheet, and cash flow statement grouped by period, with line items ordered as they appear in the filing. Useful when you want the full statement structure rather than individual metrics, for example when building a financial model, populating a research template, or generating a company writeup. Missing line items are omitted rather than returned as nulls.

GEThttps://api.wisesheets.io/v1/statements/AAPL?frequency=annual&period=latest&statements=income_statement
Name
Type
Description
ticker_or_cikRequired
stringpath
Ticker or CIK in the URL path. Tickers are case-insensitive; numeric values are treated as CIKs.
frequencyOptional
enumquery
Statement frequency. annual is the default; use quarterly for quarterly filings.
periodOptional
stringquery
Periods to include. Examples: last5y (default), latest, FY2024, Q3-2025, or 2021..2025.
statementsOptional
stringquery
Which statement sections to return. Use income_statement, balance_sheet, cash_flow, or comma-separated combinations. Omit to return all three.
includeOptional
stringquery
Optional response extras, such as source for filing provenance or quality for completeness flags.
asReportedOptional
booleanquery
Set true to read raw as-reported XBRL facts instead of standardized statement rows.
1import requests, os23api_key = os.environ["WISESHEETS_API_KEY"]4resp = requests.get(5    "https://api.wisesheets.io/v1/statements/AAPL?frequency=annual&period=latest&statements=income_statement",6    headers={"Authorization": f"Bearer {api_key}"},7)8print(resp.json())
Try It Live

Start with the common fields. Advanced parameters use API defaults until you open and edit them.

Common parameters

Required · path

Ticker or CIK in the URL path. Tickers are case-insensitive; numeric values are treated as CIKs.

Optional · query

Which statement sections to return. Use income_statement, balance_sheet, cash_flow, or comma-separated combinations. Omit to return all three.

GET /v1/statements/{ticker_or_cik}

Get an API key to run live requests

You can still review the example response below. Create a free key when you're ready to try this endpoint with real data.

Create free API key
Example response
{
  "company": { "ticker": "AAPL", "cik": "0000320193", "name": "Apple Inc." },
  "frequency": "annual",
  "data": [
    {
      "period": { "label": "FY2025", "end": "2025-09-27" },
      "filing": { "accessionNumber": "0000320193-25-000079", "filingDate": "2025-10-31" },
      "statements": {
        "income_statement": {
          "lines": [
            { "metric": "revenue", "label": "Revenue", "value": "416161000000", "unit": "USD" },
            { "metric": "cost_of_revenue", "label": "Cost Of Revenue", "value": "220960000000", "unit": "USD" }
          ]
        }
      }
    }
  ]
}

Ask your AI Assistant

Using the Wisesheets API with my key in .env, call the Financial Statements endpoint and summarize the result for me.

The Wisesheets API standardizes 231 financial metrics across every company it covers, from revenue and net income to niche ratios like tangible book value per share and unlevered free cash flow. The /v1/metrics/ endpoint is the authoritative list of every metric key the API understands. Use it to discover available metrics, filter by statement type or unit type, populate a UI picker, or generate typed enums in your SDK. Pass ?metric=<key> to get a single entry with its full definition.

GEThttps://api.wisesheets.io/v1/metrics/?q=revenue
Name
Type
Description
metricOptional
stringquery
Return one metric definition by exact key, such as revenue or gross_margin.
statementOptional
stringquery
Filter metrics by statement: income_statement, balance_sheet, or cash_flow.
unitTypeOptional
stringquery
Filter metrics by value type: monetary, shares, ratio, per_share, or count.
qOptional
stringquery
Search metric keys and labels by text, such as revenue or margin.
1import requests, os23api_key = os.environ["WISESHEETS_API_KEY"]4resp = requests.get(5    "https://api.wisesheets.io/v1/metrics/?q=revenue",6    headers={"Authorization": f"Bearer {api_key}"},7)8print(resp.json())
Try It Live

Start with the common fields. Advanced parameters use API defaults until you open and edit them.

Common parameters

Optional · query

Search metric keys and labels by text, such as revenue or margin.

GET /v1/metrics/

Get an API key to run live requests

You can still review the example response below. Create a free key when you're ready to try this endpoint with real data.

Create free API key
Example response
{
  "data": [
    {
      "metric": "revenue",
      "label": "Revenue",
      "description": "Top-line revenue recognized in the period, after returns and allowances.",
      "statements": ["income_statement"],
      "unitType": "monetary",
      "isCalculated": false,
      "supportedFrequencies": ["annual", "quarterly"]
    },
    {
      "metric": "net_income",
      "label": "Net income",
      "description": null,
      "statements": ["income_statement"],
      "unitType": "monetary",
      "isCalculated": false,
      "supportedFrequencies": ["annual", "quarterly"]
    }
  ]
}

Ask your AI Assistant

Using the Wisesheets API with my key in .env, call the Metric Catalog endpoint and summarize the result for me.

Returns the authenticated caller's identity, key metadata, subscription status, effective plan (features, limits, capabilities), and current quota windows. Use it to confirm your key is valid, surface plan capabilities in a UI, and monitor remaining requests for the current minute and month before a reset. The quota counters are non-consuming, so calling this endpoint does not count against your limit.

GEThttps://api.wisesheets.io/v1/me/
1import requests, os23api_key = os.environ["WISESHEETS_API_KEY"]4resp = requests.get(5    "https://api.wisesheets.io/v1/me/",6    headers={"Authorization": f"Bearer {api_key}"},7)8print(resp.json())
Try It Live

Start with the common fields. Advanced parameters use API defaults until you open and edit them.

This endpoint takes no parameters.

GET /v1/me/

Get an API key to run live requests

You can still review the example response below. Create a free key when you're ready to try this endpoint with real data.

Create free API key
Example response
{
  "user": {
    "userId": "5f1c2c1e-3f8f-4f9a-9c0a-7c2b1d4e1f00",
    "email": "you@example.com",
    "stripeCustomerId": "cus_QzExampleCustomer"
  },
  "key": {
    "apiKeyId": "b6c8a9d2-1e4f-4a3b-9c11-8d5e2a0fbc77",
    "name": "Production key",
    "status": "active",
    "displayPrefix": "wsh_live_4f2",
    "displaySuffix": "8f2a",
    "expiresAt": null
  },
  "subscription": {
    "status": "active",
    "stripeSubscriptionId": "sub_1QzExampleSubscription"
  },
  "plan": {
    "planCode": "pro",
    "displayName": "Pro",
    "stripeProductId": "prod_QzExamplePro",
    "stripePriceId": "price_1QzExamplePro",
    "features": {
      "price_data": { "enabled": true, "value": null },
      "dividends_data": { "enabled": true, "value": null },
      "fundamentals": { "enabled": true, "value": null },
      "key_metrics": { "enabled": true, "value": null },
      "history_years": { "enabled": true, "value": 15 },
      "bulk_access": { "enabled": true, "value": null }
    },
    "limits": {
      "monthlyRequests": 80000,
      "requestsPerMinute": 600,
      "historyYears": 15
    },
    "capabilities": {
      "bulkAccess": true,
      "fullHistory": false,
      "prioritySupport": false,
      "commercialUse": false
    }
  },
  "quota": {
    "available": true,
    "minute": { "limit": 600, "remaining": 598, "resetSeconds": 42 },
    "month": { "limit": 80000, "remaining": 78760, "resetSeconds": 1247400 }
  }
}

Ask your AI Assistant

Using the Wisesheets API with my key in .env, call the Inspect API Key endpoint and summarize the result for me.

A liveness and data-freshness probe. Returns 200 when the API can reach its database and 503 otherwise. The dataFreshness field is the most recent filing date available across the dataset; data syncs within 15 minutes of a new filing. It's a useful signal for applications that care about data recency, like earnings reaction systems or filing monitors.

GEThttps://api.wisesheets.io/v1/health/
1import requests, os23api_key = os.environ["WISESHEETS_API_KEY"]4resp = requests.get(5    "https://api.wisesheets.io/v1/health/",6    headers={"Authorization": f"Bearer {api_key}"},7)8print(resp.json())
Try It Live

Start with the common fields. Advanced parameters use API defaults until you open and edit them.

This endpoint takes no parameters.

GET /v1/health/

Get an API key to run live requests

You can still review the example response below. Create a free key when you're ready to try this endpoint with real data.

Create free API key
Example response
{
  "status": "ok",
  "db": "ok",
  "dataFreshness": "2026-06-08"
}

Ask your AI Assistant

Using the Wisesheets API with my key in .env, call the Health Check endpoint and summarize the result for me.