---
title: "Get Audit Trail"
method: GET
path: "/api/audit/{ticker}"
tags: ["audit"]
---

# Get Audit Trail

`GET /api/audit/{ticker}`

## 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/audit/{ticker}`
- Auth: HTTP bearer

Phase 48 / AUDIT-01: structured audit trail for a ticker.

Returns the AuditTrail for the given ticker, reading from screener_cache
(input snapshot, per-method FVs, consensus, 80% CIs from Phase 47)
+ av_anomaly_log (data-quality anomalies in the calc window).

NO external fetches — performance target p95 ≤500ms (AUDIT-05).

Args:
    ticker: stock symbol (case-insensitive; uppercased internally)
    days: anomaly window in days (default 7, max 90)

Returns:
    AuditTrail with versioned schema (schema_version="1.0" in v2.0)

Raises:
    401 if no JWT and no service bypass
    403 if JWT lacks `is_admin` or `is_friends_family`
    404 if ticker not found in screener_cache
    400 if days outside [1, 90]

## Path parameters

- `ticker` string, required

## Query parameters

- `days` integer

## Response `200`

Successful Response

- AuditTrail: Phase 48 / AUDIT-01..05 — versioned, structured "show your work" trail. Schema-stable: breaking changes MUST bump `schema_version` AND update the pinned fixture in `backend/tests/test_audit_trail.py`. Compliance: - "model_horizon" defaults to "~1 year" (matches Phase 46 Model Horizon badge on ValuationPanel projected section). - `disclaimer` field always contains the LEGAL-OK negation pattern. LEGAL-OK: disclaimer field text NEGATES "forecast" and "price target".
  - `schema_version` string
  - `ticker` string, required
  - `sector` string, nullable
  - `model_horizon` string
  - `inputs` AuditInputSnapshot: Snapshot of inputs that drove the valuation, with timestamps. These are the SAME values that compute_* functions consumed. No re-fetch — they come from screener_cache's already-persisted columns.
    - `price` number, nullable
    - `eps_ttm` number, nullable
    - `bvps` number, nullable
    - `ps_ratio` number, nullable
    - `ev_ebitda_ratio` number, nullable
    - `beta` number, nullable
    - `revenue_growth_yoy` number, nullable
    - `eps_growth_yoy` number, nullable
    - `dividend_yield` number, nullable
    - `forward_pe_ratio` number, nullable
    - `realized_vol_60d` number, nullable
    - `market_cap` number, nullable
    - `updated_at` string, nullable
  - `sector_multiples` AuditSectorMultiples: Sector multiples applied during this calc — the DEFAULT_SECTOR_MULTIPLES dict entry for this ticker's sector, surfaced for transparency.
    - `sector` string, required
    - `pe_multiple` number, nullable
    - `pb_multiple` number, nullable
    - `ps_multiple` number, nullable
    - `ev_ebitda_multiple` number, nullable
    - `ev_sales_multiple` number, nullable
    - `roe_pct` number, nullable
    - `pfcf_multiple` number, nullable
    - `evfcf_multiple` number, nullable
    - `ev_ebit_multiple` number, nullable
  - `consensus` AuditConsensusMath: The consensus blend's intermediate values: methods included + their weights, the weighted average math, and the resulting consensus FV. Includes the 80% CI on the consensus when Phase 47 data is present.
    - `consensus_fair_value` number, nullable
    - `consensus_margin_of_safety` number, nullable
    - `methods_used` integer
    - `method_contributions` AuditMethodValue[]
      - `method` string, required
      - `fair_value` number, nullable
      - `weight` number, nullable
      - `interval_low` number, nullable
      - `interval_high` number, nullable
      - `confidence` number, nullable
    - `interval_low` number, nullable
    - `interval_high` number, nullable
    - `confidence` number, nullable
    - `model_confidence_score` number, nullable
  - `anomalies` AuditAnomaly[]
    - `field_path` string, required
    - `rule` string, required
    - `raw_value` unknown
    - `fetch_function` string, nullable
    - `severity` string
    - `root_cause` string, nullable
    - `created_at` string, nullable
  - `anomaly_window_days` integer
  - `disclaimer` string
  - `generated_at` string
  - `compute_ms` integer, nullable

## 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)
