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."
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
Rolling window in calendar days. Default 30; clamped to [1, 365]. Out-of-range or non-integer values are silently clamped/defaulted.
Accepted for parity with the sibling analytics endpoints; always ignored on this endpoint. A malformed UUID is silently ignored, never a 400.
Accepted for parity with the sibling analytics endpoints; always ignored on this endpoint. A malformed UUID is silently ignored, never a 400.
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.