---
title: "Get Valuation Envelope"
method: GET
path: "/api/valuation/{symbol}"
tags: ["valuation-split"]
---

# Get Valuation Envelope

`GET /api/valuation/{symbol}`

## Request

- Base URL: `https://api.equity-rank.com` (the document declares no server; this is the origin it was published from)
- URL: `https://api.equity-rank.com/api/valuation/{symbol}`
- Auth: HTTP bearer

Return the combined ValuationEnvelope (snapshot + optional projection).

schema_version="2.0" signals to clients that this is the split-format response.
Projection is best-effort: if compute fails, snapshot is still returned with
projection=null. Returns 503 if the snapshot cache is cold.

## Path parameters

- `symbol` string, required

## Response `200`

Successful Response

- ValuationEnvelope: Combined snapshot + projection response for GET /api/valuation/{symbol}. schema_version field lets clients detect the new split format.
  - `snapshot` ValuationSnapshot, required: Point-in-time valuation — TTM/most-recent fundamentals only. Derived from ValuationResult via snapshot_from_valuation_result(). Does NOT include forward-scenario outputs — those belong in ValuationProjection. ValuationResult is unchanged; this is a curated view of it for new endpoints.
    - `symbol` string, required
    - `price` number, nullable
    - `sector` string, nullable
    - `company_type` string, nullable
    - `consensus_fair_value` number, nullable
    - `consensus_margin_of_safety` number, nullable
    - `methods_used` string[]
    - `best_method` string, nullable
    - `best_fit` BestFit: The single best-fitting valuation method for this specific stock.
      - `method` string, required
      - `label` string, required
      - `fair_value` number, required
      - `margin_of_safety` number, required
      - `rationale` string, required
      - `confidence` string, required
      - `method_no_leverage` string, nullable
      - `label_no_leverage` string, nullable
      - `fair_value_no_leverage` number, nullable
      - `margin_of_safety_no_leverage` number, nullable
      - `confidence_no_leverage` string, nullable
      - `leverage_fired` boolean, nullable
      - `leverage_debt_equity` number, nullable
      - `bridge_observed` boolean, nullable
      - `rule_sha` string, nullable
    - `model_confidence_score` number, nullable
    - `model_confidence_label` string, nullable
    - `fair_value_low` number, nullable
    - `fair_value_high` number, nullable
    - `combined_adjusted_fair_value` number, nullable
    - `combined_adjusted_margin_of_safety` number, nullable
    - `fair_value_interval` FairValueInterval: Phase 47 / CI-01..04: 80% confidence band on a fair value point estimate. The band combines two uncertainty sources: - Cross-method disagreement (IQR-based, robust to DCF tail outliers) - Sector-vol within-method spread (decile-bucketed multiplier × FV) `confidence` is always 0.80 in v2.0; reserved for v2.1+ scenario weights. Copy framing in UI must use "80% model interval" — NEVER "forecast", "expected range", or "price target" (banned per CLAUDE.md).
      - `low` number, required
      - `high` number, required
      - `confidence` number
    - `data_quality` string, nullable
    - `data_as_of` string, nullable
    - `last_updated` string
  - `projection` ProjectionEnvelope: All three bear/base/bull scenarios for a given ticker + horizon.
    - `bear` ValuationProjection: Single forward scenario (bear / base / bull) for a given model horizon. Produced by projection_service.compute_projected_fair_value_range() and converted via projection_from_scenario(). One row per scenario. Not a projected fair value range under model scenarios or investment advice. For informational and educational purposes only.
      - `ticker` string, required
      - `scenario` string, required
      - `horizon_years` integer, required
      - `projected_fair_value` number, nullable
      - `assumed_growth_rate` number, nullable
      - `model_fair_value_differential_pct` number, nullable
      - `assumptions` object
      - `assumptions_note` string, nullable
      - `disclaimer` string
    - `base` ValuationProjection: Single forward scenario (bear / base / bull) for a given model horizon. Produced by projection_service.compute_projected_fair_value_range() and converted via projection_from_scenario(). One row per scenario. Not a projected fair value range under model scenarios or investment advice. For informational and educational purposes only.
      - `ticker` string, required
      - `scenario` string, required
      - `horizon_years` integer, required
      - `projected_fair_value` number, nullable
      - `assumed_growth_rate` number, nullable
      - `model_fair_value_differential_pct` number, nullable
      - `assumptions` object
      - `assumptions_note` string, nullable
      - `disclaimer` string
    - `bull` ValuationProjection: Single forward scenario (bear / base / bull) for a given model horizon. Produced by projection_service.compute_projected_fair_value_range() and converted via projection_from_scenario(). One row per scenario. Not a projected fair value range under model scenarios or investment advice. For informational and educational purposes only.
      - `ticker` string, required
      - `scenario` string, required
      - `horizon_years` integer, required
      - `projected_fair_value` number, nullable
      - `assumed_growth_rate` number, nullable
      - `model_fair_value_differential_pct` number, nullable
      - `assumptions` object
      - `assumptions_note` string, nullable
      - `disclaimer` string
    - `data_complete` boolean
    - `horizon_years` integer
    - `range_low` number, nullable
    - `range_high` number, nullable
    - `disclaimer` string
  - `schema_version` string

## Other responses

- `422`: Validation Error

---

[API](https://skmtc.dev/equity-rank/apis/equity-rank-api.md) · [All operations](https://skmtc.dev/equity-rank/apis/equity-rank-api/llms.txt) · [OpenAPI document](https://skmtc.dev/equity-rank/apis/equity-rank-api/revisions/c2f2463fee33?raw)
