UpSnatch API and MCP

Last updated: October 2026

Search the UpSnatch domain catalog from your own scripts, or let Claude, ChatGPT, Cursor, Windsurf, Claude Code, Gemini CLI, Codex CLI, VS Code, and other AI agents search it for you.

Overview

The UpSnatch API gives you the same catalog as Classic Search in the app: expired, dropped, pending-delete, auction, and marketplace domains with SEO metrics such as Majestic Trust Flow and Citation Flow, backlinks, referring domains, Ahrefs DR, age, and price.

  • REST API at https://api.upsnatch.com for scripts, spreadsheets, and CRMs. Auth is an API key.

  • MCP at https://api.upsnatch.com/mcp for AI agents. Claude and ChatGPT sign in with OAuth; Cursor, Windsurf, Claude Code, Gemini CLI, Codex CLI, and VS Code use an API key.

REST and MCP share the same rate limits and row quota. API access is included in all paid plans. Explorer comes with 1,000 result rows per week so you can try it in your own tools; Pro and Agency have daily allowances for real workloads.

What the API covers today

Keyword and metric search (Classic Search) and single-domain lookups. Magic Search, Local Search, and Projects are not available through the API yet.

REST API

HTTP endpoints for your own code. Base URL: https://api.upsnatch.com. Every request uses a Bearer API key from Settings, API access.

Quick start

  1. Open Settings, API access in the app and generate a key. It starts with ups_live_ and is shown only once.

  2. Send it as a Bearer token:

curl -X POST "https://api.upsnatch.com/v1/search/classic?page=1&page_size=25" \
  -H "Authorization: Bearer $UPSNATCH_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"keyword": "coffee", "tlds": ["com"], "minTrustFlow": 10}'

The response contains one page of domains plus pagination fields:

{
  "results": [
    {
      "domain": "coffeeandbooks.com",
      "tld": "com",
      "type": "MARKETPLACE",
      "available": true,
      "provider": "nameshift",
      "price": 14995,
      "currency": "USD",
      "trustFlow": 16,
      "citationFlow": 11,
      "tfCfRatio": 1.45,
      "backlinks": 46,
      "referringDomains": 29,
      "ahrefsDr": 4,
      "score": 75,
      "spamRisk": "low",
      "purchaseUrl": "https://app.upsnatch.com/go/coffeeandbooks.com"
    }
  ],
  "page": 1,
  "page_size": 25,
  "returned": 25,
  "total": 98,
  "has_more": true
}

Authentication

Every REST request needs your key in the Authorization header: Authorization: Bearer ups_live_…. Each account has one key. Generating a new key replaces the old one immediately.

Keep your key secret

Call the API from your own server, scripts, or local tools only. Never put the key in browser JavaScript, mobile apps, or public repositories: anyone who can read it can use your quota. If a key leaks, generate a new one in Settings and the old key stops working right away.

The key follows your subscription. If a payment fails or the subscription ends, requests return 403 subscription_inactive, and the same key works again as soon as the subscription is active.

Search domains

POST /v1/search/classic?page=1&page_size=25

Send filters as a JSON body. At least one selective filter is required: a keyword of 2 or more characters, tlds, listingTypes, a price range, or a min… metric above 0. Unknown fields are rejected, so a typo never silently widens your search.

FieldMeaning
keywordWord or phrase the name must contain. Plurals are matched too. Up to 100 characters.
listingTypesAny of AUCTION, DROPPED, MARKETPLACE, PENDING_DELETE.
tldsExtensions without the dot, for example ["com", "nl"]. Up to 50.
marketTldsOnly names whose label is also registered as a site on these extensions.
minTrustFlow, minCitationFlowMinimum Majestic Trust Flow and Citation Flow (0 to 100).
minTfCfRatioMinimum Trust Flow divided by Citation Flow, for example 0.5.
minBacklinks, minRefDomainsMinimum backlinks and referring domains.
minAhrefsDrMinimum Ahrefs Domain Rating (0 to 100).
minIndexed, minPageviewsMinimum indexed URLs and pageviews.
minValuationMinimum estimated value in USD.
priceFrom, priceToPrice range in USD.
minBidsMinimum number of auction bids.
availabilitytoday or thisweek: auctions ending in that window.
minAgeMinimum domain age in years.
minLength, maxLengthLength of the name without the extension.
minSegmentsMinimum number of words in the name.
languageLanguage of the name, for example en, nl, de.
excludeAdultHide adult names. Defaults to true.
excludeHyphensHide names with hyphens.
numbersModeANY, NO_DIGITS, or DIGITS_ONLY.

Pagination

page starts at 1. page_size defaults to 25 and goes up to 50 on Pro and 100 on Agency. Keep requesting the next page while has_more is true. page × page_size may not exceed 2,000 on Pro or 5,000 on Agency; narrow your filters to reach results beyond that.

Get one domain

GET /v1/domains/{domain}

curl "https://api.upsnatch.com/v1/domains/coffeeandbooks.com" \
  -H "Authorization: Bearer $UPSNATCH_API_KEY"

Returns the same fields as a search result, or 404 not_found when the domain is not in the catalog. Unlike search, a lookup can also return listings that were sold or auctions that ended; check available. Internationalized names can be sent in Unicode or punycode.

Response fields

Fields without data are null.

FieldMeaning
domain, tldThe name and its extension.
typeAUCTION, DROPPED, MARKETPLACE, or PENDING_DELETE.
availableWhether the listing can still be bought: marketplace listing not sold, auction not ended, dropped domain not registered again.
providerAuction or marketplace platform, for example godaddy. null for dropped domains.
price, currencyCurrent price or bid, always in USD.
numberOfBids, auctionEndTimeAuction bid count and end time (ISO 8601). null for other types.
trustFlow, citationFlow, tfCfRatioMajestic metrics and their ratio.
backlinks, referringDomains, ahrefsDrLink metrics. UpSnatch's own enrichment is used first, the platform's data otherwise.
domainAge, indexedURLs, domainLengthAge in years, indexed URLs, and length of the name.
scoreUpSnatch quality score from 0 to 100. Spam is not part of the score; check spamRisk alongside it.
spamRisklow, medium, high, or unknown when there is not enough link data.
availabilityStatus, availabilityCheckedAtLast registration check for dropped domains.
purchaseUrlLink to buy or bid on the domain. Use this link rather than building marketplace URLs yourself. null when the domain is no longer available.

See Metrics and quality signals for how to read these numbers.

Rate limits and quotas

REST calls and MCP tool calls count against the same limits.

LimitExplorerProAgency
Requests per minute303090
Requests per hour2006002,000
Result rows1,000 per week20,000 per day50,000 per day
Requests at the same time112
Maximum page size5050100
Maximum depth (page × page_size)1,0002,0005,000

Every search counts as one request plus the number of rows it returns. A domain lookup counts as one request and no rows. Responses include X-RateLimit-Limit, X-RateLimit-Remaining, X-RowQuota-Limit, and X-RowQuota-Remaining headers so you can pace your script. Daily allowances reset at 00:00 UTC; the Explorer weekly allowance resets on Monday at 00:00 UTC.

Use the API for your own research and tooling. Bulk-copying or redistributing the catalog to rebuild a competing dataset is not allowed under our Terms of Use; we may revoke keys when we detect abuse.

Errors

Errors are JSON with an error code and a readable message.

Status and codeWhat to do
400 validation_errorFix the request. details lists each field with an issue such as unknown_field or out_of_range.
401 unauthorizedThe key is missing, wrong, or was replaced by a newer one.
403 forbiddenYour plan does not include API access.
403 subscription_inactiveThe subscription ended or a payment failed. The key works again once the subscription is active.
404 not_foundThe domain is not in the catalog, or the path does not exist.
429 rate_limitedWait retry_after_seconds (also in the Retry-After header). class says which limit you hit: rate, row_quota, or concurrent.
503 service_busySearch capacity is briefly exhausted. Retry after a few seconds.
502 search_failedTemporary problem on our side. Retry later.

Validation errors are checked before any quota is used, except when no selective filter was given.

OpenAPI specification

The full machine-readable description is at api.upsnatch.com/openapi.yaml (OpenAPI 3.0). Import it into Postman, Insomnia, or a code generator to get a typed client.

MCP

The MCP server lets an AI agent search UpSnatch for you. Ask it things like "find .com auctions ending this week about coffee with Trust Flow above 15" and it picks the filters itself from the tool schema.

  • URL: https://api.upsnatch.com/mcp (Streamable HTTP)

  • Tools: search_classic and get_domain. Both are read-only and map to the REST endpoints above.

How you connect depends on the product:

  • Claude connector (claude.ai / Claude desktop): sign in with UpSnatch (OAuth). No API key.

  • ChatGPT plugin: add a custom MCP server, then sign in with UpSnatch (OAuth). No API key.

  • Developer tools (API key): Cursor, Windsurf, Claude Code, Gemini CLI, Codex CLI, and VS Code. Claude Code is Anthropic's CLI, not the Claude chat connector above.

  • Other tools and IDEs: any MCP client that can call a remote HTTP server with a Bearer header.

Agents and quota

Agents tend to search again and again. Every tool call uses the same quota as a REST call, so ask for small pages and specific filters, for example "10 results" rather than "everything".

Claude connector

Add UpSnatch as a custom connector in Claude (web or desktop). You sign in with your UpSnatch account via the browser; Claude never sees an API key.

  1. In Claude, open Settings, then Connectors (wording can vary slightly between web and desktop).

  2. Add a custom connector. Use this MCP URL:

https://api.upsnatch.com/mcp
  1. Complete the UpSnatch sign-in and click Allow access on the consent screen. Your plan must include API access (Explorer or higher).

  2. Back in Claude, confirm the connector shows tools such as Search expired domains and Get domain details.

  3. In a chat, ask something concrete, for example: search expired domains with coffee, .com only, with some backlinks. Approve the tool call when Claude asks.

Claude Free allows one custom connector at a time. Disconnect another connector first if you need the slot. For Anthropic's terminal CLI, see Claude Code under developer tools instead.

ChatGPT plugin

In ChatGPT you add a custom MCP server; ChatGPT saves it as a plugin. Auth is OAuth (sign in with UpSnatch). Availability depends on your OpenAI plan: Business and Enterprise have full custom MCP; some Pro accounts can connect read-only MCP servers. Use ChatGPT on the web.

  1. Open Plugins (or Apps), then Add custom MCP server.

  2. Name it UpSnatch. Under Connection, choose Server URL and enter:

https://api.upsnatch.com/mcp
  1. Set Authentication to OAuth. Leave Dynamic Client Registration (DCR) as discovered; ChatGPT should find https://auth.upsnatch.com automatically.

  2. Accept the risk warning, choose Create as a plugin, then complete UpSnatch sign-in and Allow access.

  3. Install or enable the plugin. In a new chat, type @UpSnatch (or select the plugin) and try: search expired domains with coffee and some backlinks only .com and .net.

If you do not see Add custom MCP server, your ChatGPT plan or workspace role does not allow custom MCP plugins yet.

Developer tools (API key)

These tools send your UpSnatch API key as Authorization: Bearer ups_live_…. Create a key under Settings, API access. Prefer an environment variable called UPSNATCH_API_KEY over pasting the key into a shared config file.

Covered here: Cursor, Windsurf, Claude Code, Gemini CLI, Codex CLI, and VS Code.

Cursor

Add this to ~/.cursor/mcp.json, or to .cursor/mcp.json in a project:

{
  "mcpServers": {
    "upsnatch": {
      "url": "https://api.upsnatch.com/mcp",
      "headers": {
        "Authorization": "Bearer ${env:UPSNATCH_API_KEY}"
      }
    }
  }
}

Windsurf

Windsurf Cascade reads ~/.codeium/windsurf/mcp_config.json (open it from Cascade → MCP). Use serverUrl, not url:

{
  "mcpServers": {
    "upsnatch": {
      "serverUrl": "https://api.upsnatch.com/mcp",
      "headers": {
        "Authorization": "Bearer ${env:UPSNATCH_API_KEY}"
      }
    }
  }
}

Claude Code

Anthropic's CLI (not the Claude chat connector). Add the server with your API key:

claude mcp add --transport http upsnatch https://api.upsnatch.com/mcp \
  --header "Authorization: Bearer $UPSNATCH_API_KEY"

Gemini CLI

Google's Gemini CLI. Prefer httpUrl for Streamable HTTP (plain url is for SSE). Either add via CLI:

gemini mcp add --transport http upsnatch https://api.upsnatch.com/mcp \
  --header "Authorization: Bearer $UPSNATCH_API_KEY"

Or put this under mcpServers in ~/.gemini/settings.json:

{
  "mcpServers": {
    "upsnatch": {
      "httpUrl": "https://api.upsnatch.com/mcp",
      "headers": {
        "Authorization": "Bearer $UPSNATCH_API_KEY"
      }
    }
  }
}

Codex CLI

OpenAI's Codex CLI (terminal coding agent; for ChatGPT chat see ChatGPT plugin). Add a remote server, then put the raw key (without Bearer) in the env var:

codex mcp add upsnatch \
  --url https://api.upsnatch.com/mcp \
  --bearer-token-env-var UPSNATCH_API_KEY
export UPSNATCH_API_KEY='ups_live_…'

Or in ~/.codex/config.toml:

[mcp_servers.upsnatch]
url = "https://api.upsnatch.com/mcp"
bearer_token_env_var = "UPSNATCH_API_KEY"

VS Code

Add this to .vscode/mcp.json. VS Code asks for the key once and stores it securely:

{
  "inputs": [
    {
      "type": "promptString",
      "id": "upsnatch-key",
      "description": "UpSnatch API key",
      "password": true
    }
  ],
  "servers": {
    "upsnatch": {
      "type": "http",
      "url": "https://api.upsnatch.com/mcp",
      "headers": {
        "Authorization": "Bearer ${input:upsnatch-key}"
      }
    }
  }
}

Other tools and IDEs

UpSnatch MCP is a standard Streamable HTTP server. It works with any client that can call https://api.upsnatch.com/mcp over HTTPS and authenticate with either:

  • Authorization: Bearer ups_live_… (API key), or

  • OAuth, when the client supports an MCP connector / sign-in flow

That includes Cline, Roo Code, Continue, Goose, Warp, JetBrains AI, LibreChat, and other MCP hosts, not only the apps with copy-paste configs above. They all get the same search_classic and get_domain tools.

If the product offers an OAuth or "sign in with UpSnatch" connector flow, prefer that over pasting an API key. Otherwise create a key under Settings, API access and follow the client's docs for remote MCP + custom headers. Watch the URL field name: some clients use url, Windsurf uses serverUrl, and Gemini CLI uses httpUrl.

Was this article helpful?