--- name: pa1m-seo description: Audit any website for SEO issues using the Pa1m SEO API. Use this skill when the user asks to check SEO, audit a website, analyze page speed, review meta tags, check Core Web Vitals, find broken links, or get an AI-generated SEO action plan. Pays per request in USDC on Base via x402 — no API key or account needed. --- # Pa1m SEO — Claude Code Skill Pa1m SEO audits any website across 200 rules and 20 categories. Pay per call in USDC on Base via x402 — no accounts, no API keys. Base URL: https://seo.hypa1m.xyz ## Workflow Always follow this async pattern: 1. POST /scan/quick or /scan/full → get job_id 2. GET /status/{job_id} every 5s (free) → wait for status="done" 3. Optionally POST /brief or /analyze for AI insights ## Endpoints ### POST /scan/quick — $0.50 Crawl up to 50 pages, score all 20 categories. ``` POST https://seo.hypa1m.xyz/scan/quick {"url": "https://example.com"} → {"job_id": "abc123", "status": "pending"} ``` ### POST /scan/full — $5.00 Deep crawl up to 500 pages. Use for large sites or e-commerce. ``` POST https://seo.hypa1m.xyz/scan/full {"url": "https://example.com"} ``` ### GET /status/{job_id} — FREE Poll until status="done". Result contains per-category scores and issue lists. ``` GET https://seo.hypa1m.xyz/status/abc123 → { "status": "done", "result": { "url": "https://example.com", "overallScore": 93, "categoryResults": [ { "categoryId": "core", "score": 100, "passCount": 18, "warnCount": 0, "failCount": 1, "results": [ { "ruleId": "core-title-present", "status": "pass", "message": "Title tag is present", "score": 100, "details": { "found": true, "title": "..." } } ] } ] } } ``` overallScore: 0–100. categoryId values: core | performance | links | images | security | technical | crawlability | structured-data | js-rendering | accessibility | content | social | eeat | url-structure | redirects | mobile | i18n | html | ai-geo | legal. Each result has ruleId, status (pass/warn/fail), message, score, details. ### GET /check/{category} — $0.15 Instant single-category audit. Served from 24h cache when available. Categories: core-seo | performance | links | images | security | technical | crawlability | structured-data | js-rendering | accessibility | content | social | eeat | url-structure | redirects | mobile | i18n | html | ai-geo | legal ``` GET https://seo.hypa1m.xyz/check/performance?url=https://example.com ``` ### POST /brief — $0.50 AI action plan from a completed scan. Prioritized by severity. ``` POST https://seo.hypa1m.xyz/brief {"job_id": "abc123", "url": "https://example.com", "language": "en"} → Markdown action plan grouped by critical/high/medium/low ``` ### POST /analyze — $0.75 Ask any SEO question about a URL in plain text. ``` POST https://seo.hypa1m.xyz/analyze {"url": "https://example.com", "task": "Why is my Core Web Vitals score low?", "language": "en"} ``` ## Rate Limits (per wallet address) - /scan/quick and /scan/full combined: 10 scans/day - /check/{category}: 50 requests/hour - Concurrent scans server-wide: 4 (excess queued, not dropped) - HTTP 429 returned when limit exceeded — retry after the window resets ## Reliability & Agentic Best Practices **Idempotency** — every x402 payment ID is stored. If your agent retries the same payment, it gets the original job_id back — no double charge, no duplicate scan. Safe to retry on network errors. **Replay protection** — each transaction ID can only be used once. The server rejects reused payment IDs with HTTP 400. **24h result cache** — scan results are cached per domain for 24 hours. If the same URL was recently audited, /scan/quick returns immediately (status=done, no wait). /check/{category} also served from cache. **Retry pattern** — on 5xx or network timeout, retry with the same payment. On 402, generate a new payment. On 429, wait for the rate limit window to reset. **Polling /status** — poll every 5s. Quick scan: typically done in 30–120s. Full scan: 2–15min. The endpoint never times out — poll as long as needed. ## Google crawling & index verification Two things an agent cannot do for itself: make Google crawl a page on demand, and get a definitive answer on whether a URL sits in Google's index. ### POST /google/index — $0.25 (1 URL) ### POST /google/index/bulk — $2.00 (up to 10 URLs, $0.20/URL) Drives a real mobile Googlebot crawl to each submitted URL. No Search Console access required, so it works on domains you do not own — backlinks, guest posts, profile links, PDFs, third-party pages. No link pyramids, PBN or spam networks. Safe for fresh domains. Guaranteed: a genuine Googlebot visit to every URL submitted. Not guaranteed: entry into the index — Google decides that on page quality. Typically 70%+ of submitted URLs end up indexed. Priced per submitted URL, not per indexed URL. First movement in 48-72h; final per-URL report on day 7. ``` POST https://seo.hypa1m.xyz/google/index {"urls": ["https://example.com/page"]} → {"task_id": "...", "submitted": 1, "poll": "/google/index/status/{task_id}"} ``` ### POST /google/check — $0.02 (1 URL) ### POST /google/check/bulk — $12.00 (up to 1000 URLs, $0.012/URL) In-index / not-in-index verdict per URL, plus the title Google holds for the page. An unindexed page earns no traffic; an unindexed backlink passes no weight. ``` POST https://seo.hypa1m.xyz/google/check {"urls": ["https://example.com/page"]} ``` ### POST /backlinks/check — $0.02 (1 donor) ### POST /backlinks/check/bulk — $6.00 (up to 500 donors, $0.012/donor) Confirms donor pages really link to your domain. Full JavaScript rendering, so client-side links are found. Per donor: target links present, domain authority, spam score, and whether the donor page itself is indexed. ``` POST https://seo.hypa1m.xyz/backlinks/check {"donor_urls": ["https://donor.com/post"], "target_domains": ["yoursite.com"]} ``` ### Free polling — 30 req/min per IP ``` GET /google/index/status/{task_id} crawl progress and indexed counts GET /google/index/report/{task_id} final per-URL report; error -1 = noindex meta tag found, 404/502 = the page's own HTTP status GET /google/check/status/{task_id} check progress GET /google/check/report/{task_id} per-URL indexed/not-indexed listing GET /backlinks/status/{task_id} per-donor backlink report ``` ## Payment x402 protocol — agent auto-pays each request in USDC on Base. Wallet needed: any wallet with USDC on Base (eip155:8453). ## Discovery OpenAPI: https://seo.hypa1m.xyz/openapi.json Agent info: https://seo.hypa1m.xyz/.well-known/agent.json