---
title: "Org edits drill-down (Automation page cadence/Sankey/keys click-through)."
method: GET
path: "/v1/orgs/{orgId}/analytics/edits"
tags: ["dashboards"]
---

# Org edits drill-down (Automation page cadence/Sankey/keys click-through).

`GET /v1/orgs/{orgId}/analytics/edits`

## Request

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

The individual `audit_logs` events behind an Edit-cadence chart bar,
an Edit-flows Sankey ribbon, or an API-keys table row on the
Automation page (DVT-1525). Admin or owner only (audit:read). The
`data` object shape is frozen — field names are a client contract.

Always sources the single unified authoring event set (DVT-1542
retired the "Dashboard publishes" concept and the `scope` param that
used to select between it and this one) — all resource types,
`action IN (create, update)` — the SAME event set as
`GET /v1/orgs/{orgId}/analytics/automation`'s `methodWeekly` and
`flows` rows. A single clicked chart bar/ribbon/row always totals
exactly what this endpoint returns for that same filter (per-ribbon
reconciliation always holds — a drill-down query is never truncated).
Summed across every ribbon, this endpoint's total also reconciles
against the SUM of `flows[].count` — but only while the org's `flows`
query stays at or under its 40-group cap; `flows` groups by
(channel, action, folder), and a high-cardinality org can silently
truncate below 40 groups, understating that aggregate sum without
either endpoint reporting an error. Rows for non-dashboard resources
(`element`, `page`, ...) resolve their parent dashboard the same way
the Roll-call panel's edit query does; when a parent can't be
resolved (a non-content resource type or a genuine orphan),
`dashboardTitle` is `""`, `dashboardId` falls back to the raw stored
resource id, and `folder` is `"No folder"` — never fabricated.

`week` takes precedence over `days` when both are present.

## Query parameters

- `week` string
- `days` integer
- `actorClass` 'human' | 'agent'
- `channel` string
- `action` 'create' | 'update'
- `folder` string
- `limit` integer

## Response `200`

Org edits-drill result.

- object
  - `data` OrgAnalyticsEdits, required: The Automation page's row-level edits drill (DVT-1525): the individual `audit_logs` events behind an Edit-cadence bar, an Edit-flows Sankey ribbon, or an API-keys table row — always sourced from the single unified authoring event set (DVT-1542; see this endpoint's description). All field names are a frozen client contract.
    - `total` integer, required: The full matching-row count before `limit` truncation — compare against `edits.length` to detect truncation.
    - `edits` object[], required: Up to `limit` matching edits, newest first.
      - `at` string, date-time, required: The audit event's created_at.
      - `actorClass` 'human' | 'agent', required: DVT-1522 classification — actor_type='user' -> human, else agent.
      - `channelLabel` string, required: 'UI' for a human edit, else the API key name / OAuth client id when stamped, else the raw actor_type.
      - `action` 'create' | 'update', required
      - `dashboardId` string, required: The resolved parent dashboard's UUID, or (when the parent can't be resolved) the raw stored resource id — populated even when the dashboard no longer resolves.
      - `dashboardTitle` string, required: Dashboard title, or empty string when unresolvable (soft-deleted / cross-org / a non-content resource / a genuine orphan) — never fabricated.
      - `folder` string, required: The resolved dashboard's folder name, the literal 'Unfiled' when it has none, or the literal 'No folder' when the parent dashboard can't be resolved at all.
      - `changeSummary` string, required: The audit event's captured change summary, truncated to 300 characters; empty string when not captured.
      - `resourceType` string, required: The raw `audit_logs.resource_type` ('dashboard', 'element', 'page', 'sheet', ...) — always populated. Used to render e.g. "element update · <dashboard title>" for non-dashboard resources.
  - `meta` Meta, required: Response metadata.
    - `requestId` string, required: Correlates with the X-Request-Id header.
    - `total` integer: Item count, present on collection responses.
    - `nextCursor` string, nullable: Opaque keyset-pagination cursor, present on paginated responses (e.g. GET /v1/dashboards) when more rows exist beyond this page. Pass it back as the `cursor` query param to fetch the next page; absent or null on the last page.
    - `roleResolveDegraded` boolean: Snowflake mode only (DVT-2260), on GET /v1/dashboards: present and true when the caller's live Snowflake role resolution failed or was unavailable — role-shared dashboards may be missing from this page. Omitted (not merely false) whenever resolution succeeded or the role-share arm does not apply (off snowflake mode, an org admin/owner, or off the ingress listener).

## Other responses

- `400`: Malformed request.
- `401`: Missing, invalid, or expired session.
- `403`: The caller's role does not permit this action.
- `404`: Resource does not exist.

---

[API](https://skmtc.dev/dvt/apis/dvt-rest-api.md) · [All operations](https://skmtc.dev/dvt/apis/dvt-rest-api/llms.txt) · [OpenAPI document](https://skmtc.dev/dvt/apis/dvt-rest-api/revisions/00016f504165?raw)
