---
title: "Service health check"
method: GET
path: "/health"
tags: ["Utility"]
---

# Service health check

`GET /health`

## Request

- Base URL: `https://riskmodels.app/api`
- URL: `https://riskmodels.app/api/health`
- Auth: none required

Returns current service status, version, capability availability (from recent billing_events), latest-session gross-return coverage (completeness signal), and optional macro_factors freshness for macro factor APIs (see macro_factors in the response). Free, no auth required.

## Response `200`

Service is up.

- object
  - `status` 'healthy' | 'degraded' | 'down'
  - `timestamp` string, date-time
  - `version` string
  - `services` object
  - `capabilities` object
  - `teo_coverage` object: Coverage of returns_gross at the newest teo in security_history vs stock universe; sparse values suggest the latest session is still backfilling (10% threshold).
    - `latest_teo` string, date, nullable
    - `universe_stock_count` integer
    - `non_null_returns_symbol_count` integer
    - `latest_teo_coverage_pct` number, nullable: Percent 0–100 of universe with non-null gross return at latest_teo.
    - `latest_session_returns_pending` boolean
    - `query_error` string
  - `macro_factors` object, nullable: Daily macro factor return series freshness in Supabase macro_factors (POST /correlation, GET /metrics/{ticker}/correlation, GET /macro-factors). Omitted or partial if the table is empty or the query fails.
    - `status` 'healthy' | 'stale' | 'unavailable'
    - `latest_teos` object: Most recent teo observed per factor_key (e.g. bitcoin, vix).
    - `row_count_last_7d` integer
    - `newest_teo` string, date, nullable
    - `oldest_teo` string, date, nullable
    - `stale` boolean: True when newest_teo is older than roughly three trading days.

---

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