Appearance
Devices and analytics API
All routes require a dashboard session with at least the viewer role in the organization. API tokens are not accepted. Requests for an app outside the organization return 404.
Devices
| Method and path | Success | Response |
|---|---|---|
GET /api/v1/orgs/:orgId/devices | 200 JSON | Organization totals and per-app device summaries |
GET /api/v1/orgs/:orgId/devices/apps/:appId | 200 JSON | { "items": [...] } of up to 100 recent devices |
The overview reports total devices, active installs in the last 7 and 30 days, new devices in 30 days, country breakdown, daily new-device counts, and per-app platform/version/country breakdowns. The app list shows only a 12-character prefix of each device hash; it does not expose the device ID. Device data comes from clients that send X-Device-Id to an update feed. Without that header, feed requests do not contribute device check-ins.
Download and adoption statistics
Method and path suffix under /api/v1/orgs/:orgId | Success | Response |
|---|---|---|
GET /stats/overview | 200 JSON | Organization app totals and totalDownloads30d |
GET /apps/:appId/stats/overview | 200 JSON | App downloads, active installs, latest version and adoption |
GET /apps/:appId/stats/downloads | 200 JSON | { "points": [{ "bucket": "…", "count": 0 }] } |
GET /apps/:appId/stats/versions | 200 JSON | Version download breakdown |
GET /apps/:appId/stats/platforms | 200 JSON | Platform download breakdown |
GET /apps/:appId/stats/channels | 200 JSON | Channel download breakdown |
GET /apps/:appId/stats/countries | 200 JSON | Country download breakdown |
GET /apps/:appId/stats/adoption | 200 JSON | Active installs by version |
GET /apps/:appId/stats/releases/:releaseId/adoption | 200 JSON | { "activeInstalls": 0 } |
GET /apps/:appId/stats/downloads.csv | 200 CSV | Download points as an attachment |
The downloads, CSV, and breakdown routes accept range=7d|30d|90d|all (default 30d). Downloads and CSV also accept granularity=day|week|month (default day). Breakdown items contain key, label, count, and percent. Invalid query values return a route-validation 400 response.
sh
curl --cookie "$RD_SESSION_COOKIE" \
"$RD_URL/api/v1/orgs/$ORG_ID/apps/$APP_ID/stats/downloads?range=30d&granularity=week"The app overview and release adoption routes do not accept those range parameters. CSV returns text/csv; charset=utf-8 and a filename based on the app slug.