Skip to content

Read app event counts

GET
/teams/{teamId}/domains/{domainId}/app-events
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: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.

start
required

Start of the half-open range, as an ISO 8601 instant.

string format: date-time

Example

2026-08-22T00:00:00.000Z

Start of the half-open range, as an ISO 8601 instant.

end
required

End of the half-open range, exclusive, as an ISO 8601 instant.

string format: date-time

Example

2026-08-29T00:00:00.000Z

End of the half-open range, exclusive, as an ISO 8601 instant.

timeZone
required

IANA timezone the buckets are cut in, so a day boundary is the reader’s own.

string

Example

Europe/Ljubljana

IANA timezone the buckets are cut in, so a day boundary is the reader’s own.

appSlug

Report on one app only.

string

Example

facebook-capi

Report on one app only.

appInstallId

Report on one installation only.

string format: uuid

Example

8d7c6b5a-4938-4271-a605-9e8f7a6b5c4d

Report on one installation only.

granularity
required

Bucket size. A wide range refuses the finer sizes rather than returning an unreadable series.

string
Allowed values: minute hour day

Example

hour

Bucket size. A wide range refuses the finer sizes rather than returning an unreadable series.

grouping
required

What each series counts: delivery status, the event name, or the install that received it.

string
Allowed values: status event install

Example

status

What each series counts: delivery status, the event name, or the install that received it.

status

Report on one delivery status only.

string

Example

success

Report on one delivery status only.

The counts, or why there are none.

Media typeapplication/json
object
state
required

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.

string
Allowed values: ok no_dataset too_broad forbidden unavailable rate_limited
points
required

One point per bucket and series; empty unless state is ok.

Array<object>
object
at
required

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

string format: date-time
series
required

Which series the count belongs to.

string
count
required

How many were recorded in this bucket.

integer
series
required

The series present in the range, in the order they should be shown.

Array<object>
object
key
required

The series’ stable key.

string
label
required

What to show a reader for this series.

string

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.

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"
}