---
title: "Record a dashboard view (telemetry beacon)."
method: POST
path: "/v1/dashboards/{id}/views"
tags: ["comments"]
---

# Record a dashboard view (telemetry beacon).

`POST /v1/dashboards/{id}/views`

## Request

- Base URL: `http://localhost:8080`
- URL: `http://localhost:8080/v1/dashboards/{id}/views`
- Auth: one of:
  - API key in cookie `dvt_session`
  - HTTP bearer

Fire-and-forget telemetry beacon (DVT-1215): records that this dashboard was
actually viewed, including a cache-served render that leaves no `query_executions`
row (the warehouse-pushdown path only records a row when the engine is actually
hit). Requires dashboard read-level access — the same access any viewer already
has. Meant to be called via `navigator.sendBeacon`; the body is optional and a
malformed `pageId` is silently dropped rather than rejected — this endpoint always
responds 204 once the caller is authorized, and the write itself happens
asynchronously off the request path (an error writing the row is logged and
dropped, never surfaced to the caller). A second view from the same actor for the
same dashboard + page within 60 seconds is deduped server-side (not double-counted).

## Request body

- RecordDashboardViewRequest
  - `pageId` string: Durable page UUID or the spec page slug; slugs are resolved server-side against the dashboard; unrecognized values are silently dropped.

## Response `204`

View recorded (or authorized and accepted — the write itself is async).

## Other responses

- `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)
