Email API support
Get help with authentication, endpoints, account access, or implementation questions.
Email info@wisesheets.ioREST API reference
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.
Create a free account to get your API key.
Get your API keyWisesheets 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.
MCP server URL
https://mcp.wisesheets.io/v1/mcpNo API key required. When you connect, your agent sends you to Wisesheets to sign in and approve access.
Add it to your agent
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.
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.
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
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']{"}"}")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.
# 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.”
Need help with an endpoint or your integration? Contact our team directly or connect with other Wisesheets developers.
Get help with authentication, endpoints, account access, or implementation questions.
Email info@wisesheets.ioAsk questions, exchange integration tips, and connect with other Wisesheets developers.
Join the Wisesheets DiscordThe discovery surface for every company the API covers. With no query it returns a deterministic, paginated listing of all filers. Pass q to match against ticker symbol, CIK, or company name using substring matching. Use it to power typeahead search in your application, resolve tickers from natural language, or explore which companies fall within a specific SIC industry code before you query their financials.
1import requests, os23api_key = os.environ["WISESHEETS_API_KEY"]4resp = requests.get(5 "https://api.wisesheets.io/v1/companies/?q=apple&limit=2",6 headers={"Authorization": f"Bearer {api_key}"},7)8print(resp.json())Start with the common fields. Advanced parameters use API defaults until you open and edit them.
Common parameters
Search by ticker, CIK, or company name. Use 2+ characters; 3+ enables broader name matching.
Rows per page. Defaults to 25; maximum is 100.
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.
{
"data": [
{ "ticker": "AAPL", "cik": "0000320193", "name": "Apple Inc.", "exchange": "Nasdaq", "sic": "3571", "sicDescription": "Electronic Computers" },
{ "ticker": "APLE", "cik": "0001418121", "name": "Apple Hospitality REIT, Inc.", "exchange": "NYSE", "sic": "6798", "sicDescription": "Real Estate Investment Trusts" }
],
"meta": { "returned": 2, "nextCursor": "eyJvIjoyfQ" }
}Ask your AI Assistant
“Using the Wisesheets API with my key in .env, call the Search Companies endpoint and summarize the result for me.”
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.
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())Start with the common fields. Advanced parameters use API defaults until you open and edit them.
Common parameters
Ticker or CIK in the URL path. Tickers are case-insensitive; numeric values are treated as CIKs.
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.
{
"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.
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())Start with the common fields. Advanced parameters use API defaults until you open and edit them.
Common parameters
Ticker symbols to query, such as AAPL,MSFT. Separate multiple tickers with commas. Symbols are uppercased and de-duplicated; up to 25 per request.
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.
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 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.
{
"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.
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())Start with the common fields. Advanced parameters use API defaults until you open and edit them.
Body parameters
Ticker symbols to query, such as ["AAPL", "MSFT"]. Symbols are uppercased and de-duplicated; up to 250 per request.
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.
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.
{
"tickers": [
"AAPL",
"MSFT",
"GOOGL"
],
"period": "last252d",
"fields": [
"close",
"adjClose",
"volume"
]
}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.
{
"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.”
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.
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())Start with the common fields. Advanced parameters use API defaults until you open and edit them.
Common parameters
Ticker symbols to query, such as AAPL,MSFT. Separate multiple tickers with commas. Symbols are uppercased and de-duplicated; up to 25 per request.
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.
Maximum rows to return, between 1 and 25. Defaults to 25 when omitted.
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.
{
"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.”
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.
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())Start with the common fields. Advanced parameters use API defaults until you open and edit them.
Body parameters
Ticker symbols to query, such as ["AAPL", "MSFT"]. Symbols are uppercased and de-duplicated; up to 250 per request.
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"].
Maximum rows to return, between 1 and 250. Defaults to 250 when omitted.
{
"tickers": [
"AAPL",
"MSFT",
"GOOGL"
],
"fields": [
"price",
"change",
"volume",
"timestamp",
"name"
],
"limit": 100
}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.
{
"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.
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())Start with the common fields. Advanced parameters use API defaults until you open and edit them.
Common parameters
Ticker symbols to query, such as AAPL,MSFT. Separate multiple tickers with commas. Symbols are uppercased and de-duplicated; up to 25 per request.
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.
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 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.
{
"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.
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())Start with the common fields. Advanced parameters use API defaults until you open and edit them.
Body parameters
Ticker symbols to query, such as ["AAPL", "MSFT"]. Symbols are uppercased and de-duplicated; up to 250 per request.
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.
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.
{
"tickers": [
"AAPL",
"MSFT",
"KO"
],
"fields": [
"adjDividend",
"dividend",
"recordDate",
"paymentDate"
],
"from": "2020-01-01"
}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.
{
"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.
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())Start with the common fields. Advanced parameters use API defaults until you open and edit them.
Common parameters
Ticker symbols to query, such as AAPL or MSFT. Separate multiple tickers with commas. Required unless you provide ciks or sic.
Metric keys to return, such as revenue,net_income,gross_margin. Use /v1/metrics to discover valid keys.
Periods to return. Examples: latest, last5y, last8q, FY2024, Q3-2025, 2021..2025, 2024-09-30, or asof:2024-12-31. Default is latest.
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.
{
"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.
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())Start with the common fields. Advanced parameters use API defaults until you open and edit them.
Body parameters
Ticker symbols to query, such as ["AAPL", "MSFT"]. Batch requests support up to 1,000 resolved companies. Required unless you provide ciks or sic.
Metric keys to return, such as ["revenue", "net_income"]. Use /v1/metrics to discover valid keys.
Periods to return. Examples: latest, last5y, last8q, FY2024, Q3-2025, 2021..2025, 2024-09-30, or asof:2024-12-31. Default is latest.
{
"tickers": [
"AAPL",
"MSFT"
],
"metrics": [
"revenue",
"net_income"
],
"period": "last5y",
"layout": "long"
}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.
{
"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.
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())Start with the common fields. Advanced parameters use API defaults until you open and edit them.
Common parameters
Ticker or CIK in the URL path. Tickers are case-insensitive; numeric values are treated as CIKs.
Which statement sections to return. Use income_statement, balance_sheet, cash_flow, or comma-separated combinations. Omit to return all three.
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.
{
"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.
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())Start with the common fields. Advanced parameters use API defaults until you open and edit them.
Common parameters
Search metric keys and labels by text, such as revenue or margin.
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.
{
"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.
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())Start with the common fields. Advanced parameters use API defaults until you open and edit them.
This endpoint takes no parameters.
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.
{
"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.
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())Start with the common fields. Advanced parameters use API defaults until you open and edit them.
This endpoint takes no parameters.
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.
{
"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.”