Search gives you a ticker. Financials is the call that turns that ticker into the annual statements: income, balance sheet, and cash flow. Each table uses the same header row of period endings, and every amount is a string, already formatted with a dollar sign.
👉 To access this endpoint, you must obtain an API key: https://steadyapi.com/register
Authentication
Every call uses a Bearer token from your SteadyAPI dashboard.
Documentation:
https://docs.steadyapi.com/#authenticating-requests
headers = {
'Authorization': 'Bearer YOUR_API_KEY'
}
Where this fits
Take symbol from GET /v1/markets/search and pass it here as ticker. There is no frequency or page parameter. When you want headlines instead of statements, the next call is GET /v1/markets/news with the same ticker.
Read stock financials
Endpoint: GET /v2/markets/stock/financials
Documentation:
https://docs.steadyapi.com/#stocks-options-GETapi-v2-markets-stock-financials
Parameters
ticker— ticker symbol. Required ifsymbolis omitted (example:AAPL)symbol— same role asticker. If both are set,tickeris the one that is used
One symbol is the whole request. The statements you get back are the annual tables. You cannot ask for a quarter, a date range, or a second page. Send AAPL or aapl; the value is uppercased before the lookup.
Python
import requests
url = "https://api.steadyapi.com/v2/markets/stock/financials"
headers = {"Authorization": "Bearer YOUR_API_KEY"}
response = requests.get(url, headers=headers, params={"ticker": "AAPL"})
response.raise_for_status()
body = response.json().get("body") or {}
income = body.get("incomeStatementTable") or {}
rows = income.get("rows") or []
revenue = next((row for row in rows if row.get("value1") == "Total Revenue"), None)
print(revenue)
Annotated sample
{
"meta": { "symbol": "AAPL" },
"body": {
"incomeStatementTable": {
"headers": {
"value1": "Period Ending:",
"value2": "9/30/2023"
},
"rows": [
{
"value1": "Total Revenue",
"value2": "$383,285,000"
}
]
}
}
}
Store meta.symbol with the row label in value1. value2 through value5 line up with the period endings in headers. The same shape is repeated on balanceSheetTable and cashFlowTable. Amounts stay strings. Do not strip the dollar sign and assume the remainder is a float without removing commas.
Practical use
Match a row by value1, not by position. Total Revenue is the label in the sample. The next period is the next valueN column, not another request.
If the ticker does not resolve, body comes back empty. Check that before you index incomeStatementTable. meta.symbol is filled from the statement payload, so an empty body means you do not have a symbol to trust.
This call does not replace a quote. The figures are statement totals for a period ending, not the latest trade.
👉 Get your API key and read financials: https://steadyapi.com/register