Name.al · Albanian Domain Registration

Developers

Free Domain Availability API: No Key, No Signup

2026-09-23 · OSIR Team

Free Domain Availability API: No Key, No Signup

Not writing code? You can do all of this from inside Claude or ChatGPT without touching a terminal. Add https://be.osir.com/mcp/http as a custom connector (in Claude: Settings, then Connectors, then Add custom connector, with Authentication set to No sign-in), then just ask: "is fernweh.dev available, and what would it cost?" Searches, prices and the whole catalogue work immediately with no account and no API key, because the same public endpoints described below are exposed to the assistant as tools. The step-by-step setup takes about two minutes.

Most domain availability APIs want an account before they will tell you whether a name is free. You sign up, wait for approval, provision a key, store it somewhere, and only then discover the response format does not have what you need.

Ours does not work that way. Availability, pricing and the full catalog are public. One GET request, no key:

curl https://be.osir.com/v1/public/catalog/domains/fernweh-ci.dev/availability
{
  "domain": "fernweh-ci.dev",
  "available": true,
  "message": "Domain is available for registration",
  "price": 1200,
  "icannFee": 20,
  "registrarFee": 30,
  "totalPrice": 1250,
  "currency": "USD",
  "registrar": "Google Registry",
  "premium": false,
  "checkedAt": "2026-09-23T10:38:34"
}

That is the whole integration.

Read totalPrice, not price

Every amount is in cents. price is the base registry price; totalPrice is what a customer actually pays, including the ICANN fee and payment processing.

If you are displaying a number to a human, display totalPrice. Quoting price means quoting $12.00 for a name that costs $12.50, and someone will notice at checkout.

A taken domain is not an error

Unavailable names return 200, not 404, with a reason:

{
  "domain": "google.com",
  "available": false,
  "message": "Domain is not available: Domain exists",
  "reason": "Domain exists",
  "totalPrice": 1089,
  "registrar": "Verisign"
}

Branch on available, never on the status code. A non-200 means something went wrong with the request, not that the domain is taken. This matters more than it sounds: an agent that treats 404 as "taken" will report the opposite of the truth the first time the API has a bad minute.

Note that pricing comes back even for unavailable names. That is deliberate, so you can show what a name would cost if it drops.

Checking many names at once

Do not loop the single-domain endpoint. One keyword across many extensions is a single request:

curl "https://be.osir.com/namesuggestions/keyword-availability/fernweh?tlds=com,dev,io,ai"
{
  "keyword": "fernweh",
  "results": [
    {
      "domain": "fernweh.com",
      "tld": ".com",
      "registry": "Verisign",
      "availability": "unavailable",
      "reason": "Domain exists",
      "price": 10.39,
      "premium": false
    }
  ]
}

One caution if you use both endpoints: this one returns price as dollars (10.39), while the availability endpoint returns cents (1039). Normalise on the way in.

Rate limits, honestly

There are no plan tiers and nothing to apply for. Anonymous callers get 150 requests per minute per IP; authenticated ones get 500 per minute per account. Budgets refill continuously rather than resetting on a clock, so a burst that reaches the limit recovers within seconds.

Every response carries your remaining budget:

x-ratelimit-remaining: 149

A 429 adds Retry-After and X-RateLimit-Retry-After, both in seconds, and looks like this:

{ "error": "Rate limit exceeded", "retryAfterSeconds": 1 }

Honour it. Retrying immediately spends budget you do not have. X-RateLimit-Limit and X-RateLimit-Reset are not sent, so do not write code that expects them.

If you are checking a large list, the keyword endpoint above will do in one request what would otherwise cost you forty. Availability results are also cached briefly, so repeated checks of the same name never reach the registry.

Why is this public?

Because availability is not the valuable part. Knowing that fernweh.dev is free is worth nothing on its own; registering it is the transaction. Gating lookups behind a key mostly stops people building things, and the things people build are how names get registered in the first place.

It also means an AI agent can research domains on its very first run, with no credential handling and nothing for a user to approve. That turns out to matter: an agent that hits a signup wall mid-task does not sign up, it picks a different tool.

The rest of the surface

Same pattern, same no-auth rule:

Endpoint Returns
/v1/public/catalog/domains Every extension we carry, with pricing
/v1/public/catalog/domains/{domain}/availability One domain
/namesuggestions/keyword-availability/{keyword}?tlds= One keyword, many extensions
/namesuggestions/suggest?name= Brandable suggestions
/v1/public/catalog/vps /mail /dedicated Hosting catalogs

There is also an MCP server exposing the same lookups as tools, if you are wiring this into an AI agent rather than an application. Sixteen of its discovery tools need no account either. The agent framework guide has working LangChain, CrewAI and AutoGen snippets.

When you do need an account

Only for things that cost money or change state: registering, renewing, transferring, editing DNS. An agent can obtain one without a human opening a browser, through device login or by calling createAccount and verifyAccount with an emailed code.

And every purchase is two-step by design. The tool returns an itemised summary with an actionId, and nothing is charged until you call executeConfirmedAction. An agent cannot spend your money because it misread a prompt.

FAQ

Is the availability API really free?

Yes. No key, no account, no cost. Availability, pricing, suggestions and the catalog are public endpoints. You only need an account to register or manage a domain.

What are the rate limits?

150 requests per minute per IP anonymously, 500 per minute per account when authenticated, reported per response in the x-ratelimit-remaining header. Budgets refill continuously, so a burst recovers in seconds. There are no paid tiers to raise it. Account signup is separately capped at 50/day per IP and 3/day per e-mail address. If you need sustained higher volume, contact us and describe the use case.

Is the data live or cached?

Live. Each check queries the registry at request time, which is why the response carries a checkedAt timestamp. It is an availability check, not a zone-file snapshot.

How is this different from WHOIS or RDAP?

WHOIS and RDAP tell you about a registration that already exists. They are inconsistent across registries, rate-limited aggressively, and slow. This endpoint answers the question you usually actually have, "can I register this", and returns the price alongside it.

Can I use it commercially?

Yes, including inside a product you sell. If you are building something that will drive sustained volume, tell us so we can keep an eye on capacity rather than throttling you by surprise.

Does it cover every extension?

It covers every extension we carry, which you can enumerate from the catalog endpoint. Extensions we do not sell will not resolve.

Can an AI agent use this directly?

Yes, and that is much of the point. Point any MCP client at https://be.osir.com/mcp/http and the same lookups arrive as tools, with no credentials for the read-only ones.

Image generated with AI (Higgsfield).