Skip to content

List team activity

GET
/teams/{teamId}/activity
curl --request GET \
--url 'https://qinto-api.blotout.io/teams/7b8d1a52-6c1e-4b6f-9a30-2f8a54d1c3e9/activity?domainId=3f2a9c81-5d47-4e0b-8c66-91b2a7f04d15&category=domain_app&limit=50&cursorAt=2026-08-28T23%3A59%3A59.000Z&cursorId=9e8d7c6b-5a49-4382-b716-0f9e8d7c6b5a' \
--header 'Authorization: Bearer <token>'

Lists the team’s audit trail newest first: every change a person or a credential made, with who made it and what it named at the time.

How it works

Filter to one site with domainId, or to one resource kind with category. Page with cursorAt and cursorId from the previous response’s nextCursor; a null cursor means the last page. Names in metadata are snapshots, so an entry still reads correctly after the resource is renamed or deleted.

Required permissions

  • team:view_activity_log:read on the team
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

List one site’s entries only. Team-level changes carry no site and are then left out.

string format: uuid

Example

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

List one site’s entries only. Team-level changes carry no site and are then left out.

category

List one resource kind only — the segment of action before the first dot.

string

Example

domain_app

List one resource kind only — the segment of action before the first dot.

limit

How many entries to return, 1–200.

integer
>= 1 <= 200

Example

50

How many entries to return, 1–200.

cursorAt

Continue after this entry’s instant, from a previous response’s cursor.

string format: date-time

Example

2026-08-28T23:59:59.000Z

Continue after this entry’s instant, from a previous response’s cursor.

cursorId

Continue after this entry’s id, from a previous response’s cursor. Send it with cursorAt.

string

Example

9e8d7c6b-5a49-4382-b716-0f9e8d7c6b5a

Continue after this entry’s id, from a previous response’s cursor. Send it with cursorAt.

The page of entries.

Media typeapplication/json
object
records
required

The page of entries, newest first.

Array<object>

One recorded change in a team’s audit trail.

object
activityLogId
required

Id of this entry.

string
domainId
required

The site the change belongs to; null for a team-level one.

string | null
actorUserId
required

Who made the change; null for an automated one.

string | null
actorEmail
required

That person’s email as it was at the time.

string | null
actorApiTokenName
required

The credential the change came through, when it was not a browser session.

string | null
action
required

What happened, as <resource>.<change>.

string
metadata
required

Names and labels snapshotted at the time, so the entry still reads after a rename.

object
key
additional properties
createdAt
required

When it happened, as an ISO 8601 UTC timestamp.

string format: date-time
nextCursor
required

Where the next page starts, or null on the last one.

object
at
required

Pass as cursorAt.

string
id
required

Pass as cursorId.

string

Example

{
"records": [
{
"activityLogId": "9e8d7c6b-5a49-4382-b716-0f9e8d7c6b5a",
"domainId": "3f2a9c81-5d47-4e0b-8c66-91b2a7f04d15",
"actorUserId": "2b7f1a5c-8d34-4e9a-b012-3c4d5e6f7a8b",
"actorEmail": "ada@example.com",
"actorApiTokenName": "CI token",
"action": "domain_app.tool_disabled",
"metadata": {
"appSlug": "facebook-capi",
"toolName": "emqReport"
},
"createdAt": "2026-08-28T10:04:31.000Z"
}
],
"nextCursor": {
"at": "2026-08-28T23:59:59.000Z",
"id": "9e8d7c6b-5a49-4382-b716-0f9e8d7c6b5a"
}
}

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