CloudrawAPI v0
Menu

API reference

Dashboard tiles

The numbers on the dashboard: which tiles exist and their current values.

Get tile values

GET/v0/tenants/{tenant_id}/kpi

read-only tokenrate limited

The current value of up to 20 tiles, each computed exactly like its detail page (for example devices_online = the Map's online devices). An id that is not in the catalog refuses the call (400); a tile your role may not use is left out and listed in dropped. A tile that cannot be computed carries error without failing the others. Values are cached for up to 5 minutes.

Token: read-only or full access · Created by: owner or security admin

Rate limit: 60 dashboard-tile calls per minute per person.

Path parameters

  • tenant_idstringrequired

    Your workspace id (Settings → Workspace in the console; it is also in every console URL).

    Example: tq7x2m9k4ab

Query parameters

  • idsstring

    Comma-separated tile ids.

    Example: devices_online,devices_compliant

  • rangestring

    Trend length: 7d (default) or 30d.

    Example: 7d

Responses

200 The values.

application/json

  • rangestringrequired

    One of: 7d, 30d.

  • itemsarray of objectrequired
    items fields
    • idstringrequired

      One of: live_sessions, blocked_today, open_investigations, devices_online, devices_trusted, apps, connectors_online, devices_compliant, devices_attention, connect_outdated, devices_not_seen_7d, active_users_month, mfa_coverage, access_requests_waiting, seats_used.

    • valuenumber | null
    • unitstring

      One of: count, percent, ratio.

    • statestring

      One of: ok, warn, bad, not_available, building, fewer_than_5.

    • reasonstring

      Why a tile is not_available or building, e.g. no_devices, not_checked_yet, overlay_unavailable.

    • countsobject

      Small counts that explain the value (e.g. total for a ratio, unknown for second-step coverage).

    • trendobject | null

      { step: "1d", points: [{ t: "YYYY-MM-DD", v }] }, oldest first; null for tiles without a trend.

    • errorobject

      Set instead of value when this one tile could not be computed; the other tiles are unaffected.

      error fields
      • codestring
      • messagestring
    • as_ofstring

      When the value was computed (values are cached for up to 5 minutes).

  • droppedarray of string

    Requested tiles that are not available to your role.

400 invalid-range unknown-tile

invalid-range: range is not 7d or 30d.

unknown-tile: An id is not a tile from the catalog, or more than 20 tiles were asked for.

401 unauthorized invalid-token token-expired

unauthorized: No Authorization: Bearer crw_… header was sent.

invalid-token: The token is unknown or was revoked.

token-expired: The token is past its expiry date. Create a new one.

403 insufficient-role tenant-assertion-mismatch

insufficient-role: The token's role ceiling does not allow this call.

tenant-assertion-mismatch: The token belongs to another workspace than {tenant_id}.

404 tenant-not-found

tenant-not-found: No workspace with this id.

429 rate-limited

rate-limited: Too many calls; wait Retry-After seconds.

curl
curl -sS -X GET "https://cdapi.cloudraw.com/v0/tenants/tq7x2m9k4ab/kpi" \
  -H "Authorization: Bearer $CLOUDRAW_TOKEN"
PowerShell
$headers = @{ Authorization = "Bearer $env:CLOUDRAW_TOKEN" }
Invoke-RestMethod -Method Get -Uri "https://cdapi.cloudraw.com/v0/tenants/tq7x2m9k4ab/kpi" -Headers $headers
Python
import os, uuid, requests

r = requests.get(
    "https://cdapi.cloudraw.com/v0/tenants/tq7x2m9k4ab/kpi",
    headers={"Authorization": f"Bearer {os.environ['CLOUDRAW_TOKEN']}"},
    timeout=30,
)
r.raise_for_status()
print(r.json())
Node.js
const res = await fetch("https://cdapi.cloudraw.com/v0/tenants/tq7x2m9k4ab/kpi", {
  method: "GET",
  headers: {
    Authorization: `Bearer ${process.env.CLOUDRAW_TOKEN}`,
  },
});
if (!res.ok) throw new Error((await res.json()).code);
console.log(await res.json());
Response 200 · application/json
{
  "range": "7d",
  "items": [
    {
      "id": "devices_online",
      "value": 21,
      "unit": "ratio",
      "state": "ok",
      "counts": {
        "total": 23
      },
      "trend": {
        "step": "1d",
        "points": [
          {
            "t": "2026-10-28",
            "v": 20
          }
        ]
      },
      "as_of": "2026-10-29T14:00:00.000Z"
    }
  ]
}

List the dashboard tiles

GET/v0/tenants/{tenant_id}/kpi/catalog

read-only tokenrate limited

The tiles you may add to the dashboard, with their unit and area, and the starting layouts. Billing tiles (seats, monthly active users) need the owner role; second-step coverage needs owner or security admin.

Token: read-only or full access · Created by: owner or security admin

Rate limit: 60 dashboard-tile calls per minute per person.

Path parameters

  • tenant_idstringrequired

    Your workspace id (Settings → Workspace in the console; it is also in every console URL).

    Example: tq7x2m9k4ab

Responses

200 The catalog.

application/json

  • itemsarray of objectrequired

    The tiles YOUR role may use.

    items fields
    • idstringrequired

      One of: live_sessions, blocked_today, open_investigations, devices_online, devices_trusted, apps, connectors_online, devices_compliant, devices_attention, connect_outdated, devices_not_seen_7d, active_users_month, mfa_coverage, access_requests_waiting, seats_used.

    • areastringrequired

      One of: access, security, devices, infrastructure, licences.

    • unitstringrequired

      ratio = value out of counts.total.

      One of: count, percent, ratio.

    • modulestring | null

      Paid module the tile needs, or null.

    • trendboolean

      Whether the tile keeps a daily trend.

    • simple_okboolean
    • mapboolean

      One of the Map page's numbers (the default layout).

  • presetsobject

    Starting layouts by name (map, owner, security, it), limited to what your role may use.

  • default_presetstring

    The layout everyone starts from: map.

  • statesarray of string

    One of: ok, warn, bad, not_available, building, fewer_than_5.

  • limitsobject
    limits fields
    • idsinteger

      Tiles per values call.

    • layoutinteger

      Tiles per layout.

    • rangesarray of string
    • cache_sinteger

      Values are cached this long.

    • k_mininteger

      A share over fewer people is not shown.

401 unauthorized invalid-token token-expired

unauthorized: No Authorization: Bearer crw_… header was sent.

invalid-token: The token is unknown or was revoked.

token-expired: The token is past its expiry date. Create a new one.

403 insufficient-role tenant-assertion-mismatch

insufficient-role: The token's role ceiling does not allow this call.

tenant-assertion-mismatch: The token belongs to another workspace than {tenant_id}.

404 tenant-not-found

tenant-not-found: No workspace with this id.

429 rate-limited

rate-limited: Too many calls; wait Retry-After seconds.

curl
curl -sS -X GET "https://cdapi.cloudraw.com/v0/tenants/tq7x2m9k4ab/kpi/catalog" \
  -H "Authorization: Bearer $CLOUDRAW_TOKEN"
PowerShell
$headers = @{ Authorization = "Bearer $env:CLOUDRAW_TOKEN" }
Invoke-RestMethod -Method Get -Uri "https://cdapi.cloudraw.com/v0/tenants/tq7x2m9k4ab/kpi/catalog" -Headers $headers
Python
import os, uuid, requests

r = requests.get(
    "https://cdapi.cloudraw.com/v0/tenants/tq7x2m9k4ab/kpi/catalog",
    headers={"Authorization": f"Bearer {os.environ['CLOUDRAW_TOKEN']}"},
    timeout=30,
)
r.raise_for_status()
print(r.json())
Node.js
const res = await fetch("https://cdapi.cloudraw.com/v0/tenants/tq7x2m9k4ab/kpi/catalog", {
  method: "GET",
  headers: {
    Authorization: `Bearer ${process.env.CLOUDRAW_TOKEN}`,
  },
});
if (!res.ok) throw new Error((await res.json()).code);
console.log(await res.json());
Response 200 · application/json
{
  "items": [
    {
      "id": "devices_online",
      "area": "devices",
      "unit": "ratio",
      "module": null,
      "trend": true,
      "simple_ok": true,
      "map": true
    }
  ],
  "presets": {
    "map": [
      {
        "id": "devices_online",
        "size": 1
      }
    ]
  },
  "default_preset": "map",
  "states": [
    "ok",
    "warn",
    "bad",
    "not_available",
    "building",
    "fewer_than_5"
  ],
  "limits": {
    "ids": 20,
    "layout": 24,
    "ranges": [
      "7d",
      "30d"
    ],
    "cache_s": 300,
    "k_min": 5
  }
}