Home / Domain availability API

Domain availability API

One POST, one answer. Free, with a key.

Quick start

Create a free account, generate a key at /api-keys, and call it. No card, no approval step, no sales call.

curl -X POST https://dotseeka.com/api/v1/check \
  -H "Authorization: Bearer ds_live_YOUR_KEY" \
  -H "Content-Type: application/json" \
  -d '{"domains": ["example.com", "exwalk.io"]}'

The response is the whole answer — there is no job to poll and no webhook to receive:

{
  "results": [
    {"domain": "example.com", "status": "taken",     "source": "dotseeka-registry"},
    {"domain": "exwalk.io",   "status": "available", "source": "dotseeka-registry"}
  ],
  "counts": {"available": 1, "taken": 1, "unknown": 0},
  "skipped": [],
  "took_ms": 212
}

One domain, one line

curl https://dotseeka.com/api/v1/check/example.com \
  -H "Authorization: Bearer ds_live_YOUR_KEY"

Three states, not a boolean

This is the part worth reading before you integrate. Most availability APIs return true or false, which forces them to pick a side when a registry does not answer clearly.

statusWhat it meansWhat your code should do
availableNo registry record, and it does not resolve in DNSSafe to offer it
takenA registry record exists, or it resolvesDo not offer it
unknownRate-limited, timed out, or ambiguousRetry later — never show it as free

Treat unknown as 'not available' in any flow where being wrong costs money. A false available is the only wrong answer with a price attached.

What each field means

FieldMeaning
domainThe name as it was checked, lower-cased
statusavailable, taken or unknown — never a boolean
sourceThat the answer came from registry data for this request, not from a cached list. Present so you can prove provenance to whoever asks.
countsA tally per status, so you do not have to fold over the array
skippedInputs that were not checkable, with the reason — an unparseable name is reported, not dropped
took_msServer-side time for the whole batch

There is no cached field because nothing is served from a cache. Each call is a fresh lookup, which is why a batch of 50 takes a second or two rather than milliseconds. Availability changes by the minute, and a result from an hour ago is a guess wearing a timestamp.

Limits

LimitValue
Domains per request50
Calls per day1,000
Domains per day5,000
Keys per account5
PriceFree

Limits are per account, not per IP address, so they follow you across servers. They reset at midnight UTC. If you need more, say so — the ceiling is there to protect the registries we query, not to sell you an upgrade.

Errors

CodeerrorMeaning
401missing_keyNo Authorization header
401invalid_keyKey is wrong or revoked
400no_valid_domainsNothing parseable in the array
400too_many_domainsMore than 50 in one request
429daily_limitOut of calls for today
429daily_domain_limitOut of domains for today

Checking a key

curl https://dotseeka.com/api/v1/me \
  -H "Authorization: Bearer ds_live_YOUR_KEY"

Returns the account and what is left of today's allowance. Useful as a health check in CI.

What it queries

Each name goes to its registry's own RDAP service, found through the IANA bootstrap registry, falling back to port-43 WHOIS when RDAP cannot answer. That covers 1,200+ endings. No reseller inventory and no cached zone file, so there is no snapshot lag between the registry and the answer you get.

Any available verdict is additionally checked against DNS. If the name resolves, it comes back taken — which is what makes ox.ac.uk correct, where a naive RDAP-only check reports it free.

Input it accepts

You sendIt checks
exwalkexwalk.com
exwalk.comexwalk.com
https://ox.ac.uk/xox.ac.uk
x@mail.commail.com

Unparseable entries are returned in skipped rather than failing the request, so one bad row in a list does not cost you the other forty-nine.

Try it now Open DotSeeka

Frequently asked questions

Is the domain availability API really free?
Yes — 1,000 calls and 5,000 domains a day, no card. You need a free account so the allowance can follow you rather than an IP.
How fast is it?
One domain is typically 150-400 ms, dominated by the registry's own latency. Fifty domains run in parallel and usually return in about two seconds.
Why does it return unknown instead of retrying?
Because a retry loop against a registry that is rate-limiting you makes things worse. You get told, and you decide when to ask again.
Can I use it commercially?
Yes. Do not resell the raw feed, and do not hammer it — the limits exist so the registries keep answering us both.
Do you log what I check?
Anonymous statistics only: the domain, the time and the country. Never linked to your key, your account or your IP address.
What happens if my key leaks?
Revoke it at /api-keys and make a new one. Keys are stored hashed, so not even we can read yours back.