---
title: "Activity heatmap — average active devices per UTC weekday-hour."
method: GET
path: "/apps/{appId}/metrics/activity-heatmap"
tags: ["metrics"]
---

# Activity heatmap — average active devices per UTC weekday-hour.

`GET /apps/{appId}/metrics/activity-heatmap`

## Request

- Base URL: `https://api.shorebird.dev/api/v1`
- URL: `https://api.shorebird.dev/api/v1/apps/{appId}/metrics/activity-heatmap`
- Auth: one of:
  - HTTP bearer
  - HTTP bearer

Returns the app's average distinct active-device count for each
(UTC day-of-week, UTC hour-of-day) cell over a server-side lookback
window — a 7×24 activity profile for an insights heatmap. Sourced from
the same `hourly_user_sketches` data as the active-hours advisor, just
sliced by weekday as well as hour.

## Response `200`

The 7×24 UTC activity heatmap.

- GetActivityHeatmapResponse: The response body for GET /apps/{appId}/metrics/activity-heatmap. A 7×24 grid of average active devices per UTC weekday-hour, powering the insights activity heatmap.
  - `cells` ActivityHeatmapCell[], required: 168 entries (7 weekdays × 24 hours), zero-filled, ordered by day_of_week_utc (1–7) then hour_utc (0–23) ascending.
    - `day_of_week_utc` integer, required: Day of week in UTC, 1–7 where 1 = Sunday and 7 = Saturday.
    - `hour_utc` integer, required: Hour of day in UTC, 0–23.
    - `average_active_devices` number, double, required: Mean distinct active devices seen during this UTC weekday-hour, averaged over the weekday's occurrences in the window with implicit zeros included.
  - `busiest_day_of_week_utc` integer, nullable, required: UTC day-of-week (1–7) of the cell with the highest average active devices, for peak-relative coloring and labeling. Null when there is no data.
  - `busiest_hour_utc` integer, nullable, required: UTC hour (0–23) of the busiest cell. Null when there is no data.
  - `lookback_days` integer, required: Number of days of history the heatmap is computed over.
  - `as_of` string, date-time, required: Server's UTC timestamp at the moment the response was constructed. Not a freshness indicator for the underlying data, which is refreshed by an hourly scheduled query and may lag by up to ~1 hour.

## Other responses

- `default`: Standard error response. Emitted for any non-2xx status where a body can be decoded into an [ErrorResponse].

## Changes

- **2026-11-05** `941da8871d10`: 1 info
  - added the optional property `documentation_url` to the response with the `default` status

[Operation history](https://skmtc.dev/shorebird/apis/shorebird-codepush-api/changes/apps/:appId/metrics/activity-heatmap/get.md)

---

[API](https://skmtc.dev/shorebird/apis/shorebird-codepush-api.md) - [All operations](https://skmtc.dev/shorebird/apis/shorebird-codepush-api/llms.txt) - [OpenAPI document](https://skmtc.dev/shorebird/apis/shorebird-codepush-api/revisions/941da8871d10?raw)
