---
title: "Health"
method: GET
path: "/api/v1/health"
---

# Health

`GET /api/v1/health`

## Request

- Base URL: `https://trovastorage.it` (the document declares no server; this is the origin it was published from)
- URL: `https://trovastorage.it/api/v1/health`
- Auth: none declared

Liveness, and whether the billing ticker is still turning (M5.4).

503 when the ticker has not completed a pass in `3 × TICK_INTERVAL_SEC`.
Three intervals, not one: it leaves room for a slow tick plus its sleep, so
the alarm means "stopped" rather than "busy".

⚠️ **Measured against wall time, never against `ticker_heartbeat`.** That
field is written from the platform clock, which the test suite moves by
months (and which a demo panel could move, until M0). A liveness check
answers "is the loop running", and that is a question about real time.
`ticker_heartbeat_wall` exists for this and nothing else.

When no ticker runs in this process the field is unset and the check is
skipped, reported as such rather than passed over in silence: a monitor
aimed at a process that was never going to tick should be able to see that
from the answer. Under pytest that is every process — the suite drives
`run_tick` directly with a demo clock.

Same body in both cases, and deliberately so: a monitor that has to parse
two shapes to tell healthy from stale will eventually parse the wrong one.

## Response `200`

Successful Response

- unknown

---

[API](https://skmtc.dev/trovastorage/apis/stock-your-inventory.md) · [All operations](https://skmtc.dev/trovastorage/apis/stock-your-inventory/llms.txt) · [OpenAPI document](https://skmtc.dev/trovastorage/apis/stock-your-inventory/revisions/c75f591a585c?raw)
