# Surnex - [Introduction](https://docs.surnex.io/introduction.md): SEO intelligence for agencies and in-house teams — rank tracking, backlinks, site audits, and AI search visibility. - [Quickstart](https://docs.surnex.io/quickstart.md): Create an organization, add your first project, and see your first rankings. - [Onboarding](https://docs.surnex.io/onboarding/overview.md): What happens when you sign up, and the sample project every organization starts with. - [Sign in](https://docs.surnex.io/authentication.md): Sign up, sign in, and manage your Surnex session. - [Security](https://docs.surnex.io/security.md): How Surnex protects your data, credentials, and organization access. - [Organizations](https://docs.surnex.io/organizations/overview.md): How organizations scope your projects, team, and billing. - [Create an organization](https://docs.surnex.io/organizations/create.md): Set up a new organization and become its owner. - [Organization settings](https://docs.surnex.io/organizations/settings.md): Rename your organization, change its company details and timezone, or delete it. - [Users](https://docs.surnex.io/organizations/team.md): Invite people to your organization, change their roles, and remove access. - [Roles and permissions](https://docs.surnex.io/organizations/roles.md): What owners, admins, and members can each do in an organization. - [Create a project](https://docs.surnex.io/projects/add.md): Add a domain to track, seed its keywords, and pick the market you want to be measured in. - [Manage projects](https://docs.surnex.io/projects/list.md): Browse, search, and switch between the projects in your organization. - [Project settings](https://docs.surnex.io/projects/settings.md): Rename a project, change its schedules, or delete it. - [How data collection works](https://docs.surnex.io/projects/data-collection.md): Which data is collected on a schedule, which runs on demand, and which is fetched live. - [Delete a project](https://docs.surnex.io/projects/delete.md): Permanently remove a project and everything collected for it. - [Project dashboard](https://docs.surnex.io/dashboard/overview.md): Your project's headline metrics in one view — rankings, AI visibility, local, backlinks and site health. - [Research keywords](https://docs.surnex.io/keywords/research.md): Look up metrics in bulk, generate ideas from seeds, mine a domain's keywords, and inspect live SERPs. - [Keyword metrics](https://docs.surnex.io/keywords/metrics.md): What volume, difficulty, CPC, competition, and intent mean, and how to read them together. - [Saved keywords](https://docs.surnex.io/keywords/saved.md): Your shortlist of researched keywords, with the metrics captured when you saved them. - [Ranking overview](https://docs.surnex.io/tracking/overview.md): Your tracked keyword positions summarized — distribution, movers, and AI Overview impact. - [Tracked keywords](https://docs.surnex.io/tracking/add-keywords.md): Add keywords to a project, track them in several markets, pause them, and remove them. - [Position changes](https://docs.surnex.io/tracking/changes.md): Review ranking alerts and see which keywords moved between any two dates. - [Keyword history](https://docs.surnex.io/tracking/keyword-history.md): Inspect one keyword's position over time, and which page ranked on each date. - [Tracking competitors](https://docs.surnex.io/tracking/competitors.md): Compare your position against competitor domains on the keywords you track. - [Ranking alerts](https://docs.surnex.io/tracking/alerts.md): When Surnex raises a ranking alert, and the exact thresholds behind each type. - [Competitors](https://docs.surnex.io/competitors/overview.md): How competitor domains work in Surnex and where their data appears. - [Add a competitor](https://docs.surnex.io/competitors/add.md): Add competitor domains to a project and remove ones you no longer track. - [Backlinks overview](https://docs.surnex.io/backlinks/overview.md): Your link profile at a glance — authority, volume, distribution, and quality signals. - [Referring domains](https://docs.surnex.io/backlinks/referring-domains.md): The domains linking to your site, with their authority and link counts. - [Backlink list](https://docs.surnex.io/backlinks/list.md): Every individual link pointing at your domain, with anchor, authority, and follow status. - [Anchor text](https://docs.surnex.io/backlinks/anchors.md): How other sites describe your pages when they link to them. - [New and lost backlinks](https://docs.surnex.io/backlinks/new-lost.md): Links gained and links disappeared over the last 30 days. - [Backlink gap](https://docs.surnex.io/backlinks/gap.md): Find domains that link to your competitors but not to you. - [Site audits](https://docs.surnex.io/audits/overview.md): Crawl your site, score it, and see the technical SEO issues holding it back. - [Run an audit](https://docs.surnex.io/audits/run.md): Start a crawl, choose its scope, and understand what happens while it runs. - [Audit issues](https://docs.surnex.io/audits/issues.md): Every issue type Surnex detects, its severity, the threshold behind it, and how to fix it. - [Page detail](https://docs.surnex.io/audits/pages.md): Everything the crawler recorded about a single page. - [Compare audits](https://docs.surnex.io/audits/compare.md): Diff two crawls to see what you fixed and what regressed. - [Domain overview](https://docs.surnex.io/domains/overview.md): Authority, traffic estimates, and the keyword profile for your project domain. - [Tech stack](https://docs.surnex.io/domains/tech-stack.md): The technologies detected on your project domain, grouped by category. - [AI search overview](https://docs.surnex.io/ai/overview.md): Track whether AI-generated search results mention and cite your brand. - [Google AI Overviews](https://docs.surnex.io/ai/google-ai-overviews.md): Which of your tracked keywords trigger an AI Overview, and whether you're cited in it. - [Google AI Mode](https://docs.surnex.io/ai/google-ai-mode.md): See what Google's AI Mode returns for a query, and which sources it draws on. - [ChatGPT visibility](https://docs.surnex.io/ai/chatgpt-visibility.md): See what ChatGPT says for a query and which sources it cites. - [LLM benchmarking](https://docs.surnex.io/ai/benchmarking.md): Compare whether you're cited for the same query across multiple AI platforms. - [AI keyword trends](https://docs.surnex.io/ai/keyword-trends.md): Search volume, velocity, and year-on-year growth for keywords in AI search. - [Citation gap](https://docs.surnex.io/ai/citation-gap.md): Find keywords where competitors are cited in AI answers and you are not. - [GEO overview](https://docs.surnex.io/geo/overview.md): Generative engine optimization — track how often AI answers mention and cite your brand, by prompt. - [GEO prompts](https://docs.surnex.io/geo/topics.md): Snapshot history, cited sources, and raw AI responses for a single prompt. - [AI competitors](https://docs.surnex.io/geo/competitors.md): Which domains AI assistants cite most when answering your tracked prompts. - [Local SEO overview](https://docs.surnex.io/local/overview.md): See where your business ranks on Google Maps, from every point around it. - [Local locations](https://docs.surnex.io/local/locations.md): Add your Google Business listing and choose the grid it's searched from. - [Local keywords](https://docs.surnex.io/local/keywords.md): One local keyword's Maps grid, the pack at each point, and its ranking history. - [Web vitals](https://docs.surnex.io/web-vitals/overview.md): Lighthouse performance scores and Core Web Vitals for any page on your site. - [Explore trends](https://docs.surnex.io/trends/explore.md): Compare search interest over time for up to five keywords. - [Trending now](https://docs.surnex.io/trends/trending.md): Currently trending Google searches, with volume and commercial signals. - [Create a report](https://docs.surnex.io/reports/add.md): Build a client-ready SEO report from your project data, blank or from a template. - [Manage reports](https://docs.surnex.io/reports/list.md): Browse, duplicate, and delete the reports in a project. - [Report editor](https://docs.surnex.io/reports/editor.md): Add widgets, arrange the layout, and set the date range for a report. - [Share a report](https://docs.surnex.io/reports/share.md): Publish a shareable link, or export the report as PDF or CSV. - [Report settings](https://docs.surnex.io/reports/settings.md): Rename a report, change its description, or delete it. - [Automate delivery](https://docs.surnex.io/reports/automation.md): Email a report to recipients on a recurring schedule. - [Inbox](https://docs.surnex.io/notifications/view.md): Your own notifications: ranking changes, audit results, backlink alerts and finished checks. - [Channels](https://docs.surnex.io/notifications/preferences.md): Choose where your own notifications reach you, and where the team's are posted. - [Plans](https://docs.surnex.io/billing/plans.md): What's included on Starter, Growth, Agency, and Scale. - [Manage your subscription](https://docs.surnex.io/billing/subscription.md): Choose a plan, upgrade, downgrade, or change your billing period. - [Usage and limits](https://docs.surnex.io/billing/usage.md): What you hold, what you've used this month, and what happens when you hit a limit. - [Invoices](https://docs.surnex.io/billing/invoices.md): See and download your invoices, and update your payment details. - [Create an API key](https://docs.surnex.io/api-keys/add.md): Generate a key for the REST API and connect your tools. - [Manage API keys](https://docs.surnex.io/api-keys/list.md): Review your organization's API keys and when each was last used. - [Revoke or delete an API key](https://docs.surnex.io/api-keys/revoke.md): Stop a key immediately — keep a record of it, or remove it for good. - [Your profile](https://docs.surnex.io/account/profile.md): Update your display name and see your account details. - [Password](https://docs.surnex.io/account/password.md): Surnex has no passwords — how you get back in, and keep your account safe. - [Delete your account](https://docs.surnex.io/account/delete.md): What deleting your account removes, and what it doesn't. - [Guides](https://docs.surnex.io/guides/overview.md): End-to-end walkthroughs for the workflows Surnex is built around. - [Set up your first project](https://docs.surnex.io/guides/first-project.md): From signup to your first ranking data, with the decisions that actually matter. - [Build a keyword tracking set](https://docs.surnex.io/guides/track-keywords.md): Research widely, shortlist ruthlessly, and track only what earns its recurring cost. - [Fix technical SEO issues](https://docs.surnex.io/guides/fix-audit-issues.md): Crawl the site, triage by impact, fix, and verify the fix landed. - [Improve your AI search visibility](https://docs.surnex.io/guides/ai-visibility.md): Measure where AI answers are displacing you, then do something about it. - [Deliver a monthly SEO report](https://docs.surnex.io/guides/monthly-report.md): Build a report once, then repeat it every month in a few minutes. - [API introduction](https://docs.surnex.io/api/introduction.md): Automate Surnex from your own scripts and integrations. - [API quickstart](https://docs.surnex.io/api/quickstart.md): Make your first authenticated request and read a project's rankings. - [Reporting API](https://docs.surnex.io/api/reporting.md): Every figure Surnex tracks, as of any date, for reporting tools such as Oviond. - [Authentication](https://docs.surnex.io/api/concepts/authentication.md): Authenticate with an API key or a Supabase JWT. - [Organizations and scoping](https://docs.surnex.io/api/concepts/organizations.md): How organization context is resolved and enforced on every request. - [Jobs and polling](https://docs.surnex.io/api/concepts/jobs.md): How background work is reported, and how to wait for a result. - [Errors](https://docs.surnex.io/api/concepts/errors.md): Every error code the API returns, and how to handle it. - [Pagination](https://docs.surnex.io/api/concepts/pagination.md): Page through list endpoints. - [Rate limits](https://docs.surnex.io/api/concepts/rate-limits.md): Request limits, and how they differ from plan usage quotas. - [Versioning](https://docs.surnex.io/api/concepts/versioning.md): How the API is versioned and how changes are rolled out. - [Health Check](https://docs.surnex.io/api/health/health-check.md): Liveness. Returns the current server time. - [The signed-in user](https://docs.surnex.io/api/users/the-signed-in-user.md) - [Delete your account](https://docs.surnex.io/api/users/delete-your-account.md): Irreversible. Deletes the organizations you solely own, removes you from the rest, and deletes the credential. Work you created survives with its attribution cleared. Refused (409 SUBSCRIPTION_ACTIVE) while one of those organizations has a subscription that will renew: cancel it first. - [Update your profile](https://docs.surnex.io/api/users/update-your-profile.md) - [What deleting your account would take with it](https://docs.surnex.io/api/users/what-deleting-your-account-would-take-with-it.md): The organizations you are the sole owner of, which cannot be left behind. Read before confirming, so the confirmation can name them. - [Sync the signed-in user and return their organizations](https://docs.surnex.io/api/users/sync-the-signed-in-user-and-return-their-organizations.md): The first call a new session makes. Supabase owns the account; this creates the mirror row on first sight and answers with the organizations the user belongs to, so the app can decide between onboarding and a dashboard in one round trip instead of three. - [Organizations you belong to](https://docs.surnex.io/api/organizations/organizations-you-belong-to.md): Invitations you have not accepted are not included. - [Create an organization](https://docs.surnex.io/api/organizations/create-an-organization.md) - [Get an organization](https://docs.surnex.io/api/organizations/get-an-organization.md) - [Delete an organization](https://docs.surnex.io/api/organizations/delete-an-organization.md): Removes every project, member and key belonging to it, and the accounts of members who belong to no other organization. Refused (409 SUBSCRIPTION_ACTIVE) while its subscription will renew: cancel it on the Billing page first. - [Update an organization's profile](https://docs.surnex.io/api/organizations/update-an-organizations-profile.md): A patch: only the fields present in the body are written. Sending null clears a field. - [List members](https://docs.surnex.io/api/organizations/list-members.md) - [Invite a user](https://docs.surnex.io/api/organizations/invite-a-user.md): Emails an invitation to anyone, with or without a Surnex account — one is made for somebody new, under the name given. The email's button signs them in and joins them to the organization; until then the invitation grants nothing. Inviting somebody still pending sends it again. - [Accept an invitation](https://docs.surnex.io/api/organizations/accept-an-invitation.md): Joins the signed-in person to an organization they were invited to — what the invite email's button opens. Idempotent. 404 when there is no invitation. - [Change a member's role](https://docs.surnex.io/api/organizations/change-a-members-role.md) - [Remove a member](https://docs.surnex.io/api/organizations/remove-a-member.md) - [List API keys](https://docs.surnex.io/api/api-keys/list-api-keys.md): Only the prefix is shown. The key itself is not stored and cannot be recovered. - [Create an API key](https://docs.surnex.io/api/api-keys/create-an-api-key.md): The response contains the key itself. This is the only time it is ever returned — only its hash is stored. - [Revoke an API key](https://docs.surnex.io/api/api-keys/revoke-an-api-key.md): Takes effect immediately. The key is deactivated rather than deleted, so there is still a record of it having existed. - [List projects](https://docs.surnex.io/api/projects/list-projects.md) - [Create a project](https://docs.surnex.io/api/projects/create-a-project.md): Schedules default to every job daily at midnight UTC when omitted. Creating a project queues its first run of every job straight away, so its pages fill in over the following minutes. - [Create the sample project](https://docs.surnex.io/api/projects/create-the-sample-project.md): Seeds a read-only project filled with made-up data for every feature, named after the company and pointed at its site. It runs no jobs and does not count against the plan. An organization has at most one; asking again returns it. - [Get a project](https://docs.surnex.io/api/projects/get-a-project.md) - [Delete a project](https://docs.surnex.io/api/projects/delete-a-project.md): Removes the project and everything collected for it. - [Update a project](https://docs.surnex.io/api/projects/update-a-project.md): Sending `schedules` replaces the whole set. A schedule whose timing is unchanged keeps its existing next run, so saving the form does not shift when jobs fire. - [Recent jobs for a project](https://docs.surnex.io/api/jobs/recent-jobs-for-a-project.md): What the dashboard polls while waiting for data. `active` is true when any job is pending or processing. - [Where each schedule stands](https://docs.surnex.io/api/jobs/where-each-schedule-stands.md): For each of the project's recurring jobs: whether it is on, when it runs next, the newest run of the job — scheduled or on demand — and whether the last time the schedule came due was skipped, which the scheduler does for an organization with no active plan. - [Runs of the recurring jobs, paged](https://docs.surnex.io/api/jobs/runs-of-the-recurring-jobs-paged.md): Newest first, for one job with `job_type` or all four. `trigger` is `schedule` for a run the schedule started and `on_demand` for one asked for — a refresh, or a new project's first run. - [Tracking summary](https://docs.surnex.io/api/tracking/tracking-summary.md): `visibility` is the share of active keywords ranking in the top ten. - [List tracked keywords](https://docs.surnex.io/api/tracking/list-tracked-keywords.md): Ranked keywords sort first; unranked ones go last rather than to the top. - [Track more keywords](https://docs.surnex.io/api/tracking/track-more-keywords.md): Duplicates are skipped rather than rejected, so pasting a list that overlaps what you already track still adds the rest. A keyword is one keyword in one market — location, language, engine — and a paused one added again stays paused. The keywords added get a first rank check of their own at once; po… - [Stop tracking keywords](https://docs.surnex.io/api/tracking/stop-tracking-keywords.md): Removes the keywords and their history. Pause instead to keep the history. - [Get a tracked keyword](https://docs.surnex.io/api/tracking/get-a-tracked-keyword.md) - [Pause or resume a keyword](https://docs.surnex.io/api/tracking/pause-or-resume-a-keyword.md): A paused keyword keeps its history but is skipped by future checks. - [Position history for one keyword](https://docs.surnex.io/api/tracking/position-history-for-one-keyword.md) - [Ranking alerts](https://docs.surnex.io/api/tracking/ranking-alerts.md): `alert_types` is a comma-separated list, e.g. `rank_dropped,lost_top10`. - [Mark every alert read](https://docs.surnex.io/api/tracking/mark-every-alert-read.md) - [Mark one alert read](https://docs.surnex.io/api/tracking/mark-one-alert-read.md) - [List competitors](https://docs.surnex.io/api/tracking/list-competitors.md) - [Add a competitor](https://docs.surnex.io/api/tracking/add-a-competitor.md) - [Remove a competitor](https://docs.surnex.io/api/tracking/remove-a-competitor.md) - [Rename a competitor](https://docs.surnex.io/api/tracking/rename-a-competitor.md) - [Assign and unassign tags in bulk](https://docs.surnex.io/api/tracking/assign-and-unassign-tags-in-bulk.md): Both directions in one call, because the usual edit is a swap — doing it as two calls leaves a window where keywords are in both tags or neither. - [AI Overview presence and citations](https://docs.surnex.io/api/tracking/ai-overview-presence-and-citations.md): Two numbers that only mean something together: how often an AI Overview appears, and how often it cites you. - [AI Overview presence over time](https://docs.surnex.io/api/tracking/ai-overview-presence-over-time.md) - [Keywords that trigger an AI Overview](https://docs.surnex.io/api/tracking/keywords-that-trigger-an-ai-overview.md) - [What moved](https://docs.surnex.io/api/tracking/what-moved.md): Biggest movements first. Positive is an improvement — moving from 8 to 3 is +5, because lower is better. - [Tracked keywords beside each competitor](https://docs.surnex.io/api/tracking/tracked-keywords-beside-each-competitor.md): One row per active tracked keyword, with every competitor's position from the latest rank check, a page of keywords at a time. A null position means not in the top 100. - [Keyword tags](https://docs.surnex.io/api/tracking/keyword-tags.md) - [Create a tag](https://docs.surnex.io/api/tracking/create-a-tag.md) - [Research one keyword](https://docs.surnex.io/api/keywords/research-one-keyword.md): Volume, difficulty, CPC and twelve months of trend. Cached for 24 hours per keyword and locale; a cached answer does not use your allowance. - [Research many keywords](https://docs.surnex.io/api/keywords/research-many-keywords.md): Only keywords not already cached are fetched, so a list overlapping an earlier search costs little. Charged once for the batch. - [Keyword ideas from a seed](https://docs.surnex.io/api/keywords/keyword-ideas-from-a-seed.md) - [Keywords a domain ranks for](https://docs.surnex.io/api/keywords/keywords-a-domain-ranks-for.md) - [Live search results](https://docs.surnex.io/api/keywords/live-search-results.md): One of only two endpoints that fetch on request. Cached for six hours — long enough to be useful, short enough that the results still mean something. - [Keywords saved to a project](https://docs.surnex.io/api/keywords/keywords-saved-to-a-project.md): Highest volume first; keywords with unknown volume go last. - [Save keywords to a project](https://docs.surnex.io/api/keywords/save-keywords-to-a-project.md): Saving a keyword already in the list refreshes its metrics rather than failing, which is how you update them after a fresh lookup. - [Remove saved keywords](https://docs.surnex.io/api/keywords/remove-saved-keywords.md) - [Recent searches in this project](https://docs.surnex.io/api/keywords/recent-searches-in-this-project.md): A convenience list held in Redis, not a record. It expires after two weeks and losing it costs nothing. - [Past research jobs](https://docs.surnex.io/api/keywords/past-research-jobs.md): Bulk research too large to answer on the request becomes a job. A thousand uncached keywords is minutes of upstream calls, well past any reasonable request timeout. The list has no results; read a job's a page at a time from `/{jobId}/results`. - [Start a research job](https://docs.surnex.io/api/keywords/start-a-research-job.md): `input_params` depends on `research_type`: `keywords` for bulk, `seed_keywords` for suggestions, `domain` for domain_keywords. - [One research job](https://docs.surnex.io/api/keywords/one-research-job.md): The job and its state, without its results — read those a page at a time from `/{jobId}/results`. - [Delete a research job](https://docs.surnex.io/api/keywords/delete-a-research-job.md) - [A research job's keywords, paged](https://docs.surnex.io/api/keywords/a-research-jobs-keywords-paged.md): Searched by keyword, in the order the job stored them. `meta.summary` is of every result, whatever the page or search: how many, the average volume, difficulty and CPC, and whether the rows carry a ranking position. - [Backlink totals over time](https://docs.surnex.io/api/backlinks/backlink-totals-over-time.md) - [Latest backlink profile — its summary](https://docs.surnex.io/api/backlinks/latest-backlink-profile-—-its-summary.md): The most recent profile's state, with the last completed profile's summary — so a refresh in progress shows as pending over the numbers it will replace. The lists are paged endpoints of their own: `/backlinks/links`, `/referring-domains`, `/anchors` and `/new-lost`. - [Backlinks, paged](https://docs.surnex.io/api/backlinks/backlinks-paged.md) - [Referring domains, paged](https://docs.surnex.io/api/backlinks/referring-domains-paged.md) - [Anchor texts, paged](https://docs.surnex.io/api/backlinks/anchor-texts-paged.md): Each anchor's `percentage` is of every anchor's backlinks, not only the page's. - [New or lost backlinks, paged](https://docs.surnex.io/api/backlinks/new-or-lost-backlinks-paged.md): `meta.counts` has both totals, so a New / Lost switch can show them without a second call. - [A specific backlink profile — its summary](https://docs.surnex.io/api/backlinks/a-specific-backlink-profile-—-its-summary.md): Its state and summary, without the lists; the latest profile's lists are paged endpoints of their own. - [Refresh the backlink profile](https://docs.surnex.io/api/backlinks/refresh-the-backlink-profile.md): Returns immediately. Poll the profile endpoint for the result. - [Refresh the backlink profile](https://docs.surnex.io/api/backlinks/refresh-the-backlink-profile-1.md): The same action as `/refresh`, under the name the dashboard uses. Both are served rather than picking one, because a client that calls the other gets a 404 with nothing to say why. - [Latest backlink gap analysis](https://docs.surnex.io/api/backlinks/latest-backlink-gap-analysis.md): Its state and `result_count`, without the rows — read those a page at a time from `/backlinks/gap/{gapId}/results`. Null when none has been run. - [Find link opportunities against competitors](https://docs.surnex.io/api/backlinks/find-link-opportunities-against-competitors.md): Referring domains that link to them but not to you. - [A specific gap analysis](https://docs.surnex.io/api/backlinks/a-specific-gap-analysis.md) - [A gap analysis's referring domains, paged](https://docs.surnex.io/api/backlinks/a-gap-analysiss-referring-domains-paged.md): Domains linking to a competitor compared but not to the project's site, searched by domain. `meta.total` is null while the analysis has no results. - [Backlink summary for any domain](https://docs.surnex.io/api/backlinks/backlink-summary-for-any-domain.md) - [Individual backlinks](https://docs.surnex.io/api/backlinks/individual-backlinks.md) - [Referring domains](https://docs.surnex.io/api/backlinks/referring-domains.md) - [Which top-level domains link here](https://docs.surnex.io/api/backlinks/which-top-level-domains-link-here.md): Derived from the summary rather than fetched separately — the same upstream call, so charging twice would be charging for our own endpoint layout. - [Anchor text distribution](https://docs.surnex.io/api/backlinks/anchor-text-distribution.md) - [Recently gained or lost backlinks](https://docs.surnex.io/api/backlinks/recently-gained-or-lost-backlinks.md) - [Link gap between domains](https://docs.surnex.io/api/backlinks/link-gap-between-domains.md): Referring domains that link to the competitors but not to the target. - [List audits](https://docs.surnex.io/api/audits/list-audits.md) - [Start a crawl](https://docs.surnex.io/api/audits/start-a-crawl.md): The most expensive thing the platform does, so a crawl already in progress is refused rather than duplicated. - [Compare two audits](https://docs.surnex.io/api/audits/compare-two-audits.md): What actually changed: how many issues were resolved, how many are new. Issues are matched by page and type, since each audit writes its own rows. - [Audit summary](https://docs.surnex.io/api/audits/audit-summary.md) - [Issues found](https://docs.surnex.io/api/audits/issues-found.md): Errors first, then warnings, then notices. `search` matches the issue's description or the page it was found on. - [Pages crawled](https://docs.surnex.io/api/audits/pages-crawled.md): By URL. `search` matches the URL. - [One crawled page in full](https://docs.surnex.io/api/audits/one-crawled-page-in-full.md) - [Pages sharing content or titles](https://docs.surnex.io/api/audits/pages-sharing-content-or-titles.md): Grouped by what is duplicated, so the answer is "these five pages share a title" rather than five rows saying the same thing. Paged by group; `meta.total` is the number of groups, so `per_page=1` is a count. - [Broken links and images](https://docs.surnex.io/api/audits/broken-links-and-images.md): One entry per broken URL, with the pages that link to it — the issues table holds a row per page per link. Paged by URL; `meta.total` is the number of broken URLs. - [Latest domain overview](https://docs.surnex.io/api/domains/latest-domain-overview.md) - [Latest tech stack](https://docs.surnex.io/api/domains/latest-tech-stack.md) - [Refresh the tech stack](https://docs.surnex.io/api/domains/refresh-the-tech-stack.md) - [A specific lookup](https://docs.surnex.io/api/domains/a-specific-lookup.md) - [Refresh the domain overview](https://docs.surnex.io/api/domains/refresh-the-domain-overview.md) - [Domain overview for any domain](https://docs.surnex.io/api/domains/domain-overview-for-any-domain.md) - [Keywords a domain ranks for](https://docs.surnex.io/api/domains/keywords-a-domain-ranks-for.md) - [A domain's best-performing pages](https://docs.surnex.io/api/domains/a-domains-best-performing-pages.md) - [Domains competing for the same keywords](https://docs.surnex.io/api/domains/domains-competing-for-the-same-keywords.md) - [What a site is built with](https://docs.surnex.io/api/domains/what-a-site-is-built-with.md) - [Recent checks](https://docs.surnex.io/api/web-vitals/recent-checks.md) - [Run a check](https://docs.surnex.io/api/web-vitals/run-a-check.md) - [One check](https://docs.surnex.io/api/web-vitals/one-check.md) - [Delete a check](https://docs.surnex.io/api/web-vitals/delete-a-check.md) - [Topics being tracked](https://docs.surnex.io/api/geo/topics-being-tracked.md): Oldest first, a page at a time. `search` matches the topic's question. - [Track more topics](https://docs.surnex.io/api/geo/track-more-topics.md): Topics already tracked in the same location and language are skipped rather than rejected; the same topic in another market is added. The topics added get a first snapshot across the six engines at once, covered by the plan's AI prompts. - [Stop tracking topics](https://docs.surnex.io/api/geo/stop-tracking-topics.md) - [Visibility snapshots](https://docs.surnex.io/api/geo/visibility-snapshots.md): `citation_rate` is the share of sampled answers that cited the domain. - [Take a snapshot now](https://docs.surnex.io/api/geo/take-a-snapshot-now.md): Asks about every active topic outside the schedule. One research lookup per topic, settled at what was bought. - [Overview figures](https://docs.surnex.io/api/geo/overview-figures.md): Averages are over the latest snapshot per topic, so adding a topic moves the number and a long history does not outweigh a new one. `trend` covers the last `days` days. - [Most-cited domains](https://docs.surnex.io/api/geo/most-cited-domains.md): Aggregated from each topic's latest snapshot rather than stored, so it cannot go stale. `keyword` narrows to tracked topics containing it. - [One topic, with its snapshot history](https://docs.surnex.io/api/geo/one-topic-with-its-snapshot-history.md): The list carries current numbers; this carries the trend, which is the question a topic page is opened to answer. - [Pause or resume a topic](https://docs.surnex.io/api/geo/pause-or-resume-a-topic.md) - [Raw AI answers for a topic](https://docs.surnex.io/api/geo/raw-ai-answers-for-a-topic.md) - [Ask an assistant about one topic now](https://docs.surnex.io/api/geo/ask-an-assistant-about-one-topic-now.md): Distinct from a snapshot, which samples every topic on a schedule. This queues one topic rather than a full sweep. - [Past analyses](https://docs.surnex.io/api/ai-search/past-analyses.md) - [Run an analysis](https://docs.surnex.io/api/ai-search/run-an-analysis.md): The record is created immediately with status `pending`, so there is something to poll rather than a row that appears at some point. - [One analysis](https://docs.surnex.io/api/ai-search/one-analysis.md) - [Delete an analysis](https://docs.surnex.io/api/ai-search/delete-an-analysis.md) - [Run google ai mode](https://docs.surnex.io/api/ai-search/run-google-ai-mode.md) - [Run chatgpt visibility](https://docs.surnex.io/api/ai-search/run-chatgpt-visibility.md) - [Run llm benchmark](https://docs.surnex.io/api/ai-search/run-llm-benchmark.md) - [Run keyword trends](https://docs.surnex.io/api/ai-search/run-keyword-trends.md) - [Run citation gap](https://docs.surnex.io/api/ai-search/run-citation-gap.md) - [Locations](https://docs.surnex.io/api/local-seo/locations.md) - [Add a location](https://docs.surnex.io/api/local-seo/add-a-location.md): A listing, and the grid drawn around it: `grid_size` 3, 5 or 7 cells a side, `spacing_km` apart. Each keyword at it is searched from every cell. One location on the plan. - [Find a Google Business listing, before there is a project](https://docs.surnex.io/api/local-seo/find-a-google-business-listing-before-there-is-a-project.md): The same search as a project's, for creating one: the listing picked goes in `local_listing` on `POST /v1/organizations/{orgId}/projects` and becomes the project's first location. Admins and owners, who create projects. Not counted against the plan, but it needs a live plan. - [Find a Google Business listing](https://docs.surnex.io/api/local-seo/find-a-google-business-listing.md): Google Maps listings for a search — the business's name and town. The listing chosen becomes a location: its `cid` is how every grid search recognises it, with a website or without. Not counted against the plan, but it needs a live plan and is refused on the sample project. - [Remove a location](https://docs.surnex.io/api/local-seo/remove-a-location.md): Its keywords and their history go with it, and the location is free on the plan. - [Update a location](https://docs.surnex.io/api/local-seo/update-a-location.md): Rename it, re-draw its grid, or pick its listing. None of these adds a location. - [Local keywords](https://docs.surnex.io/api/local-seo/local-keywords.md) - [Track local keywords at a location](https://docs.surnex.io/api/local-seo/track-local-keywords-at-a-location.md): Up to 10 per location — each is a search per grid cell. A first check of the keywords added is queued at once; the location's others are not searched again. Keywords add no location. - [Stop tracking local keywords](https://docs.surnex.io/api/local-seo/stop-tracking-local-keywords.md) - [Pause or resume a local keyword](https://docs.surnex.io/api/local-seo/pause-or-resume-a-local-keyword.md) - [A keyword's grid](https://docs.surnex.io/api/local-seo/a-keywords-grid.md): Every cell of one check — the newest, or `date` — with our position there and the top three, plus every check's summary for the trend. - [Local rankings](https://docs.surnex.io/api/local-seo/local-rankings.md): The Maps pack at each location's centre, newest check first. `latest_only` keeps each keyword's most recent pack; `own_only` keeps our own listing, which is the position history. - [Local summary](https://docs.surnex.io/api/local-seo/local-summary.md): `in_map_pack` counts centre positions 1–3 — what appears without expanding the map. `grid_top3_share` is the share of every keyword's newest grid in the top 3. - [The Google Business Profile behind the local rankings](https://docs.surnex.io/api/local-seo/the-google-business-profile-behind-the-local-rankings.md): Null until a local check has run — a state the page renders, not an error. - [Delivery channels](https://docs.surnex.io/api/notifications/delivery-channels.md): Channels, not messages — the inbox is at `/inbox`. This ordering is surprising but it is what the dashboard calls, and the client is the contract. - [Configure a delivery channel](https://docs.surnex.io/api/notifications/configure-a-delivery-channel.md): A channel preference is not a rule. Rules say which events notify; this says whether a channel works at all — turning one off silences every rule that uses it. - [Clear your inbox](https://docs.surnex.io/api/notifications/clear-your-inbox.md): Deletes your notifications in this organization. Everyone else's, the rules and the channels are untouched. - [Unread count](https://docs.surnex.io/api/notifications/unread-count.md): A count query, not a list — this is polled for the sidebar badge. - [Your own channels](https://docs.surnex.io/api/notifications/your-own-channels.md): Whether you get this organization's notifications by email — each member's own. The inbox is always on, so `in_app` is always true. - [Switch your own email](https://docs.surnex.io/api/notifications/switch-your-own-email.md): Email on or off, for yourself. Any member. The inbox is always on: `in_app: false` is refused. - [Mark all read](https://docs.surnex.io/api/notifications/mark-all-read.md) - [Mark several read](https://docs.surnex.io/api/notifications/mark-several-read.md) - [Delete several](https://docs.surnex.io/api/notifications/delete-several.md) - [Mark one read](https://docs.surnex.io/api/notifications/mark-one-read.md) - [Delete a notification](https://docs.surnex.io/api/notifications/delete-a-notification.md) - [The paginated inbox](https://docs.surnex.io/api/notifications/the-paginated-inbox.md): Distinct from the plain list, which is the short one the bell shows. This is the full history, filterable. - [Channels and rules together](https://docs.surnex.io/api/notifications/channels-and-rules-together.md): Everything the settings screen needs. An event with no rule has never been configured, which is not the same as off. - [Turn one event/channel on or off](https://docs.surnex.io/api/notifications/turn-one-eventchannel-on-or-off.md) - [List reports](https://docs.surnex.io/api/reports/list-reports.md): Page counts only — the list draws a card per report, not a preview. - [Create a report](https://docs.surnex.io/api/reports/create-a-report.md): Comes with one empty page — a report with none cannot be edited. - [Report templates](https://docs.surnex.io/api/reports/report-templates.md) - [Create from a template](https://docs.surnex.io/api/reports/create-from-a-template.md): A template is data, not code. A widget the template describes but this version does not recognise is skipped rather than failing the whole creation. - [One report, with pages and widgets](https://docs.surnex.io/api/reports/one-report-with-pages-and-widgets.md) - [Delete a report](https://docs.surnex.io/api/reports/delete-a-report.md) - [Update a report](https://docs.surnex.io/api/reports/update-a-report.md) - [Data for a report's widgets](https://docs.surnex.io/api/reports/data-for-a-reports-widgets.md): Fills each widget named in the body for the period given, from the project's stored data — nothing here calls DataForSEO. Answers an object keyed by widget id. A POST because the widgets travel in the body; it only reads, and works on the sample project. - [Save a report's content](https://docs.surnex.io/api/reports/save-a-reports-content.md): Every page, in order, with its widgets — and optionally the dates — written in one transaction: what is listed is created or updated by id, what is not is removed. The editor's autosave. Ids are the caller's, new ones included, so a retried save writes the same rows. - [Duplicate a report](https://docs.surnex.io/api/reports/duplicate-a-report.md): Copies pages and widgets but not the schedule — duplicating to try a variation should not start emailing it to the original's recipients. - [Add a page](https://docs.surnex.io/api/reports/add-a-page.md) - [Reorder pages](https://docs.surnex.io/api/reports/reorder-pages.md): Send every page id in the order you want. A partial list would leave the rest holding sort orders that collide with the new ones. - [Delete a page](https://docs.surnex.io/api/reports/delete-a-page.md): Refused for the last page — a report needs somewhere to put widgets. - [Rename or resize a page](https://docs.surnex.io/api/reports/rename-or-resize-a-page.md) - [Add a widget](https://docs.surnex.io/api/reports/add-a-widget.md) - [Move and resize widgets](https://docs.surnex.io/api/reports/move-and-resize-widgets.md): One call for the whole page. A drag rearranges everything around what moved, and saving each separately would let a refresh land mid-rearrangement. - [Delete a widget](https://docs.surnex.io/api/reports/delete-a-widget.md) - [Update a widget](https://docs.surnex.io/api/reports/update-a-widget.md) - [Share links](https://docs.surnex.io/api/reports/share-links.md): Whether a link has a password, never the password or its hash. - [Create a share link](https://docs.surnex.io/api/reports/create-a-share-link.md): The token is the only thing protecting an unlisted report, so it is long and random rather than merely unique. - [Revoke a share link](https://docs.surnex.io/api/reports/revoke-a-share-link.md): Deactivated rather than deleted, so a dead link leaves a record. - [Delivery schedule](https://docs.surnex.io/api/reports/delivery-schedule.md) - [Set the delivery schedule](https://docs.surnex.io/api/reports/set-the-delivery-schedule.md): Writes both the report and the scheduler's own table — the scheduler reads only the latter, so updating one without the other would show a schedule that never fires. The hour is in the timezone given, and it is honoured. - [Stop scheduled delivery](https://docs.surnex.io/api/reports/stop-scheduled-delivery.md): Disabled rather than deleted, so re-enabling restores the cadence and hour that were chosen rather than a default. - [Search interest over time](https://docs.surnex.io/api/trends/search-interest-over-time.md): One of only two live-on-request features, with SERP. Trends are about what is happening now, so they are cached for six hours rather than a day. - [Queries related to a keyword](https://docs.surnex.io/api/trends/queries-related-to-a-keyword.md) - [What is trending now](https://docs.surnex.io/api/trends/what-is-trending-now.md): The searches rising fastest this month, among ones with at least 1,000 monthly searches, with each one's change against the month before. - [Available plans, prices and limits](https://docs.surnex.io/api/billing/available-plans-prices-and-limits.md): Limits come from the same table the API enforces, so the pricing page cannot drift from what actually happens at the boundary. Prices are US cents; `year` is the whole year's charge. - [Current subscription](https://docs.surnex.io/api/billing/current-subscription.md): Every organization starts on a card-free trial. `active_plan` is the plan it may use right now, and is null once a trial or subscription has ended. - [Allowance and what is left](https://docs.surnex.io/api/billing/allowance-and-what-is-left.md) - [Subscribe, or change plan](https://docs.surnex.io/api/billing/subscribe-or-change-plan.md): With no paid subscription, answers a Stripe Checkout `url` to send the customer to. With one, changes its plan in place (prorated) and answers `changed: true` with no url. A move to a plan the organization already holds more than — 400 tracked keywords onto Starter — is refused with 409 and the `ove… - [Open the billing portal](https://docs.surnex.io/api/billing/open-the-billing-portal.md) - [List invoices](https://docs.surnex.io/api/billing/list-invoices.md): The organization's Stripe invoices, newest first, drafts left out. Read from Stripe on each call. Page with `starting_after` set to the last id. - [Reporting catalogue](https://docs.surnex.io/api/reporting/reporting-catalogue.md): Every reporting view and its metrics — name, label, description, unit, and which way is better — for a reporting tool's metric picker. The same for every project; read once. - [A reporting view's metrics for a period](https://docs.surnex.io/api/reporting/a-reporting-views-metrics-for-a-period.md): One of: rankings, ai-overviews, backlinks, site-audit, web-vitals, ai-visibility, local-seo, domain. For each metric asked for (every one when `metrics` is left out): `value` on the last day with data on or before `date_end`; `previous` on the last day with data before `date_start`, the previous per… - [Search the places an engine searches from — countries, regions, cities, postal codes](https://docs.surnex.io/api/reference/search-the-places-an-engine-searches-from-—-countries-regions-cities-postal-codes.md) - [Places by location code](https://docs.surnex.io/api/reference/places-by-location-code.md) - [The languages an engine searches in](https://docs.surnex.io/api/reference/the-languages-an-engine-searches-in.md): DataForSEO's list for the engine. Any of them goes with any of the engine's locations — the SERP API has no location-and-language pairs. - [The languages an AI visibility market can be in](https://docs.surnex.io/api/reference/the-languages-an-ai-visibility-market-can-be-in.md): Those every AI engine it asks lists: Google's, Google AI Mode's own, and ChatGPT search's. Its countries are `AI_VISIBILITY_COUNTRIES` — Google's and ChatGPT search's, which has no cities. - [The countries an AI visibility market can be in](https://docs.surnex.io/api/reference/the-countries-an-ai-visibility-market-can-be-in.md): Those every AI engine takes: Google's and ChatGPT search's, which lists no cities. - [MCP overview](https://docs.surnex.io/mcp/overview.md): Let Claude, ChatGPT, and other AI agents work with your Surnex data directly. - [Connect the MCP server](https://docs.surnex.io/mcp/connect.md): Add the Surnex MCP server to Claude Code, Claude Desktop, Cursor, or Windsurf. - [MCP authentication](https://docs.surnex.io/mcp/auth.md): The MCP server uses OAuth. You approve a client once, and it acts as you. - [MCP tools](https://docs.surnex.io/mcp/tools.md): Every tool the Surnex MCP server exposes to agents, and which ones write. - [MCP playbooks](https://docs.surnex.io/mcp/playbooks.md): Prompt patterns that get useful work out of the Surnex MCP server. - [Skills](https://docs.surnex.io/mcp/skills.md): Install Surnex as a reusable skill for AI agents. - [Troubleshooting MCP](https://docs.surnex.io/mcp/troubleshooting.md): Fix connection, authentication, and tool errors on the Surnex MCP server. - [October 2026](https://docs.surnex.io/changelog/2026-10.md): A market for each part of Surnex, an export on every table, refreshes that ask before they spend, and ranking figures counted as Semrush counts them. - [September 2026](https://docs.surnex.io/changelog/2026-09.md): A personal Inbox and channels, invoices in Billing, a new dashboard, Local SEO on a Maps grid, and fixes across audits, domains and backlinks. - [August 2026](https://docs.surnex.io/changelog/2026-08.md): The TypeScript rewrite: one monorepo, a new job system, and OAuth for MCP. - [July 2026](https://docs.surnex.io/changelog/2026-07.md): Reports, delivery, notification channels, and the smaller tools. - [June 2026](https://docs.surnex.io/changelog/2026-06.md): Site audits, the issue catalogue, and Core Web Vitals. - [May 2026](https://docs.surnex.io/changelog/2026-05.md): The backlink profile, competitor link gaps, and domain intelligence. - [April 2026](https://docs.surnex.io/changelog/2026-04.md): AI search visibility — AI Overviews, ChatGPT, LLM benchmarking, and GEO. - [March 2026](https://docs.surnex.io/changelog/2026-03.md): The original build — four services, from first commit to a complete platform. ## OpenAPI Specs - [openapi](https://api.surnex.io/docs/openapi.json) This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.