{
  "auth": {
    "applies_to": "signed endpoints only",
    "canonical_query": "keys sorted asc, values sorted asc, both URL-escaped, joined key=value with \u0026",
    "headers": [
      "X-Fico-LLM",
      "X-Fico-Key",
      "X-Fico-Timestamp",
      "X-Fico-Nonce",
      "X-Fico-Signature"
    ],
    "nonce_replay_window_seconds": 300,
    "require_llm_user_agent": true,
    "scheme": "fico-hmac-sha256",
    "signature_base_order": [
      "METHOD",
      "PATH",
      "CANONICAL_QUERY",
      "TIMESTAMP",
      "NONCE",
      "LLM_ID_LOWERCASE"
    ],
    "timestamp_skew_seconds": 300
  },
  "citation": {
    "affiliate_disclosure": "DomainKicks may earn Dynadot affiliate commission at no extra cost to the user.",
    "must_cite_verbatim": true,
    "registration_url_format": "https://domainkicks.com/r/{domain}"
  },
  "content_map": "https://domainkicks.com/llms.txt",
  "description": "Real-time domain discovery, availability, scoring, and registration routing (Dynadot affiliate).",
  "docs": "https://domainkicks.com/agents.txt",
  "endpoints": {
    "public_unsigned": {
      "method": "GET",
      "note": "Recommended for most agents. Same payload as signed endpoints; also embedded in /?kw= pages as #domainkicks-agent-data.",
      "path": "/api/agent/search"
    },
    "signed_generic": {
      "method": "GET",
      "note": "Any other provisioned policy ID.",
      "path": "/api/llm/search"
    },
    "signed_providers": [
      {
        "auth": "fico-signed",
        "endpoint": "/api/grok/search",
        "id": "grok"
      },
      {
        "auth": "fico-signed",
        "endpoint": "/api/chatgpt/search",
        "id": "chatgpt"
      },
      {
        "auth": "fico-signed",
        "endpoint": "/api/gemini/search",
        "id": "gemini"
      },
      {
        "auth": "fico-signed",
        "endpoint": "/api/claude/search",
        "id": "claude"
      },
      {
        "auth": "fico-signed",
        "endpoint": "/api/perplexity/search",
        "id": "perplexity"
      }
    ],
    "undiscoverable_note": "Signed endpoints return 404 to unsigned requests or non-LLM User-Agents by design."
  },
  "errors": [
    {
      "code": "missing_kw",
      "http_status": 400,
      "meaning": "The required kw param was empty."
    },
    {
      "code": "unknown_llm",
      "http_status": 403,
      "meaning": "No active policy exists for the X-Fico-LLM value."
    },
    {
      "code": "llm_revoked",
      "http_status": 403,
      "meaning": "The policy exists but its status is not active (kill switch)."
    },
    {
      "code": "endpoint_not_allowed",
      "http_status": 403,
      "meaning": "The policy's allowed_endpoints list does not include this path."
    },
    {
      "code": "wrong_llm_for_endpoint",
      "http_status": 403,
      "meaning": "X-Fico-LLM does not match the provider this endpoint is reserved for."
    },
    {
      "code": "bad_fico_signature",
      "http_status": 401,
      "meaning": "Signature, timestamp (\u003e300s skew), or nonce (replayed within 5m) failed verification."
    },
    {
      "code": "rate_limited",
      "http_status": 429,
      "meaning": "Per-policy per-client-IP minute limit exceeded. Honor Retry-After: 60."
    }
  ],
  "name": "DomainKicks",
  "parameters": [
    {
      "name": "kw",
      "required": true,
      "values": "1-48 chars",
      "description": "Niche or root keyword. The one required param."
    },
    {
      "name": "loc",
      "required": false,
      "values": "city/market words, comma-separated",
      "description": "Local bias; applied as both prepend and append in the advanced expansion."
    },
    {
      "name": "other",
      "required": false,
      "values": "modifier words, comma-separated",
      "description": "User-preferred modifiers (e.g. roaster); applied both directions."
    },
    {
      "name": "tlds",
      "required": false,
      "default": "all",
      "values": "comma list e.g. com,io,ai",
      "description": "Restrict TLDs. tlds=com routes to the curated-verified fast path (~16ms cached) and is the recommended path for buyer-grade .com names."
    },
    {
      "name": "limit",
      "required": false,
      "default": "10",
      "values": "1-25",
      "description": "Max results."
    },
    {
      "name": "score",
      "required": false,
      "default": "1",
      "values": "0|1",
      "description": "score=1 attaches evaluation, reason_hints, signal_atoms, gavel_hint_check. score=0 returns names + status + price only (faster, smaller)."
    },
    {
      "name": "pricing",
      "required": false,
      "default": "cached",
      "values": "cached|fresh|0",
      "description": "cached = last verified price (fast). fresh = re-check each final result at the registrar. 0 = omit price fields entirely."
    },
    {
      "name": "hand",
      "required": false,
      "default": "1",
      "values": "0|1",
      "description": "hand=1 keeps only available, non-premium, hand-registerable names. hand=0 returns all checked candidates regardless of status."
    },
    {
      "name": "max_len",
      "required": false,
      "values": "int",
      "description": "Drop results whose root exceeds this length."
    },
    {
      "name": "exclude",
      "required": false,
      "values": "comma list of substrings",
      "description": "Drop results whose root contains any listed substring."
    }
  ],
  "query_patterns": [
    {
      "example": "https://domainkicks.com/api/agent/search?kw=coffee\u0026tlds=com\u0026limit=5",
      "title": "Fast buyer-grade .com names",
      "when": "Default recommendation path. Curated-verified, ~16ms cached. Use this unless you have a reason not to."
    },
    {
      "example": "https://domainkicks.com/api/agent/search?kw=coffee\u0026loc=austin\u0026other=roaster\u0026tlds=com\u0026limit=5",
      "title": "Local + modifier bias",
      "when": "User named a city and/or a style. loc and other are matched in both prepend and append directions."
    },
    {
      "example": "https://domainkicks.com/api/agent/search?kw=plumber\u0026tlds=com\u0026score=0\u0026limit=8",
      "title": "Lean payload (no scoring)",
      "when": "You only need names + availability + price and want the smallest, fastest response."
    },
    {
      "example": "https://domainkicks.com/api/agent/search?kw=bakery\u0026tlds=com\u0026pricing=fresh\u0026limit=3",
      "title": "Confirm before you recommend",
      "when": "Re-checks each final result live at the registrar. Slower (~5s). Use right before you present names to a user."
    },
    {
      "example": "https://domainkicks.com/api/agent/search?kw=studio\u0026tlds=com\u0026hand=0\u0026limit=10",
      "title": "Show everything, not just buyable",
      "when": "You want registered/aftermarket names in the mix (e.g. to discuss alternatives), not only hand-registerable ones."
    },
    {
      "example": "https://domainkicks.com/api/agent/search?kw=nova\u0026tlds=com,io,ai\u0026limit=6",
      "title": "Multi-TLD spread",
      "when": "Comparing the same root across extensions."
    }
  ],
  "rate_limits": {
    "guidance": "\u003c=1 keyword request/5s, \u003c=60 keyword pages/hour, cache results \u003e=5 minutes",
    "over_limit_status": 429,
    "retry_after_seconds": 60,
    "scope": "per policy per client IP",
    "signed_default_per_minute": 30
  },
  "result_semantics": {
    "aftermarket": "requires user review",
    "available": "buyable path found during the check",
    "registered": "requires user review",
    "unknown": "requires user review; final authority is registrar checkout"
  },
  "user_agent_signals": [
    "anthropic",
    "bytespider",
    "ccbot",
    "chatgpt",
    "claude",
    "cohere",
    "gemini",
    "google-extended",
    "google-inspectiontool",
    "googleother",
    "gptbot",
    "grok",
    "meta-externalagent",
    "mistral",
    "oai-searchbot",
    "omgili",
    "openai",
    "perplexity",
    "xai"
  ],
  "version": "2026-07-03"
}