Base URL · EU and US
https://app.tagsentry.ai/api/v1One address for both regions. Each site's data stays in the region it was added in.
Auth header
Authorization: Bearer tsk_live_…Key prefixes
tsk_live_…Minted by a production or staging deployment, app.tagsentry.ai included. The prefix a secret scanner should match.tsk_test_…Minted by a development or self-hosted deployment without a production APP_ENV. Not a sandbox: it has the same scopes and reaches the same real data as a live key, on the deployment that minted it. No other deployment knows it.
First request
curl https://app.tagsentry.ai/api/v1/sites \ -H "Authorization: Bearer tsk_live_…"Response
{ "data": [ { "id": "3f6c1b8e-2d4a-4c7e-9a51-0b8f2e6d7c10", "accountId": "9a2e4f71-5b3c-4d8a-8e16-7c0d1f2a3b45", "domain": "silverpine.example", "displayName": "Silverpine Supply", "region": "EU", "status": "active", "archivedAt": null, "createdAt": "2026-09-12T09:30:00.000Z", "updatedAt": "2026-09-26T14:02:00.000Z" } ], "limit": 1, "truncated": false}Scopes
account:readRead which account this key belongs to: its id, its name and whether a person has confirmed that namesites:readList sites and read their setup statesites:writeCreate sites and archive themscans:writeStart a scan of a sitetrackers:readRead the detected tracker inventory and its classificationmonitoring:readRead tag events, event-name summaries and the tag flowconsent:readRead consent decisions and their ratesconsent:exportDownload the proof-of-consent exportinstall:readRead the install snippet, the site key and the delivery originbanner:writeChange and publish the consent banner and its rulesetgtm:readRead the connected Tag Manager container and its tag inventorygtm:writeStage and publish a consent version into the customer's Tag Manager containerbilling:readRead whether each site is Free or Pro in each product, its usage and payment state
Webhook events
- consent.recordedConsent recorded · batched each minute
- ruleset.publishedBanner rules published
- scan.completedScan finished
Check the signature
// X-TagSentry-Signature: t=1758700000,v1=<hex>expected = hmac_sha256(secret, t + "." + body)ok = constant_time_equal(expected, v1) and now - t <= 300