Is this the kind of page Google ranks here

Embed
Preview of the card
<a href="https://seolyticize.com/docs/ref-get-sxo-gap"><img src="https://seolyticize.com/docs/_api/public/orgs/71cb2b7a-a719-4003-b3ea-6321dc1db8ab/spaces/3bf2dbf7-3faa-473c-ba3b-30588f5f8de4/pages/0e9cc6d9-be04-4087-b6b7-0821f2d05094/social-card.svg?v=3e7ae33eec8b" alt="Is this the kind of page Google ranks here" width="600" height="315"></a>
POSThttps://seolyticize.com/api/v1/tools/get_sxo_gap

Classifies the client's page and the top 10 results for its keyword into claude-seo's eight types (tool, local, comparison, product, landing, service, hybrid, else blog, in that order of precedence) and says how strongly Google agrees on one type (over 60% strong, 40–60% mixed, under 40% fragmented) and how bad the page's mismatch is, from an explicit page × results table (a blog where products, tools, local pages or landing pages rank is critical; a blog against comparisons high; a landing page where tools rank high), and which of the expected type's required elements the page has. A 0–100 gap score against the ranking pages: page type, depth, UX, schema, media and authority 15 each, freshness 10 (null parts drop out). keyword defaults to what the title and H1 share, else the page's top Search Console query. wireframe: true adds the page's sections now, the target outline and the target layout for the page type the results want (landing, blog, product, comparison, service, local, tool or hybrid; free); deep: true reads UX from the page rendered on a phone (H1 and CTA above the fold, tap targets, font size, overlaps, overlays) and authority from its E-E-A-T score beside domain authority, and rescores (free, slower); personas: true adds 4–7 searchers from People Also Ask, ads and related searches, each a full card (role, goal, emotional state, journey stage, key questions, intent) scored on relevance, clarity, trust and action (25 each) and rated 80 excellent, 60 good, 40 needs work, below a critical mismatch, a persona score weighted by each intent's share of the results, and 3–5 user stories ('As a …, I want to …, because …, but I'm blocked by …') with their evidence, from one metered Claude call. A heuristic, and it says so. Answers 'why doesn't this page rank' and 'what kind of page does Google want for this'. The results page is a paid lookup unless bought in the last day; quote with estimate_cost.

Parameters

Idempotency-Keystringheader
Any unique string, up to 200 characters. A retry with the same key and body is answered from the first answer (Idempotent-Replayed: true) for a day, so it never buys or writes twice; the same key with another body is refused.

Request body

application/json
clientIdstringrequired
urlstringrequired
keywordstring
= null
personasboolean
= false
wireframeboolean
= true
deepboolean
Also render the page on a phone and score its E-E-A-T, and read UX and authority from those (free, slower).
= false
locationCodeinteger
= null
languageCodestring
= null
maxCostMicrosinteger
Optional spending limit for this call, in micro-USD (1,000,000 = $1). A purchase that would take the call past it is refused before anything is bought. Pass the estimate from estimate_cost, or what the user agreed to spend.
dryRunboolean
True to buy nothing and get the quote instead: what the call would cost at most and what it would buy.
{
  "clientId": "string",
  "url": "string",
  "keyword": null,
  "personas": false,
  "wireframe": true,
  "deep": false,
  "locationCode": null,
  "languageCode": null,
  "maxCostMicros": 0,
  "dryRun": true
}

Code samples

cURL
curl -X POST "https://seolyticize.com/api/v1/tools/get_sxo_gap" \
  -H "Authorization: Bearer $SEOLYTICIZE_API_KEY" \
  -H "Idempotency-Key: <value>" \
  -H "Content-Type: application/json" \
  -d '{"clientId":"string","url":"string","keyword":null,"personas":false,"wireframe":true,"deep":false,"locationCode":null,"languageCode":null,"maxCostMicros":0,"dryRun":true}'
TypeScript
Python
Go
PHP
Ruby
Java

Responses

200 The tool's result under data, and its meta.
Example
{
  "data": {},
  "meta": {
    "requestId": "string",
    "costMicros": 0,
    "cached": true,
    "cachedFrom": "string",
    "dataAsOf": "string",
    "sources": [
      "string"
    ],
    "partial": true,
    "next": [
      {
        "tool": "string",
        "args": {},
        "why": "string"
      }
    ],
    "nextCursor": "string",
    "dryRun": true
  }
}
Schema
datarequired
metaobjectrequired
Beside every answer: what it cost, whether it came from cache, how fresh it is, whether it is complete, and what to call next.
Show child parameters
requestIdstringrequired
costMicrosintegerrequired
Charged by this call, micro-USD (1,000,000 = $1).
cachedbooleanrequired
True when nothing was bought.
cachedFromstring
When the oldest cached answer used was bought.
dataAsOfstring
sourcesstring[]
partialbooleanrequired
True when the data is incomplete: a running crawl, unfinished days, unread pages.
nextobject[]required
Show child parameters
toolstring
argsobject
whystring
nextCursorstring
Pass as cursor for the next page.
dryRunboolean
Headers
X-RateLimit-Limitinteger
Requests this key may make per window.
X-RateLimit-Remaininginteger
Requests left in the current window.
X-RateLimit-Resetinteger
Seconds until the current window resets.
X-Request-Idstring
The id to quote about this request.
400 The body was not JSON or did not match the tool's input schema.
Example
{
  "error": "string",
  "code": "string",
  "next": "string",
  "requestId": "string"
}
Schema
errorstringrequired
A sentence written for the caller. Internal failures are reduced to 'The request could not be completed.' and never carry detail.
codestring
A stable snake_case reason to branch on; GET /api/v1/errors lists them all.
nextstring
The call or step that fixes it, when there is one.
requestIdstring
Quote it when asking about a failure.
Headers
X-RateLimit-Limitinteger
Requests this key may make per window.
X-RateLimit-Remaininginteger
Requests left in the current window.
X-RateLimit-Resetinteger
Seconds until the current window resets.
401 No key, or a key that is unknown or revoked.

Same as 400 · POST /api/v1/tools/get_sxo_gap

Headers
WWW-Authenticatestring
403 The key's role does not permit the tool, or the key may not reach the named client.

Same as 400 · POST /api/v1/tools/get_sxo_gap

Headers
X-RateLimit-Limitinteger
Requests this key may make per window.
X-RateLimit-Remaininginteger
Requests left in the current window.
X-RateLimit-Resetinteger
Seconds until the current window resets.
404 No tool by that name.

Same as 400 · POST /api/v1/tools/get_sxo_gap

Headers
X-RateLimit-Limitinteger
Requests this key may make per window.
X-RateLimit-Remaininginteger
Requests left in the current window.
X-RateLimit-Resetinteger
Seconds until the current window resets.
409 A request with this Idempotency-Key is still running.

Same as 400 · POST /api/v1/tools/get_sxo_gap

Headers
X-RateLimit-Limitinteger
Requests this key may make per window.
X-RateLimit-Remaininginteger
Requests left in the current window.
X-RateLimit-Resetinteger
Seconds until the current window resets.
422 A well-formed request the product declined, with the reason — a duplicate name, a plan limit, nothing configured to run.

Same as 400 · POST /api/v1/tools/get_sxo_gap

Headers
X-RateLimit-Limitinteger
Requests this key may make per window.
X-RateLimit-Remaininginteger
Requests left in the current window.
X-RateLimit-Resetinteger
Seconds until the current window resets.
429 This key has used its window.

Same as 400 · POST /api/v1/tools/get_sxo_gap

Headers
X-RateLimit-Limitinteger
Requests this key may make per window.
X-RateLimit-Remaininginteger
Requests left in the current window.
X-RateLimit-Resetinteger
Seconds until the current window resets.
Retry-Afterinteger
Seconds to wait before retrying.
500 The request could not be completed.

Same as 400 · POST /api/v1/tools/get_sxo_gap

Headers
X-RateLimit-Limitinteger
Requests this key may make per window.
X-RateLimit-Remaininginteger
Requests left in the current window.
X-RateLimit-Resetinteger
Seconds until the current window resets.
Updated