GET /tlds — every checkable extension
No API key, no account, no signup. Responses are JSON, CORS is open, and every endpoint is read-only — nothing here can register, buy or change anything.
Request
curl https://dotsweep.com/tlds
What it returns
Every extension this API can check, with its price and with
min_term_years where the registry will not sell a single year.
Two kinds are left out, both because a domain nobody can buy should not be
priced. Handshake blockchain names appear in the wholesale price
feed — 273 of 803 entries — and do not resolve in DNS and have no registry.
.brand TLDs are unregistered and unbuyable at once:
before this filter existed, shoes.nike came back available, priced,
with a buy link, which is three false statements in a row.
Whose price it is
The quoted registrar's, wherever it sells the extension. Where it does not,
the cheapest other registrar's stands in and the entry carries a
vendor naming it — so an entry with no vendor is the
same number a check of that extension will show. All figures are USD. An
extension no registrar here sells carries no price rather than a guess.
Worth fetching before your first check
It is one cached request, and it is how you find out that a business has an
extension that says what it is — .cafe, .studio,
.clinic, .gg — instead of offering a fourth variation on
.com.
It also carries eligibility, which is the question most availability APIs do
not answer: .eu needs an EU or EEA registrant, and a name being free
is no use to a buyer the checkout will turn away. The
extension reference is the same data as pages.
Errors
{ "error": { "code": "invalid_domain", "message": "...", "hint": "..." } }
Codes: invalid_domain, bad_body,
batch_too_large, rate_limited,
unknown_endpoint, method_not_allowed,
internal_error. The hint says what to do differently.
For anything other than rate_limited and internal_error,
repeating the same call fails the same way.
Rate limit
120 requests a minute per client, counted as requests rather than domains. Edge cache hits never reach the Worker and are not counted at all.
That rate is the whole quota. There is no daily or monthly ceiling, no credit balance and no trial that expires, so a job that stays under the rate can run as long as it needs to. Said plainly because an unstated limit gets read as a hidden one, and a caller who plans around a monthly cap is planning around nothing.
The other endpoints
GET /check/{domain}— one domain, edge-cached, unmetered on a hitPOST /check— up to 10 domains per request, for volumeGET /whois/{domain}— registrar, dates, nameservers, and the for-sale signalPOST /mcp— the same engine over Model Context Protocol