Financial Model Endpoints
Prebuilt DCF and historical models computed from SEC filings with explicit, overridable assumptions.
Prebuilt financial models for public companies: six DCF variants (terminal growth, EBITDA exit, and revenue exit — each over 5 or 10 years), annual historical-financials tables, six multiples valuations (EV/EBIT, EV/EBITDA, P/E, Price/Sales, Price/Book, EV/Revenue), a WACC calculator, and Greenwald earnings power value. Models are deterministic calculators over SEC-derived canonical periods — no AI, no market data. Default assumptions are prefilled from filings and carry per-input provenance; every default is explicit and most are overridable.
All three endpoints are public reads with no authentication. The examples use
Bentley Systems (entityId from the
ticker resolver
or the public profile).
List Model Templates
/v2/entities/:id/modelscurl "https://api.sureshake.com/v2/entities/5210b6a3-5677-4bd9-8f8d-6e9dab011a28/models"
const response = await fetch(
'https://api.sureshake.com/v2/entities/5210b6a3-5677-4bd9-8f8d-6e9dab011a28/models',
);
const { data } = await response.json();Each template reports its state (available | partial | unavailable)
plus requiredMetricKeys, missingMetricKeys, and prefilledMetricKeys, so
clients can tell exactly which filing facts back a model before computing it.
Compute a Model (filing defaults)
/v2/entities/:id/models/:templateKeycurl "https://api.sureshake.com/v2/entities/5210b6a3-5677-4bd9-8f8d-6e9dab011a28/models/dcf_5_year_terminal_growth"
const response = await fetch(
'https://api.sureshake.com/v2/entities/5210b6a3-5677-4bd9-8f8d-6e9dab011a28/models/dcf_5_year_terminal_growth',
);
const { data } = await response.json();Response fields (data)
| Field | Type | Description |
|---|---|---|
state | enum | computed | insufficient_data. |
assumptions | array | Every model input: key, label, value, unit, source (prefilled_from_filings | default | user), editable, and filing provenance for prefilled values. |
projections | array | Per-year revenue, free cash flow, and discounted present value (DCF templates). |
historicals | array | Annual history rows with growth and margins (historical templates). |
valuation | object | enterpriseValue, terminalValue, netDebt, equityValue, fairValuePerShare (null without a share count), currency. |
missingMetricKeys | array | Filing facts the model wanted but could not find — their assumptions fall back to labeled defaults and become editable. |
rateResult | object | WACC template only: wacc, costOfEquity, costOfDebtAfterTax, and capital weights. null for valuation templates. |
dcfDetail | object | DCF templates only (see below): the full interactive model — per-year drivers, scenario bands, and supporting calculations. null for other kinds. |
disclaimer | string | Required no-advice disclaimer — surface it wherever output is displayed. |
The dcfDetail block (DCF templates)
Every DCF template also returns a fully worked model:
| Field | Description |
|---|---|
drivers | Seven per-year driver series (revenue_growth, ebitda_margin, other_income, capex_pct_revenue, nwc_pct_revenue, da_pct_revenue, tax_rate), each with one value per projected fiscal year and a per-cell source. |
scenarios | The low/mid/high band: discount rate plus exit multiple (exit variants) or terminal growth (perpetuity variants). "Low" pairs the highest discount rate with the lowest multiple. |
projections | The unlevered free-cash-flow build-up per year: revenue, EBITDA, other income, D&A, EBIT, pro-forma taxes, NOPAT, CapEx, net working capital and its investment, and free cash flow. |
discounting | Mid-year-convention timeline: period start/end, mid-period date, and the discount period from the valuation date, plus the terminal period (final + 0.5). |
discountFactors | 1 / (1 + r)^t per year and scenario, plus the terminal row. |
enterpriseValue | Present values per year and scenario, PV of discrete cash flows, the terminal-value block, and enterprise value — all as {low, mid, high} triples. |
equityWaterfall | Enterprise value → net debt (cash and total debt shown) → equity value → shares → fair value per share. |
summary | Fair-value triple, forward revenue CAGR, average EBITDA margin, and unlevered FCF CAGR over the horizon. stockPrice/upside stay null until market data is licensed. |
history | Filing-backed reference tables: annual CapEx and D&A (% of revenue, five-year average, fiscal-YTD row) and the quarterly net-working-capital build-up with LTM revenue. |
Recompute with Overridden Assumptions
/v2/entities/:id/models/:templateKey/computecurl -X POST -H "content-type: application/json" \
-d '{"assumptions":{"discount_rate":0.12,"initial_growth":0.10}}' \
"https://api.sureshake.com/v2/entities/5210b6a3-5677-4bd9-8f8d-6e9dab011a28/models/dcf_5_year_terminal_growth/compute"const response = await fetch(
'https://api.sureshake.com/v2/entities/5210b6a3-5677-4bd9-8f8d-6e9dab011a28/models/dcf_5_year_terminal_growth/compute',
{
method: 'POST',
headers: { 'content-type': 'application/json' },
body: JSON.stringify({ assumptions: { discount_rate: 0.12 } }),
},
);
const { data } = await response.json();Overrides are keyed by assumption key and expressed as decimals
(0.12 = 12%). Unknown keys, non-numeric values, and overrides of
filing-backed (editable: false) assumptions return 400. Economically
invalid combinations (e.g. a discount rate at or below terminal growth for a
perpetuity model) also return 400 with an explanatory message.
Per-year driver overrides (DCF templates)
DCF templates additionally accept a drivers object keyed by driver, then by
four-digit projection year:
{
"assumptions": { "discount_rate": 0.09 },
"drivers": {
"revenue_growth": { "2027": 0.071, "2028": 0.053 },
"ebitda_margin": { "2027": 0.222 }
}
}Unspecified years keep their seeded defaults; overridden cells come back with
source: "user" in dcfDetail.drivers. Years outside the projection horizon,
unknown driver keys, and driver overrides on non-DCF templates return 400.
Overriding a mid assumption (discount_rate, exit_multiple,
terminal_growth) automatically re-derives its low/high band edges unless you
pin them explicitly (discount_rate_low, exit_multiple_high, …).
Saved Scenarios
Authenticated users can save named override sets per company model and share them read-only.
| Endpoint | Method | Auth | Purpose |
|---|---|---|---|
/v2/entities/:id/models/:templateKey/scenarios | GET | Yes | List your saved scenarios for this model. |
/v2/entities/:id/models/:templateKey/scenarios | POST | Yes | Save {name, assumptions, drivers}. |
/v2/entities/:id/models/:templateKey/scenarios/:scenarioId | PATCH | Yes | Rename or replace the overrides. |
/v2/entities/:id/models/:templateKey/scenarios/:scenarioId | DELETE | Yes | Delete a scenario. |
/v2/model-scenarios/shared/:shareToken | GET | Public | Resolve a share link to its overrides. |
Scenarios are private to their owner. The share token resolves to the overrides and scenario name only — never the owner's identity.
Export a Model
/v2/entities/:id/models/:templateKey/exportcurl -X POST -H "content-type: application/json" \
-d '{"format":"xlsx","assumptions":{"discount_rate":0.09}}' \
-OJ "https://api.sureshake.com/v2/entities/5210b6a3-5677-4bd9-8f8d-6e9dab011a28/models/revenue_exit/export"const response = await fetch(
'https://api.sureshake.com/v2/entities/5210b6a3-5677-4bd9-8f8d-6e9dab011a28/models/revenue_exit/export',
{
method: 'POST',
headers: { 'content-type': 'application/json' },
body: JSON.stringify({ format: 'csv' }),
},
);
const blob = await response.blob();Accepts the same body as compute plus format: "csv" | "xlsx", and returns
the file directly with a Content-Disposition attachment header. The export
reflects whatever overrides you send and always embeds the disclaimer.
{
"error": {
"code": "BAD_REQUEST",
"message": "Assumption \"base_revenue\" is filing-backed and not overridable.",
"traceId": "hFz2kQnU8dJcQ0v9tXw1p"
}
}Model output is user-generated analysis based on explicit assumptions. It is
not issuer guidance, an analyst target, or investment advice — always display
the disclaimer field alongside results.
Related pages
- Interactive DCF models guide — how the company-page model UI uses these endpoints: per-year editing, scenarios, sharing, exports, and the AI assistant
- Company Data Endpoints — public profile, ticker resolver, and the company terminal