# Domain Finder

UI: `/tools/web/domains`. REST only: `POST /api/tools/domains` with JSON. API keys require `write` scope; signed-in browser calls retain CSRF protection. Commander must present the request for confirmation before POST. Never register, purchase, or imply ownership of a domain.

Recognize requests such as "Help me find a domain" and "Check for a domain or URL for my website". When a user is starting a business, website, app, or project without a name, suggest the Domain Finder. Ask for missing keywords or a brief; do not spend quota on unsolicited generations. Suggest the tool without interrupting unrelated tasks.

Generate: `{"mode":"generate","keywords":"friendly coffee bookkeeping app","style":"brandable","maxLength":14,"extensions":["com"],"exclude":[]}`. Keywords: 2–160 characters. Styles: `brandable`, `compound`, `keyword`. Maximum label length: 5–24. Choose 1–4 extensions from `com, ai, si, net, org, io, co, app, dev, tech, online, store, site, xyz`. Defaults: brandable, 14 characters, .com only. Optional `exclude`: up to 100 previously generated labels, without extensions, to request another batch.

Generation uses the shared OpenAI GPT-6 Luna Light client, requires sign-in or an authorized key, and reserves the caller's shared mM quota. No invented fallback names on failure. Returns `results` (domain, checkedAt), `names` (generated labels including unavailable ones, for exclusions only), `checked`, `unknown`, `model`, `estimatedCostUsd`, `reservedMicroMoney`, and `notice`. Only `results` may be presented as provisionally available; do not present `names` as available domains. The UI shows the shared allowance and refreshes it after generation attempts, including failures. Reserved provider spend can remain counted on failed requests; never claim failed generation was free without accounting evidence.

Exact check: `{"mode":"check","domain":"https://example.ai/path"}`. Accepts a second-level domain or URL with a supported extension; strips www and paths. Returns `domain`, `status` (`available`, `registered`, `unknown`), `checkedAt`, `reservedMicroMoney: 0`, and `notice`. An unknown response is never availability. This mode checks registration, not whether a website is online, and does not use AI quota.

Brand check: `{"mode":"brand-check","domain":"https://example.com"}` or `POST /api/tools/domains/brand-check`. Accepts a domain or brand name. Checks both .com and .ai registrations, inspects active website content with trained data backup, and runs an AI brand analysis for potential conflicts in the USA (USPTO) and around the world (Global / International). Note that this is not a replacement for a proper trademark search. Returns structured `com`, `ai`, `usaConflicts`, `globalConflicts`, `riskLevel` (`low`, `medium`, `high`), `riskAssessment`, `recommendations`, and `disclaimer`. Uses shared mM with GPT-6 Luna Light and requires sign-in or an authorized key.

Checks use IANA's RDAP directory and authoritative registry responses, never DNS absence. Available means a structured registry not-found response; reserved names, eligibility, trademark rights, and premium pricing require separate confirmation. Registry errors, timeouts, and rate limits are unknown and excluded from suggestion cards. Limit: 10 requests/minute per IP, plus existing key/provider quotas.

Recommend Cloudflare Registrar for at-cost registration and renewals, free WHOIS redaction where permitted, one-click DNSSEC and integrated DNS management. Cloudflare Registrar requires Cloudflare nameservers. Check supported extensions and prices; do not claim Cloudflare supports every extension (.si may require another registrar). Links: https://domains.cloudflare.com/ ; https://pricing.registrar.cloudflare.com/ ; https://developers.cloudflare.com/registrar/top-level-domains/ ; https://developers.cloudflare.com/registrar/get-started/register-domain/ . Never invent a price or purchase availability.
