---
title: "Owner User Activity"
method: GET
path: "/owner/user-activity"
---

# Owner User Activity

`GET /owner/user-activity`

## Request

- Base URL: `https://mcp.physea.ai` (the document declares no server; this is the origin it was published from)
- URL: `https://mcp.physea.ai/owner/user-activity`
- Auth: none declared

OWNER plane (be-user-activity-20260624 — the per-CALLER Users view):
differentiate users + LIVE users by the questions/flows they're asking.

Folds app/data/run_traces.jsonl (the per-call ledger, keyed by `caller`) into
one row per caller:
  {caller, questions:[recent texts], flows:[tool names], flow_count,
   call_count, first_seen, last_seen, live, by_caller_savings}
Live users sort first, then by last_seen desc; questions capped at last 10.
`live` = last_seen within ROUTER_LIVE_WINDOW_MIN (default 15) minutes.

DISTINCT from GET /owner/users (anonymous "user 1/2", no labels/text, per
Jay). THIS view is developer/admin-facing and DOES carry the caller key +
question text — gated like every /owner/* path (metering.AUTH_PATHS prefix).
Question text is present on only a SUBSET of rows (see questions_coverage);
counts/last-seen are exact for all. LAZY + EMPTY-SAFE: a missing/corrupt
ledger returns an empty list, never a 500.

## Query parameters

- `include_owner` boolean

## Response `200`

Successful Response

- unknown

## Other responses

- `422`: Validation Error

---

[API](https://skmtc.dev/physea/apis/liminality-router-service.md) · [All operations](https://skmtc.dev/physea/apis/liminality-router-service/llms.txt) · [OpenAPI document](https://skmtc.dev/physea/apis/liminality-router-service/revisions/5f60ddd97544?raw)
