Skip to content

Read ID graph metrics

GET
/teams/{teamId}/domains/{domainId}/id-graph/metrics
curl --request GET \
--url 'https://qinto-api.blotout.io/teams/7b8d1a52-6c1e-4b6f-9a30-2f8a54d1c3e9/domains/3f2a9c81-5d47-4e0b-8c66-91b2a7f04d15/id-graph/metrics?window=1h' \
--header 'Authorization: Bearer <token>'

Reports the Durable Object usage of the site’s identity graph — the per-device Anon DO and the per-person Global DO — over a recent window, hour by hour, with the window before it for comparison.

How it works

state: unavailable is not a failure of the call: retry later, and if it persists, check that the host’s Cloudflare token can read analytics.

Required permissions

  • domain:id_graph_explorer:read on all domains, or on the addressed domain when its id is in the route
teamId
required

Unique id (UUID) of the team that owns the addressed resources, as shown in the team settings on the Blotout platform.

string format: uuid

Example

7b8d1a52-6c1e-4b6f-9a30-2f8a54d1c3e9

Unique id (UUID) of the team that owns the addressed resources, as shown in the team settings on the Blotout platform.

domainId
required

Unique id (UUID) of the site, as returned by the site operations.

string format: uuid

Example

3f2a9c81-5d47-4e0b-8c66-91b2a7f04d15

Unique id (UUID) of the site, as returned by the site operations.

window

How far back to report, ending now. The previous window of the same length is reported alongside for comparison.

string
default: 24h
Allowed values: 1h 6h 24h 7d

Example

24h

How far back to report, ending now. The previous window of the same length is reported alongside for comparison.

The usage, or why there is none.

Media typeapplication/json
object
state
required

unavailable when the metrics cannot be read right now — the host’s token cannot read analytics, the read quota is spent, or Cloudflare refused — and namespaces is empty then.

string
Allowed values: ok unavailable
window
required

The window reported.

string
Allowed values: 1h 6h 24h 7d
namespaces
required

One entry per class the site has recorded; empty unless state is ok.

Array<object>

Durable Object usage of one identity-graph class on the site.

object
identifier
required

Which identity-graph class: anon, one per device, or global, one per person.

string
label
required

What to show a reader for this class.

string
buckets
required

One bucket per hour with activity in the window, oldest first; idle hours are left out.

Array<object>

One hour of activity.

object
at
required

Start of the hour, as an ISO 8601 UTC timestamp.

string
requests
required

Requests the objects served.

number
errors
required

Requests that failed.

number
wallTimeUs
required

Wall-clock time the requests took, summed, in microseconds.

number
rowsRead
required

Storage rows the objects read.

number
rowsWritten
required

Storage rows the objects wrote.

number
cpuTimeUs
required

CPU time the requests used, summed, in microseconds.

number
durationGbs
required

Billed duration, in GB-seconds.

number
inboundWebsocketMessages
required

WebSocket messages the objects received.

number
subrequests
required

Outbound requests the objects made.

number
totals
required

The whole window, summed.

object
requests
required

Requests the objects served.

number
errors
required

Requests that failed.

number
wallTimeUs
required

Wall-clock time the requests took, summed, in microseconds.

number
rowsRead
required

Storage rows the objects read.

number
rowsWritten
required

Storage rows the objects wrote.

number
cpuTimeUs
required

CPU time the requests used, summed, in microseconds.

number
durationGbs
required

Billed duration, in GB-seconds.

number
inboundWebsocketMessages
required

WebSocket messages the objects received.

number
subrequests
required

Outbound requests the objects made.

number
previous
required

The window of the same length before it, summed, for comparison.

object
requests
required

Requests the objects served.

number
errors
required

Requests that failed.

number
wallTimeUs
required

Wall-clock time the requests took, summed, in microseconds.

number
rowsRead
required

Storage rows the objects read.

number
rowsWritten
required

Storage rows the objects wrote.

number
cpuTimeUs
required

CPU time the requests used, summed, in microseconds.

number
durationGbs
required

Billed duration, in GB-seconds.

number
inboundWebsocketMessages
required

WebSocket messages the objects received.

number
subrequests
required

Outbound requests the objects made.

number

Example

{
"state": "ok",
"window": "1h",
"namespaces": [
{
"identifier": "anon",
"label": "Anon DO",
"buckets": [
{
"at": "2026-10-22T09:00:00Z",
"requests": 1840,
"errors": 2,
"wallTimeUs": 920000,
"rowsRead": 5400,
"rowsWritten": 1200,
"cpuTimeUs": 310000,
"durationGbs": 0.42,
"inboundWebsocketMessages": 960,
"subrequests": 75
}
],
"totals": {
"requests": 1840,
"errors": 2,
"wallTimeUs": 920000,
"rowsRead": 5400,
"rowsWritten": 1200,
"cpuTimeUs": 310000,
"durationGbs": 0.42,
"inboundWebsocketMessages": 960,
"subrequests": 75
},
"previous": {
"requests": 1840,
"errors": 2,
"wallTimeUs": 920000,
"rowsRead": 5400,
"rowsWritten": 1200,
"cpuTimeUs": 310000,
"durationGbs": 0.42,
"inboundWebsocketMessages": 960,
"subrequests": 75
}
}
]
}

invalid_params — A path parameter failed validation (for example a malformed UUID); details pinpoints the offending parameter.

Media typeapplication/json
object
error
required

Machine-readable error slug; switch on this value rather than on the HTTP status alone.

string
Allowed values: invalid_params
details

Field-level validation errors: a tree keyed by input property, each node carrying an errors array of human-readable messages. Render it to help the caller correct the request.

object
key
additional properties

Example

{
"error": "invalid_params",
"details": {
"errors": [],
"properties": {
"teamId": {
"errors": [
"Invalid UUID"
]
}
}
}
}

unauthenticated — The Authorization: Bearer token is missing, malformed, or no longer valid. Generate a team API token or obtain a new OAuth access token.

Media typeapplication/json
object
error
required

Machine-readable error slug; switch on this value rather than on the HTTP status alone.

string
Allowed values: unauthenticated

Example

{
"error": "unauthenticated"
}

forbidden — The bearer credential lacks the required permission or belongs to another team, or its user lacks the organization role a developer operation needs. Update its policies, use a credential bound to the addressed team, or ask an organization owner for the role; message states the reason when one is known.

Media typeapplication/json
object
error
required

Machine-readable error slug; switch on this value rather than on the HTTP status alone.

string
Allowed values: forbidden
message

Human-readable reason for this specific failure, intended for display — do not parse it programmatically.

string

Example

{
"error": "forbidden",
"message": "The Cloudflare API token is invalid or expired."
}

internal — Unexpected server error. Nothing is guaranteed to have been persisted; idempotent operations are safe to retry.

Media typeapplication/json
object
error
required

Machine-readable error slug; switch on this value rather than on the HTTP status alone.

string
Allowed values: internal

Example

{
"error": "internal"
}