---
title: "Site checks: the latest check (six score cards and every finding in plain words), the live preview's runtime errors, free \"Fix it\" turns left today, automatic SEO and the weekly check"
method: GET
path: "/builder/sessions/{sessionId}/quality"
tags: ["Builder"]
---

# Site checks: the latest check (six score cards and every finding in plain words), the live preview's runtime errors, free "Fix it" turns left today, automatic SEO and the weekly check

`GET /builder/sessions/{sessionId}/quality`

## Request

- Base URL: `https://hostingsurge.com/api/v1`
- URL: `https://hostingsurge.com/api/v1/builder/sessions/{sessionId}/quality`
- Auth: one of:
  - HTTP bearer
  - API key in cookie `__Host-hs_session`

## Path parameters

- `sessionId` string, uuid, required

## Response `200`

The overview

- object
  - `available` boolean, required
  - `reason` 'not_ready' | 'no_sandbox' | 'archived' | 'null', nullable, required
  - `settings` object, required
    - `autoSeo` boolean, required: Automatic SEO: every page as real HTML with its head and structured data, sitemap.xml, robots.txt and llms.txt at publish
    - `monitoring` boolean, required: The weekly check of the published site (a notification with "Fix it" when something is wrong)
    - `monitorNextAt` string, nullable, required: ISO-8601 timestamp
  - `latestCheck` object, nullable, required
    - `id` string, uuid, required
    - `kind` 'check' | 'monitor', required: check: the preview version (sandbox build, prerender, axe, audit); monitor: the live site, weekly
    - `status` 'running' | 'done' | 'failed', required
    - `startedAt` string, required: ISO-8601 timestamp
    - `finishedAt` string, nullable, required: ISO-8601 timestamp
    - `commitSha` string, nullable, required
    - `current` boolean, required
    - `url` string, nullable, required: Monitor: the live address checked
    - `score` integer, nullable, required
    - `blocking` boolean, required
    - `pagesChecked` integer, required
    - `cards` object[], required
      - `category` 'works' | 'mobile' | 'accessible' | 'fast' | 'findable' | 'safe', required: The score card: works (builds, no errors, no dead links), mobile, accessible, fast, findable (search engines, link previews), safe
      - `status` 'good' | 'fair' | 'poor' | 'blocked' | 'skipped', required
      - `score` integer, nullable, required
      - `blocking` integer, required
      - `warnings` integer, required
      - `tips` integer, required
      - `note` string, nullable, required: no_preview, no_build, no_pages (not checked); visual_off, visual_failed (checked in part)
    - `findings` object[], required
      - `id` string, required: Stable for the same problem in the same place, e.g. seo.h1-count:3f2a9c1d
      - `rule` string, required: The rule, e.g. seo.h1-count, a11y.img-alt, works.build, sec.secret, axe.<axe rule id>
      - `category` 'works' | 'mobile' | 'accessible' | 'fast' | 'findable' | 'safe', required: The score card: works (builds, no errors, no dead links), mobile, accessible, fast, findable (search engines, link previews), safe
      - `severity` 'block' | 'warn' | 'info', required: block refuses a publish (a failed build, a secret); warn and info never do
      - `message` string, required: Plain English for the customer
      - `params` object, required: Values of the message (counts, sizes, names)
      - `route` string, nullable, required: The page as a visitor opens it, e.g. /sv/meny
      - `page` string, nullable, required: The page id in src/site.ts
      - `lang` string, nullable, required
      - `file` string, nullable, required
      - `line` integer, nullable, required
      - `element` string, nullable, required: The element in words, e.g. <img> "/assets/team.webp"
      - `sectionIndex` integer, nullable, required: Its section on the page, from 0 ("Show me" selects it in the preview)
      - `fixHint` string, required: What the AI changes on "Fix it"
      - `fixable` boolean, required
      - `count` integer, required
    - `summary` object, required
      - `durationMs` integer
      - `build` object
        - `ok` boolean, required
        - `durationMs` integer, required
        - `jsKb` integer
      - `prerender` object
        - `mode` 'project' | 'fallback' | 'none', required
        - `pages` integer, required
        - `errors` integer, required
      - `axe` object
        - `ok` boolean, required
        - `pages` integer, required
      - `audit` object
        - `ok` boolean, required
        - `critical` integer, required
        - `high` integer, required
        - `moderate` integer, required
        - `low` integer, required
      - `visual` 'done' | 'off' | 'failed'
      - `requests` object: Weekly check: requests to the live site
        - `checked` integer, required
        - `failed` integer, required
      - `seoFiles` boolean: The SEO files automatic SEO would publish were checked
    - `error` object, nullable, required
      - `code` string, required
      - `message` string, required
  - `latestMonitor` object, nullable, required
    - `id` string, uuid, required
    - `kind` 'check' | 'monitor', required: check: the preview version (sandbox build, prerender, axe, audit); monitor: the live site, weekly
    - `status` 'running' | 'done' | 'failed', required
    - `startedAt` string, required: ISO-8601 timestamp
    - `finishedAt` string, nullable, required: ISO-8601 timestamp
    - `commitSha` string, nullable, required
    - `current` boolean, required
    - `url` string, nullable, required: Monitor: the live address checked
    - `score` integer, nullable, required
    - `blocking` boolean, required
    - `pagesChecked` integer, required
    - `cards` object[], required
      - `category` 'works' | 'mobile' | 'accessible' | 'fast' | 'findable' | 'safe', required: The score card: works (builds, no errors, no dead links), mobile, accessible, fast, findable (search engines, link previews), safe
      - `status` 'good' | 'fair' | 'poor' | 'blocked' | 'skipped', required
      - `score` integer, nullable, required
      - `blocking` integer, required
      - `warnings` integer, required
      - `tips` integer, required
      - `note` string, nullable, required: no_preview, no_build, no_pages (not checked); visual_off, visual_failed (checked in part)
    - `findings` object[], required
      - `id` string, required: Stable for the same problem in the same place, e.g. seo.h1-count:3f2a9c1d
      - `rule` string, required: The rule, e.g. seo.h1-count, a11y.img-alt, works.build, sec.secret, axe.<axe rule id>
      - `category` 'works' | 'mobile' | 'accessible' | 'fast' | 'findable' | 'safe', required: The score card: works (builds, no errors, no dead links), mobile, accessible, fast, findable (search engines, link previews), safe
      - `severity` 'block' | 'warn' | 'info', required: block refuses a publish (a failed build, a secret); warn and info never do
      - `message` string, required: Plain English for the customer
      - `params` object, required: Values of the message (counts, sizes, names)
      - `route` string, nullable, required: The page as a visitor opens it, e.g. /sv/meny
      - `page` string, nullable, required: The page id in src/site.ts
      - `lang` string, nullable, required
      - `file` string, nullable, required
      - `line` integer, nullable, required
      - `element` string, nullable, required: The element in words, e.g. <img> "/assets/team.webp"
      - `sectionIndex` integer, nullable, required: Its section on the page, from 0 ("Show me" selects it in the preview)
      - `fixHint` string, required: What the AI changes on "Fix it"
      - `fixable` boolean, required
      - `count` integer, required
    - `summary` object, required
      - `durationMs` integer
      - `build` object
        - `ok` boolean, required
        - `durationMs` integer, required
        - `jsKb` integer
      - `prerender` object
        - `mode` 'project' | 'fallback' | 'none', required
        - `pages` integer, required
        - `errors` integer, required
      - `axe` object
        - `ok` boolean, required
        - `pages` integer, required
      - `audit` object
        - `ok` boolean, required
        - `critical` integer, required
        - `high` integer, required
        - `moderate` integer, required
        - `low` integer, required
      - `visual` 'done' | 'off' | 'failed'
      - `requests` object: Weekly check: requests to the live site
        - `checked` integer, required
        - `failed` integer, required
      - `seoFiles` boolean: The SEO files automatic SEO would publish were checked
    - `error` object, nullable, required
      - `code` string, required
      - `message` string, required
  - `runtimeErrors` object[], required
    - `id` string, uuid, required
    - `kind` 'error' | 'rejection' | 'console' | 'boundary' | 'resource' | 'network', required
    - `title` string, required: Plain English, e.g. "Something broke on this page."
    - `message` string, required: The exact error message (shown collapsed)
    - `route` string, nullable, required
    - `source` string, nullable, required: The file the browser named, e.g. src/pages/home.tsx
    - `mapped` object, nullable, required: Where in the site's code (source map)
      - `file` string, required
      - `line` integer, required
      - `column` integer, required
    - `status` integer, nullable, required
    - `count` integer, required
    - `firstSeenAt` string, required: ISO-8601 timestamp
    - `lastSeenAt` string, required: ISO-8601 timestamp
  - `freeFixes` object, required: "Fix it" turns are free for this many per team and UTC day
    - `used` integer, required
    - `limit` integer, required
    - `left` integer, required
    - `resetsAt` string, required: ISO-8601 timestamp
  - `autoSeo` object, required
    - `creditsPerUse` integer, nullable, required: Build Credits per publish with automatic SEO without a plan that includes it
    - `included` boolean, nullable, required: The team's plan includes it (null: unknown)
    - `origin` string, nullable, required: The canonical address the SEO files use (the custom domain, else the site's address)
    - `lastRun` object, nullable, required
      - `commitSha` string, required
      - `origin` string, required
      - `credits` integer, required
      - `createdAt` string, required: ISO-8601 timestamp
  - `visualQa` object, required: Screenshots judged by AI (needs the screenshot worker)
    - `available` boolean, required

## Other responses

- `400`: Invalid request (code invalid_request)
- `401`: Missing or invalid session/token (code unauthorized)
- `402`: Automatic SEO needs a plan or Build Credits (code upgrade_required, details.feature builder.auto_seo)
- `403`: Not permitted (code forbidden)
- `404`: Not found or not visible to the caller (code not_found)
- `409`: Refused for now (code conflict; details.reason turn_running, archived, not_published, auto_seo_unsupported)
- `429`: Too many checks or error reports (code rate_limited; details.reason check_rate, runtime_error_rate); see Retry-After
- `501`: Site checks are not set up on this server yet (code not_configured, details.reason not_ready)

---

[API](https://skmtc.dev/hostingsurge/apis/hostingsurge-platform-api.md) · [All operations](https://skmtc.dev/hostingsurge/apis/hostingsurge-platform-api/llms.txt) · [OpenAPI document](https://skmtc.dev/hostingsurge/apis/hostingsurge-platform-api/revisions/4d08337cdff1?raw)
