REST API
Sources & Drift
On this page
List sources
HTTP
GET /v1/observ/orgs/{org}/workspaces/{ws}/sources
Every source domain the workspace's agents have consulted, with the learned per-domain authority prior. The prior is self-learning: it updates as sources prove reliable or unreliable across traces.
Auth: API key or JWT · Role: viewer
Response 200 — not schema-modelled
JSON
{
"sources": [
{
"domain": "docs.internal",
"kind": "internal_kb",
"authority_prior": 0.93,
"citation_count": 4120,
"last_seen": "2026-09-01T14:23:05Z"
}
]
}
Examples
src = evigauge.get("/v1/observ/orgs/{org}/workspaces/{ws}/sources")
for s in sorted(src["sources"], key=lambda s: -s["citation_count"])[:10]:
print(f"{s['domain']:35} authority={s['authority_prior']:.2f} n={s['citation_count']}")
const src = await evigauge.get("/v1/observ/orgs/{org}/workspaces/{ws}/sources");
src.sources
.sort((a: any, b: any) => b.citation_count - a.citation_count)
.slice(0, 10)
.forEach((s: any) =>
console.log(`${s.domain.padEnd(35)} authority=${s.authority_prior.toFixed(2)} n=${s.citation_count}`));
Current drift
HTTP
GET /v1/observ/orgs/{org}/workspaces/{ws}/drift/current
The workspace's current drift posture — how far today's behaviour has moved from the established baseline. Drift is what catches silent degradation: the agent still returns 200s, but its answers have quietly changed.
Auth: API key or JWT · Role: viewer
Response 200 — not schema-modelled
JSON
{
"as_of": "2026-09-01T00:00:00Z",
"drift_score": 0.18,
"status": "warn",
"baseline_window_days": 14,
"dimensions": [
{ "name": "grade_distribution", "delta": 0.21, "direction": "worse" },
{ "name": "cost_per_trace", "delta": 0.04, "direction": "worse" }
]
}
status is one of ok | warn | alert.
Examples
d = evigauge.get("/v1/observ/orgs/{org}/workspaces/{ws}/drift/current")
if d["status"] != "ok":
worst = max(d["dimensions"], key=lambda x: x["delta"])
print(f"⚠ drift {d['status']}: {worst['name']} moved {worst['delta']:.0%} {worst['direction']}")
const d = await evigauge.get("/v1/observ/orgs/{org}/workspaces/{ws}/drift/current");
if (d.status !== "ok") {
const worst = d.dimensions.reduce((a: any, b: any) => (b.delta > a.delta ? b : a));
console.log(`⚠ drift ${d.status}: ${worst.name} moved ${(worst.delta * 100).toFixed(0)}% ${worst.direction}`);
}
Drift history
HTTP
GET /v1/observ/orgs/{org}/workspaces/{ws}/drift/history
Drift score over time, for charting.
Auth: API key or JWT · Role: viewer
Query parameters
| Name | Type | Required | Default | Description |
|---|---|---|---|---|
days | integer | ➖ | 30 | How many days of history to return |
Examples
h = evigauge.get("/v1/observ/orgs/{org}/workspaces/{ws}/drift/history",
params={"days": 60})
print(h)
const h = await evigauge.get(
"/v1/observ/orgs/{org}/workspaces/{ws}/drift/history", { days: 60 });
console.log(h);