{"name":"tapetide-seo-agent","description":"SEO audit data for tapetide.com (own crawl, Google Search Console, Bing Webmaster, PageSpeed/CrUX, organic + AI landings) and a triage overlay for audit issues. Read-only except triage.","auth":"Authorization: Bearer tpt_seo_<32 hex>. Keys are issued by the Tapetide team.","request":"POST /v1 with JSON { \"op\": \"<name>\", \"params\": { ... } }","response":"{ \"ok\": true, \"op\", \"data\", \"queriedAt\" } or { \"ok\": false, \"code\", \"message\" }","errors":{"unauthorized":401,"bad_json":400,"bad_params":400,"operation_not_allowed":403,"too_large":413,"query_failed":500},"notes":["URLs are absolute and on https://tapetide.com/. Internal paths under /ai-inference are never returned or accepted.","Triage never changes audit data. A resolved issue the crawler still detects stays listed, with triage.state = \"resolved\".","GSC/Bing data lag 2-3 days; windows are capped at 93 days. Dates are YYYY-MM-DD (UTC for GSC/Bing, IST for landings).","Every crawl re-audits every non-stock page plus 1/7 of /stocks/*, so each stock page is re-checked weekly.","Lists page with limit (max 500) + offset and return hasMore."],"workflow":["getOverview → health, totals, top and rising rules","listIssues { triage: \"untriaged\", severity: \"error\" } → what to fix first","getPage { url } → page facts, all its issues, inbound links, 28-day GSC queries","fix the page in the site repo, then resolveIssue { url, rule, note } (or markFalsePositive)","after the next crawl, listTriage { state: \"resolved\" } → detected: true means the fix did not take"],"ops":{"getOverview":{"params":{},"returns":"latest crawl, audit-set size, health (0-100) vs previous crawl, severity totals, topRules, risingRules, sources"},"getSources":{"params":{},"returns":"which data sources have data, their latest dates, worker heartbeats"},"listRules":{"params":{"severity":"error|warning|notice?"},"returns":"every rule id with title, severity, open count, triaged counts by state"},"listIssues":{"params":{"rule":"rule id?","severity":"error|warning|notice?","pathPrefix":"/stocks/?","triage":"any|untriaged|acknowledged|resolved|false_positive (default any)","limit":"1-500 (100)","offset":"int"},"returns":"open issues with url, rule, title, severity, detail (crawler evidence), triage"},"getRuleDetail":{"params":{"rule":"rule id","limit":"int?","offset":"int?"},"returns":"one rule: title, severity, affected URLs with detail + triage"},"getPage":{"params":{"url":"https://tapetide.com/..."},"returns":"crawl facts (status, title, meta, canonical, h1, JSON-LD, og, links, ttfb…), issues + triage, inbound links, sitemap entry, 28-day GSC"},"getGsc":{"params":{"dim":"query|page|country|device (query)","from":"YYYY-MM-DD?","to":"YYYY-MM-DD?","url":"page url?","limit":"int?"},"returns":"totals + rows with clicks, impressions, ctr, impression-weighted position"},"getBing":{"params":{"dim":"query|page|country|device","from":"date?","to":"date?","url":"page url?","limit":"int?"},"returns":"same shape as getGsc, from Bing Webmaster Tools"},"getPsi":{"params":{"url":"page url? (omit for site-wide worst first)","strategy":"mobile|desktop?","limit":"int?"},"returns":"PageSpeed runs: perf score, LCP, CLS, INP, FCP, TTFB"},"getLandings":{"params":{"days":"1-93 (28)","channel":"organic_search|ai?","limit":"int?"},"returns":"landing pages by sessions from search engines and AI assistants (own analytics, bots excluded)"},"listTriage":{"params":{"state":"acknowledged|resolved|false_positive?","limit":"int?","offset":"int?"},"returns":"triage rows, newest first, with detected (is the issue still open)"},"acknowledgeIssue":{"params":{"url":"page url","rule":"rule id","note":"string ≤ 2000?"},"returns":"triage row + detected","writes":"seo_issue_triage"},"resolveIssue":{"params":{"url":"page url","rule":"rule id","note":"what was changed?"},"returns":"triage row + detected","writes":"seo_issue_triage"},"markFalsePositive":{"params":{"url":"page url","rule":"rule id","note":"why?"},"returns":"triage row + detected","writes":"seo_issue_triage"},"clearTriage":{"params":{"url":"page url","rule":"rule id"},"returns":"{ cleared }","writes":"seo_issue_triage"}}}