All endpoints

DocsAPIScans

GET/sites/{siteId}/scans/latest

Has a scan finished yet

The latest run's progress, and — separately — whether this site's inventory is established at all.

Auth header

Authorization: Bearer tsk_live_…

The key needssites:read

Parameters

  • siteIdstringin pathrequired

    The site id, from GET /v1/sites.

Example request

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

Response 200

  • scanIdstring | nullrequired

    The latest tier-1 run's id: the scan POST /scans starts, and the scanRunId a scan.completed webhook carries for it.

  • tierstringrequired

    Always tier 1. A deeper tier-2 crawl can follow it; its own scan.completed says tier: tier2.

    Always tier1

  • statusstringrequired

    The LATEST run. "none" means this site has never been scanned, and "partial" means the crawl budget ran out part-way — which does NOT establish the inventory, because "found nothing" would then cover only the pages it reached. Read everSucceeded for whether a banner can be served, not this.

    One of queued, running, completed, partial, failed, none

  • startedAtstring | nullrequired
  • finishedAtstring | nullrequired
  • everSucceededbooleanrequired

    THE FIELD THAT MATTERS. True when SOME tier-1 scan has reached completed and none is in flight — which is the compiler's own rule for whether this site's inventory is established, and therefore whether it can serve a banner at all. It is about the SITE, not the latest run: a later failed rescan does not un-see what a completed scan saw.

  • detailstringrequired

Example response

{  "scanId": "3f6c1b8e-2d4a-4c7e-9a51-0b8f2e6d7c10",  "tier": "tier1",  "status": "queued",  "startedAt": "2026-09-26T14:02:00.000Z",  "finishedAt": "2026-09-26T14:02:00.000Z",  "everSucceeded": false,  "detail": "…"}
More about this endpoint

READ everSucceeded, NOT status. status describes the latest RUN; everSucceeded describes the SITE, and it is the one that decides whether a banner can be served. A site whose most recent rescan failed but whose first scan completed still serves a banner; a site whose first scan is still running does not.

Errors401 · 403 · 404 · 500
  • 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