All endpoints

DocsAPIEvents

GET/sites/{siteId}/tag-events

Read tag events

What actually fired on this site, newest first: page views, the events that occurred on them, the tags that ran and the requests those tags sent.

Auth header

Authorization: Bearer tsk_live_…

The key needsmonitoring:read

Parameters

  • siteIdstringin pathrequired

    The site id, from GET /v1/sites.

  • fromstringin queryoptional

    ISO-8601. Inclusive lower bound on receivedAt.

  • tostringin queryoptional

    ISO-8601. Inclusive upper bound on receivedAt.

  • limitstringin queryoptional

    Row cap. Capped by the service's own ceiling.

  • batchIdstringin queryoptional

    One page view's rows.

Example request

curl "https://app.tagsentry.ai/api/v1/sites/3f6c1b8e-2d4a-4c7e-9a51-0b8f2e6d7c10/tag-events" \  -H "Authorization: Bearer tsk_live_…"

Response 200

  • dataarray of objectrequired
  • data[].idstringrequired
  • data[].siteIdstringrequired
  • data[].batchIdstringrequired

    One page view. Rows sharing a batchId happened on the same page.

  • data[].seqintegerrequired

    Order within the batch. Seq 0 is always the batch row.

  • data[].kindstringrequired

    batch | tag | event | request

  • data[].receivedAtstringrequired

    Our clock. The only orderable time here -- a client's is never trusted.

  • data[].pageMsinteger | nullrequired
  • data[].subjectIdstring | nullrequired

    Present on the batch row only. Links the page view to the consent decision that permitted it.

  • data[].containerIdstring | nullrequired
  • data[].tagIdstring | nullrequired
  • data[].statusstring | nullrequired
  • data[].executionMsinteger | nullrequired
  • data[].eventNamestring | nullrequired
  • data[].ordinalinteger | nullrequired
  • data[].hoststring | nullrequired
  • data[].originstring | nullrequired
  • data[].pathstring | nullrequired
  • data[].initiatorTypestring | nullrequired
  • data[].paramNamesarray of string | nullrequired
  • data[].occurrencesinteger | nullrequired
  • data[].transferBytesinteger | nullrequired
  • data[].durationMsinteger | nullrequired
  • data[].bufferedboolean | nullrequired
  • data[].truncatedboolean | nullrequired
  • limitintegerrequired

    The row cap applied to the underlying read.

  • truncatedbooleanrequired

    True when the read came back at its cap. When true, this page is NOT the whole answer -- narrow the window. Tag events are a time window, not a paged list.

  • truncationHintstringoptional

Example response

{  "data": [    {      "id": "3f6c1b8e-2d4a-4c7e-9a51-0b8f2e6d7c10",      "siteId": "3f6c1b8e-2d4a-4c7e-9a51-0b8f2e6d7c10",      "batchId": "3f6c1b8e-2d4a-4c7e-9a51-0b8f2e6d7c10",      "seq": 0,      "kind": "…",      "receivedAt": "2026-09-26T14:02:00.000Z",      "pageMs": 0,      "subjectId": "3f6c1b8e-2d4a-4c7e-9a51-0b8f2e6d7c10",      "containerId": "3f6c1b8e-2d4a-4c7e-9a51-0b8f2e6d7c10",      "tagId": "12",      "status": "…",      "executionMs": 0,      "eventName": "…",      "ordinal": 0,      "host": "www.google-analytics.com",      "origin": "…",      "path": "…",      "initiatorType": "…",      "paramNames": [        "…"      ],      "occurrences": 0,      "transferBytes": 0,      "durationMs": 0,      "buffered": false,      "truncated": false    }  ],  "limit": 50,  "truncated": false,  "truncationHint": "…"}
More about this endpoint

Served from the site's own region -- see the X-TagSentry-Region response header.

This is a time WINDOW, not a paged list. If truncated is true the window was too wide and you are NOT looking at the whole answer; narrow from/to.

Zero events does not mean the snippet is not installed. Monitoring runs only after a consent decision that grants the category it rides on, so a correct install on a site whose visitors reject analytics reports zero forever, correctly. The only honest reading of zero is "we have not heard from it yet".

Errors400 · 401 · 403 · 404 · 500
  • 400The request did not validate against this operation's schema.
  • 401Missing, malformed, unknown, revoked or expired API key. These are deliberately indistinguishable in the response -- distinguishing them would confirm to a caller that a token was once real.
  • 403The key authenticated but does not carry the scope(s) this operation requires, or (`domain_not_verified`) the site's domain is not verified, so its consent records are not released.
  • 404No such resource on this account. A site id belonging to a DIFFERENT account answers 404, never 403 -- a 403 would confirm the id exists somewhere.
  • 500Something failed on our side. The requestId in the body is what to quote.

Every error has the same body: { error: { code, message, requestId } }.

From the OpenAPI document, version 2026-08-26. Raw OpenAPI