{"openapi":"3.1.0","info":{"title":"Pa1m SEO","version":"1.0.0","description":"SEO audit any website — 200 rules across 20 categories: technical health, Core Web Vitals, content quality, AI-GEO signals, accessibility, security headers, structured data, and more. Async job flow: POST /scan/quick or /scan/full → poll GET /status/{job_id} → get JSON result with per-category scores (0–100) and issue lists. Use /brief for an AI action plan, /analyze for free-form SEO questions, or /check/{category} for instant single-category audits.","x-guidance":"Pa1m SEO audits any website across 200 rules and 20 categories — technical health, Core Web Vitals, content quality, AI-GEO signals, accessibility, security headers, and more. Built for AI agents: async job flow, structured JSON output, no accounts or API keys required.\n\n## How to use\n1. POST /scan/quick {\"url\": \"https://example.com\"} → {\"job_id\": \"...\", \"status\": \"pending\"}\n2. GET /status/{job_id} (free, poll every 5s) → {\"status\": \"done\", \"result\": {...}}\n3. POST /brief {\"job_id\": \"...\", \"url\": \"...\"} → Markdown action plan with prioritized fixes\n4. POST /analyze {\"url\": \"...\", \"task\": \"Why is my Core Web Vitals score low?\"} → AI analysis\n\nFor instant spot-checks without a full scan: GET /check/{category}?url=https://example.com\n\n## Prices (USDC on Base)\n/check/{category} — $0.05 | /scan/quick — $0.50 | /scan/full — $2.00 | /brief — $0.50 | /analyze — $0.75\n\n## 20 audit categories\ncore-seo (title, meta, headings, canonical) | performance (speed, Core Web Vitals) | links (internal/external, broken) | images (alt text, formats, sizing) | security (HTTPS, headers, vulnerabilities) | technical (robots.txt, sitemap) | crawlability (indexability, directives) | structured-data (Schema.org, JSON-LD) | js-rendering (JS-dependent content issues) | accessibility (WCAG, ARIA, contrast) | content (readability, thin/duplicate) | social (Open Graph, Twitter cards) | eeat (expertise, authority, trust signals) | url-structure (depth, parameters) | redirects (chains, loops) | mobile (viewport, touch targets) | i18n (hreflang, locale tags) | html (validity, structure) | ai-geo (AI search optimization signals) | legal (privacy policy, cookie consent)","contact":{"email":"merchants@hypa1m.xyz"}},"paths":{"/.well-known/agent.json":{"get":{"summary":"Agent Info","description":"Bazaar / Agentic.market discovery metadata.","operationId":"agent_info__well_known_agent_json_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[]}},"/health":{"get":{"summary":"Health","operationId":"health_health_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[]}},"/llms.txt":{"get":{"summary":"Llms Txt","operationId":"llms_txt_llms_txt_get","responses":{"200":{"description":"Successful Response","content":{"text/plain":{"schema":{"type":"string"}}}}},"security":[]}},"/status/{job_id}":{"get":{"summary":"Job Status","description":"Poll until status='done'. Free endpoint. Returns status (pending|done|failed) and result JSON when complete.","operationId":"get_status_status__job_id__get","parameters":[{"name":"job_id","in":"path","required":true,"schema":{"type":"string","title":"Job Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[]}},"/scan/quick":{"post":{"summary":"Quick SEO Audit — 50 pages, $0.50","description":"Crawls up to 50 pages of a website and scores all 20 SEO categories (200 rules). Returns a job_id immediately. Poll GET /status/{job_id} every 5s until status='done' (~30–120s). The result JSON contains per-category scores (0–100), issue lists with severity, and page-level breakdowns. Use /brief or /analyze on the completed job for AI insights. Body: {\"url\": \"https://example.com\"}","operationId":"scan_quick_scan_quick_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ScanRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}},"402":{"description":"Payment Required"}},"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.500000"},"protocols":[{"x402":{}},{"mpp":{"method":"tempo","intent":"charge","currency":"USD"}}]}}},"/scan/full":{"post":{"summary":"Full SEO Audit — 500 pages, $2.00","description":"Deep crawl up to 500 pages across all 20 SEO categories (200 rules). Recommended for large sites, e-commerce stores, or when quick scan misses critical pages. Returns a job_id immediately. Poll GET /status/{job_id} until status='done' (~2–15min). Same result structure as quick scan but with higher page coverage and more accurate averages. Body: {\"url\": \"https://example.com\"}","operationId":"scan_full_scan_full_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ScanRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}},"402":{"description":"Payment Required"}},"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"2.000000"},"protocols":[{"x402":{}},{"mpp":{"method":"tempo","intent":"charge","currency":"USD"}}]}}},"/check/core-seo":{"get":{"tags":["checks"],"summary":"Audit title tags, meta descriptions, H1–H6 headings and canonical URLs","description":"Checks the fundamental on-page SEO elements: title tag length and uniqueness, meta description presence, heading hierarchy (H1–H6), canonical URL correctness, and keyword signals. Returns a score 0–100 with a list of issues and affected pages.\n\nServed from 24h cache when available (instant response). Otherwise starts a background scan and returns a job_id — poll /status/{job_id} until done.","operationId":"check_core_seo_check_core_seo_get","parameters":[{"name":"url","in":"query","required":true,"schema":{"type":"string","description":"URL to audit, e.g. https://example.com","title":"Url"},"description":"URL to audit, e.g. https://example.com"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}},"402":{"description":"Payment Required"}},"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.050000"},"protocols":[{"x402":{}},{"mpp":{"method":"tempo","intent":"charge","currency":"USD"}}]}}},"/check/performance":{"get":{"tags":["checks"],"summary":"Measure Core Web Vitals — LCP, CLS, FID — and overall page speed","description":"Runs Lighthouse-based performance checks: Largest Contentful Paint, Cumulative Layout Shift, First Input Delay, Time to First Byte, and resource load order. Returns per-metric scores and recommendations.\n\nServed from 24h cache when available (instant response). Otherwise starts a background scan and returns a job_id — poll /status/{job_id} until done.","operationId":"check_performance_check_performance_get","parameters":[{"name":"url","in":"query","required":true,"schema":{"type":"string","description":"URL to audit, e.g. https://example.com","title":"Url"},"description":"URL to audit, e.g. https://example.com"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}},"402":{"description":"Payment Required"}},"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.050000"},"protocols":[{"x402":{}},{"mpp":{"method":"tempo","intent":"charge","currency":"USD"}}]}}},"/check/links":{"get":{"tags":["checks"],"summary":"Find broken links, orphan pages and weak internal linking","description":"Crawls all internal and external links, detects 404s, redirect chains, orphan pages with no inbound links, and anchor text diversity issues. Returns a list of broken URLs and linking gaps.\n\nServed from 24h cache when available (instant response). Otherwise starts a background scan and returns a job_id — poll /status/{job_id} until done.","operationId":"check_links_check_links_get","parameters":[{"name":"url","in":"query","required":true,"schema":{"type":"string","description":"URL to audit, e.g. https://example.com","title":"Url"},"description":"URL to audit, e.g. https://example.com"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}},"402":{"description":"Payment Required"}},"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.050000"},"protocols":[{"x402":{}},{"mpp":{"method":"tempo","intent":"charge","currency":"USD"}}]}}},"/check/images":{"get":{"tags":["checks"],"summary":"Check alt text, image formats, compression and lazy loading","description":"Audits every image for missing or empty alt attributes, non-WebP formats, oversized files, missing width/height attributes, and lazy loading. Returns a scored report with offending image URLs.\n\nServed from 24h cache when available (instant response). Otherwise starts a background scan and returns a job_id — poll /status/{job_id} until done.","operationId":"check_images_check_images_get","parameters":[{"name":"url","in":"query","required":true,"schema":{"type":"string","description":"URL to audit, e.g. https://example.com","title":"Url"},"description":"URL to audit, e.g. https://example.com"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}},"402":{"description":"Payment Required"}},"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.050000"},"protocols":[{"x402":{}},{"mpp":{"method":"tempo","intent":"charge","currency":"USD"}}]}}},"/check/security":{"get":{"tags":["checks"],"summary":"Verify HTTPS, security headers and mixed content issues","description":"Checks for HTTPS enforcement, HSTS, Content-Security-Policy, X-Frame-Options, Referrer-Policy, mixed content warnings, and exposed sensitive files. Returns a security score with specific header gaps.\n\nServed from 24h cache when available (instant response). Otherwise starts a background scan and returns a job_id — poll /status/{job_id} until done.","operationId":"check_security_check_security_get","parameters":[{"name":"url","in":"query","required":true,"schema":{"type":"string","description":"URL to audit, e.g. https://example.com","title":"Url"},"description":"URL to audit, e.g. https://example.com"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}},"402":{"description":"Payment Required"}},"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.050000"},"protocols":[{"x402":{}},{"mpp":{"method":"tempo","intent":"charge","currency":"USD"}}]}}},"/check/technical":{"get":{"tags":["checks"],"summary":"Inspect robots.txt, XML sitemap and crawl configuration","description":"Validates robots.txt syntax, sitemap presence and freshness, correct disallow rules, crawl-delay settings, and sitemap–robots consistency. Returns issues that may block search engine crawlers.\n\nServed from 24h cache when available (instant response). Otherwise starts a background scan and returns a job_id — poll /status/{job_id} until done.","operationId":"check_technical_check_technical_get","parameters":[{"name":"url","in":"query","required":true,"schema":{"type":"string","description":"URL to audit, e.g. https://example.com","title":"Url"},"description":"URL to audit, e.g. https://example.com"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}},"402":{"description":"Payment Required"}},"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.050000"},"protocols":[{"x402":{}},{"mpp":{"method":"tempo","intent":"charge","currency":"USD"}}]}}},"/check/crawlability":{"get":{"tags":["checks"],"summary":"Detect noindex tags, blocked resources and crawl budget waste","description":"Identifies pages accidentally marked noindex, resources blocked by robots.txt, pagination issues, duplicate URL variants (trailing slash, www/non-www), and crawl budget signals.\n\nServed from 24h cache when available (instant response). Otherwise starts a background scan and returns a job_id — poll /status/{job_id} until done.","operationId":"check_crawlability_check_crawlability_get","parameters":[{"name":"url","in":"query","required":true,"schema":{"type":"string","description":"URL to audit, e.g. https://example.com","title":"Url"},"description":"URL to audit, e.g. https://example.com"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}},"402":{"description":"Payment Required"}},"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.050000"},"protocols":[{"x402":{}},{"mpp":{"method":"tempo","intent":"charge","currency":"USD"}}]}}},"/check/structured-data":{"get":{"tags":["checks"],"summary":"Validate Schema.org JSON-LD markup for rich result eligibility","description":"Parses all JSON-LD and Microdata on the page, validates against Schema.org specs, checks for required fields for rich results (Article, Product, FAQ, BreadcrumbList, etc.), and reports validation errors.\n\nServed from 24h cache when available (instant response). Otherwise starts a background scan and returns a job_id — poll /status/{job_id} until done.","operationId":"check_structured_data_check_structured_data_get","parameters":[{"name":"url","in":"query","required":true,"schema":{"type":"string","description":"URL to audit, e.g. https://example.com","title":"Url"},"description":"URL to audit, e.g. https://example.com"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}},"402":{"description":"Payment Required"}},"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.050000"},"protocols":[{"x402":{}},{"mpp":{"method":"tempo","intent":"charge","currency":"USD"}}]}}},"/check/js-rendering":{"get":{"tags":["checks"],"summary":"Detect content hidden behind JavaScript and render-blocking scripts","description":"Compares server-rendered HTML vs JS-rendered DOM to find content invisible to crawlers, identifies render-blocking scripts and stylesheets, and flags lazy-loaded content that may not be indexed.\n\nServed from 24h cache when available (instant response). Otherwise starts a background scan and returns a job_id — poll /status/{job_id} until done.","operationId":"check_js_rendering_check_js_rendering_get","parameters":[{"name":"url","in":"query","required":true,"schema":{"type":"string","description":"URL to audit, e.g. https://example.com","title":"Url"},"description":"URL to audit, e.g. https://example.com"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}},"402":{"description":"Payment Required"}},"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.050000"},"protocols":[{"x402":{}},{"mpp":{"method":"tempo","intent":"charge","currency":"USD"}}]}}},"/check/accessibility":{"get":{"tags":["checks"],"summary":"Check WCAG 2.1 compliance — ARIA, contrast, keyboard navigation","description":"Runs automated WCAG 2.1 Level AA checks: color contrast ratios, ARIA landmark usage, form label associations, keyboard focus order, image alt text, and skip navigation links.\n\nServed from 24h cache when available (instant response). Otherwise starts a background scan and returns a job_id — poll /status/{job_id} until done.","operationId":"check_accessibility_check_accessibility_get","parameters":[{"name":"url","in":"query","required":true,"schema":{"type":"string","description":"URL to audit, e.g. https://example.com","title":"Url"},"description":"URL to audit, e.g. https://example.com"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}},"402":{"description":"Payment Required"}},"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.050000"},"protocols":[{"x402":{}},{"mpp":{"method":"tempo","intent":"charge","currency":"USD"}}]}}},"/check/content":{"get":{"tags":["checks"],"summary":"Score content quality — readability, thin pages and duplicate text","description":"Analyzes reading level (Flesch-Kincaid), detects thin content (under 300 words), near-duplicate pages, keyword stuffing, and content-to-HTML ratio. Returns per-page content quality scores.\n\nServed from 24h cache when available (instant response). Otherwise starts a background scan and returns a job_id — poll /status/{job_id} until done.","operationId":"check_content_check_content_get","parameters":[{"name":"url","in":"query","required":true,"schema":{"type":"string","description":"URL to audit, e.g. https://example.com","title":"Url"},"description":"URL to audit, e.g. https://example.com"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}},"402":{"description":"Payment Required"}},"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.050000"},"protocols":[{"x402":{}},{"mpp":{"method":"tempo","intent":"charge","currency":"USD"}}]}}},"/check/social":{"get":{"tags":["checks"],"summary":"Audit Open Graph and Twitter/X card tags for social previews","description":"Checks og:title, og:description, og:image, twitter:card, twitter:image, and related tags. Validates image dimensions for social sharing and detects missing or malformed social metadata.\n\nServed from 24h cache when available (instant response). Otherwise starts a background scan and returns a job_id — poll /status/{job_id} until done.","operationId":"check_social_check_social_get","parameters":[{"name":"url","in":"query","required":true,"schema":{"type":"string","description":"URL to audit, e.g. https://example.com","title":"Url"},"description":"URL to audit, e.g. https://example.com"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}},"402":{"description":"Payment Required"}},"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.050000"},"protocols":[{"x402":{}},{"mpp":{"method":"tempo","intent":"charge","currency":"USD"}}]}}},"/check/eeat":{"get":{"tags":["checks"],"summary":"Assess E-E-A-T signals — expertise, authoritativeness, trustworthiness","description":"Looks for author bio markup, About/Contact pages, editorial policy, external citations, review signals, and other trust indicators that Google uses for E-E-A-T evaluation.\n\nServed from 24h cache when available (instant response). Otherwise starts a background scan and returns a job_id — poll /status/{job_id} until done.","operationId":"check_eeat_check_eeat_get","parameters":[{"name":"url","in":"query","required":true,"schema":{"type":"string","description":"URL to audit, e.g. https://example.com","title":"Url"},"description":"URL to audit, e.g. https://example.com"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}},"402":{"description":"Payment Required"}},"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.050000"},"protocols":[{"x402":{}},{"mpp":{"method":"tempo","intent":"charge","currency":"USD"}}]}}},"/check/url-structure":{"get":{"tags":["checks"],"summary":"Analyze URL depth, parameters and slug readability","description":"Checks URL length, directory depth, presence of dynamic parameters (?id=), special characters, uppercase letters, and keyword inclusion. Returns a list of URLs that violate best practices.\n\nServed from 24h cache when available (instant response). Otherwise starts a background scan and returns a job_id — poll /status/{job_id} until done.","operationId":"check_url_structure_check_url_structure_get","parameters":[{"name":"url","in":"query","required":true,"schema":{"type":"string","description":"URL to audit, e.g. https://example.com","title":"Url"},"description":"URL to audit, e.g. https://example.com"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}},"402":{"description":"Payment Required"}},"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.050000"},"protocols":[{"x402":{}},{"mpp":{"method":"tempo","intent":"charge","currency":"USD"}}]}}},"/check/redirects":{"get":{"tags":["checks"],"summary":"Map redirect chains, loops and unnecessary 3xx hops","description":"Traces all redirects site-wide, detects chains longer than 2 hops, redirect loops, mixed HTTP/HTTPS redirects, and www/non-www inconsistencies. Returns a redirect map with hop counts.\n\nServed from 24h cache when available (instant response). Otherwise starts a background scan and returns a job_id — poll /status/{job_id} until done.","operationId":"check_redirects_check_redirects_get","parameters":[{"name":"url","in":"query","required":true,"schema":{"type":"string","description":"URL to audit, e.g. https://example.com","title":"Url"},"description":"URL to audit, e.g. https://example.com"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}},"402":{"description":"Payment Required"}},"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.050000"},"protocols":[{"x402":{}},{"mpp":{"method":"tempo","intent":"charge","currency":"USD"}}]}}},"/check/mobile":{"get":{"tags":["checks"],"summary":"Test mobile usability — viewport, touch targets and font sizes","description":"Checks viewport meta tag, tap target spacing (minimum 48×48px), font size legibility (minimum 16px body), horizontal scroll issues, and mobile-specific render problems.\n\nServed from 24h cache when available (instant response). Otherwise starts a background scan and returns a job_id — poll /status/{job_id} until done.","operationId":"check_mobile_check_mobile_get","parameters":[{"name":"url","in":"query","required":true,"schema":{"type":"string","description":"URL to audit, e.g. https://example.com","title":"Url"},"description":"URL to audit, e.g. https://example.com"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}},"402":{"description":"Payment Required"}},"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.050000"},"protocols":[{"x402":{}},{"mpp":{"method":"tempo","intent":"charge","currency":"USD"}}]}}},"/check/i18n":{"get":{"tags":["checks"],"summary":"Validate hreflang tags, locale signals and international SEO setup","description":"Audits hreflang attribute syntax, self-referencing hreflang, return-tag presence, x-default usage, and Content-Language headers. Returns a list of hreflang errors per page.\n\nServed from 24h cache when available (instant response). Otherwise starts a background scan and returns a job_id — poll /status/{job_id} until done.","operationId":"check_i18n_check_i18n_get","parameters":[{"name":"url","in":"query","required":true,"schema":{"type":"string","description":"URL to audit, e.g. https://example.com","title":"Url"},"description":"URL to audit, e.g. https://example.com"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}},"402":{"description":"Payment Required"}},"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.050000"},"protocols":[{"x402":{}},{"mpp":{"method":"tempo","intent":"charge","currency":"USD"}}]}}},"/check/html":{"get":{"tags":["checks"],"summary":"Validate HTML structure, semantic elements and document outline","description":"Checks DOCTYPE declaration, charset, viewport meta, deprecated tags, nesting errors, missing semantic landmarks (main, nav, header, footer), and duplicate IDs.\n\nServed from 24h cache when available (instant response). Otherwise starts a background scan and returns a job_id — poll /status/{job_id} until done.","operationId":"check_html_check_html_get","parameters":[{"name":"url","in":"query","required":true,"schema":{"type":"string","description":"URL to audit, e.g. https://example.com","title":"Url"},"description":"URL to audit, e.g. https://example.com"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}},"402":{"description":"Payment Required"}},"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.050000"},"protocols":[{"x402":{}},{"mpp":{"method":"tempo","intent":"charge","currency":"USD"}}]}}},"/check/ai-geo":{"get":{"tags":["checks"],"summary":"Score AI search visibility — GEO signals and LLM citation readiness","description":"Checks signals that influence visibility in AI-generated answers: FAQ/HowTo schema, clear factual statements, author expertise markup, citation-friendly content structure, and llms.txt presence.\n\nServed from 24h cache when available (instant response). Otherwise starts a background scan and returns a job_id — poll /status/{job_id} until done.","operationId":"check_ai_geo_check_ai_geo_get","parameters":[{"name":"url","in":"query","required":true,"schema":{"type":"string","description":"URL to audit, e.g. https://example.com","title":"Url"},"description":"URL to audit, e.g. https://example.com"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}},"402":{"description":"Payment Required"}},"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.050000"},"protocols":[{"x402":{}},{"mpp":{"method":"tempo","intent":"charge","currency":"USD"}}]}}},"/check/legal":{"get":{"tags":["checks"],"summary":"Check privacy policy, cookie consent and Terms of Service presence","description":"Detects presence and accessibility of privacy policy, cookie consent mechanism, Terms of Service, GDPR/CCPA compliance signals, and data collection disclosures.\n\nServed from 24h cache when available (instant response). Otherwise starts a background scan and returns a job_id — poll /status/{job_id} until done.","operationId":"check_legal_check_legal_get","parameters":[{"name":"url","in":"query","required":true,"schema":{"type":"string","description":"URL to audit, e.g. https://example.com","title":"Url"},"description":"URL to audit, e.g. https://example.com"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}},"402":{"description":"Payment Required"}},"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.050000"},"protocols":[{"x402":{}},{"mpp":{"method":"tempo","intent":"charge","currency":"USD"}}]}}},"/brief":{"post":{"summary":"AI SEO Action Plan — $0.50","description":"Takes a completed scan result and generates a prioritized Markdown action plan. Groups issues by severity (critical / high / medium / low), explains why each matters, and gives concrete implementation steps. Requires: job_id (from /scan/quick or /scan/full) + url. Optional: language (default 'en') for localized output, deep=true for more detail. Body: {\"job_id\": \"...\", \"url\": \"https://example.com\", \"language\": \"en\"}","operationId":"brief_brief_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BriefRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}},"402":{"description":"Payment Required"}},"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.500000"},"protocols":[{"x402":{}},{"mpp":{"method":"tempo","intent":"charge","currency":"USD"}}]}}},"/analyze":{"post":{"summary":"Free-Form AI Analysis — $0.75","description":"Ask any SEO question about a website in plain text. The AI agent reads cached audit data for the URL, selects the relevant audit categories, and returns a structured answer with evidence from the audit results. Examples: 'Why is my Core Web Vitals score low?', 'What is blocking my site from ranking?', 'Compare my mobile vs desktop performance', 'What structured data should I add?'. Requires: url + task (your question). Optional: language, deep=true for deeper analysis. Body: {\"url\": \"https://example.com\", \"task\": \"Why is my page speed score low?\", \"language\": \"en\"}","operationId":"analyze_endpoint_analyze_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AnalyzeRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}},"402":{"description":"Payment Required"}},"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.750000"},"protocols":[{"x402":{}},{"mpp":{"method":"tempo","intent":"charge","currency":"USD"}}]}}}},"components":{"schemas":{"AnalyzeRequest":{"properties":{"url":{"type":"string","title":"Url"},"task":{"type":"string","title":"Task"},"language":{"type":"string","title":"Language","default":"en"},"deep":{"type":"boolean","title":"Deep","default":false}},"type":"object","required":["url","task"],"title":"AnalyzeRequest","example":{"language":"en","task":"Why is this site slow? What are the top performance issues?","url":"https://example.com"}},"BriefRequest":{"properties":{"job_id":{"type":"string","title":"Job Id"},"url":{"type":"string","title":"Url"},"language":{"type":"string","title":"Language","default":"en"},"deep":{"type":"boolean","title":"Deep","default":false}},"type":"object","required":["job_id","url"],"title":"BriefRequest"},"HTTPValidationError":{"properties":{"detail":{"items":{"$ref":"#/components/schemas/ValidationError"},"type":"array","title":"Detail"}},"type":"object","title":"HTTPValidationError"},"ScanRequest":{"properties":{"url":{"type":"string","title":"Url"}},"type":"object","required":["url"],"title":"ScanRequest"},"ValidationError":{"properties":{"loc":{"items":{"anyOf":[{"type":"string"},{"type":"integer"}]},"type":"array","title":"Location"},"msg":{"type":"string","title":"Message"},"type":{"type":"string","title":"Error Type"},"input":{"title":"Input"},"ctx":{"type":"object","title":"Context"}},"type":"object","required":["loc","msg","type"],"title":"ValidationError"}}}}