---
title: "Audit"
method: GET
path: "/audit"
---

# Audit

`GET /audit`

## Request

- Base URL: `https://seoscoreapi.com` (the document declares no server; this is the origin it was published from)
- URL: `https://seoscoreapi.com/audit`
- Auth: none declared. Required headers: `X-API-Key`

Run a comprehensive SEO audit on any URL.

Returns an overall score (0–100), letter grade, prioritized fix
recommendations, and a `audit` block of category breakdowns
(SEO, performance, accessibility, AI readability).

Paid plans (Starter $5/mo and up) additionally receive:
  - `sxo`, `aeo`, `aio` — extended scoring blocks
  - `history` — delta vs the previous audit for this URL
    (overall score, grade change, per-category deltas, days since)
  - Full priorities list and uncapped per-category checks

Every priority carries `plain_english` (one jargon-free sentence) and
`who_fixes_it` (`developer` | `content` | `marketing`) next to `issue`/`fix`.

`?include=trackers` (paid plans) adds a `trackers` block: the same inventory as
`GET /trackers`, at no extra audit. It adds a few seconds.

`?include=conversion` (paid plans) adds a `conversion` block: the same score and
fix list as `GET /conversion`, at no extra audit. Combine them: `?include=trackers,conversion`.

Free / demo keys see gated placeholders for the paid blocks
(`_extended_gated`, `history._gated`, `_priorities_gated`).

**Core Web Vitals are opt-in: `?cwv=true`** (every plan, no extra charge, never
part of the score). The response always carries a `core_web_vitals` object with
`lcp_ms`, `inp_ms`, `cls`, `fcp_ms`, `ttfb_ms`, `checks` and a `status`:

  - `not_requested` (the default): no measurement was made; the metrics are
    `null` and `hint` says how to ask. A default audit never waits on PageSpeed.
  - `ok`: measured by Google PageSpeed Insights. `source` is `field` (real-user
    Chrome UX Report data) or `lab`; `_cached: true` when it came from the
    24 hour cache. A cached measurement is included even without `cwv=true`,
    because it costs no time.
  - `unavailable`: `cwv=true` was set but PageSpeed failed, rate limited us or
    was too slow; `reason` says which. The audit itself still succeeds.
  - `unavailable` with `pending: true`: PageSpeed was still measuring when the
    wait ran out (about 25 seconds). The measurement finishes in the
    background; the next audit of that URL has it.

With `cwv=true` the first audit of a URL takes about 10 seconds longer; repeats
within 24 hours are instant. Set your client timeout to 60 seconds.

Requires an API key passed in the `X-API-Key` header.

## Query parameters

- `url` string, required: The URL to audit (e.g., https://example.com)
- `include` string, nullable: Comma-separated extras on paid plans: `trackers` (tracker and pixel inventory) and `conversion` (conversion score). Each adds a few seconds.
- `cwv` boolean: Set `cwv=true` to include measured Core Web Vitals (LCP, INP, CLS, FCP, TTFB from Google PageSpeed Insights) in `core_web_vitals`. Off by default because the first measurement of a URL adds about 10 seconds (up to 25); it is then cached for 24 hours. Available on every plan, costs nothing extra and never changes the score.

## Headers

- `X-API-Key` string, required: Your API key from /signup

## Response `200`

Successful Response

- unknown

## Other responses

- `422`: Validation Error

---

[API](https://skmtc.dev/seoscoreapi/apis/seo-score-api.md) · [All operations](https://skmtc.dev/seoscoreapi/apis/seo-score-api/llms.txt) · [OpenAPI document](https://skmtc.dev/seoscoreapi/apis/seo-score-api/revisions/877a3044b5be?raw)
