# AvailableWhois: domain availability checker

> AvailableWhois (https://availablewhois.com) is a free domain name availability checker. Type a name and it checks 16 popular TLDs at once (118 in the catalog, plus domain hacks), using live registry RDAP data with a DNS fallback, and says where each answer came from. No signup; searches aren't sold or used to front-run registrations.

## Use the tool

Open https://availablewhois.com/?q=yourname (or a full domain like `yourname.ai`). Results stream in per TLD, with name ideas and domain hacks when your first pick is taken.

## How verdicts work

Each result has a `status` and a `source`:

- `available`: The registry has no record of the domain (or, for TLDs without RDAP, DNS shows no delegation). It can be registered.
- `taken`: The domain is registered.
- `unknown`: Could not be determined (registry slow, rate-limited or unreadable, and DNS was ambiguous); the app shows this as Unsure. Retry later. See `note`.
- `invalid`: Not a syntactically valid domain, or the TLD doesn't exist. See `note`.

- source `registry`: Authoritative answer from the TLD registry's RDAP service.
- source `dns`: Inferred from DNS (nameservers present → taken; NXDOMAIN → likely available). Less certain than `registry`.

## API

Free, no key. Base URL: https://availablewhois.com. Machine-readable spec: https://availablewhois.com/openapi.json (OpenAPI 3.1).

### GET /api/check

- `d` (required): comma-separated domains, up to 12 per request. Duplicates are removed; IDNs are accepted.
- `format` (optional): `json` returns `{ "results": DomainResult[] }` in input order once every lookup has finished. The default streams NDJSON: one DomainResult per line in completion order; ignore blank heartbeat lines.

Simplest call (JSON, input order):

```sh
curl -s 'https://availablewhois.com/api/check?d=acme.com,acme.ai,acme.dev&format=json'
```

Streaming (NDJSON):

```sh
curl -sN 'https://availablewhois.com/api/check?d=acme.com,acme.ai,acme.dev'
```

Example result:

```json
{
  "results": [
    {
      "domain": "acme.com",
      "display": "acme.com",
      "tld": "com",
      "status": "taken",
      "source": "registry",
      "registrar": "Example Registrar, Inc.",
      "registeredAt": "1995-08-15T04:00:00Z",
      "expiresAt": "2030-08-14T04:00:00Z",
      "ms": 212
    },
    {
      "domain": "acme.dev",
      "display": "acme.dev",
      "tld": "dev",
      "status": "available",
      "source": "registry",
      "ms": 180
    }
  ]
}
```

(Illustrative values, not a live answer.)

#### DomainResult fields

- `domain`: ASCII (punycode) domain, lowercase.
- `display`: Unicode form for display when the input was an IDN; otherwise the same as `domain`.
- `tld`: Public suffix, e.g. `com` or `co.uk`.
- `status`: Availability verdict. One of: `available`, `taken`, `unknown`, `invalid`.
- `source`: Where the verdict came from. One of: `registry`, `dns`.
- `registrar` (optional): Registrar name, when taken and the registry exposes it.
- `registrarUrl` (optional): Registrar website, when known.
- `registeredAt` (optional): Registration date (RDAP event).
- `expiresAt` (optional): Expiry date (RDAP event).
- `updatedAt` (optional): Last-changed date (RDAP event).
- `nameservers` (optional): Lowercased nameserver hostnames.
- `statusCodes` (optional): EPP status codes, e.g. "client transfer prohibited".
- `ms`: Server-side latency for this lookup, in milliseconds.
- `cached` (optional): True when served from the server's short-lived cache.
- `note` (optional): Human-readable reason, mainly for `unknown`/`invalid` or DNS-inferred verdicts.

#### Errors and limits

- `400 {"error": "..."}`: missing/malformed `d` or more than 12 domains. Split bigger lists into batches.
- `429`: rate limited per IP. Wait for the `Retry-After` header (seconds), then retry.
- `503`: the service's daily capacity is reached. `Retry-After` gives the seconds until checks resume (00:00 UTC). Do not retry before then.
- Per-domain problems never fail the request: they come back as `unknown` or `invalid` with a `note`.
- Results may be served from a short-lived cache (`cached: true`).

### GET /api/health

Returns `{"status": "ok", "ok": true, "time": "<ISO timestamp>", "capacity": {"closed": false}}`.

## Guides

- [How Domain Availability Checks Work](https://availablewhois.com/how-it-works.md): How AvailableWhois checks domain availability: live registry (RDAP) lookups, a DNS cross-check, and a verdict that names its source. No signup, no front-running.
- [Domain Availability FAQ](https://availablewhois.com/faq.md): Answers about checking domain availability: how accurate it is, what RDAP is, when expired domains drop, domain hacks, and which TLD to pick.
- [Domain Hacks: Examples & How to Find One](https://availablewhois.com/domain-hacks.md): Domain hacks use the TLD to finish the word, like youtu.be or del.icio.us. See famous examples, how to find one for your name, and what to check first.
- [How to Choose a Startup Domain Name](https://availablewhois.com/tips.md): Eight practical tips for choosing a startup domain name: keep it short, check every TLD, mind trademarks and renewals, and buy before you announce.
- [TLD guide](https://availablewhois.com/tlds.md): every popular extension, who it suits, and what to know.

---

Canonical page: https://availablewhois.com/ · Check a domain: https://availablewhois.com/ · All docs: https://availablewhois.com/llms.txt
