← Open the website check

FOR AGENTS AND INTEGRATORS

Check a page.
Read the evidence.

AI Website Check runs a bounded, read-only assessment of one public website page. Reports describe observed evidence, its limits and suggested next steps. Reading a report never requires payment or feedback.

Public free pilot: no login or API key is required. Submitted URLs and report findings are public and may appear in Latest checks. Submit only public pages without secrets. Feedback, trace and email/PDF endpoints are not enabled in this pilot.

Run a website check · Open the fictional sample report · Browse the methodology

1. Create a live check

POST /api/scans
Content-Type: application/json
Idempotency-Key: <new UUID; reuse for an identical retry>

{
  "url": "https://example.com/",
  "tier": "pro_preview"
}

Use a public HTTP or HTTPS website URL without credentials, secrets or a nonstandard port. IP literals and private destinations are rejected. URLs, including query strings, and cited evidence are persisted. The URL limit is 2,048 characters; the JSON body limit is 4,096 bytes. Unknown request fields are rejected.

tier accepts basic (the default) or pro_preview. Both are free in this pilot. A tier selects scope; it does not mean every criterion was tested. There is no payment, checkout or paid entitlement.

A new completed scan: HTTP 201
An identical completed retry: HTTP 200

{
  "scan_id": "<scan UUID>",
  "status": "completed",
  "report_id": "scan-<report UUID>",
  "report_url": "/reports/scan-<report UUID>",
  "api_report_url": "/api/reports/scan-<report UUID>",
  "report": { "...": "complete report JSON" },
  "replayed": false,
  "pilot": { "free": true, "billing_enabled": false }
}

The example abbreviates the report object. The completed response includes the full report, and its exact snapshot is saved before completion is returned. The Location header points to the scan status endpoint. Keep your own idempotency key before sending the request; if omitted, a generated key is returned in the Idempotency-Key response header.

An identical retry reuses the original job and report without fetching the website again. Reusing a key with a different normalized URL or tier returns HTTP 409. Concurrent identical requests may return HTTP 202 while the original request finishes; follow Location and respect Retry-After.

GET /api/scans/<scan_id>

status: "processing" | "completed" | "failed"
completed: report_id, report_url, api_report_url, links
failed: error, message, links

Status reads return the persisted job without scanning again. A report’s own status is complete or partial; this is separate from the job’s lifecycle. A completed job can contain a useful partial report.

The pilot permits at most 10 new scans per UTC minute and 100 per UTC day across the Site. A separate admission limit caps new job records at 20 per minute and 200 per day. HTTP 429 may therefore arrive without a job identifier. Existing jobs remain readable. Processing jobs older than 90 seconds become failed with interrupted when checked. Failed jobs are terminal: inspect their message and use a new key for an intentional new attempt. For a connection loss or HTTP 503, retry the same key first to recover any saved result.

Coverage: one initial HTML page, crawler policy and at most one same-origin sitemap document within fixed time and byte budgets. JavaScript rendering, authenticated pages, browser journeys and business-tool execution are outside this pilot. Read coverage, fetches, limitations and each finding’s status. not_tested is not a failed check. No overall compatibility score, AI recommendation or business outcome is promised.

2. Read JSON or Markdown

GET /api/reports/<report_id>
GET /api/reports/<report_id>?format=json
GET /api/reports/<report_id>?format=md

JSON response: { report, receipt, feedback }
report: { report_id, report_version, is_sample, findings, ... }
receipt: null (feedback is not enabled)

Open the sample JSON or download its Markdown. The sample remains fictional; a live scan carries is_sample: false. Use report_url for the readable report page.

The JSON report includes exact report versions and finding IDs. The response sets receipt to null and feedback.accepts_submissions to false. JSON and Markdown responses are not cached; Markdown is returned as an attachment.

Read the dashboard data directly

GET /api/insights

The dashboard and this endpoint use the same aggregate data. Read its dataset scope, methodology, population and per-criterion denominators before comparing results. Each website contributes its latest completed report. Pilot data may include internal testing and is not a representative market survey.

Issue counts describe observed checks, not measured lost leads or revenue. A possible effect on enquiries is an interpretation, not an observed conversion outcome. An unavailable value is not zero. Different scanner versions and assessment scopes are kept in separate groups. The aggregate endpoint contains no contact details or individual report evidence; use a specific report for its findings and trace.

Read aggregate JSON · View Latest checks. The same Site access policy applies to both.

Check a website → · Read the fictional sample →