Domain Search

Check availability and pricing for domains

Checks availability and pricing for one or more domains via RDAP + retail pricing. A name RDAP calls unregistered is then checked with the registrar: a registry premium or reserved name comes back available: false, with registry_status and a reason. Use q for a single domain (returns flat object) or domains for multiple (returns array). Supports SSE streaming via Accept: text/event-stream header - closing the connection cancels all in-flight RDAP lookups server-side. Max 200 domains per request. Public endpoint - no authentication required. Authenticated requests get higher rate limits (60/min vs 20/min).

get/api/domains/search

Request

  • Base URL: https://domani.run
  • URL: https://domani.run/api/domains/search
  • Auth: none required

Query parameters

qstring
Example:mysite.com

Single domain including TLD (shorthand - returns flat object). Mutually exclusive with domains.

domainsstring
Example:myapp.com,myapp.dev,myapp.ai

Comma-separated list of full domain names to check (max 200). Returns array result.

max_pricenumber
Example:20

Only include domains under this price (USD)

sort'price' | 'tld'

Sort results by price or TLD name

source'all' | 'primary' | 'secondary'

Filter results by source: 'primary' (registrar availability only), 'secondary' (Domani marketplace listings only), or 'all' (both)

order'asc' | 'desc'

Response

Domain availability and pricing. Single domain (via q) returns a flat object. Multiple domains (via domains) returns { results, total, available }. With Accept: text/event-stream, returns SSE events (event: result per domain, event: done with summary). A later result for the same domain replaces an earlier one, for example when the registry turns out to hold the name back.

availableboolean required

Whether the domain is available for registration

domainstring required

Full domain name including TLD

pricenumber required

Registration price in the specified currency

currencystring required

ISO 4217 currency code (always USD)

errorboolean

True if RDAP lookup failed (availability unknown)

tld_kind'tld' | 'second_level' | 'alt_root'

Root-zone kind of the domain's suffix: tld, second_level, or alt_root. An alt_root domain is outside the IANA root zone and does not resolve in public DNS: it is not checked, and reason says why.

registry_status'premium' | 'reserved'

Set when the registry holds back a name that RDAP calls unregistered: premium (the registry sets its own price, see registry_price) or reserved (it cannot be registered). Such a result is available: false, since POST /api/domains/buy cannot register it, and reason says why.

registry_pricenumber

Present on premium results when the registrar quoted it: the registry's first-year price in USD. price stays the TLD's standard price, which does not apply to this name.

renewal_pricenumber

What each year after the first costs, in USD, at the registrar that would register the name: what renewing it is billed. Absent when unknown. On a premium result it is, like price, the TLD's standard price.

reasonstring

Why the domain is not offered: a name outside public DNS (tld_kind alt_root), or a name the registry holds back (registry_status).

Example response

{
  "domain": "example.com",
  "price": 10.88,
  "currency": "USD",
  "for_sale": {
    "price": 5000,
    "currency": "USD",
    "source": "domani",
    "buyable": true,
    "url": "https://sedo.com/search/details/?domain=example.com"
  },
  "tld_kind": "tld",
  "registry_status": "premium",
  "registry_price": 1250.2,
  "renewal_price": 10.88,
  "reason": "myapp.airdrop does not resolve in public DNS: .airdrop is not a TLD of the DNS root zone (IANA), so a website or email on it cannot be reached. Domani does not offer it."
}

Changes

No recorded changes to this operation across all 2 revisions of this API.