Forward estimates
Forward estimates for one issuer.
Parameters
symbolpathrequired
Ticker symbol, case-insensitive.
Response contract
Everything except the fields named as withheld, which are ours and not yours.
Withheld
model_version
These are ours: ingest bookkeeping and internal build stamps. They are removed at every level of the response, including inside arrays.
Response fields
The top level keys a live response actually returned, read off the API rather than written down here.
symbolas_ofhistory_yearshistoryprojectionsourcesguidance_applied
How this was verified
Called against 3 different subjects on the live API. Every field it returned, at every level, was compared with the contract above. Last checked August 18, 2026.
Request
curl "https://api.massari.ai/v1/earnings/AAPL/forward-estimates" \
-H "Authorization: Bearer $MASSARI_TOKEN"Example response
{
"symbol": "AAPL",
"as_of": "2026-08-17T18:13:09.123Z",
"history_years": [
2007,
2008
],
"history": [
{
"year": 2023,
"basis": "actual",
"period_end": null,
"revenue": 383285000000,
"revenue_growth": null,
"operating_margin": 0.2982141226502472,
"operating_income": 114301000000,
"net_income": 96995000000,
"shares_out": 15550061000,
"eps": 6.237596109751595,
"ocf": 110543000000,
"capex": -10959000000,
"fcf": 99584000000
},
{
"year": 2024,
"basis": "actual",
"period_end": null,
"revenue": 391035000000,
"revenue_growth": 0.02021994077514111,
"operating_margin": 0.31510222870075566,
"operating_income": 123216000000,
"net_income": 93736000000,
"shares_out": 15116786000,
"eps": 6.200788977233652,
"ocf": 118254000000,
"capex": -9447000000,
"fcf": 108807000000
}
],
"projection": {
"regime": "stable",
"cagr": 0.05786815328894934,
"confidence": {
"tier": "high",
"score": 5,
"metrics": {
"clean_years": 19,
"last_revenue": 466823000000,
"revenue_growth_volatility": 0.13244371378249195
},
"reasons": []
},
"base": {
"last_year": 2025,
"last_revenue": 466823000000,
"base_growth": 0.0989794725311366,
"base_operating_margin": 0.3150153120752614,
"base_net_margin": 0.25632031648158793,
"base_ocf_margin": 0.3017085051562847,
"capex_intensity": 0.024753495500927408,
"capex_inflecting": false,
"share_growth": -0.03091052068363376
},
"assumptions": {
"terminal_growth": 0.03,
"fade": 0.75,
"leverage": 0.12,
"horizon": 3
},
"fy": [
{
"fy_label": "FY1",
"year": 2026,
"revenue": 499576780699.3756,
"revenue_growth": 0.07016316826586433,
"operating_margin": 0.3198348922671651,
"operating_income": 159782085834.16196,
"net_income": 129737103785.3324,
"shares_out": 14143066297.249329,
"eps": 9.173194911103886,
"ocf": 151930438893.89456,
"capex": -12366271593.409792,
"fcf": 139564167300.48477,
"drivers": [
"revenue:in_progress_seasonal_blend(w=0.25)",
"capex:model"
]
},
{
"fy_label": "FY2",
"year": 2027,
"revenue": 533948139457.4204,
"revenue_growth": 0.06880095329876434,
"operating_margin": 0.31967142647111313,
"operating_income": 170687963401.95044,
"net_income": 138602042623.6172,
"shares_out": 13705896753.938198,
"eps": 10.112584759095885,
"ocf": 162339756796.06073,
"capex": -13217082867.787815,
"fcf": 149122673928.27292,
"drivers": [
"revenue_growth:model",
"capex:model"
]
}
],
"warnings": []
},
"sources": {
"statement_history": "sec_filings",
"series_decision": "first_party_primary",
"provenance": {
"statement_history_source": "sec_filings",
"base_period": {
"year": 2025,
"basis": "LTM_sec"
},
"fields": {
"revenue": "sec",
"operating_income": "sec",
"net_income": "sec",
"cfo": "sec",
"capex": "sec",
"shares": "sec"
},
"sec_period_end": "2026-06-27",
"sec_accessions": [
"0000320193-26-000020",
"0000320193-25-000079"
]
},
"gap_filled_from_vendor": [],
"derived_first_party": [],
"cross_source_check": {
"base_year": 2025,
"revenue_rel_diff": 0,
"divergent": false
},
"base_period_filing": {
"accession": "0000320193-25-000079",
"filing_type": "10-K",
"filing_date": "2025-10-31"
},
"sec_overlay": {
"period_end": "2026-06-27",
"accessions": [
"0000320193-26-000020",
"0000320193-25-000079"
]
}
},
"guidance_applied": null
}A real response from the live API, captured August 18, 2026. This one is CUT: long arrays, wide objects and long strings were trimmed to keep it readable, so treat it as a sample of the shape rather than all of it. Either way it is valid JSON.