dashboards

Org automation analytics (edit-method attribution, channel flows, key/agent activity, export delivery health).

How content gets edited (DVT-1501): the human/agent method split over time, channel -> action -> folder edit flows, per-API-key activity, an agent roll-call, and export-schedule delivery health. Admin or owner only (audit:read). The data object shape is frozen — field names are a client contract.

Edit-method attribution (methodWeekly/methodWindow/ methodPrevWindow) uses the exact same audit_logs CASE semantics as GET .../analytics/people's methodMix (see that schema) — human = actor_type='user'; agent = any non-user actor_type (DVT-1522). This collapsed a prior three-way ui/mcp/api split that classified by audit metadata (oauth_client_id vs api_key_name); that split systematically mislabeled the dvt MCP server's actual traffic (which authenticates via a customer dvt_live_ API key, stamping api_key_name) as "API" rather than "MCP", since the oauth_client_id signal is only ever stamped by an unused OAuth-JWT code path. Channel display attribution (flows[].channel, keys[].name) still surfaces the underlying auth-path detail (UI / api-key-name / oauth-client-id) — only the classification axis collapsed to two classes.

Two attribution gaps, both intentional: flows[].channel and keys[].name-keyed attribution are NAME-grain (api_key_name is a string, not a stable id, so two same-org keys sharing a name are indistinguishable here — exact key-grain stamping is DVT-1435); and keys[].queries is always 0 because query_executions carries no api-key metadata at all, so no query can be attributed to a specific key even at name-grain. rollCall[].queries is NOT affected by either gap — it is grouped by the true underlying actor id, which query_executions.actor_id does carry.

methodWeekly is a FIXED trailing 12 ISO (Monday-start) weeks, independent of days. kpis.schedules and the keys/schedules arrays are org-wide / point-in-time (unwindowed). keys[].events30d is a FIXED trailing 30-calendar-day daily series, independent of days. kpis.deliverySuccessPct is a FIXED trailing 14-calendar-day org-wide figure, independent of days. Everything else honors days. connectionId/dashboardId/actorType are accepted for parity with the sibling analytics endpoints' query-string shape but always ignored here — connections/dashboards/actor-type have no bearing on "how content gets edited."

get/v1/orgs/{orgId}/analytics/automation

Request

  • Base URL: http://localhost:8080
  • URL: http://localhost:8080/v1/orgs/{orgId}/analytics/automation
  • Auth: one of:
    • API key in cookie dvt_session
    • HTTP bearer

Query parameters

daysinteger

Rolling window in calendar days. Default 30; clamped to [1, 365]. Out-of-range or non-integer values are silently clamped/defaulted.

connectionIdstring uuid

Accepted for parity with the sibling analytics endpoints; always ignored on this endpoint. A malformed UUID is silently ignored, never a 400.

dashboardIdstring uuid

Accepted for parity with the sibling analytics endpoints; always ignored on this endpoint. A malformed UUID is silently ignored, never a 400.

actorType'user' | 'api_key' | 'agent'

Accepted for parity with the sibling analytics endpoints; always ignored on this endpoint. Any value other than user, api_key, or agent is silently ignored, never a 400.

Response

Org automation-analytics result.

Example response

{
  "data": {
    "kpis": {
      "editsWindow": 412,
      "agentSharePct": 37,
      "activeKeys": 6,
      "agentActors": 9,
      "schedules": 14,
      "deliverySuccessPct": 92
    }
  }
}

Changes

No recorded changes to this operation across all 1 revision of this API.