REST API
Health & Monitoring
On this page
Service health
HTTP
GET /health
Liveness probe. Unauthenticated. Available on both the Read API and the Ingest API.
Response 200
JSON
{ "status": "ok" }
Examples
import httpx
print(httpx.get("https://api.opexia.dev/health").json())
print(httpx.get("https://ingest.opexia.dev/health").json())
console.log(await (await fetch("https://api.opexia.dev/health")).json());
console.log(await (await fetch("https://ingest.opexia.dev/health")).json());
Prometheus metrics
HTTP
GET /metrics
Prometheus exposition format. Unauthenticated. Available on both services.
Ingestion health
HTTP
GET /v1/observ/orgs/{org}/workspaces/{ws}/health/ingestion
Whether spans are actually arriving and being processed for this workspace, and whether anything is dead-lettering. This is the first endpoint to check when dashboard panels are empty.
Auth: API key or JWT · Role: admin
Response 200 — not schema-modelled
JSON
{
"status": "ok",
"last_span_at": "2026-09-01T14:23:05Z",
"spans_last_hour": 41203,
"dead_letter_count_last_hour": 0,
"engines": {
"content_reliability": { "status": "ok", "last_run_at": "2026-09-01T14:20:00Z" },
"sources": { "status": "stalled","last_run_at": "2026-09-01T09:02:00Z" }
}
}
Examples
h = evigauge.get("/v1/observ/orgs/{org}/workspaces/{ws}/health/ingestion")
if h["dead_letter_count_last_hour"] > 0:
print(f"⚠ {h['dead_letter_count_last_hour']} spans dead-lettered — check span validity")
for name, e in h["engines"].items():
if e["status"] != "ok":
print(f"⚠ engine {name} is {e['status']} (last run {e['last_run_at']})")
const h = await evigauge.get("/v1/observ/orgs/{org}/workspaces/{ws}/health/ingestion");
if (h.dead_letter_count_last_hour > 0)
console.log(`⚠ ${h.dead_letter_count_last_hour} spans dead-lettered — check span validity`);
Object.entries<any>(h.engines).forEach(([n, e]) => {
if (e.status !== "ok") console.log(`⚠ engine ${n} is ${e.status} (last run ${e.last_run_at})`);
});
Reading this endpoint when panels are empty:
| Symptom | Meaning |
|---|---|
spans_last_hour is 0 | Nothing is arriving — check the SDK endpoint, key, and network path |
dead_letter_count_last_hour > 0 | Spans arrive but fail validation — check required opexia.* attributes |
Spans arrive, an engine is stalled | Ingestion is fine; the engine is failing — most often a missing or expired LLM credential |