The AZi API
The same engine behind our free tools, as an endpoint. Audit any page for technical SEO, AI citation readiness or its tech stack.
Create a free key in your account, send it as a Bearer token, and call /api/v1/seo?url=example.com. You get JSON with a score and every individual check, each with the specific fix. 60 requests an hour, 500 a day, free.
Getting a key
Create an account, then generate a key at /account/api. The key is shown once — we store only a hash of it, so it cannot be shown again. Lose it and you revoke it and make a new one.
Authentication
Send the key as a Bearer token. That keeps it out of server logs and browser history:
A ?api_key= query parameter also works, but it is discouraged for exactly the reason above.
Endpoints
GET /api/v1/seo
Twenty weighted technical checks — title, meta, headings, canonical, indexability, schema, images, content depth, links, sitemap, compression, response time, security headers. Returns a 0–100 score, an A–F grade, and every check with its own fix.
GET /api/v1/ai-search
Whether a page is built to be quoted by AI answer engines. The heaviest weights go to the two things that decide it: whether the content exists in the raw HTML at all, and whether AI crawlers are allowed in robots.txt.
GET /api/v1/tech
Platform, framework, analytics, CDN and hosting detected from headers and page signatures.
GET /api/v1/me
Your key's tier, limits and current usage. Does not count against your quota.
Parameters
url— required on the three analysis endpoints. A public http or https address. Bare domains are accepted and https is assumed.
Response shape
Rate limits
Free tier is 60 requests an hour and 500 a day. Every response carries the current position:
Go over and you get 429 with a retry_after_seconds value. Repeat calls for the same URL are served from cache for an hour and still count, but return in milliseconds.
Errors
Every failure returns the same shape, with a stable machine-readable code:
| Code | HTTP | Meaning |
|---|---|---|
no_key | 401 | No key sent |
bad_key | 401 | Key invalid, revoked or expired |
missing_url | 422 | No url parameter |
bad_url | 422 | Not a valid public address |
rate_limited | 429 | Hourly or daily limit reached |
fetch_failed | 502 | We could not reach that page |
upstream_error | 502 | That page returned a 4xx or 5xx |
What this API will not do
It will not fetch private addresses. Anything resolving to a private or reserved IP range is refused, on every redirect hop. That is deliberate — an open fetcher is a server-side request forgery hole.
It does not run JavaScript. We read the HTML your server actually returns, which is precisely the point: that is what a search crawler and an AI crawler see too.
It is not a rank tracker. No free, legitimate source of live ranking positions exists — anyone offering one is scraping search results against their terms. We measure the page, not the market.
Version stability
The v1 path will not change shape under you. New fields may be added to data; existing fields will not be renamed or removed. Anything breaking goes to v2 with the old version left running.