Income Statements
Revenue, expenses, and net income for each reporting period, from filed SEC data.
/equities/v1/statements endpoint for the numbers and joins it against /equities/v1/filings for SEC identity: accession number, form type, filing URL, filing date. This route covers the income statement. Balance Sheets and Cash Flow Statements work the same way, with a different field set.
What this answers
- What was a company’s revenue, gross profit, and net income for a given fiscal year or quarter.
- What a trailing-twelve-month view looks like when the company has not yet filed a full fiscal year at that point.
Coverage
Query rules
ticker is required. period accepts annual, quarterly, or ttm.
REST and MCP disagree on the default for period. The REST route fills a value before it calls the underlying tool, so an omitted period defaults to annual here. The MCP tool’s own schema default is ttm, matching the published Financial Datasets schema. Pass period explicitly on both transports if the default matters to your call.
as_reported=true is accepted for parameter parity but always answers 400 bad_request. Raw, as-filed line items are not sourced. Use the normalized fields this route already returns.
limit defaults to 4 and caps at 100. The report_period, report_period_gte, report_period_lte, report_period_gt, and report_period_lt filters narrow by report date.
Fields the current Go source declares but our own live captures never populate, currency, accession_number, form_type, filing_url, filing_date, filing_datetime, selling_general_and_administrative_expenses, interest_expense, net_income_discontinued_operations, net_income_non_controlling_interests, preferred_dividends_impact, consolidated_income, dividends_per_common_share, are schema-legal and left out of the response rather than guessed.
Worked example
Authorizations
The caller's own Monid API key (get one at https://monid.ai?fpr=dhruv-15136b). Passed straight through to Monid on every call, so usage bills the caller's own wallet — this is never a shared server-side credential, and the server never logs or stores it. Missing, empty, or malformed values answer 401 unauthorized before any paid call is attempted.
Query Parameters
Uppercase-normalized ticker symbol (1-20 letters/digits/dots/hyphens).
Reporting period. REST-level default is "annual" (see description); the tool/FD-schema default is "ttm".
annual, quarterly, ttm Number of records to retrieve (default: 4, max: 100).
1 <= x <= 100Accepted for FD parameter parity but always rejected: as_reported=true answers 400 bad_request ("as_reported is not supported; use the normalized income-statements endpoint") at zero cost.
Exact report_period date filter (YYYY-MM-DD).
report_period >= this date (YYYY-MM-DD, inclusive).
report_period <= this date (YYYY-MM-DD, inclusive).
report_period > this date (YYYY-MM-DD, exclusive).
report_period < this date (YYYY-MM-DD, exclusive).
Opaque base64url pagination cursor from a previous response's next_page_url. Omit for the first page.
Response
A page of income statements, newest report_period first. Real AAPL FY2025/FY2024 annual values captured from our own live API (docs/our-live-samples/income_statements.json).
Wrapped list envelope: {"income_statements": [...], "next_page_url": "..."}. Page size is 10 records (100 for /prices).