SEO

Get site health

The latest technical SEO audit of the site: the score, every check with its verdict and recommendation in fix order, how much of the site the crawl covered, the change since the previous audit, and the score history.

GEThttps://api.vidrys.com/v1/projects/{project_id}/seo/site-health
Plan
Track and above
Key
read
Rate cost
2 units

Whole-site checks — orphan pages, duplicates, broken internal links — are reported unknown when the crawl saw too little of the site to judge them, rather than invented from a partial picture.

Authorization

Sent as a header on every request.

Authorizationstringrequired

A Vidrys API key, sent as Bearer vidrys_sk_…. A read key is enough. See Authentication.

Path parameters

project_idstringrequired

The project's id, from List projects.

Response · 200

application/json

auditedboolean

False until a crawl of the site has been graded. Every field below is then empty.

scorenumbernullable

Site health, 0–100.

coveragenumbernullable

Share of the audit that could be measured, 0–1.

pages_auditedinteger

Pages graded.

ran_atstringnullable

When the audit ran, ISO 8601.

crawlobjectnullable

How much of the site the graded crawl reached.

+Show child attributes
completenessnumber

Share of the site crawled, 0–1.

completeness_floornumber

Below this share the whole-site checks are reported unknown.

sitemap_url_countintegernullable

URLs in the sitemap the crawl was sized against.

hit_page_capboolean

The crawl stopped at its page budget rather than running out of links.

crawled_atstringnullable

When the crawl finished, ISO 8601.

hoststringnullable

The site graded.

previous_scorenumbernullable

The previous audit's score.

previous_ran_atstringnullable

When it ran.

score_deltanumbernullable

Points against the previous audit.

same_crawl_as_previousbooleannullable

True when the previous audit graded the same crawl: the delta is a re-grade, not a change on the site.

issue_changesobjectnullable

The issues against the previous audit, counted per check and page.

+Show child attributes
newinteger

Issues that were not there last time.

persistentinteger

Issues still there.

resolvedinteger

Issues gone from a page that was graded again.

not_recheckedinteger

Earlier issues on pages not graded this time.

newly_checkedinteger

Issues on checks the previous audit did not run.

checksobject[]

Every check with its verdict.

+Show child attributes
idstring

Check id, e.g. meta_description, broken_internal_links, core_web_vitals.

labelstring

Its name on the screen.

pillarstringnullable

The group it belongs to.

weightnumber

Points the check is worth out of 100.

scorenumbernullable

Share passed, 0–1. Null when unmeasured.

pointsnumbernullable

Points earned.

statusstring

The verdict. unknown when the check could not be measured — too little of the site crawled, or a reading that did not answer.

Values:passpartialfailunknown

detailstringnullable

What was found, in words.

recommendationstringnullable

What to do about it.

impactstringnullable

How much it matters: high, medium or low.

fix_orderstring[]

Check ids in the order worth fixing them.

trendobject[]

One point per crawl graded, oldest first.

+Show child attributes
ran_atstring

When the audit ran, ISO 8601.

scorenumbernullable

Site health then.

coveragenumbernullable

Share measured.

pages_auditedinteger

Pages graded.

issuesinteger

Issues found.

severity_countsobject[]

Issues per severity.

+Show child attributes
labelstring

Severity.

Values:criticalhighmediumlow

countinteger

How many.

Errors

403 plan_feature_unavailableThe feature is on a higher plan. Bulk exports and webhooks are Custom-only.
404 not_foundThe project or item doesn't exist in this workspace. A project from another workspace also returns 404, never 403.
422 invalid_requestA parameter or body field is missing or has the wrong type or value. The message names the field. Also returned when a write would pass the plan's prompt limit.
401 unauthorizedNo key was sent, or the key is unknown, revoked or expired, or the member who created it has left the workspace or been deactivated.
402 plan_requiredThe workspace's plan doesn't include API access. It's included on every plan from Track up — Solo is the one without it.
403 workspace_not_approvedThe workspace is still waiting for approval, or wasn't approved.
429 rate_limitedToo many requests this minute. Wait for the number of seconds in the `Retry-After` header, then retry.

Every code, and what to retry, is in Errors.