DomainKits API

The DomainKits REST API provides programmatic access to domain intelligence data. Search newly registered, aged, expired, and deleted domains. Look up WHOIS records, reverse nameserver queries, and download NRDs zone files. API access requires a Premium or higher plan.

Responses contain no personal data. WHOIS results are limited to registrar, dates, status codes and nameservers; registrant names, emails, addresses and phone numbers are not returned.

Base URL
https://premium-api.domainkits.com/api/v1
Authentication

Include your API key in every request. API keys are the same keys used for the DomainKits MCP Server.

Authorization Header (recommended)
Authorization: Bearer dk_xxx
Custom Header
X-API-Key: dk_xxx
Quick Start
# Search newly registered .com domains curl "https://premium-api.domainkits.com/api/v1/search/nrds?tld=com" \ -H "Authorization: Bearer dk_your_key"
Response
{ "success": true, "data": [...], "total": 12345 }
Missing or Invalid Key
{ "success": false, "error": "API key required." }
Versioning & Stability

The API is versioned in the URL path (/api/v1). We treat the v1 contract as stable so you can build on it without surprises.

What stays stable within v1
  • Existing response fields are not removed or renamed. New fields may be added, so parse defensively and ignore unknown fields.
  • Existing request parameters keep their meaning. New optional parameters may be added.
  • The success / error envelope and HTTP status code semantics do not change.
  • A value of 0 in rate-limit configuration means unlimited. This convention is stable.
Breaking changes
Any breaking change ships under a new version path (/api/v2). When a version is scheduled for retirement, we announce it with at least 90 days notice before v1 stops responding. Endpoints marked Beta are excluded from this guarantee and may change while in beta.
Quota reset
Daily quotas reset at 00:00 UTC. Per-minute limits use a rolling 60-second window. These limits are separate from the DomainKits web interface and the MCP server, which are metered independently.
Version in path
https://premium-api.domainkits.com/api/v1/...
Rate limit headers (every metered response)
X-RateLimit-Limit: 60 X-RateLimit-Remaining: 57 X-RateLimit-Reset: 1719744000
Forward compatibility
# New fields may appear over time. # Ignore unknown keys; never assume # the field set is closed within v1.
Errors

The API uses standard HTTP status codes. Errors return a JSON object with success: false and an error message.

200 Success
302 Redirect (file download)
400 Bad request
401 Unauthorized
403 Forbidden
405 Method not allowed
429 Rate limit exceeded
502 Request timed out
Error Response
{ "success": false, "error": "Error message here" }
GET /api/v1/search/nrds

Search newly registered domains. Two modes: provide keyword for keyword search, or provide tld without keyword to browse all new registrations under a gTLD. At least one of keyword or tld is required.

Query Parameters
keyword stringoptional
Search keyword (min 3 characters). When provided, searches across all TLDs by keyword matching.
tld stringoptional
Filter by TLD (e.g. com, net, org). Without keyword, enters TLD browse mode (gTLDs only, ccTLDs not supported).
position stringoptional
Keyword position within the second-level label. Values: start, end, middle. Any other value returns 400.
length stringoptional
Length of the second-level label, excluding the TLD. Accepts an exact length (7), a range (6-9, inclusive of both ends), or a preset band: ultra (1-4), short (5-10), medium (11-15), long (16-63). 0-5 and <5 are aliases for ultra; 15+ for long. Any other value returns 400.
type stringoptional
Composition filter. Values: all_alpha (letters only), all_number (digits only).
days_range stringoptional
Registration recency. Values: 0-10, 10-20, 20+.
reg_date stringoptional
Registration date. Accepts a day (2026-07-10), month (2026-07), or year (2026). A from:to range is also accepted (2026-07-01:2026-07-25, inclusive of both ends); either side may be omitted for an open-ended range (2026-07-20: or :2026-07-20).
period stringoptional
Registration term (years). Values: 1, 2-5, 6+.
has_sale booleanoptional
Only show domains with a marketplace listing.
no_number booleanoptional
Exclude domains containing digits.
no_hyphen booleanoptional
Exclude domains containing hyphens.
exclude stringoptional
Negative keywords to exclude from results.
sort stringoptional
reg_date_desc reg_date_asc length_asc length_desc period_asc period_desc tld_count_asc tld_count_desc alpha. Any other value returns 400.
limit integeroptional
Results per page (default: 40, max: 500).
offset integeroptional
Pagination offset.
Response fields
domain, registered_date, expiry_date, tld_count, status (for_sale, present only when the domain is listed for sale)
Request (keyword search)
curl "https://premium-api.domainkits.com/api/v1/search/nrds?keyword=tech&limit=2" \ -H "Authorization: Bearer dk_xxx"
Response
{ "success": true, "total": 99114, "data": [ { "domain": "wellcelltech.com", "registered_date": "2026-07-21", "expiry_date": "2027-07-21", "tld_count": 1 } ] }
Request (TLD browse, gTLDs only)
curl "https://premium-api.domainkits.com/api/v1/search/nrds?tld=com&length=%3C5&no_hyphen=true&limit=2" \ -H "Authorization: Bearer dk_xxx"
Response
{ "success": true, "total": 8077041, "data": [ { "domain": "rvkp.com", "registered_date": "2026-07-19", "expiry_date": "2027-07-19", "tld_count": 1 } ] }
GET /api/v1/search/nrds-live

Search the live newly registered feed, covering the last 3 days only. Same two modes as /search/nrds: provide keyword for keyword search, or provide tld without keyword to browse one TLD. At least one of keyword or tld is required. Use this endpoint when recency matters; use /search/nrds for the full history, richer filters, and larger exports.

Query Parameters
keyword stringoptional
Search keyword (min 3 characters, letters, digits and hyphens only). When provided, searches across all TLDs.
tld stringoptional
Filter by TLD (e.g. com, xyz, app). Without keyword, enters TLD browse mode.
reg_date stringoptional
Filter by registration time. Accepts a day (2026-08-16), a month (2026-08), or a year (2026); a from:to range is also accepted (2026-08-14:2026-08-16, inclusive of both ends), and either side may be omitted for an open-ended range (2026-08-15: or :2026-08-15). Boundaries expand to the full day in UTC, so a single day covers 00:00:00 to 23:59:59. Same syntax as /search/nrds. Any other value returns 400.
days_range integeroptional
Shorthand for the recent window: 1 = today, 2 = today and yesterday, 3 = all three days. Omit for the full window. Superseded by reg_date, which can express the same thing and more; when both are given, reg_date wins. Any other value returns 400.
position stringoptional
Where the keyword sits in the second-level label. Values: start, end, middle. Ignored when keyword is absent.
length stringoptional
Length of the second-level label, excluding the TLD. Accepts an exact length (7), a range (6-9, inclusive of both ends), or a preset band: ultra (1-4), short (5-10), medium (11-15), long (16-63). 0-5 and <5 are aliases for ultra; 15+ for long. Any other value returns 400.
type stringoptional
Composition filter. Values: all_alpha (letters only), all_number (digits only). A hyphenated name is neither, so both values exclude hyphens.
no_number booleanoptional
Exclude domains containing digits. Ignored when type is set.
no_hyphen booleanoptional
Exclude domains containing hyphens. Ignored when type is set.
exclude stringoptional
Comma-separated negative keywords. Any domain containing one of them is dropped.
sort stringoptional
reg_date_desc (default) reg_date_asc length_asc length_desc. Any other value falls back to reg_date_desc.
export stringoptional
Download results as a file instead of JSON. Values: csv, txt. Bypasses pagination and returns up to 10,000 rows in one pass. Billed against the Search Export quota, which carries a monthly cap. txt is one domain per line; csv columns match this endpoint's JSON fields.
limit integeroptional
Results per page (default: 40). Capped at 200 for Premium, 500 for Platinum.
offset integeroptional
Pagination offset.
Response fields
domain, tld, registered_date, expiry_date
Notes
No tld_count
Unlike /search/nrds, this endpoint does not return tld_count. Every domain here was registered within the last three days, so the count would be 1 on virtually every row and carry no information.
total vs data length
position and exclude are applied after the page is fetched, so data may contain fewer rows than limit while total still reports the unfiltered match count. This is expected and not a pagination gap.
Request (keyword search, today only)
curl "https://premium-api.domainkits.com/api/v1/search/nrds-live?keyword=cloud&days_range=1&limit=2" \ -H "Authorization: Bearer dk_xxx"
Response
{ "success": true, "total": 115, "data": [ { "domain": "cloudrental.app", "tld": "app", "registered_date": "2026-08-16", "expiry_date": "2027-08-16" } ] }
Request (TLD browse, exactly 4 characters)
curl "https://premium-api.domainkits.com/api/v1/search/nrds-live?tld=com&type=all_alpha&length=4&limit=2" \ -H "Authorization: Bearer dk_xxx"
Response
{ "success": true, "total": 2, "data": [ { "domain": "ydra.com", "tld": "com", "registered_date": "2026-08-15", "expiry_date": "2027-08-15" } ] }
GET /api/v1/search/aged

Search aged domains. Two modes: provide keyword for keyword search, or provide tld without keyword to browse all aged domains under a gTLD. At least one of keyword or tld is required.

Query Parameters
keyword stringoptional
Search keyword (min 3 characters). When provided, searches across all TLDs by keyword matching.
tld stringoptional
Filter by TLD (e.g. com, net, org). Without keyword, enters TLD browse mode (gTLDs only, ccTLDs not supported).
position stringoptional
Keyword position within the second-level label. Values: start, end, middle. Any other value returns 400.
length stringoptional
Length of the second-level label, excluding the TLD. Accepts an exact length (7), a range (6-9, inclusive of both ends), or a preset band: ultra (1-4), short (5-10), medium (11-15), long (16-63). 0-5 and <5 are aliases for ultra; 15+ for long. Any other value returns 400.
type stringoptional
Composition filter. Values: all_alpha, all_number.
age_range stringoptional
Domain age in years. Accepts a preset band (5-10, 10-15, 15-20, 20+; each excludes its lower bound and includes its upper), an exact age (25), or a range (20-25, inclusive of both ends). Supports multi-select: 5-10,20+.
has_sale booleanoptional
Only show domains with a marketplace listing.
no_number booleanoptional
Exclude domains containing digits.
no_hyphen booleanoptional
Exclude domains containing hyphens.
exclude stringoptional
Negative keywords to exclude from results.
sort stringoptional
reg_date_desc reg_date_asc length_asc length_desc age_asc age_desc tld_count_asc tld_count_desc alpha. Any other value returns 400.
limit integeroptional
Results per page (default: 40, max: 500).
offset integeroptional
Pagination offset.
Response fields
domain, registered_date, age (years), tld_count, status (for_sale, present only when the domain is listed for sale)
Request (keyword search)
curl "https://premium-api.domainkits.com/api/v1/search/aged?keyword=tech&limit=2" \ -H "Authorization: Bearer dk_xxx"
Response
{ "success": true, "total": 554550, "data": [ { "domain": "bostech.com", "registered_date": "1988", "age": 38, "tld_count": 26 } ] }
Request (TLD browse, gTLDs only)
curl "https://premium-api.domainkits.com/api/v1/search/aged?tld=com&age_range=20%2B&length=%3C5&limit=2" \ -H "Authorization: Bearer dk_xxx"
Response
{ "success": true, "total": 346696, "data": [ { "domain": "bbn.com", "registered_date": "1985", "age": 41, "tld_count": 119 } ] }
GET /api/v1/search/active

Search active (currently registered) domains. Two modes: provide keyword for keyword search, or provide tld without keyword to browse the full registered inventory of a gTLD, shortest names first. At least one of keyword or tld is required.

Query Parameters
keyword stringoptional
Search keyword (min 3 characters).
tld stringoptional
Filter by TLD (e.g. com, net, org). Without keyword, enters TLD browse mode (gTLDs only, ccTLDs not supported).
position stringoptional
Keyword position within the second-level label. Values: start, end, middle. Keyword mode only. Any other value returns 400.
length stringoptional
Length of the second-level label, excluding the TLD. Accepts an exact length (7), a range (6-9, inclusive of both ends), or a preset band: ultra (1-4), short (5-10), medium (11-15), long (16-63). 0-5 and <5 are aliases for ultra; 15+ for long. Any other value returns 400.
type stringoptional
Composition filter. Values: all_alpha, all_number.
status stringoptional
Registration status filter. Value: forsale.
no_number booleanoptional
Exclude domains containing digits.
no_hyphen booleanoptional
Exclude domains containing hyphens.
sort stringoptional
length_asc length_desc alpha. Any other value returns 400.
limit integeroptional
Results per page (default: 40, max: 500).
offset integeroptional
Pagination offset.
Response fields
domain, status (for_sale, present only when the domain is listed for sale)
Request
curl "https://premium-api.domainkits.com/api/v1/search/active?keyword=tech&limit=2" \ -H "Authorization: Bearer dk_xxx"
Request (TLD browse, gTLDs only)
curl "https://premium-api.domainkits.com/api/v1/search/active?tld=com&status=forsale&limit=2" \ -H "Authorization: Bearer dk_xxx"
Response
{ "success": true, "total": 265881, "data": [ { "domain": "tech.asia" } ] }
GET /api/v1/search/expired

Search expired domains. Two modes: provide keyword for keyword search, or provide tld without keyword to browse all expiring domains under a gTLD. At least one of keyword or tld is required.

Query Parameters
keyword stringoptional
Search keyword (min 3 characters). When provided, searches across all TLDs by keyword matching.
tld stringoptional
Filter by TLD (e.g. com, net, org). Without keyword, enters TLD browse mode (gTLDs only, ccTLDs not supported).
position stringoptional
Keyword position within the second-level label. Values: start, end, middle. Any other value returns 400.
length stringoptional
Length of the second-level label, excluding the TLD. Accepts an exact length (7), a range (6-9, inclusive of both ends), or a preset band: ultra (1-4), short (5-10), medium (11-15), long (16-63). 0-5 and <5 are aliases for ultra; 15+ for long. Any other value returns 400.
type stringoptional
Composition filter. Values: all_alpha, all_number.
age_range stringoptional
Domain age in years. Accepts a preset band (0-5, 5-10, 10-20, 20+; 0-5 includes both ends, the rest exclude their lower bound and include their upper), an exact age (25), or a range (20-25, inclusive of both ends). Supports multi-select: 0-5,20+.
status stringoptional
Expiry stage filter. Values: expired, redemption, pending_delete.
hold stringoptional
Hold status filter. Values: no_hold, has_hold.
new stringoptional
Only domains that entered the expired pool recently. Values: 1 (last observed day), 2 (last 2 days), 3 (last 3 days). true is equivalent to 3. Applies to the expired stage only.
auction_date stringoptional
Filter by drop/auction date. Values: today, tomorrow, or YYYY-MM-DD.
no_number booleanoptional
Exclude domains containing digits.
no_hyphen booleanoptional
Exclude domains containing hyphens.
exclude stringoptional
Negative keywords to exclude from results.
sort stringoptional
length_asc length_desc age_asc age_desc tld_count_asc tld_count_desc. Any other value returns 400.
limit integeroptional
Results per page (default: 40, max: 500).
offset integeroptional
Pagination offset.
Response fields
domain, registered_date, age (years), tld_count, status (expired | redemption | pending delete)
Request (keyword search)
curl "https://premium-api.domainkits.com/api/v1/search/expired?keyword=tech&limit=2" \ -H "Authorization: Bearer dk_xxx"
Response
{ "success": true, "total": 67035, "data": [ { "domain": "timestech.com", "registered_date": "1994", "status": "expired", "age": 32, "tld_count": 9 } ] }
Request (TLD browse, gTLDs only)
curl "https://premium-api.domainkits.com/api/v1/search/expired?tld=com&status=pending_delete&limit=2" \ -H "Authorization: Bearer dk_xxx"
Response
{ "success": true, "total": 495663, "data": [ { "domain": "boslang.com", "registered_date": "1995", "status": "pending delete", "age": 31, "tld_count": 2 } ] }
GET /api/v1/search/deleted

Search deleted (dropped) domains. Filter by keyword, TLD, length, age, and hold status.

Query Parameters
keyword stringoptional
Search keyword (min 3 characters).
tld stringoptional
Filter by TLD (e.g. com, net, ai).
position stringoptional
Keyword position within the second-level label. Values: start, end, middle. Any other value returns 400.
length stringoptional
Length of the second-level label, excluding the TLD. Accepts an exact length (7), a range (6-9, inclusive of both ends), or a preset band: ultra (1-4), short (5-10), medium (11-15), long (16-63). 0-5 and <5 are aliases for ultra; 15+ for long. Any other value returns 400.
type stringoptional
Composition filter. Values: all_alpha, all_number.
age_range stringoptional
Domain age in years. Accepts a preset band (0-5, 5-10, 10-20, 20+; 0-5 includes both ends, the rest exclude their lower bound and include their upper), an exact age (25), or a range (20-25, inclusive of both ends). Supports multi-select: 0-5,20+.
hold stringoptional
Hold status filter. Values: no_hold, has_hold.
new stringoptional
Only domains that dropped recently. Values: 1 (last observed day), 2 (last 2 days), 3 (last 3 days). true is equivalent to 3.
no_number booleanoptional
Exclude domains containing digits.
no_hyphen booleanoptional
Exclude domains containing hyphens.
exclude stringoptional
Negative keywords to exclude from results.
sort stringoptional
length_asc length_desc age_asc age_desc tld_count_asc tld_count_desc. Any other value returns 400.
limit integeroptional
Results per page (default: 40, max: 500).
offset integeroptional
Pagination offset.
Response fields
domain, registered_date, age (years), tld_count
Request
curl "https://premium-api.domainkits.com/api/v1/search/deleted?keyword=tech&limit=2" \ -H "Authorization: Bearer dk_xxx"
Response
{ "success": true, "total": 167989, "data": [ { "domain": "aristechchem.com", "registered_date": "1997", "age": 29, "tld_count": 1 } ] }
GET /api/v1/search/market

Search marketplace domains currently listed for sale. Two modes: provide keyword for keyword search, or provide tld without keyword to browse all listings under a gTLD, shortest names first. At least one of keyword or tld is required.

Query Parameters
keyword stringoptional
Search keyword. When provided, searches across all TLDs by keyword matching. Minimum 3 characters, letters, digits and hyphens only; anything else returns 400.
tld stringoptional
Filter by TLD (e.g. com, net, org). Without keyword, enters TLD browse mode (gTLDs only, ccTLDs not supported).
position stringoptional
Keyword position within the second-level label. Values: start, end, middle. Defaults to matching anywhere. Any other value returns 400.
length stringoptional
Length of the second-level label, excluding the TLD. Accepts an exact length (7), a range (6-9, inclusive of both ends), or a preset band: ultra (1-4), short (5-10), medium (11-15), long (16-63). 0-5 and <5 are aliases for ultra; 15+ for long. Any other value returns 400.
type stringoptional
Composition filter. Values: all_alpha, all_number.
platform stringoptional
Marketplace the domain is listed on. Values: Afternic, Atom, BuyDomains, Dan, DDD, DN.com, Godaddy, Hugedomains, SawSells, Sedo, Venture, 4.cn. Case-insensitive. Supports multi-select: Sedo,Godaddy.
new stringoptional
Only listings that first appeared on a marketplace recently. Values: 1 (last day), 2 (last 2 days), 3 (last 3 days). true is equivalent to 3.
no_number booleanoptional
Exclude domains containing digits.
no_hyphen booleanoptional
Exclude domains containing hyphens.
exclude stringoptional
Negative keywords to exclude from results.
sort stringoptional
length_asc length_desc tld_count_asc tld_count_desc alpha. In TLD browse mode results default to shortest first; only tld_count_desc changes the order. Any other value returns 400.
limit integeroptional
Results per page (default: 40, max: 500).
offset integeroptional
Pagination offset.
Response fields
domain, tld, marketplace, tld_count. marketplace is the platform the domain is listed on: Godaddy, Sedo, Atom, BuyDomains, Hugedomains, PerfectDomain, DN.com, DDD, 4.cn, Venture, or SawSells.
Request (keyword search)
curl "https://premium-api.domainkits.com/api/v1/search/market?keyword=tech&limit=2" \ -H "Authorization: Bearer dk_xxx"
Response
{ "success": true, "total": 22841, "data": [ { "domain": "tech.exchange", "tld": "exchange", "marketplace": "Godaddy", "tld_count": 521 } ] }
Request (TLD browse, gTLDs only)
curl "https://premium-api.domainkits.com/api/v1/search/market?tld=com&limit=2" \ -H "Authorization: Bearer dk_xxx"
Response
{ "success": true, "total": 10617492, "data": [ { "domain": "yb.com", "tld": "com", "tld_count": 113 } ] }
Search Export

Export full search results as a downloadable file. Add export=csv or export=txt to any search endpoint, in keyword mode or TLD browse mode. Export bypasses pagination and returns up to 50,000 results in a single response (/search/active returns up to 10,000). All standard search filters (tld, position, length, no_number, no_hyphen, etc.) are supported.

Export Parameter
export stringoptional
Export format. Values: csv or txt.
  • csv returns a per-endpoint column set, listed below
  • txt returns domain names only, one per line
CSV Columns
Each endpoint exports only the columns that carry information for that dataset.
  • /search/nrds — domain, registered_date, expiry_date, tld_count, status
  • /search/aged — domain, registered_date, tld_count, status
  • /search/expired — domain, registered_date, tld_count, status
  • /search/deleted — domain, registered_date, tld_count
  • /search/active — domain, tld, status
  • /search/market — domain, marketplace, tld_count
registered_date is the registration year. status is written only when it carries a distinction: for_sale on /search/nrds, /search/aged, and /search/active, and the expiry stage (expired, redemption, pending delete) on /search/expired. It is left blank otherwise.
When sort is omitted, /search/expired, /search/aged, and /search/deleted export oldest registration first.
Supported Endpoints
/search/nrds, /search/aged, /search/active, /search/expired, /search/deleted, /search/market
Rate Limits
Export requests draw on a separate quota and do not consume your regular search allowance.
PlanPer minutePer dayPer month
Premium trial239
Premium210100
Platinum101001,000
Daily quotas reset at 00:00 UTC; monthly quotas reset on the 1st (UTC). Quotas follow the account, so regenerating an API key does not reset usage. Track what you have left with /usage.
Request (CSV export)
curl -o results.csv \ "https://premium-api.domainkits.com/api/v1/search/nrds?keyword=tech&no_number=true&export=csv" \ -H "Authorization: Bearer dk_xxx"
CSV Response
domain,registered_date,expiry_date,tld_count,status wellcelltech.com,2026,2027-07-08,1, biotechlab.net,2026,2027-07-08,3,for_sale ...
Request (TXT export)
curl -o results.txt \ "https://premium-api.domainkits.com/api/v1/search/nrds?keyword=tech&no_number=true&export=txt" \ -H "Authorization: Bearer dk_xxx"
TXT Response
wellcelltech.com biotechlab.net ...
Request (expired domains, CSV export)
curl -o expiring.csv \ "https://premium-api.domainkits.com/api/v1/search/expired?tld=com&status=pending_delete&export=csv" \ -H "Authorization: Bearer dk_xxx"
CSV Response
domain,registered_date,tld_count,status techna.com,1992,50,expired boslang.com,1995,2,pending delete ...
Request (TLD browse export)
curl -o com_forsale.txt \ "https://premium-api.domainkits.com/api/v1/search/active?tld=com&status=forsale&export=txt" \ -H "Authorization: Bearer dk_xxx"
GET /api/v1/whois

Retrieve WHOIS registration data for a domain name.

Query Parameters
domain stringrequired
Full domain name including TLD (e.g. abtdomain.com).
Request
curl "https://premium-api.domainkits.com/api/v1/whois?domain=abtdomain.com" \ -H "Authorization: Bearer dk_xxx"
Response
{ "success": true, "registered": true, "data": { "domain": "abtdomain.com", "registrar_name": "NameSilo", "created": "2023-04-21T15:51:41Z", "expires": "2027-04-21T15:51:41Z", "updated": "2026-04-22T08:30:19Z", "nameservers": ["marvin.ns.cloudflare.com", "norah.ns.cloudflare.com"], "status": ["client transfer prohibited"] } }
GET /api/v1/dns

Query DNS records for a domain. The records object is keyed by record type (A, AAAA, MX, NS, TXT, CNAME, SOA, and CAA when present). A record type is included only when the resolver returns data for it; an absent key is not proof that no such record exists. Parse defensively.

Query Parameters
domain stringrequired
Domain name to query (e.g. google.com).
Request
curl "https://premium-api.domainkits.com/api/v1/dns?domain=google.com" \ -H "Authorization: Bearer dk_xxx"
Response
{ "success": true, "data": { "domain": "google.com", "records": { "A": [{ "ip": "142.251.210.46", "ttl": 300 }], "AAAA": [{ "ipv6": "2607:f8b0:4006:811::200e", "ttl": 300 }], "MX": [{ "target": "smtp.google.com", "pri": 10 }], "NS": [{ "target": "ns1.google.com" }, ...] } } }
POST /api/v1/bulk/dns

Resolve nameservers for up to 20 domains in one request. Where the nameservers identify a marketplace or a parking service, the entry carries a domain_status of for_sale or parking; domains in normal use have no such field. Each domain in the batch draws one unit from the same daily quota as /dns, so a batch of 20 costs the same as 20 single lookups. Batch calls are capped at 5 per minute.

Body Parameters
domains arrayrequired
Domain names to resolve. Maximum 20 per request. Duplicates and malformed entries are dropped before the lookup.
Request
curl -X POST "https://premium-api.domainkits.com/api/v1/bulk/dns" \ -H "Authorization: Bearer dk_xxx" \ -H "Content-Type: application/json" \ -d '{"domains": ["example.com", "example.net"]}'
Response
{ "success": true, "total": 2, "registered": 2, "data": [ { "domain": "example.com", "status": "registered", "nameservers": ["a.iana-servers.net", "b.iana-servers.net"] }, { "domain": "example.net", "status": "registered", "nameservers": ["ns1.sedoparking.com"], "domain_status": "parking" } ] }
POST /api/v1/bulk/whois

Registrar, dates, EPP status codes and nameservers for up to 30 domains in one request. No registrant personal data is returned. Each domain in the batch draws one unit from the same daily quota as /whois, so a batch of 30 costs the same as 30 single lookups. Batch calls are capped at 5 per minute.

Body Parameters
domains arrayrequired
Domain names to look up. Maximum 30 per request. Duplicates and malformed entries are dropped before the lookup.
Request
curl -X POST "https://premium-api.domainkits.com/api/v1/bulk/whois" \ -H "Authorization: Bearer dk_xxx" \ -H "Content-Type: application/json" \ -d '{"domains": ["example.com", "example.net"]}'
Response
{ "success": true, "total": 2, "registered": 2, "data": [ { "domain": "example.com", "registered": true, "registrar_name": "RESERVED-IANA", "created": "1995-08-14T04:00:00Z", "expires": "2027-08-13T04:00:00Z", "status": ["client transfer prohibited"], "nameservers": ["a.iana-servers.net"] }, { "domain": "example.net", "registered": false } ] }
GET /api/v1/ns-reverse

Find all domains using a specific nameserver. Useful for identifying domain portfolios and hosting providers.

Query Parameters
ns stringrequired
Nameserver hostname (e.g. ns1.example.com).
tld stringoptional
Filter results by TLD.
keyword stringoptional
Filter by keyword in domain name. Minimum 3 characters, letters, digits and hyphens only; anything else returns 400.
sort stringoptional
length_asc length_desc alpha alpha_desc. Any other value returns 400.
limit integeroptional
Results per page (default: 40, max: 500).
offset integeroptional
Pagination offset.
no_number booleanoptional
Exclude domains containing numbers.
no_hyphen booleanoptional
Exclude domains containing hyphens.
type stringoptional
Composition filter. Values: all_alpha, all_number.
length stringoptional
Length of the second-level label, excluding the TLD. Accepts an exact length (7), a range (6-9, inclusive of both ends), or a preset band: ultra (1-4), short (5-10), medium (11-15), long (16-63). 0-5 and <5 are aliases for ultra; 15+ for long. Any other value returns 400. Takes precedence over min_len / max_len.
min_len integeroptional
Minimum domain name length. Superseded by length; prefer length for consistency with the search endpoints.
max_len integeroptional
Maximum domain name length. Superseded by length.
export stringoptional
Download results as a file instead of JSON. Values: csv, txt. Bypasses pagination and returns up to 50,000 rows in one pass. Billed against the Search Export quota, which carries a monthly cap. txt is one domain per line; csv columns match this endpoint's JSON fields.
Request
curl "https://premium-api.domainkits.com/api/v1/ns-reverse?ns=ns1.google.com&limit=3" \ -H "Authorization: Bearer dk_xxx"
Response
{ "success": true, "data": [ "000333.com", "001-001-test.com", "003366.com" ], "total": 11434 }
Response (no results)
{ "success": true, "data": [], "total": 0 }
GET /api/v1/safety

Check if a domain is flagged as unsafe by Google Safe Browsing, and whether it is indexed by Google.

Query Parameters
domain stringrequired
Domain name to check (e.g. google.com).
Request
curl "https://premium-api.domainkits.com/api/v1/safety?domain=google.com" \ -H "Authorization: Bearer dk_xxx"
Response
{ "success": true, "data": { "domain": "google.com", "safe": { "is_safe": true, "threat_types": [], "matches_count": 0 }, "index": { "indexed": true, "index_count": 363000000 } } }
GET /api/v1/ip-lookup

Look up geolocation and network information for an IP address or domain. Uses MaxMind GeoLite2 data.

Query Parameters
query stringrequired
IP address (IPv4 or IPv6) or domain name to look up.
Request
curl "https://premium-api.domainkits.com/api/v1/ip-lookup?query=8.8.8.8" \ -H "Authorization: Bearer dk_xxx"
Response
{ "success": true, "data": { "ip": "8.8.8.8", "type": "IPv4", "connection": { "asn": 15169, "org": "GOOGLE", "isp": "GOOGLE" }, "location": { "continent": "North America", "continent_code": "NA", "country": "United States", "country_code": "US", "region": "California", "region_code": "CA", "city": "Los Angeles", "postal": "90009", "latitude": 34.0544, "longitude": -118.2441, "is_eu": false }, "timezone": "America/Los_Angeles", "attribution": "IP geolocation data by MaxMind (GeoLite2)" } }
Request (domain)
curl "https://premium-api.domainkits.com/api/v1/ip-lookup?query=google.com" \ -H "Authorization: Bearer dk_xxx"
GET /api/v1/registrar

Fuzzy search ICANN-accredited registrars by name or exact match by IANA ID. Supports common aliases (e.g. godaddy, namecheap, cloudflare). Returns up to 20 matching registrars with accreditation status and RDAP URL.

Query Parameters
query stringrequired
Registrar name or IANA ID to search for (e.g. godaddy or 146).
Request (by name)
curl "https://premium-api.domainkits.com/api/v1/registrar?query=godaddy" \ -H "Authorization: Bearer dk_xxx"
Response
{ "success": true, "data": { "query": "godaddy", "results": [ { "id": "146", "name": "GoDaddy.com, LLC", "status": "Accredited", "rdap_url": "https://rdap.godaddy.com/v1/", "country": "United States of America", "contact": "Legal Department +1 4805058800 legal@godaddy.com", "website": "http://www.godaddy.com" } ] } }
Request (by IANA ID)
curl "https://premium-api.domainkits.com/api/v1/registrar?query=146" \ -H "Authorization: Bearer dk_xxx"
GET /api/v1/status-guide

Look up EPP domain status codes. Search by status name, alias, or category (e.g. clientHold, pending, security).

Query Parameters
query stringrequired
Status code, keyword, or category to search for.
Request
curl "https://premium-api.domainkits.com/api/v1/status-guide?query=clientHold" \ -H "Authorization: Bearer dk_xxx"
Response
{ "success": true, "data": { "query": "clientHold", "results": { "clientHold": { "aliases": ["client hold", "clienthold"], "category": "Domain Not Working", "description": "Domain is on hold and will not resolve.", "action": "Contact your registrar immediately.", "severity": "critical", "possible_reasons": "Unpaid bills, suspected fraud..." } } } }
Request (by category)
curl "https://premium-api.domainkits.com/api/v1/status-guide?query=security" \ -H "Authorization: Bearer dk_xxx"
GET /api/v1/typosquat

Generate typosquat permutations for a domain and check which variants are registered. Covers omission, transposition, keyboard-adjacent replacement, insertion, repetition, hyphenation, vowel-swap, homoglyph, combosquatting (brand + keyword), IDN homograph (Cyrillic look-alikes), plural/singular, and TLD-swap mutations. Registered variants include a latest_whois snapshot. Use for brand protection, phishing detection, and defensive registration planning. IDN homograph variants are returned as ASCII punycode (xn--) domains; the input domain itself must be ASCII.

Query Parameters
domain stringrequired
Domain to scan (e.g. example.com). Must include a TLD. The name portion must be at least 2 characters.
unregistered booleanoptional
Default false. Set to true to include unregistered variants in the response. By default only registered variants are returned.
whois booleanoptional
Default true. Set to false to skip WHOIS lookups entirely, returning only registration status. Speeds up the response.
type booleanoptional
Default true. Set to false to omit the mutation type field from each variant.
Response Fields
total integer
Total number of permutations generated.
registered_count integer
How many of the permutations are registered.
returned integer
Number of variants in the data array (equals registered_count unless unregistered=true).
data[].type string
Mutation type: omission, transposition, replacement, insertion, repetition, hyphenation, vowel-swap, homoglyph, combosquatting, idn-homograph, plural, exact-tld, tld-swap.
data[].status string
For registered variants: registered, for_sale, or expiring.
data[].latest_whois object
Most recent cached WHOIS snapshot for a registered variant, when available. Not a real-time lookup. Omitted when no snapshot exists.
Request (registered only, default)
curl "https://premium-api.domainkits.com/api/v1/typosquat?domain=example.com" \ -H "Authorization: Bearer dk_xxx"
Response
{ "success": true, "total": 87, "domain": "example.com", "variants_generated": 449, "variants_registered": 87, "whois_note": "latest_whois reflects the most recent cached snapshot, not a real-time lookup", "data": [ { "domain": "exampl.com", "type": "omission", "registered": true, "status": "for_sale", "latest_whois": { "created": "2019-03-12T00:00:00Z", "updated": "2025-07-16T00:00:00Z", "expires": "2026-03-12T00:00:00Z", "registrar_name": "Sav.com, LLC", "status": ["client transfer prohibited"], "nameservers": ["ns1.dan.com", "ns2.dan.com"] } } ] }
Request (minimal, no whois/type)
curl "https://premium-api.domainkits.com/api/v1/typosquat?domain=example.com&whois=false&type=false" \ -H "Authorization: Bearer dk_xxx"
Request (include unregistered)
curl "https://premium-api.domainkits.com/api/v1/typosquat?domain=example.com&unregistered=true" \ -H "Authorization: Bearer dk_xxx"
GET /api/v1/tld-check

Check the registration status of a domain prefix across monitored TLDs.

Query Parameters
prefix stringrequired
Domain prefix to check (e.g. abtdomain).
mode stringoptional
Response mode: count, check (default), or list.
tlds stringoptional
Comma-separated TLDs to check (only for mode=check). Default: com,net,org,io,ai,bot,dev,app,pro,online.
Request (check, default)
curl "https://premium-api.domainkits.com/api/v1/tld-check?prefix=abtdomain" \ -H "Authorization: Bearer dk_xxx"
Response (check)
{ "success": true, "data": { "com": "registered", "net": "available", "org": "available", "io": "available", "ai": "available" }, "total": 1, "prefix": "abtdomain" }
Request (count)
curl "https://premium-api.domainkits.com/api/v1/tld-check?prefix=abtdomain&mode=count" \ -H "Authorization: Bearer dk_xxx"
Response (count)
{ "success": true, "data": null, "total": 1, "prefix": "abtdomain" }
Request (list)
curl "https://premium-api.domainkits.com/api/v1/tld-check?prefix=google&mode=list" \ -H "Authorization: Bearer dk_xxx"
Response (list)
{ "success": true, "data": ["com", "net", "org", "io", ...], "total": 482, "prefix": "google" }
GET /api/v1/monitor/changes

Track domain status changes including transfers, drops, renewals, and nameserver updates.

Query Parameters
keyword stringoptional
Filter by keyword in domain name. Minimum 3 characters, letters, digits and hyphens only; anything else returns 400.
tld stringoptional
Filter by TLD.
reason stringoptional
Filter by change reason.
length integeroptional
Length of the second-level label. This endpoint supports these bands only: 1-3, 4, 5-8, 9-63. Any other value returns 400.
no_number booleanoptional
Exclude domains containing digits. Default: true.
type stringoptional
Composition filter. Value: all_number (digits-only).
sort stringoptional
length_asc length_desc tld_count_asc tld_count_desc alpha alpha_desc. Any other value returns 400.
limit integeroptional
Results per page (default: 40, max: 500).
offset integeroptional
Pagination offset.
Request
curl "https://premium-api.domainkits.com/api/v1/monitor/changes?keyword=premium&limit=3" \ -H "Authorization: Bearer dk_xxx"
Response
{ "success": true, "total": 3, "data": [ { "domain": "challengepremium.com", "tld": "com", "reason": "Nameserver Change", "found_date": "2026-06-26", "details_old": "NS59.DOMAINCONTROL.COM,NS60.DOMAINCONTROL.COM", "details_new": "", "tld_count": 1 } ] }
GET /api/v1/ct/subdomains

Discover subdomains observed in Certificate Transparency logs. Returns unique subdomain prefixes with the date each was last seen.

Query Parameters
domain stringrequired
Registered domain to query (e.g. example.com).
limit integeroptional
Max results (default: 1000, max: 10000). A larger value returns 400.
after stringoptional
Only include records logged on or after this date (YYYY-MM-DD).
before stringoptional
Only include records logged on or before this date (YYYY-MM-DD).
export stringoptional
Download results as a file instead of JSON. Values: csv, txt. Bypasses pagination and returns up to 10,000 rows in one pass. Billed against the Search Export quota, which carries a monthly cap. txt is one domain per line; csv columns match this endpoint's JSON fields.
Request
curl "https://premium-api.domainkits.com/api/v1/ct/subdomains?domain=example.com&limit=5" \ -H "Authorization: Bearer dk_xxx"
Response
{ "success": true, "data": [ { "d": "mail", "ls": "2026-07-20" }, { "d": "api", "ls": "2026-07-18" }, { "d": "cdn", "ls": "2026-06-01" } ], "total": 5 }
GET /api/v1/ct/certs

Look up certificate records by domain or SHA-256 fingerprint. Covers currently valid certificates.

Query Parameters
domain stringrequired*
Domain to query. Required unless fingerprint is provided.
fingerprint stringrequired*
SHA-256 certificate fingerprint (64 hex chars). Required unless domain is provided.
limit integeroptional
Max results (default: 100, max: 5000). A larger value returns 400.
issuer stringoptional
Filter by certificate issuer (e.g. R11, WE1).
cert_type stringoptional
Filter by certificate type: DV, OV, EV.
after stringoptional
Records logged on or after this date (YYYY-MM-DD).
before stringoptional
Records logged on or before this date (YYYY-MM-DD).
export stringoptional
Download results as a file instead of JSON. Values: csv, txt. Bypasses pagination and returns up to 5,000 rows in one pass. Billed against the Search Export quota, which carries a monthly cap. txt is one domain per line; csv columns match this endpoint's JSON fields.
Request
curl "https://premium-api.domainkits.com/api/v1/ct/certs?domain=example.com&limit=2" \ -H "Authorization: Bearer dk_xxx"
Response
{ "success": true, "data": [ { "domain": "example.com", "log_time": "2026-07-20T16:18:16Z", "issue_time": "2026-07-20T16:08:14Z", "not_after": "2026-10-18T16:14:46Z", "issuer": "R11", "cert_type": "DV", "fingerprint": "73444a55...", "san_list": "*.example.com|example.com", "source": "google_argon2026h2", "reg_domain": "example.com" } ], "total": 2 }
GET /api/v1/nrds/download

Download newly registered domains data files. Returns a 302 redirect to a signed download URL valid for 5 minutes. Each file can be downloaded up to 3 times per day per API key.

Query Parameters
tld stringoptional
TLD to download. Defaults to all TLDs combined.
type stringoptional
File type. Defaults to domains_only.
  • domains_only (.txt.gz) domain names, one per line. e.g. abtdomain.com
  • basic_info (.csv.gz) domain, registration date, expiration date. e.g. abtdomain.com,2026-06-30,2027-06-30
  • full_whois (.csv.gz, Platinum only) domain, registration date, expiration date, registrar, status codes, nameservers. e.g. abtdomain.com,2026-06-30,2027-06-30,GoDaddy.com LLC,clientTransferProhibited,ns1.example.com|ns2.example.com
date stringoptional
Date in YYYY-MM-DD format. Defaults to today.
Request
# Use -L to follow the redirect, -J -O to save with server filename curl -L -J -O \ "https://premium-api.domainkits.com/api/v1/nrds/download?tld=com&type=domains_only" \ -H "Authorization: Bearer dk_xxx"
Response
HTTP/1.1 302 Found Location: https://download.domainkits.com/... # The redirect URL serves the .txt.gz file directly. # On rate limit (3 downloads/file/day): { "success": false, "error": "Daily download limit reached (3/3)." }
GET /api/v1/usage

View your current API key usage and per-endpoint counters.

Request
curl "https://premium-api.domainkits.com/api/v1/usage" \ -H "Authorization: Bearer dk_xxx"
Response
{ "success": true, "endpoints": { "search": { "minute": { "used": 5, "limit": 0 }, "daily": { "used": 42, "limit": 0 } }, ... } }
Rate Limits

Each endpoint has a per-minute and a daily request limit that vary by tier. A value of unlimited means no numeric cap applies. Daily quotas reset at 00:00 UTC; per-minute limits use a rolling 60-second window. Search Export additionally carries a monthly quota, which resets on the 1st (UTC). When a limit is exceeded, the API returns 429 Too Many Requests.

Endpoint Premium / min Premium / day Platinum / min Platinum / day Max results
Search602,000unlimitedunlimited50,000
NRDs Live20500unlimitedunlimitedP:200 / Plat:500
Search Export210
100 / month
10100
1,000 / month
50,000
active: 10,000
RDAP WHOIS3050050unlimited
DNS60500unlimitedunlimited
Reverse NS20100unlimited5001,000
Domain Changes202,000unlimitedunlimited1,000
TLD Check20600unlimitedunlimited
Safety55010200
IP Lookup2020050unlimited
Registrar Check2020050unlimited
Status Guide30unlimitedunlimitedunlimited
TLD Trends30unlimitedunlimitedunlimited
Keyword Trends20unlimitedunlimitedunlimitedP:50 / Plat:100
CT Subdomains2020060unlimited10,000
CT Certs2020060unlimited5,000
CT Search1010030unlimited5,000
Typosquat Scan120unlimitedunlimited
NRDs Downloadunlimitedunlimitedunlimitedunlimited3 / file / day
Usage30unlimited30unlimited
Rate Limit Headers
# On every metered response. The Reset # value is the unix time the current # per-minute window rolls over. X-RateLimit-Limit: 20 X-RateLimit-Remaining: 17 X-RateLimit-Reset: 1719744000
429 Response
{ "success": false, "error": "Rate limit exceeded (20/min). Wait and retry." }