Read app event counts
const url = 'https://qinto-api.blotout.io/teams/7b8d1a52-6c1e-4b6f-9a30-2f8a54d1c3e9/domains/3f2a9c81-5d47-4e0b-8c66-91b2a7f04d15/app-events?start=2026-08-22T00%3A00%3A00.000Z&end=2026-08-29T00%3A00%3A00.000Z&timeZone=Europe%2FLjubljana&appSlug=facebook-capi&appInstallId=8d7c6b5a-4938-4271-a605-9e8f7a6b5c4d&granularity=minute&grouping=status&status=success';const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
try { const response = await fetch(url, options); const data = await response.json(); console.log(data);} catch (error) { console.error(error);}curl --request GET \ --url 'https://qinto-api.blotout.io/teams/7b8d1a52-6c1e-4b6f-9a30-2f8a54d1c3e9/domains/3f2a9c81-5d47-4e0b-8c66-91b2a7f04d15/app-events?start=2026-08-22T00%3A00%3A00.000Z&end=2026-08-29T00%3A00%3A00.000Z&timeZone=Europe%2FLjubljana&appSlug=facebook-capi&appInstallId=8d7c6b5a-4938-4271-a605-9e8f7a6b5c4d&granularity=minute&grouping=status&status=success' \ --header 'Authorization: Bearer <token>'Counts the events the site’s apps received over a time range, bucketed and grouped, so a delivery problem shows up as a shape rather than a guess.
How it works
Buckets are cut in the timeZone you pass, so a day boundary is the reader’s own, and every series carries a point for every bucket in the range — 0 where it recorded nothing. state says how the read ended: only ok carries points, no_dataset means the site has recorded nothing yet, and too_broad asks for a narrower range or a coarser bucket.
Required permissions
domain:analytics_dashboard:readon all domains, or on the addressed domain when its id is in the route
Authorizations
Section titled “Authorizations”Parameters
Section titled “Parameters”Path Parameters
Section titled “Path Parameters”Unique id (UUID) of the team that owns the addressed resources, as shown in the team settings on the Blotout platform.
Example
7b8d1a52-6c1e-4b6f-9a30-2f8a54d1c3e9Unique id (UUID) of the team that owns the addressed resources, as shown in the team settings on the Blotout platform.
Unique id (UUID) of the site, as returned by the site operations.
Example
3f2a9c81-5d47-4e0b-8c66-91b2a7f04d15Unique id (UUID) of the site, as returned by the site operations.
Query Parameters
Section titled “Query Parameters”Start of the half-open range, as an ISO 8601 instant.
Example
2026-08-22T00:00:00.000ZStart of the half-open range, as an ISO 8601 instant.
End of the half-open range, exclusive, as an ISO 8601 instant.
Example
2026-08-29T00:00:00.000ZEnd of the half-open range, exclusive, as an ISO 8601 instant.
IANA timezone the buckets are cut in, so a day boundary is the reader’s own.
Example
Europe/LjubljanaIANA timezone the buckets are cut in, so a day boundary is the reader’s own.
Report on one app only.
Example
facebook-capiReport on one app only.
Report on one installation only.
Example
8d7c6b5a-4938-4271-a605-9e8f7a6b5c4dReport on one installation only.
Bucket size. A wide range refuses the finer sizes rather than returning an unreadable series.
Example
hourBucket size. A wide range refuses the finer sizes rather than returning an unreadable series.
What each series counts: delivery status, the event name, or the install that received it.
Example
statusWhat each series counts: delivery status, the event name, or the install that received it.
Report on one delivery status only.
Example
successReport on one delivery status only.
Responses
Section titled “Responses”The counts, or why there are none.
object
How the read ended. no_dataset means the site has recorded nothing yet, too_broad that the selection must be narrowed, and unavailable / rate_limited that the provider refused; only ok carries data.
One point per bucket and series; empty unless state is ok.
object
Start of the bucket, as an ISO 8601 UTC timestamp.
Which series the count belongs to.
How many were recorded in this bucket.
The series present in the range, in the order they should be shown.
object
The series’ stable key.
What to show a reader for this series.
Example
{ "state": "ok", "points": [ { "at": "2026-08-28T10:00:00.000Z", "series": "success", "count": 42 } ], "series": [ { "key": "success", "label": "success" } ]}invalid_params — A path parameter failed validation (for example a malformed UUID); details pinpoints the offending parameter.
object
Machine-readable error slug; switch on this value rather than on the HTTP status alone.
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
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.
object
Machine-readable error slug; switch on this value rather than on the HTTP status alone.
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.
object
Machine-readable error slug; switch on this value rather than on the HTTP status alone.
Human-readable reason for this specific failure, intended for display — do not parse it programmatically.
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.
object
Machine-readable error slug; switch on this value rather than on the HTTP status alone.
Example
{ "error": "internal"}