/api/v1/accessibilityRun a heuristic WCAG/ADA audit against a page's HTML and report scored, weighted checks.
Request body
Required
- url: string
Optional
- username: string
- password: string
API Reference
Public surface for SEO Dashboard. Every registered tool is callable two ways: POST /api/v1/{tool} (this REST envelope) and POST /api/mcp (Model Context Protocol's Streamable HTTP transport, used by Claude Desktop / Code / Cursor). Both authenticate with the same Bearer API key; issue one at /settings?tab=api-keys. The /api/mcp body shape is JSON-RPC 2.0. see the MCP spec at https://spec.modelcontextprotocol.io for message formats.
Every endpoint requires a Bearer token in the Authorization header. Mint API keys at /settings?tab=api-keys; per-key scopes gate which tools the key can call.
curl -X POST https://seodash.app/api/v1/competitor_serp \
-H "Authorization: Bearer sk_live_..." \
-H "Content-Type: application/json" \
-d '{"query": "best seo tools", "depth": 10}'/api/v1/accessibilityRun a heuristic WCAG/ADA audit against a page's HTML and report scored, weighted checks.
Request body
Required
Optional
/api/v1/ahrefs_backlinksFetch the top 50 backlinks for a target domain or URL.
Request body
Required
Optional
/api/v1/ahrefs_keywordsFetch the top 50 organic keywords a target domain or URL ranks for.
Request body
Required
Optional
/api/v1/ahrefs_overviewFetch domain-level overview metrics (DR, traffic, organic keywords) from the configured SEO provider.
Request body
Required
Optional
/api/v1/ai_metaFetch a page and ask the LLM for three optimized title and three optimized description alternatives.
Request body
Required
/api/v1/ai_visibility_dropoutsRecent dropout alerts: prompt × engine combinations where the brand was previously cited and has gone absent for a streak of runs. Lookback window in days.
Request body
Required
Optional
/api/v1/ai_visibility_engine_detailPer-prompt breakdown for a single engine plus the top competitors gaining mentions there. Use this to find specific prompts where the brand is absent or losing ground on a given engine.
Request body
Required
/api/v1/ai_visibility_period_compareCompare current vs prior rolling window (default 28 days) per engine. Returns score deltas, share-of-voice band shifts, and per-(prompt × engine) dropouts where the brand fell from primary/mentioned to passing/absent. Use this for any 'why did our share-of-voice drop?' question.
Request body
Required
Optional
/api/v1/ai_visibility_prompt_historyPer-engine run history for a single prompt, including position outcome and cost. Use to inspect a specific prompt's trajectory after the period-compare or dropouts tools surface it as a problem area.
Request body
Required
Optional
/api/v1/ai_visibility_summarySite-wide AI Visibility roll-up: per-engine visibility score + score band (subject-only, not competitor-relative share of voice), prompt counts, and last run timestamps. Use this first to get the lay of the land before drilling into a specific engine. For competitor-relative share of voice, use ai_visibility_period_compare.
Request body
Required
/api/v1/alert_updateToggle an alert (enabled flag) or update its threshold by alert_type.
Request body
Required
Optional
/api/v1/alerts_listList alert settings and the most recent 50 alert log entries.
/api/v1/analytics_dailystatsFetch the daily-stats time series (visitors/pageviews/bounce/duration) for a site over a range.
Request body
Required
/api/v1/analytics_pageviewsFetch the pageview time series from the configured analytics provider, bucketed by day or hour.
Request body
Required
Optional
/api/v1/analytics_realtimeFetch current-visitor / current-pageview metrics from the analytics provider. Uncached.
Request body
Required
/api/v1/analytics_sitesList all sites/properties known to the configured analytics provider.
/api/v1/analytics_statsFetch summary stats (visitors, pageviews, bounce rate) from the configured analytics provider.
Request body
Required
/api/v1/anchor_textClassify <a> anchor texts on a page (Branded, Exact Match, Generic, Naked URL, etc.) and return a distribution.
Request body
Required
/api/v1/audit_anchor_textSite-wide anchor-text analysis from the latest crawl: top anchors, over-optimization candidates, empty/naked anchors, rel distribution.
Request body
Required
/api/v1/broken_linksDiscover pages via sitemap, scan their links, and report broken/redirected/unreachable URLs. Streams progress.
Request body
Required
Optional
/api/v1/bulk_statusHEAD-probe up to 50 URLs in parallel and return per-URL status + a histogram summary.
Request body
Required
/api/v1/canonical_checkVerify canonical tags and detect chain issues.
Request body
Required
/api/v1/clear_cacheWipe the API response cache. Forces the next call from any cached endpoint to fetch fresh.
/api/v1/competitor_serpPull the top-10 SERP for a keyword, analyze each page, cross-reference user's GSC position, and ask the LLM for competitive analysis.
Request body
Required
Optional
/api/v1/content_analyzeCompute readability + keyword density on a URL or pasted text, with optional LLM-suggested improvements.
Request body
Optional
/api/v1/content_briefGenerate a structured SEO content brief for a keyword (titles, meta, heading outline, topics, questions). Can also write the article from the brief.
/api/v1/content_gapCompare two sites' sitemaps + sample pages and ask the LLM for verified content gaps the target site is genuinely missing.
Request body
Required
/api/v1/content_ideasGenerate 10 new content ideas the site doesn't already cover, grounded in GSC queries + the crawl inventory.
Request body
Required
/api/v1/create_scheduleCreate a scheduled agent run. Either recipients[] or channel+channel_identifier is required for delivery.
Request body
Required
Optional
/api/v1/delete_scheduleRemove a scheduled agent run by id.
Request body
Required
/api/v1/discover_prospectsRun intent-qualified SERP queries, summarize each candidate page, and ask the LLM to score outreach prospects.
Request body
Required
Optional
/api/v1/dns_lookupResolve every DNS record type for a domain and surface email-security and infrastructure gaps.
Request body
Required
/api/v1/domain_ratingFetch a domain's Ahrefs Domain Rating (DR, 0-100). Free, no API key required; works for any domain including competitors. Returns null when DR is unavailable.
Request body
Required
/api/v1/draft_outreachFetch a prospect URL and write a personalized cold outreach email that quotes concrete details from the article.
Request body
Required
Optional
/api/v1/find_orphan_pagesList pages on the site that have no internal inbound links (orphan pages).
Request body
Required
/api/v1/find_similar_pagesFind pages on the site that are semantically similar to a given seed page (uses embeddings).
Request body
Required
Optional
/api/v1/gap_zonePull GSC keywords in striking-distance positions, score opportunity, and ask the LLM for per-keyword optimization recommendations.
Request body
Required
Optional
/api/v1/get_cluster_contextHydrated topical cluster: queries, pages, gap topics, and the pillar page for the cluster.
Request body
Required
/api/v1/get_fact_consensusCross-source consensus on (subject, predicate). With predicate=null, returns consensus for every predicate on the subject.
Request body
Required
Optional
/api/v1/get_fact_historyValue history for one (subject, predicate) pair. Useful for 'how has X changed over time' questions.
Request body
Required
Optional
/api/v1/get_fact_statsPer-source fact counts and last-observed timestamps for the site's fact ledger.
Request body
Required
/api/v1/get_link_summarySite-wide link distribution: top outbound/inbound pages and orphan count from the latest crawl.
Request body
Required
/api/v1/get_linking_suggestionsOpen internal-linking suggestions for the site, optionally scoped to a single source page URL.
Request body
Required
Optional
/api/v1/get_page_detailGet full page detail (title, h1, meta, status, etc.) for a specific URL. Pass includeBody=true to get the page text.
Request body
Required
Optional
/api/v1/get_page_inbound_linksInbound internal links pointing at a page. Useful to understand a page's authority within the site.
Request body
Required
/api/v1/get_page_outbound_linksOutbound links (internal + external) from a page.
Request body
Required
/api/v1/get_site_inventoryList the site's currently-indexed pages from the latest crawl, with optional filter (noindex / errors / slow).
Request body
Required
Optional
/api/v1/get_topical_mapSummary of a topical map's clusters (name, authority, query/page counts).
Request body
Required
/api/v1/global_latencyMeasure HTTP response time from up to 20 worldwide nodes via check-host.net and report per-region stats.
Request body
Required
/api/v1/google_trendsQuery SerpAPI's Google Trends engine; BYOK keys skip metering, platform keys are gated by tenant SERP allocation.
Request body
Required
Optional
/api/v1/heading_checkCheck heading structure (H1-H6) of any page and find issues.
Request body
Required
/api/v1/http_headersFetch a URL and report every response header plus security-header coverage.
Request body
Required
/api/v1/internal_linksAnalyze internal vs. external links on a page, including nofollow/sponsored/ugc, generic anchors, and density.
Request body
Required
/api/v1/keyword_researchAsk the LLM for 25 keyword suggestions, 3-5 clusters, 8-10 PAA questions, and 8-10 long-tail variants for a seed keyword.
Request body
Required
/api/v1/list_contradictionsList contradictions in the fact ledger. Filter by status (open/noise/meaningful/fixed/all) and predicate.
Request body
Required
Optional
/api/v1/list_schedulesList scheduled agent runs, optionally filtered by status and siteId.
Request body
Optional
/api/v1/list_topical_mapsList the topical maps generated for a site, including cluster count and gap count per map.
Request body
Required
/api/mcpModel Context Protocol (Streamable HTTP transport). JSON-RPC requests; the same Bearer key + per-key scopes + per-key rate limit as /api/v1. See https://spec.modelcontextprotocol.io for the message format.
Request body
Required
Optional
/api/v1/_toolsList every callable tool in the registry.
/api/v1/metadata_checkFetch a URL and extract its meta tags (title, description, canonical, OpenGraph, Twitter, JSON-LD, hreflang, word count).
Request body
Required
/api/v1/og_debugInspect Open Graph + Twitter card tags and verify the og:image is reachable.
Request body
Required
/api/v1/pagespeedRun Google PageSpeed Insights v5 against a URL and return Lighthouse scores, Core Web Vitals, and per-category audits.
Request body
Required
Optional
/api/v1/position_tracker_addAdd a keyword to the position tracker for a site. Keyword is lowercased and trimmed; duplicates are rejected.
Request body
Required
/api/v1/position_tracker_deleteStop tracking a keyword. Cascades to position_history.
Request body
Required
/api/v1/position_tracker_listList the keywords tracked for a site, with the latest known position and a 30-point history.
Request body
Required
/api/v1/query_factsRead current valid facts about a subject from the bi-temporal ledger. Omit subject for the recent-activity feed.
Request body
Required
Optional
/api/v1/record_factRecord a user-asserted fact about a subject. Source is always agent_msg with the optional conversationId tracking provenance. Triggers contradiction detection.
Request body
Required
Optional
/api/v1/redirect_checkWalk a URL's redirect chain hop-by-hop with per-hop SSRF validation, surfacing 301/302 mix issues, long chains, and timing.
Request body
Required
/api/v1/regenerate_topical_mapRegenerate a topical map for a site: fetches GSC queries, clusters them with the LLM into 4-8 pillars, and surfaces 5-8 gap topics.
Request body
Optional
/api/v1/resolve_contradictionMark a contradiction as noise (auto-flapping), meaningful (real conflict), or fixed (the underlying data has been corrected).
Request body
Required
/api/v1/robots_checkFetch and parse robots.txt, validate every Sitemap URL, surface common issues, and optionally test if a URL is blocked.
Request body
Required
Optional
/api/v1/search_console_countriesFetch country-bucketed clicks/impressions rows from Search Console.
Request body
Required
Optional
/api/v1/search_console_datesFetch the daily clicks/impressions time series from Search Console.
Request body
Required
Optional
/api/v1/search_console_devicesFetch device-bucketed clicks/impressions rows from Search Console (mobile/desktop/tablet).
Request body
Required
Optional
/api/v1/search_console_overviewFetch Search Console overview metrics (total clicks, impressions, avg position, avg CTR) for a site over a date range.
Request body
Required
Optional
/api/v1/search_console_pagesFetch top-page rows from Search Console for a site over a date range.
Request body
Required
Optional
/api/v1/search_console_queriesFetch top-query rows from Search Console for a site over a date range.
Request body
Required
Optional
/api/v1/search_site_contentKeyword search (FTS5) over the site's crawled title/h1/body. Use this for 'what's on my site about X' questions; works without embeddings.
Request body
Required
Optional
/api/v1/semantic_searchEmbedding-based search over the site's crawled content. Falls back to a hint when the site isn't embedded yet.
Request body
Required
Optional
/api/v1/seo_auditCrawl up to 1000 pages, extract per-page SEO data, score the site, and ask the LLM for prioritized recommendations. Streams progress.
Request body
Required
Optional
/api/v1/seo_briefings_listList stored SEO briefings for a site (most recent first).
Request body
Required
Optional
/api/v1/serp_analysisFetch the live SERP for a keyword and have the LLM extract what top-ranking pages share (content type, headings, key topics, intent, difficulty).
Request body
Required
/api/v1/site_addAdd a new site to the dashboard. Triggers onboarding checks + favicon fetch + analytics auto-link in the background.
Request body
Required
/api/v1/site_deleteSoft-delete a site (sets deleted_at). Pass restore=true to undo a prior soft delete.
Request body
Required
Optional
/api/v1/sitemap_checkFetch a sitemap (or sitemap-index), parse every URL, follow sub-sitemaps, surface freshness/dup/size issues, and HEAD-probe a sample.
Request body
Required
Optional
/api/v1/sites_listList all sites the tenant has added to the dashboard, with crawl config and analytics linkage.
/api/utilities/broken-linksStreaming variant of broken_links. Crawls the site's sitemap, then HEAD-probes every link, emitting per-page-progress and per-link-progress chunks before the final result.
Request body
Required
Optional
/api/utilities/seo-auditStreaming variant of seo_audit. Discovers URLs, crawls in batches, aggregates metrics, scores, and emits SSE events for each phase.
Request body
Required
Optional
/api/v1/structured_dataExtract and parse JSON-LD structured-data blocks from a page.
Request body
Required
/api/v1/topic_authorityCluster the site's GSC queries into topical pillars, rate each cluster's authority (strong/moderate/weak), and surface 5-8 gap topics with target keywords.
Request body
Required
/api/v1/update_schedulePatch any field on a scheduled agent run by id.
Request body
Required
Optional
/api/v1/uptime_checkHit a URL three times sequentially and report status + per-request timing + min/avg/max + first-response headers.
Request body
Required
/api/v1/uptime_historyLast N uptime checks for a monitor (descending by checked_at).
Request body
Required
Optional
/api/v1/uptime_monitor_createCreate an uptime monitor for a URL. Validates the URL for SSRF, picks a sane interval (1/5/15/30/60 min).
Request body
Required
Optional
/api/v1/uptime_monitor_deleteSoft-delete an uptime monitor. Pass restore=true to undo.
Request body
Required
Optional
/api/v1/uptime_monitor_updateUpdate an uptime monitor: toggle active, change interval, rename, change URL, update notify channels.
Request body
Required
Optional
/api/v1/uptime_monitors_listList uptime monitors with rolling 24-hour up-stats.