image

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 if symbol is omitted (example: AAPL)
  • symbol — same role as ticker. If both are set, ticker is 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

How to Read TikTok Video Comments Using SteadyAPI Oct 05, 2026

How to Read TikTok Video Comments Using SteadyAPI

Read TikTok comments 20 at a time. Video 7106594312292453675 has 1269 comments. The next cursor is the string 20.

How to Read Stock Financials Using SteadyAPI Oct 09, 2026

How to Read Stock Financials Using SteadyAPI

Annual income, balance sheet, and cash flow for one ticker. Amounts come back as formatted strings in three tables.

How to Check Vehicle Recalls Using SteadyAPI Oct 08, 2026

How to Check Vehicle Recalls Using SteadyAPI

Learn how to check vehicle recalls with SteadyAPI. Read component, summary, and remedy for a vehicle id.

How to Get an MLB Box Score Using SteadyAPI Oct 07, 2026

How to Get an MLB Box Score Using SteadyAPI

Learn how to get an MLB box score with SteadyAPI. Read each club's batting line for one game.