Page audit API
The page audit API fetches one public URL and returns its on-page SEO signals as JSON, so a script, agent or spreadsheet can check titles and tags without running a crawler.
Early access: billing is not open yet. Prices below are what a call will debit when it opens. Request access →
Price: $0.001 per call (one credit), with 25 free lookups per account each UTC month. Data source: the caller URL after that host's robots.txt.
Request
Send POST /v1/page-audit with a JSON body and your key in the Authorization: Bearer header. Send a public http or https URL. The JSON names the title, meta description, canonical, robots meta, headings, hreflang, JSON-LD types, and internal and external link counts. A robots disallow returns HTTP 403 and does not fetch the page.
curl https://one-api.ai/v1/page-audit \
-H "Authorization: Bearer $ONE_API_TOKEN" \
-H "Content-Type: application/json" \
-d '{"url":"https://example.com/"}'
import os, requests
resp = requests.post(
"https://one-api.ai/v1/page-audit",
headers={"Authorization": f"Bearer {os.environ['ONE_API_TOKEN']}"},
json={"url":"https://example.com/"},
timeout=30,
)
print(resp.status_code, resp.json())
Response fields
| Field | Meaning |
|---|---|
final_url | The URL after redirects (up to five hops). |
status | HTTP status of the final response. |
title | Text of the title element, or null. |
meta_description | Content of the meta description, or null. |
canonical | The rel=canonical URL, resolved against the final URL, or null. |
robots_meta | Content of the robots meta tag, or null. |
headings | Arrays of h1, h2 and h3 text. |
hreflang | Each alternate link with its language and absolute URL. |
json_ld_types | The @type values found in JSON-LD blocks. |
links | Counts of internal and external links. |
truncated | True when the page was larger than 1 MiB and only the first 1 MiB was read. |
Limits and behaviour
- robots.txt is read first. If it disallows the URL for our user agent, the call returns HTTP 403 with robots_disallow and the page is not fetched.
- Only http and https on ports 80 and 443. Private, loopback and cloud metadata hosts are refused with HTTP 400.
- Each fetch times out after 10 seconds and reads at most 1 MiB.
- JavaScript is not executed. The audit sees the HTML the server sends.
Errors come back as JSON with an HTTP status and a short code. HTTP 400 means the input was refused, 401 a missing or bad key, 402 an empty balance, 429 a rate limit and 502 an upstream failure. Calls that end in 400 or a 5xx status are not charged.
What people use it for
- Check that a release did not drop a title, canonical or meta description.
- Feed an AI agent the headings and schema types of a competitor page.
- Spot pages whose canonical points somewhere unexpected.
The same lookup is available to AI agents through the remote MCP server at https://one-api.ai/mcp, using the same key and the same price per call.
FAQ
Does the page audit render JavaScript?
No. It parses the HTML returned by the server, which is also what most crawlers see on the first pass.
Why did I get HTTP 403?
The site's robots.txt disallows that path. We respect it and do not fetch the page.
Is a failed audit charged?
A call that returns HTTP 400 or a 5xx error releases its lookup, so it is not charged.
Related
Last updated 2026-10-31.