dot·sweep

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

The whole reference on one page → · as plain text →