API Docs

Free, unauthenticated API for domain search and intelligence. Search across 6 registrars for live pricing, or look up detailed RDAP/DNS info for any domain. Also available as a paid API via the x402 payment protocol on Starknet — no API keys, just pay-per-request.

Domain Info

GET/api/domain/{domain}

Returns comprehensive domain intelligence from RDAP, DNS-over-HTTPS, and who.is scraping. Layered approach fills in gaps from multiple sources.

Path Parameters

domain
stringFully qualified domain name (e.g. "example.com"). Must match the pattern: lowercase alphanumeric with dots/hyphens, ending in a valid TLD.

Examples

curl
curl "https://donadomains.xyz/api/domain/example.com"
const res = await fetch(
  "https://donadomains.xyz/api/domain/example.com"
);
const intel = await res.json();

console.log(intel.registered);  // true
console.log(intel.registrar);   // "RESERVED-Internet Assigned Numbers Authority"
console.log(intel.nameservers); // ["a.iana-servers.net", "b.iana-servers.net"]
console.log(intel.sources);     // ["rdap", "dns"]

Example Response

JSON
{
  "domain": "example.com",
  "registered": true,
  "status": [
    "client delete prohibited",
    "client transfer prohibited",
    "client update prohibited"
  ],
  "created": "1995-08-14T04:00:00Z",
  "updated": "2024-08-14T07:01:44Z",
  "expires": "2025-08-13T04:00:00Z",
  "registrar": "RESERVED-Internet Assigned Numbers Authority",
  "nameservers": [
    "a.iana-servers.net",
    "b.iana-servers.net"
  ],
  "sources": ["rdap", "dns"],
  "timing": {
    "rdap": 342,
    "dns": 87
  }
}

Response Fields

domain
stringThe normalized domain that was queried
registered
booleanWhether the domain is currently registered
statusoptional
string[]ICANN domain status codes (e.g. clientTransferProhibited)
createdoptional
stringCreation date (ISO 8601)
updatedoptional
stringLast updated date (ISO 8601)
expiresoptional
stringExpiration date (ISO 8601)
registraroptional
stringName of the registrar
registrarUrloptional
stringRegistrar website URL
registrantoptional
stringName of the registrant (often redacted for privacy)
organizationoptional
stringRegistrant organization
contactEmailoptional
stringRegistrant contact email (only shown when not privacy-protected)
contactPhoneoptional
stringContact phone number
contactAddressoptional
stringRegistrant address (partial, often redacted)
nameserversoptional
string[]Authoritative nameservers for the domain
dnssecoptional
stringDNSSEC status (e.g. "signedDelegation")
sources
string[]Data sources used: "rdap", "dns", "who.is"
timing
objectMilliseconds spent per source (e.g. { rdap: 342, dns: 87 })

Error Responses

400
Bad RequestInvalid domain format
504
Gateway TimeoutRequest took longer than 10 seconds
500
Server ErrorUnexpected internal error

Data Sources

Domain intelligence is gathered in layers, with each source filling gaps left by previous ones:

  1. RDAP — Registration Data Access Protocol. Free, HTTP-based. Provides registrar, dates, status, and contact info.
  2. DNS-over-HTTPS — Cloudflare DoH queries. Fast (~50ms). Resolves nameservers and confirms resolution.
  3. who.is scrape — Firecrawl-powered fallback. Only triggered when RDAP returns almost no data. Used sparingly.

Rate Limits

FREE API

The free API is rate-limited per IP address to keep things fair:

/api/search
20 req/hrEach search scrapes 6 registrars — expensive upstream
/api/domain/{domain}
60 req/hrLightweight RDAP + DNS lookups
  • Rate limits reset every hour from your first request
  • Exceeding the limit returns 429 Too Many Requests
  • The search endpoint may take 5-15 seconds (registrar scraping)
  • The domain info endpoint has a 10 second timeout
x402 PAID API

No rate limits. Pay per request with USDC on Starknet. See the Paid API section for details.

Donadomains API Docs