Scout · Endpoints

Browser facts

Page-level inventories from a real browser session — cookies, console, network summary, DOM/meta packs, and shallow diffs. Raw facts only: no SEO scores, no full HAR by default, no CMP product.

When to use these
Prefer these dedicated routes when you need one fact pack. Use visibility / security / a11y / tech for those specialized checks, and inspect when you want several SEO/meta packs in one call.

Cookies

POST/v1/checks/cookiesAPI key

Cookie inventory after load (not a CMP). name, domain, path, secure, httpOnly, sameSite, expires, size, first_party. 3 credits.

List cookies on a page

Opens the URL, optionally dismisses a known cookie banner, then reads the browser cookie jar.

RequestBody
json
{
  "url": "https://example.com",
  "dismiss_cookie_banner": true
}
Response200 OK (truncated)
json
{
  "status": "success",
  "url": "https://example.com",
  "final_url": "https://example.com/",
  "cookies": [
    {
      "name": "_ga",
      "domain": ".example.com",
      "path": "/",
      "secure": true,
      "httpOnly": false,
      "sameSite": "Lax",
      "expires": 1893456000,
      "expires_at": "2030-01-01T00:00:00.000Z",
      "size": 28,
      "first_party": true
    }
  ],
  "response_time_ms": 980,
  "timestamp": "…"
}

Console

POST/v1/checks/consoleAPI key

Console messages during load (capped at 200): type, message, url, line, column. 3 credits.

Network summary

POST/v1/checks/networkAPI key

Not a full HAR. Status-class counts, cors_errors, mixed_content, timeouts/failures; optional top_slowest (up to 20). 4 credits.

NameTypeRequiredDescription
urlstringrequiredPage to open.
top_slowestbooleanoptionalInclude up to 20 slowest requests (url, method, status, duration_ms, resource_type).
dismiss_cookie_banner / settle_ms / …optionalStandard browse options.

Network summary with slowest requests

RequestBody
json
{
  "url": "https://example.com",
  "top_slowest": true
}
Response200 OK (truncated)
json
{
  "status": "success",
  "url": "https://example.com",
  "final_url": "https://example.com/",
  "network": {
    "counts": { "2xx": 42, "3xx": 2, "4xx": 1, "5xx": 0, "other": 0 },
    "cors_errors": 0,
    "mixed_content": 0,
    "timeouts": 0,
    "failures": 1,
    "top_slowest": [
      { "url": "https://cdn.example.com/app.js", "method": "GET", "status": 200, "duration_ms": 412, "resource_type": "script" }
    ]
  },
  "response_time_ms": 1200,
  "timestamp": "…"
}

Broken assets

POST/v1/checks/assetsAPI key

Failed stylesheet / image / font / script requests (status ≥ 400 or failed). 3 credits.

Resource summary

POST/v1/checks/resourcesAPI key

Counts by type (stylesheet, script, image, font, media, xhr_fetch, other) plus transfer size estimates when Content-Length is present. 3 credits.

JSON-LD

POST/v1/checks/json-ldAPI key

Parse application/ld+json scripts: valid?, @type(s), missing common fields for Product/Organization/WebSite/Article/BreadcrumbList, parse_error. 3 credits.

Canonical chain

POST/v1/checks/canonicalAPI key

request_url, redirect_chain, final_url, canonical_href / canonical_absolute, notes. 3 credits.

Sitemap inspection

POST/v1/checks/sitemapAPI key

Resolve sitemaps via robots.txt Sitemap: lines and/or /sitemap.xml (max 3). valid_xml, url_count, lastmod range, errors. 3 credits.

Inspect site sitemaps

RequestBody
json
{
  "url": "https://example.com"
}
Response200 OK (truncated)
json
{
  "status": "success",
  "url": "https://example.com",
  "robots_referenced_urls": ["https://example.com/sitemap.xml"],
  "sitemaps": [
    {
      "url": "https://example.com/sitemap.xml",
      "valid_xml": true,
      "url_count": 128,
      "lastmod_min": "2025-01-01",
      "lastmod_max": "2026-07-20",
      "robots_referenced": true,
      "errors": []
    }
  ],
  "errors": [],
  "response_time_ms": 340,
  "timestamp": "…"
}

Images

POST/v1/checks/imagesAPI key

img inventory (cap 200): src, alt, width/height, loading, decoding, fetchpriority, natural sizes when available. 3 credits.

Open Graph / Twitter

POST/v1/checks/opengraphAPI key

og:* and twitter:* meta fields. Optional screenshot: true adds viewport JPEG base64 (8 credits with screenshot, else 3).

NameTypeRequiredDescription
urlstringrequiredPage to open.
screenshotbooleanoptionalIf true, attach viewport JPEG as screenshot_base64 (credit cost becomes 8).

A11y snapshot

POST/v1/checks/a11y-snapshotAPI key

Not full axe — inventory of buttons, link count, headings, landmarks, aria-* presence. Prefer POST /v1/checks/a11y for axe violations. 3 credits.

Forms

POST/v1/checks/formsAPI key

Forms (cap 50): method, action, enctype, inputs[{name,type,required}]. 3 credits.

Link graph (shallow)

POST/v1/checks/linksAPI key

One-page outbound internal link graph: nodes[{url,text}] and edges (max 100). Not a multi-page crawl — use /v1/crawl for that. 3 credits.

DOM diff

POST/v1/diff/domAPI key

Compare simplified DOM trees for url_a/url_b (or before_url/after_url). Counts + sample diffs (max 50). 8 credits.

Diff two URLs

RequestBody
json
{
  "url_a": "https://example.com/",
  "url_b": "https://example.com/pricing"
}
Response200 OK (truncated)
json
{
  "status": "success",
  "url_a": "https://example.com/",
  "url_b": "https://example.com/pricing",
  "final_url_a": "https://example.com/",
  "final_url_b": "https://example.com/pricing",
  "diff": {
    "added_count": 12,
    "removed_count": 3,
    "changed_count": 5,
    "added_samples": [{ "path": "/html/body[0]/main[0]/section[1]", "after": { "tag": "section", "class": "pricing" } }],
    "removed_samples": [],
    "changed_samples": []
  },
  "response_time_ms": 2400,
  "timestamp": "…"
}

Header diff

POST/v1/diff/headersAPI key

Compare response headers: only_a, only_b, changed[{key,a,b}]. 4 credits.