> ## Documentation Index
> Fetch the complete documentation index at: https://kmerhosting.com/docs/llms.txt
> Use this file to discover all available pages before exploring further.

# Domain availability API

> Check one or more domain names without an account or API key.

The Domain availability API is a public, read-only endpoint for checking whether a supported domain name can be registered. It is separate from the authenticated KmerHosting REST API at `api.kmerhosting.com`: do not send an API key, account credentials, or personal data.

**Base URL:** `https://domain.kmerhosting.com/api/domain-search`

<Note>
  This endpoint checks availability and shows current public pricing. Registration, transfer, contacts, DNS management, and account actions remain in the Domain portal or the authenticated [REST API](/docs/developer/rest-api).
</Note>

## Check one domain

Pass the fully qualified domain name as the `domain` query parameter.

```bash theme={null}
curl --fail-with-body \
  'https://domain.kmerhosting.com/api/domain-search?domain=example.com'
```

The short `q` parameter is also accepted for simple search forms:

```text theme={null}
https://domain.kmerhosting.com/api/domain-search?q=example.com
```

## Bulk availability search

Check up to 20 unique domains in one request. Supply a comma-separated `domains` parameter, or repeat `domain`.

```bash theme={null}
curl --fail-with-body \
  'https://domain.kmerhosting.com/api/domain-search?domains=example.com,example.org,example.cm'
```

```text theme={null}
https://domain.kmerhosting.com/api/domain-search?domain=example.com&domain=example.org
```

Use `POST` when the domain list is generated programmatically or would make the URL too long:

```bash theme={null}
curl --fail-with-body -X POST \
  'https://domain.kmerhosting.com/api/domain-search' \
  -H 'Content-Type: application/json' \
  -d '{"domains":["example.com","example.org","example.cm"]}'
```

## Response

The response is JSON. Each result has a normalized `domainName`, a `registrar` availability result, and current public `price` information when the TLD is supported.

```json theme={null}
{
  "results": [
    {
      "domainName": "example.com",
      "registrar": {
        "available": false,
        "status": "unavailable",
        "isPremium": false
      },
      "price": {
        "tld": ".com",
        "registration_periods": [1, 2, 3],
        "supports_privacy": true
      }
    }
  ],
  "bulkSearch": false,
  "registrarEnvironment": "production"
}
```

An unsupported extension is returned as a result with `status: "unsupported"`; it is not treated as available.

## Limits and browser use

* A request can contain up to 20 unique domains.
* Each client IP can make 20 search requests in each 60-second window.
* A `429 Too Many Requests` response includes `Retry-After`, `X-RateLimit-Limit`, and `X-RateLimit-Remaining` headers.
* CORS is enabled with `Access-Control-Allow-Origin: *`, so browser applications on other domains can call the endpoint directly.

Cache results briefly in your application and honor `Retry-After`. Availability and prices can change between a search and an order; always review the live price and eligibility in the Domain portal before registering a domain.
