API Documentation

Query domain availability and RDAP data from your own applications. No account required for basic use.

Base URLhttps://api.domain-sentinel.com

Endpoint

GET/v1/lookup/{domain}
Returns RDAP data for a domain. Results are cached for up to one week; the cache is shared across all callers.
ParameterLocationDescription
domainpathFull domain name including TLD (e.g. github.com).
AuthorizationheaderOptional. Bearer token with your API key, to authenticate and lift the per-IP limit.

Response schema

interface DomainLookup {
  // Registry-derived fields below are omitted when available is true.
  id?:               string;
  domain:            string;
  available:         boolean | null; // null: DNS-only check, see maybeAvailable
  checkMethod?:      "rdap" | "whois43" | "dns";
  maybeAvailable?:   boolean; // true when DNS found no delegation but availability is unconfirmed
  ldhName?:          string | null;
  unicodeName?:      string | null;
  handle?:           string | null;
  rdapServer?:       string | null;
  secureDNS?:        boolean | null;
  delegationSigned?: boolean | null;
  lookedUpAt?:       string; // ISO 8601
  registryBusy?:     { retryAt: string }; // last known answer, the registry was busy
  entities:          Entity[];
  nameservers:       Nameserver[];
  statuses:          string[];
  events:            Event[];
}

interface Entity {
  role:         string;
  handle:       string | null;
  name:         string | null;
  organization: string | null;
  ianaId:       string | null;
  abuseEmail:   string | null;
  abusePhone:   string | null;
}

interface Nameserver {
  ldhName: string;
  ipv4:    string[];
  ipv6:    string[];
}

interface Event {
  eventAction: string;
  eventDate:   string | null; // ISO 8601
}

When available is true (the domain is unregistered), the response contains only domain, available, and the four arrays. The registry-derived fields (id, ldhName, unicodeName, handle, rdapServer, secureDNS, delegationSigned, lookedUpAt) are omitted.

FieldTypeDescription
availablebooleantrue if the domain is not currently registered.
ldhNamestring | nullDomain name in LDH (letters-digits-hyphens) form.
unicodeNamestring | nullDomain name in Unicode (IDN) form.
handlestring | nullRegistry handle (unique identifier at the registry).
rdapServerstring | nullRDAP server URL used for this lookup.
secureDNSboolean | nulltrue if the domain has DNSSEC records.
delegationSignedboolean | nulltrue if the delegation is signed (subset of secureDNS).
lookedUpAtstringISO 8601 timestamp of when the data was fetched.
registryBusy{ retryAt } | absentPresent when the registry was busy: the answer is the last known one (see lookedUpAt), and the registry can be asked again after retryAt. Not billed.
entitiesEntity[]Registrar, registrant and contacts.
nameserversNameserver[]Name servers with optional IP addresses.
statusesstring[]EPP status codes (e.g. clientTransferProhibited).
eventsEvent[]Registry events: registration, expiration, last changed, etc.

Code examples

# Anonymous (rate-limited)
curl https://api.domain-sentinel.com/v1/lookup/github.com

# With API key (monthly quota of your plan)
curl -H "Authorization: Bearer ds_your_api_key" \
  https://api.domain-sentinel.com/v1/lookup/github.com

OpenAPI specification (JSON)

Rate limiting

Anonymous requests are rate-limited by IP address. With an API key, calls count towards a monthly quota set by your plan.

ModeLimitOn exceed
Anonymous (no key)5 req/min and 50 req/day per IPHTTP 429
API key, Free plan500 calls per monthHTTP 402
API key, Pro plan10,000 calls per monthHTTP 402

The 429 response body includes a retryAfter timestamp (Unix ms). Every call made with a key returns X-Quota-Limit (the month's quota) and X-Quota-Remaining (calls left after this one). The quota resets on the 1st of each month, UTC.

HTTP status codes

200Success. Domain object returned.
400Bad request: malformed domain name.
401API key provided but invalid or revoked.
402Monthly quota of your plan reached. The body has code PLAN_LIMIT, plus limit, plan, max and current. The call is not billed.
404Unsupported TLD: no RDAP server is listed for this extension in the IANA bootstrap.
429Rate limit exceeded. See the retryAfter field in the response.
502The TLD's RDAP server is unreachable.
503Registry busy and nothing known about this domain yet. code is REGISTRY_BUSY, retryAt says when to try again.

Authentication

Create a free API key in your dashboard. Pass it in the Authorization header as a Bearer token. Keys can have an optional expiry date and can be revoked at any time.

Create an API key

FAQ

Which TLDs are supported?

Any TLD that has a public RDAP server listed in the IANA bootstrap file. The list is refreshed daily. Browse it on the TLDs page.

How fresh is the data?

Results are cached for up to 7 days. Authenticated users can force a refresh via the dashboard lookup page once per 24 hours.

What does a 502 error mean?

The registry's RDAP server did not respond. This is a temporary issue on the registry side, not a Domain Sentinel outage. Retry after a few minutes.

Is the API free?

Looking up a domain is free: anonymously within the per-IP limits, or with a free API key up to 500 calls a month. The Pro plan raises the quota to 10,000 calls a month.

Looking for the list of supported extensions? Browse all TLDs

Using an AI assistant? Connect it to our MCP server