Create audit

Fetches one page and reports what it gets wrong.

POST /v1/seo/audit

Addresshttps://api.hanzo.ai/v1/seo/audit
MethodPOST
OperationseoAudit
AuthAuthorization: Bearer $HANZO_API_KEY

Fetches one page and reports what it gets wrong.

It returns the page's on-page score, its title and description, how much readable text it carries, and the full set of named checks — is it https, does it have one h1, is the title duplicated, is it slow, is it a redirect, is anything on it broken. It is the technical half of search visibility, and it is the half a developer can act on this afternoon.

ONE PAGE, LIVE, IN THIS REQUEST. It is deliberately not a site crawl: a crawl is a job with a lifecycle, and this answers the same questions about the page somebody is actually looking at, now, with no task id to poll. Point it at the pages that matter one at a time.

It is priced per page fetched, which is one.

Request

1 field, body application/json (required).

FieldInTypeRequiredDescription
urlbodystring—URL is the page, absolute and http or https.

Response

StatusBodyMeaning
200seo.seoAuditOutok
defaultproblem-detailsrefused

200 body — 9 fields.

FieldInTypeAlwaysDescription
checksbodyobject—Checks is every named finding, each a yes or no — "is_https", "no_h1_tag", "high_loading_time", around fifty of them.
checks.*bodyboolean—
costbodystring—Cost is what this call cost, in USD, as an exact decimal string.
descriptionbodystring—Description is its meta description.
scorebodynumber (double)—Score is the upstream's on-page score, 0 to 100.
statusbodyinteger (int64)—Status is the HTTP status the page answered with.
titlebodystring—Title is the page's title.
urlbodystring—URL is the address actually read, after redirects.
wordsbodyinteger (int64)—Words is how many words of readable text the page carries.

Failure carries the platform error shape — see Errors.

Examples

hanzo seo audit
import { Configuration, SeoApi } from 'hanzoai';

const api = new SeoApi(new Configuration({ accessToken: process.env.HANZO_API_KEY }));
const { data } = await api.seoAudit({ url: "<url>" });
from hanzoai.cloud import ApiClient, Configuration
from hanzoai.cloud.api import SeoApi

client = ApiClient(Configuration(access_token=os.environ["HANZO_API_KEY"]))
result = SeoApi(client).seo_audit(url="<url>")
cfg := hanzoai.NewConfiguration()
cfg.AddDefaultHeader("Authorization", "Bearer "+os.Getenv("HANZO_API_KEY"))
client := hanzoai.NewAPIClient(cfg)

resp, _, err := client.SeoAPI.SeoAudit(context.Background()).Execute()
if err != nil {
	return err
}
use hanzo_client::apis::{configuration::Configuration, seo_api};

let mut cfg = Configuration::new();
cfg.bearer_access_token = std::env::var("HANZO_API_KEY").ok();

let result = seo_api::seo_audit(&cfg, Default::default()).await?;
import ai.hanzo.cloud.ApiClient;
import ai.hanzo.cloud.api.SeoApi;

ApiClient client = new ApiClient();
client.setBearerToken(System.getenv("HANZO_API_KEY"));

var result = new SeoApi(client).seoAudit();
curl -X POST https://api.hanzo.ai/v1/seo/audit \
  -H "Authorization: Bearer $HANZO_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
       "url": "<url>"
     }'

Tool seo, op seoAudit — POST the JSON-RPC envelope to https://api.hanzo.ai/v1/mcp.

curl -X POST https://api.hanzo.ai/v1/mcp \
  -H "Authorization: Bearer $HANZO_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
       "jsonrpc": "2.0",
       "id": 1,
       "method": "tools/call",
       "params": {
         "name": "seo",
         "arguments": {
           "op": "seoAudit",
           "input": {
             "url": "<url>"
           }
         }
       }
     }'

SEO API · All Hanzo APIs · Interactive reference

Was this page useful?