CheckWebsiteNow Agent Check API
The Agent Check API from CheckWebsiteNow — 1 operation(s) for agent check.
The Agent Check API from CheckWebsiteNow — 1 operation(s) for agent check.
Every API here is available over the APIs.io API and to AI agents over MCP.
One button, every client — Claude, Cursor, VS Code and the rest.
https://apis.io/mcp
find_apisBrowse and filter every API in the catalog.get_api_artifactsOne API's artifacts, grouped by type.get_openapiThe primary OpenAPI for this API.find_similar_apisAPIs that look like this one.apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.resolveTurn a domain, URL or GitHub org into the provider it belongs to.find_cohortsEvery scored population of providers in the catalog.curl "https://apis.io/api/v1/apis/checkwebsitenow-com:checkwebsitenow-com-agent-check-api"
curl "https://apis.io/api/v1/apis?limit=25"
Calls without X-API-Key need no key. Calls with it need a paid plan — get a key.
Free tier, no form to fill in. Signing in shares your email address with us — we store it to create your key and to recognise you if you sign in with another provider. See our Privacy Policy and Terms.
A second provider on the same verified email joins the account you already have.
openapi: 3.2.0
info:
title: Checkwebsitenow Com Agent Check API
version: 1.8.0
description: 'Operations tagged Agent Check across 2 of this provider''s published API definitions: checkwebsitenow-com-openapi.json, checkwebsitenow-com-openapi.yml. Each path carries the servers of the definition it was published in.'
servers:
- url: /
description: Same origin as this description
tags:
- name: Agent Check
paths:
/api/v1/agent-check:
post:
operationId: checkAgentReadability
summary: CheckWebsiteNow Agent Readability Score for one public homepage
description: 'Our own transparent 0-100 score (model cwn-ars-1), not an official standard. Fixed fetch plan on the final homepage origin: homepage HTML, robots.txt, llms.txt, /.well-known/api-catalog, /.well-known/ai-catalog.json, /.well-known/mcp/server-card.json, a sitemap prefix and one Accept: text/markdown request. Shared ten-second deadline, nine requests in total, at most five redirects per resource (files after the homepage follow redirects only on the same host), 1 MiB (larger homepages are analysed from their first 1 MiB) HTML and 64 KiB per text file, identity encoding only, no JavaScript, no forms, never a call to a discovered MCP or API endpoint. Score = earned / measured weight points, rounded down; unknown checks are removed, never passed; no number below 70 measured points or without readable homepage HTML. Ten requests per minute per client, one running check per client, 60-second cache per website (cached: true). findings and summary are the deprecated schema 1.0 view, kept for one transition. Method: GET /api/v1/agent-readability-method.'
requestBody:
required: true
content:
application/json:
schema:
type: object
required:
- hostname
additionalProperties: false
properties:
hostname:
type: string
maxLength: 300
examples:
- example.com
responses:
'400':
description: Request or measurement service error; never a target outage verdict.
content:
application/json:
schema:
type: object
required:
- error
properties:
error:
type: object
required:
- code
- message
properties:
code:
type: string
message:
type: string
'403':
description: Request or measurement service error; never a target outage verdict.
content:
application/json:
schema:
type: object
required:
- error
properties:
error:
type: object
required:
- code
- message
properties:
code:
type: string
message:
type: string
'408':
description: Request or measurement service error; never a target outage verdict.
content:
application/json:
schema:
type: object
required:
- error
properties:
error:
type: object
required:
- code
- message
properties:
code:
type: string
message:
type: string
'413':
description: Request or measurement service error; never a target outage verdict.
content:
application/json:
schema:
type: object
required:
- error
properties:
error:
type: object
required:
- code
- message
properties:
code:
type: string
message:
type: string
'415':
description: Request or measurement service error; never a target outage verdict.
content:
application/json:
schema:
type: object
required:
- error
properties:
error:
type: object
required:
- code
- message
properties:
code:
type: string
message:
type: string
'429':
description: 'Our limit or a request problem; never a verdict about the website. Codes: RATE_LIMITED (10 per minute per client; IPv6 counted per /64), PROBE_BUSY_CLIENT (your previous check is still running), PROBE_BUSY (all four slots busy, or a check of this website is running and enough requests already wait for it; Retry-After 10), TARGET_BUSY (this website was checked very often in the last minute); RATE_LIMITED also when your client or network used its fair share of fresh checks (12 per minute per client). Retry after the Retry-After seconds.'
headers:
Retry-After:
schema:
type: integer
description: Seconds to wait.
content:
application/json:
schema:
$ref: '#/components/schemas/ApiError'
'500':
description: Request or measurement service error; never a target outage verdict.
content:
application/json:
schema:
type: object
required:
- error
properties:
error:
type: object
required:
- code
- message
properties:
code:
type: string
message:
type: string
'200':
description: Score and evidence. Unavailable resources are unknown checks, not proof of failure.
content:
application/json:
schema:
$ref: '#/components/schemas/AgentCheckResult'
'503':
description: 'PROBE_BUSY: our global budget of fresh checks for this minute is used up. Not a verdict about the website. Retry after the Retry-After seconds.'
headers:
Retry-After:
schema:
type: integer
description: Seconds to wait.
content:
application/json:
schema:
$ref: '#/components/schemas/ApiError'
tags:
- Agent Check
servers:
- url: /
description: Same origin as this description
components:
schemas:
AgentCheckResult:
type: object
required:
- schema_version
- score_name
- score_model
- official
- method_url
- target
- checked_at
- final_url
- final_origin
- final_url_truncated
- duration_ms
- requests_used
- measurement_region
- cached
- status
- score
- score_available
- score_unavailable_reason
- band
- headline
- coverage
- scaled
- caps_applied
- groups
- checks
- deductions
- mcp
- webmcp
- training_policy
- disclaimer
- summary
- findings
- limitations
properties:
schema_version:
const: '2.0'
score_name:
const: CheckWebsiteNow Agent Readability Score
score_model:
type: string
examples:
- cwn-ars-1
official:
const: false
method_url:
type: string
examples:
- /agents#score
target:
type: string
checked_at:
type: string
format: date-time
final_url:
type:
- string
- 'null'
maxLength: 255
final_origin:
type:
- string
- 'null'
final_url_truncated:
type: boolean
duration_ms:
type: integer
minimum: 0
requests_used:
type: integer
minimum: 0
maximum: 9
measurement_region:
type: string
cached:
type: boolean
cached_age_seconds:
type: integer
minimum: 0
description: 'Only on cached results: age of the reused result. Normally below 60; up to 300 when a limit refused a fresh check and a recent result was served instead.'
status:
type: string
enum:
- complete
- partial
- unavailable
score:
type:
- integer
- 'null'
minimum: 0
maximum: 100
score_available:
type: boolean
score_unavailable_reason:
type:
- string
- 'null'
band:
type: object
required:
- id
- label
- symbol
- min
- max
properties:
id:
type: string
enum:
- hard
- partly
- good
- excellent
- not_available
label:
type: string
symbol:
type: string
min:
type:
- integer
- 'null'
max:
type:
- integer
- 'null'
headline:
type: object
description: 'Plain answer built from the checks, not from the band: can agents read the text (A1, B1), may AI search and assistants read it (A2), and which optional helpers are missing. A low score with text_readable yes means few helpers, not unreadable content.'
required:
- text_readable
- bots_allowed
- helpers_present
- helpers_missing
- text
properties:
text_readable:
type: string
enum:
- 'yes'
- partly
- 'no'
- unknown
bots_allowed:
type: string
enum:
- 'yes'
- some_blocked
- blocked
- unknown
helpers_present:
type: array
items:
type: string
helpers_missing:
type: array
items:
type: string
text:
type: string
coverage:
type: object
required:
- measured_points
- total_points
- percent
properties:
measured_points:
type: integer
total_points:
const: 100
percent:
type: integer
minimum: 0
maximum: 100
scaled:
type: boolean
description: True when the score is scaled to fewer than 100 measured points.
caps_applied:
type: array
items:
type: string
enum:
- search_bots_blocked
- javascript_shell
groups:
type: array
items:
type: object
required:
- id
- label
- weight
- measured_points
- points
- score
properties:
id:
type: string
label:
type: string
weight:
type: integer
measured_points:
type: integer
unmeasured_points:
type: integer
description: 'weight minus measured_points: points of this group we could not measure (shown as not measured, never as passed).'
points:
type: number
score:
type:
- integer
- 'null'
checks:
type: array
minItems: 14
maxItems: 14
items:
$ref: '#/components/schemas/AgentReadabilityCheck'
deductions:
type: array
items:
type: object
required:
- id
- label
- lost_points
- fix_title
properties:
id:
type: string
label:
type: string
lost_points:
type: number
fix_title:
type: string
mcp:
type: object
description: 'MCP and API discovery: advertised, not tested. null means not checked.'
properties:
api_catalog_found:
type:
- boolean
- 'null'
ard_found:
type:
- boolean
- 'null'
description: /.well-known/ard.json (Agentic Resource Discovery v0.91, a proposal) with at least one entry that has identifier, type and exactly one of url/data.
ai_catalog_found:
type:
- boolean
- 'null'
description: Older /.well-known/ai-catalog.json, read last with leftover request budget.
server_card_found:
type:
- boolean
- 'null'
openapi_link_found:
type: boolean
api_catalog_link_found:
type: boolean
ard_link_found:
type: boolean
description: Same-origin rel="ard" link in the homepage HTML or Link header.
llms_mentions_api_or_mcp:
type: boolean
paths_checked:
type: array
items:
type: string
endpoints_called:
const: false
note:
type: string
badge:
type: object
description: 'Only when a score exists and badges are configured: a signed ''Agent-ready'' badge for this result. The address carries host, score and check date with a server signature; serving it never starts a check and nothing is stored. The link starts a fresh check (utm_source=badge).'
properties:
svg:
type: string
format: uri
link:
type: string
format: uri
html:
type: string
markdown:
type: string
checked_on:
type: string
format: date
score:
type: integer
minimum: 0
maximum: 100
homepage_links:
type: array
description: 'Up to 8 main pages suggested from links on the final homepage that are not hidden by markup (CSS-class hiding is not detected): same host, navigation first, no login, cart, legal or file links, paths percent-encoded. Titles are the site''s own link text, shortened. Read from the homepage the check already fetched: no extra request.'
maxItems: 8
items:
type: object
required:
- title
- path
properties:
title:
type: string
maxLength: 60
path:
type: string
maxLength: 200
lighthouse_rules:
type: object
description: Rules from the Lighthouse 13.5.0 audits llms-txt, webmcp-schema-validity, webmcp-form-coverage and ard-schema (ard-schema as a minimal check), re-applied statically to the files this check read. Not a Lighthouse run; never changes the score.
required:
- version
- lighthouse_run
- audits
- note
properties:
version:
type: string
lighthouse_run:
const: false
note:
type: string
audits:
type: array
items:
type: object
required:
- id
- title
- status
- score
- issues
- rule
- source_url
properties:
id:
enum:
- llms-txt
- webmcp-schema-validity
- webmcp-form-coverage
- ard-schema
title:
type: string
status:
enum:
- pass
- warning
- fail
- informative
- not_applicable
- unknown
score:
type:
- number
- 'null'
issues:
type: array
items:
type: string
rule:
type: string
source_url:
type: string
format: uri
forms:
type:
- integer
- 'null'
uncovered_forms:
type:
- integer
- 'null'
webmcp:
type: object
description: 'Static WebMCP declarations: declared, not verified in a browser.'
properties:
declarative_forms:
type:
- integer
- 'null'
complete_declarative_forms:
type:
- integer
- 'null'
inline_script_hint:
type:
- boolean
- 'null'
runtime_verified:
const: false
note:
type: string
training_policy:
type: object
description: Training opt-outs never lower the score.
properties:
training_blocked:
type:
- array
- 'null'
items:
type: string
tokens_checked:
type: array
items:
type: string
note:
type: string
disclaimer:
type: string
summary:
type: object
deprecated: true
description: Schema 1.0 counts of findings.
findings:
type: array
deprecated: true
minItems: 6
maxItems: 6
items:
type: object
description: Schema 1.0 observations (document, structure, robots, llms, metadata, webmcp).
limitations:
type: array
items:
type: string
homepage_truncated:
type: boolean
description: True when the homepage was larger than 1 MiB and only its first 1 MiB was analysed.
homepage_note:
type:
- string
- 'null'
description: Plain-language note when homepage_truncated is true, otherwise null.
block_page_signals:
type: array
description: Country-block and bot-challenge wording found in the homepage body (input for the geoblock assessment).
items:
type: object
required:
- id
- label
- confidence
- evidence
properties:
id:
type: string
enum:
- cloudflare_1009
- cloudfront_geo
- sucuri_country
- region_text
- cloudflare_challenge
- akamai_access_denied
label:
type: string
confidence:
type: string
enum:
- high
- medium
- low
- none
evidence:
type: string
maxLength: 200
homepage_http_status:
type:
- integer
- 'null'
description: 'HTTP status our GET received for the final homepage (null when it was not read). Compare it with http_status of POST /api/v1/check: when one request was refused (401/403/429) and the other allowed, bot protection treated the two requests differently.'
ApiError:
type: object
required:
- error
properties:
error:
type: object
required:
- code
- message
properties:
code:
type: string
message:
type: string
AgentReadabilityCheck:
type: object
required:
- id
- group
- label
- status
- weight
- points
- evidence
- fix
properties:
id:
type: string
enum:
- A1
- A2
- A3
- B1
- B2
- B3
- B4
- C1
- C2
- C3
- C4
- D1
- D2
- D3
group:
type: string
enum:
- A
- B
- C
- D
label:
type: string
status:
type: string
enum:
- pass
- partial
- fail
- unknown
- not_applicable
weight:
type: integer
minimum: 1
points:
type:
- number
- 'null'
description: Earned points; null when unknown or not applicable.
evidence:
type: string
maxLength: 256
description: Counts and our own wording only; never page text.
fix:
type: object
required:
- title
- detail
properties:
title:
type: string
detail:
type: string
snippet:
type: string
description: Copy-ready example for the checked host.
x-refined-from:
- checkwebsitenow-com-openapi.json
- checkwebsitenow-com-openapi.yml