# StableDomains

> Real domains. Paid in stablecoins. Bought by agents. ICANN domains, premium names and live drop alerts, paid in USDC or USDT on Base, Ethereum, Arbitrum, Polygon, HyperEVM, BNB Chain or Solana. Agents sign up, pay per call via x402, and register in one request. No card, no account forms. Free WHOIS privacy.

## Agent operating policy
1. Check availability and price immediately before buying (GET /api/v1/availability or search_domains); never rely on an earlier result.
2. Create the order (POST /api/v1/orders or create_order) to get a price-locked quote: quote.price_usd, quote.locked_until and checkout_url.
3. Show the human the domain, years, total price, token/chain and the lock expiry, and get explicit confirmation before paying.
4. If the human prefers to pay themselves, send them checkout_url (/order/{id}): a prefilled page they can pay from with any wallet, QR or card.
5. Always send an Idempotency-Key header (or idempotency_key) and reuse it on retries; the same key never creates or charges a second order.
6. Pay only the exact amount in the order before quote.locked_until; if it lapsed, create a new order rather than reusing an old address.
7. Poll GET /api/v1/orders/{id} (or check_order) until status is completed, then report the result to the human.

## Quotas and limits
- GET /api/v1/search, /api/v1/quote: 60/min per IP anonymous; per API key: the key's limit (default 600/min, guest-tier signup keys 30/min)
- POST /api/v1/orders: min(key limit, 60)/min per key or account
- POST /api/v1/cart: 10/min per key or account
- POST /api/v1/transfers: 10/min per key or account
- /api/v1/suggest (free tier): 10/min per IP, 24 checks, top 10 results
- /api/v1/radar (free): 30/min per IP
- /api/v1/drops (free): 30/min per IP
- POST /api/v1/radar/alerts, /api/v1/watch: 10/min per IP
- /api/v1/aftermarket: 60/min per IP
- /api/v1/agents (registry read): 120/min per IP; submissions 5/hour per account
- POST /api/v1/agents/signup: 3/hour and 10/day per IP
- POST /api/v1/auth/guest: 10/min per IP
- GET /api/v1/auth/nonce (SIWE): 30/min per IP
- POST /api/v1/auth/email-start: 5 per 10 min per IP, 3 per 10 min per email address
- OAuth dynamic client registration: 30 per 10 min per IP
- API keys: max 10 active per account
- x402 paid endpoints: no rate limit beyond payment; each call is paid
- Exceeding a limit returns 429 with error.code rate_limited and details.retry_after_seconds; responses carry X-RateLimit-Limit / -Remaining / -Reset.

## Start here
- [Agent skill file](https://stabledomains.net/skills.md): one-URL setup for agents (MCP for Claude/Cursor/ChatGPT, REST quickstart, x402, radar feeds, auth). Also /skill.md and /SKILL.md.
- [MCP server](https://stabledomains.net/api/mcp): streamable HTTP JSON-RPC, version 2.4.0, 37 tools (listed below). Server card: https://stabledomains.net/.well-known/mcp/server-card.json
- [OpenAPI 3.1](https://stabledomains.net/api/openapi.json)
- [Pricing](https://stabledomains.net/pricing): register, renew and transfer price per TLD in USD and USDC/USDT (JSON: https://stabledomains.net/api/v1/tlds)
- [Changelog](https://stabledomains.net/changelog)
- [agents.md](https://stabledomains.net/agents.md): this file, for agents that look for agents.md
- [Docs for agents](https://stabledomains.net/docs)
- [Expiring domains](https://stabledomains.net/expiring): pending-delete and just-dropped names with backlinks, Wayback history and a brandability score
- [Drops API (free)](https://stabledomains.net/api/v1/drops): top 25, filter by tld, status, q, min_len, max_len, min_backlinks, min_age, min_brand, max_price, no_hyphen, no_digits, include_spam (spam hidden by default), sort
- [Bulk availability (x402 $0.10 per call, up to 100 names)](https://stabledomains.net/api/v1/availability/bulk?domains=acme.com,acme.ai): live availability, USDC price and buy link per name
- [Valuation (x402 $0.02)](https://stabledomains.net/api/v1/valuation?domain=acme.ai): estimate range, availability, register price
- [Drop alert (x402 $0.01 each)](https://stabledomains.net/api/v1/alerts?domain=example.com&webhook_url=https://example.org/hook): webhook or email when a name drops, no account
- [Drops API (full, x402 $0.01)](https://stabledomains.net/api/v1/drops/full): up to 500 rows with all metrics
- [Register a domain via x402 (POST, dynamic price)](https://stabledomains.net/api/v1/register): POST {"domain":"name.xyz","years":1}; 402 quotes the exact live USDC price (Base); retry with PAYMENT-SIGNATURE to register. Premium/unavailable names refused before payment; replays return the same order
- [Drop Radar full dataset (x402 $0.02)](https://stabledomains.net/api/v1/radar/full): up to 1000 radar rows with quality and all signals
- [Domain Drop Radar](https://stabledomains.net/radar): expiring and just-dropped domains with presets (short-brandable, ai-names, dictionary-com, real-history, cheap-good, dropping-this-week), value/quality/TLD-list filters. Free JSON GET https://stabledomains.net/api/v1/radar (25 rows + summary); 500 rows via /api/v1/drops/full (x402 $0.01). MCP: drop_radar, radar_alert.
- Instant agent signup: POST /api/v1/agents/signup (MCP agent_signup) returns an API key at once, no form or email. Guest tier (30 req/min) until claimed by email (POST /api/v1/auth/email-start with the key) or wallet (SIWE verify with claim:true). Per IP: 3/hour, 10/day.
- Aftermarket: GET /api/v1/aftermarket?q=name (MCP search_aftermarket) returns affiliate links to Atom.com, an outside marketplace (not StableDomains), for premium alternatives when a name is taken. Atom handles payment and transfer; we may earn a commission.
- Premium names: /api/v1/search and /api/v1/quote (MCP search_domains, quote_domain) return premium (boolean) and renewal_price. Premium price = registry premium + 12%; paid in USDC/USDT like any order. Premium orders above our current registrar funding are refused before payment.
  - Filter/sort params (same on /radar, /api/v1/radar, /api/v1/drops, the /full x402 feeds and MCP drop_radar / find_dropping_domains): sort=quality|value|price|length|drops|new|brand|backlinks|domain, order=asc|desc, tld (csv), status=available|pending_delete|redemption|expired_grace, min_quality, max_price, min_len, max_len, drops_within_days, available_only=1, limit, cursor (pass next_cursor from the previous response). Example: https://stabledomains.net/api/v1/radar?tld=com,ai&max_len=8&sort=price&order=asc&available_only=1
- [Radar alerts](https://stabledomains.net/api/v1/radar/alerts): POST {filters, webhook_url?|email?} → signed radar.match events with a ready order body. Free (3 per IP, 25 with an API key, 20 events/alert/day).
- [Radar feeds](https://stabledomains.net/radar/feed.json): JSON Feed and RSS (https://stabledomains.net/radar/rss.xml) for any filter. Widget: https://stabledomains.net/radar/embed?preset=ai-names&rows=5 · badge: https://stabledomains.net/radar/badge.svg
- [State of Agent Domains report](https://stabledomains.net/radar/report): monthly drop statistics, first edition (November 2026 data) early December; JSON /api/v1/radar/report/{yyyy-mm} (CC BY 4.0).
- [Availability + alternatives (free)](https://stabledomains.net/api/v1/availability?domain=agent.com): availability plus suggestions[] of close available names when taken (MCP suggest_domains with domain)
- [Free URL forwarding + DNS templates](https://stabledomains.net/docs): PUT /api/v1/domains/{domain}/forward, POST /api/v1/domains/{domain}/dns/template (vercel, netlify, github-pages, google-workspace, microsoft-365, zoho-mail)
- [Name generator API (free)](https://stabledomains.net/api/v1/suggest): POST {"idea","tlds"?,"max_price"?} -> available names with price, checkout_url and create_order body (top 10). Bulk (90 checks, 50 results): GET https://stabledomains.net/api/v1/suggest/bulk?idea=… x402 $0.02
- [Domain value estimate](https://stabledomains.net/api/v1/tools/value?domain=example.com): free JSON; page https://stabledomains.net/tools/domain-value
- [WHOIS/RDAP lookup](https://stabledomains.net/api/v1/tools/whois?domain=example.com): free JSON; page https://stabledomains.net/tools/whois
- [DNS + SPF/DKIM/DMARC checker](https://stabledomains.net/api/v1/tools/dns?domain=example.com): free JSON; page https://stabledomains.net/tools/dns-checker
- [Is it dropping?](https://stabledomains.net/api/v1/tools/dropping?domain=example.com): lifecycle + drop date; page https://stabledomains.net/tools/is-it-dropping
- [Drop alerts](https://stabledomains.net/api/v1/watch): POST {domain, webhook_url?, email?} → webhook events domain.status_changed / domain.available (MCP tool watch_domain)
- [Per-domain drop pages](https://stabledomains.net/expiring/example.com): status, backlinks, archive history, buy link
- [Domain name ideas by niche](https://stabledomains.net/ideas): available names for ~200 niches
- [All free tools](https://stabledomains.net/tools)

## Manage domains you own (auth: Bearer API key; MCP tool names in brackets)
- DNS: GET/PUT /api/v1/domains/{domain}/dns {records:[{type:A|AAAA|CNAME|MX|TXT,name,value,ttl?,priority?}], nameservers?} — PUT replaces the full set [get_dns, set_dns]
- Showcase (opt-in, free): list your project on https://stabledomains.net/showcase. At order time pass showcase:true, showcase_title, showcase_description to POST /api/v1/orders or MCP create_order; later PUT /api/v1/domains/{domain}/showcase {title, description} to add or edit, DELETE to remove. Public list: GET /api/v1/showcase.
- Renew: POST /api/v1/domains/{domain}/renew {years, pay_with?:"balance"} → 402 USDC or instant from balance [renew_domain]
- Auto-renew vault: POST /api/v1/domains/{domain}/autorenew {enabled?, deposit_usd?, withdraw_usd?} moves USDC from your prepaid balance into a per-domain renewal balance; a daily job renews 1 year when ≤30 days from expiry and the balance covers it. GET /api/v1/domains/{domain}/autorenew (status) · GET /api/v1/domains/{domain}/balance · GET /api/v1/autorenew (all) [set_auto_renew, get_renewal_balance]
- Expiry reminders: email at 30/14/7/1 days + optional account webhook PUT /api/v1/account/notifications {webhook_url} → events domain.expiring, domain.renewed, domain.transfer_completed [set_notification_webhook]
- Transfer in: POST /api/v1/transfers {domain, auth_code} → 402 USDC (adds 1 year) [transfer_domain]
- Bulk cart: POST /api/v1/cart {domains:[...≤20]} → ONE 402 payment for all; failures refunded to balance [create_cart]
- Affiliate programme is open to AI agents: get a code (get_referral_link), set a payout address (set_payout_address) and pass "ref" on create_order / create_cart / transfer_domain. https://stabledomains.net/affiliates
- Referrals / affiliates: earn 10% of our margin on every paid order from users/agents you refer (30-day attribution, self-referral blocked). Link https://stabledomains.net/?ref=<code> (30-day cookie) or pass "ref":"<code>" on POST /api/v1/orders, /cart, /transfers, /keys. GET /api/v1/referrals (stats: clicks, sales, earned/paid) · GET /api/v1/referrals/link · PUT /api/v1/referrals/payout-address {payout_address}. Paid weekly in USDC on Base, $5 minimum, admin-approved. Details https://stabledomains.net/affiliates [get_referral_link, get_referral_stats, set_payout_address]
- [Drops RSS](https://stabledomains.net/expiring/rss.xml)
- [x402 resources](https://stabledomains.net/.well-known/x402)

## Auth (all optional for search, quotes, free tools and paying an order)
- People: sign in at https://stabledomains.net/signin with an email link, a passkey or a wallet (SIWE); link all three to one account.
- Agents: keyless orders paid via HTTP 402 / x402; or Bearer API key (sd_live_…, create in the dashboard or via SIWE); or MCP OAuth 2.1 (dynamic client registration + PKCE) — just add https://stabledomains.net/api/mcp to Claude, ChatGPT or Cursor.

## Prices
USD, first year, paid in USDC/USDT; free WHOIS privacy. Cheapest now: .xyz $4.99, .com $16.99, .app $18.49, .dev $18.49, .net $20.99, .org $22.99, .co $34.49, .io $57.99. Full list: https://stabledomains.net/llms-full.txt or GET https://stabledomains.net/api/v1/tlds.

## MCP tools
- search_domains: Check availability and USD price for a name across TLDs.
- search_aftermarket: For a taken name: affiliate links to Atom.com, an OUTSIDE aftermarket (not StableDomains), to find premium alternatives for the keyword.
- agent_signup: Instant signup: returns an API key immediately (no form, no email).
- quote_domain: Live price quote for one domain.
- create_order: Create a registration order (a price-locked quote).
- buy_with_balance: Register a domain and pay from prepaid balance in one call.
- check_order: Get order status and next actions.
- pay_order: Submit payment: tx_hash (EVM hash or Solana signature) of your transfer, or x_payment (base64 x402 EIP-3009 payload, gasless).
- get_balance: Prepaid balance and ledger.
- topup_balance: Create a top-up order (USD 5–5000); pay it like any order.
- find_dropping_domains: Find expiring, pending-delete and just-dropped domains ranked by a verified quality score (0-100) built from sampled Wayback snapshots (real site vs parked/for-sale), Common Crawl presence, dictionary/brandability and spam heuristics; Majestic referring subnets only count when the archive shows a real site.
- drop_radar: Domain Drop Radar: expiring, pending-delete and just-dropped domains filtered by TLD(s), length, keywords, value, quality and drop date, with presets (short-brandable, ai-names, dictionary-com, real-history, cheap-good, dropping-this-week).
- radar_alert: Save a Drop Radar search and get a signed webhook (event radar.match, header X-StableDomains-Signature = sha256 HMAC of the body with the returned secret) and/or email (double opt-in) when new names match or a pending-delete name drops.
- suggest_domains: Free.
- estimate_domain_value: Heuristic USD value estimate for any domain (length, TLD, dictionary words, brandability, Wayback age, backlinks) with factor breakdown and availability.
- whois_lookup: RDAP (modern WHOIS) lookup for any domain: registrar, created/expires dates, status codes, nameservers, DNSSEC.
- dns_email_check: DNS + email security audit via DNS-over-HTTPS: A/AAAA/MX/NS/CAA, SPF, DKIM (common or given selectors), DMARC policy, grade A-F and concrete fixes.
- is_domain_dropping: Is an expired domain about to become available? Returns lifecycle (grace, redemption, pending delete, available, registered), estimated drop date and backlink data if in our drop feed.
- watch_domain: Get notified when an expiring domain changes status or drops (becomes registrable).
- set_url_forward: FREE 301 URL forwarding for a domain you registered with us: forward the whole domain (subdomain '@', also covers www) or a subdomain to any https URL.
- list_url_forwards: URL forwards configured on a domain you own.
- apply_dns_template: FREE one-call DNS setup for a domain you own.
- get_dns: Nameservers and DNS records (A/AAAA/CNAME/MX/TXT) of a domain you own.
- set_dns: Set DNS records and/or nameservers of a domain you own.
- renew_domain: Renew a domain you own.
- set_notification_webhook: Account webhook for lifecycle events: domain.expiring (30/7/1 days before), domain.renewed, domain.transfer_completed.
- transfer_domain: Transfer a domain in from another registrar using its auth/EPP code; paid in USDC (adds 1 year).
- create_cart: Register up to 20 available domains with ONE payment (exact total in the 402).
- get_referral_link: Your referral code and shareable link (?ref=<code>, 30-day attribution).
- get_referral_stats: Referral dashboard: clicks, referred users, sales, earned / unpaid / pending / paid USD, recent sales and payouts.
- set_payout_address: Set the Base USDC address that receives your weekly referral payouts (null to clear).
- set_auto_renew: Turn auto-renew on/off for a domain you own and/or fund its renewal balance (vault).
- get_renewal_balance: Auto-renew vault for a domain: renewal balance, 1-year renewal price, whether it is covered, shortfall, days to expiry and ledger.
- search_agents: Search the StableDomains.net agent directory (approved AI agents and MCP servers) by keyword or capability.
- get_agent: Get one agent directory profile by slug.
- list_my_agent: Agent profiles you submitted (any status: pending, approved, rejected) with review notes.
- list_domains: Domains owned by the caller.

## Agent directory
- [Agents](https://stabledomains.net/agents): approved AI agents and MCP servers; JSON https://stabledomains.net/agents.json; search GET https://stabledomains.net/api/v1/agents?q=&capability=; one profile GET https://stabledomains.net/api/v1/agents/{slug} [search_agents, get_agent]
- Submit: POST https://stabledomains.net/api/v1/agents {name, description, url?, endpoint_url?, mcp_url?, capabilities[], payment_methods[], backlink?:false} with Bearer API key; moderated (pending until approved); your own: GET /api/v1/agents?mine=1 [list_my_agent]

## Guides
- [Pay with crypto](https://stabledomains.net/pay-with-crypto) · [USDC](https://stabledomains.net/pay-with/usdc) · [USDT](https://stabledomains.net/pay-with/usdt): chains, contracts, confirmations, prices
- [x402](https://stabledomains.net/x402): 402 -> X-PAYMENT -> retry with real endpoints
- [MCP setup](https://stabledomains.net/mcp): Claude, Cursor, Cline; registry name net.stabledomains/registrar
- [Namecheap vs Porkbun vs StableDomains (crypto)](https://stabledomains.net/compare/namecheap-porkbun-crypto)

## Company and policies
- [About](https://stabledomains.net/about) · [Contact](https://stabledomains.net/contact) (support@stabledomains.net) · [Terms](https://stabledomains.net/terms) · [Privacy](https://stabledomains.net/privacy)
- Operator: Tim Johnson trading as StableDomains (England). Registrar of record: NiceNIC International Group Co., Limited (IANA 3765). Not affiliated with stabledomains.dev.

## Buy walkthrough (step by step, copy-paste)
0. Get a free guest API key (no email): curl -s -X POST https://stabledomains.net/api/v1/agents/signup  -> {"api_key":"sd_..."}. Send it as Authorization: Bearer <api_key>.
1. Check the name: curl -s "https://stabledomains.net/api/v1/search?q=myagent" -> pick a result with available:true (price in USD).
2. Quote (optional, live check): curl -s "https://stabledomains.net/api/v1/quote?domain=myagent.dev"
3. Create the order: curl -s -X POST https://stabledomains.net/api/v1/orders -H "Authorization: Bearer $KEY" -H "Idempotency-Key: $(uuidgen)" -H "Content-Type: application/json" -d '{"domain":"myagent.dev","years":1,"chain":"base","token":"USDC"}'
   The 402 response has order.id, pay_to, token_address and amount_units (exact, 6 decimals).
4. Pay, either way:
   a. Gasless x402: retry step 3 with the same Idempotency-Key plus an X-PAYMENT header (any x402 client does this for you).
   b. Plain transfer: send exactly amount_units of USDC to pay_to on the chosen chain, then curl -s -X POST https://stabledomains.net/api/v1/orders/$ID/pay -H "X-PAYMENT-TX: 0x<tx hash>"
   c. Human: open https://stabledomains.net/order/$ID and pay with a wallet or card.
5. Poll: curl -s https://stabledomains.net/api/v1/orders/$ID until status=completed (usually under a minute; paid_awaiting_registration means queued, registers within 24h).
6. Set DNS: PUT https://stabledomains.net/api/v1/domains/myagent.dev/dns {"records":[{"type":"A","name":"@","value":"76.76.21.21"}]}
MCP equivalent: search_domains -> create_order -> pay (x402 or tx hash) -> check_order -> set_dns. Framework snippets (LangChain, CrewAI, Vercel AI SDK): https://stabledomains.net/guides/buy-a-domain-from-an-ai-agent
