Skip to main content

API reference

WHOIS

WHOIS: Look up domain registration; List TLD coverage. Published endpoints, request parameters, JSON responses and authentication.

Release 1.0.0 · This reference describes the release shown here. Console shows the current published configuration.

Technical limits
ⓘThese limits apply unless an endpoint lists different limits.
Timeout
3 s
Request body
1 MiB
Response body
1 MiB

Look up domain registration

GET/whois/v1/domains/{domain}

Retrieve authoritative registration data for a normalized domain. Registered and conclusively unregistered domains both return a successful response. Optional registry fields may be omitted. Inspect quality.warnings for missing or redacted data.

1 Credit per successfully queried domainHow billing works ↗

Parameters

ParameterLocationTypeRequiredDescription
domainpathstringYesDomain name in Unicode or Punycode; no URL scheme or path

Success response200

JSON model
{
  "code": 0,
  "data": {
    "domain": {
      "input": "example.com",
      "queried": "example.com",
      "unicode": "example.com"
    },
    "quality": {
      "completeness": "partial",
      "support_level": "standard",
      "warnings": [
        "CONTACT_REDACTED"
      ]
    },
    "record": {
      "contacts": [
        {
          "address": {
            "country": "US",
            "locality": "Example City",
            "postal_code": "12345",
            "region": "Example Region",
            "street": [
              "123 Example Street"
            ]
          },
          "emails": [
            "[email protected]"
          ],
          "handle": "contact-example",
          "name": "Example Contact",
          "organization": "Example Organization",
          "phones": [
            "+1.2025550100"
          ],
          "roles": [
            "registrant"
          ]
        }
      ],
      "dates": {
        "expires_at": "2027-01-01T00:00:00Z",
        "registered_at": "2020-01-01T00:00:00Z",
        "updated_at": "2026-10-20T00:00:00Z"
      },
      "handle": "EXAMPLE-123",
      "nameservers": [
        {
          "ldh_name": "ns1.example.test",
          "unicode_name": "ns1.example.test"
        }
      ],
      "notices": [
        {
          "description": [
            "Example registry terms apply."
          ],
          "links": [
            "https://registry.example.test/terms"
          ],
          "title": "Terms of use"
        }
      ],
      "redactions": [
        {
          "field": "contacts.emails",
          "reason": "Contact details withheld by registry policy"
        }
      ],
      "registrar": {
        "handle": "registrar-example",
        "iana_id": "9999",
        "name": "Example Registrar"
      },
      "secure_dns": {
        "delegation_signed": true
      },
      "statuses": [
        "active"
      ]
    },
    "registration": {
      "registered": true
    },
    "source": {
      "cache_expires_at": "2026-10-21T08:00:00Z",
      "cache_hit": false,
      "fetched_at": "2026-10-20T08:00:00Z",
      "parser_version": "rdap-v1",
      "protocol": "rdap",
      "server": "https://rdap.example.test",
      "source_version": "2026-10-20"
    }
  },
  "error": ""
}

Illustrative JSON shape generated from the published schema. Field values are examples, not live results.

Fields inside data

NameTypeRequiredDescription
domainobjectNoInput and normalized domain names.
qualityobjectNoRecord completeness and stable warning codes.
recordobjectNoPublic registration details. Individual fields may be omitted.
registrationobjectNoAuthoritative registration conclusion.
sourceobjectNoAuthoritative source and cache freshness.

List TLD coverage

GET/whois/v1/tlds

Check supported TLDs, lookup protocols and current availability before requesting a lookup. This endpoint does not trigger an upstream lookup.

Parameters

This operation has no published parameters.

Success response200

JSON model
{
  "code": 0,
  "data": {
    "generated_at": "2026-10-20T08:00:00Z",
    "items": [
      {
        "availability": "available",
        "last_verified_at": "2026-10-20T08:00:00Z",
        "protocols": [
          "rdap"
        ],
        "support_level": "standard",
        "tld": "com",
        "unicode_tld": "com",
        "unsupported_reason": "No supported authoritative lookup service"
      }
    ],
    "source_version": "2026-10-20"
  },
  "error": ""
}

Illustrative JSON shape generated from the published schema. Field values are examples, not live results.

Fields inside data

NameTypeRequiredDescription
generated_atstringNoUTC timestamp of the loaded coverage snapshot.
itemsobject[]NoSupported and unsupported TLD capabilities.
source_versionstringNoPublished source configuration version.

Create a batch lookup

POST/whois/v1/batches

Submit up to 10000 domain inputs. HTTP 202 means the job was accepted; it does not mean processing is complete. 1. Save data.job_id from this response. 2. Poll GET /whois/v1/batches/{job_id}; the create response supplies Retry-After: 3 seconds. 3. Read GET /whois/v1/batches/{job_id}/results. Continue with next_cursor while has_more is true. Use POST /whois/v1/batches/{job_id}:cancel to stop new work. Terminal job results are retained for 7 days.

1 Credit per successfully queried domainHow billing works ↗

HTTP 202 reserves Credits. Successful units are charged when the job settles; unused reserved Credits are released.

Parameters

This operation has no published parameters.

Request body

JSON model
{
  "domains": [
    "example.com",
    "example.net"
  ]
}

Illustrative JSON shape generated from the published schema. Field values are examples, not live results.

Request fields

NameTypeRequiredDescription
domainsstring[]YesFrom 1 to 10000 domain inputs. Repeated normalized domains share processing.

Success response202

JSON model
{
  "code": 0,
  "data": {
    "active_item_count": 0,
    "completed_item_count": 0,
    "expires_at": "2026-10-27T08:00:00Z",
    "failed_item_count": 0,
    "input_count": 2,
    "job_id": "job_0123456789abcdef0123456789abcdef",
    "processing_item_count": 2,
    "progress": 0,
    "results_url": "/whois/v1/batches/job_0123456789abcdef0123456789abcdef/results",
    "status": "queued",
    "success_item_count": 0,
    "unique_item_count": 2,
    "valid_input_count": 2
  },
  "error": ""
}

Illustrative JSON shape generated from the published schema. Field values are examples, not live results.

Fields inside data

NameTypeRequiredDescription
active_item_countintegerNoNumber of items currently being executed.
completed_item_countintegerNoNumber of unique items that have reached a terminal state.
expires_atstringNoUTC expiry timestamp; present after the job becomes terminal.
failed_item_countintegerNoNumber of items that failed.
input_countintegerNoNumber of submitted input entries.
job_idstringNoBatch identifier used by status and result endpoints.
processing_item_countintegerNoUnique items not yet completed; includes queued work.
progressintegerNoCompleted unique items as a percentage from 0 to 100.
results_urlstringNoRelative Gateway path for paginated batch results.
statusstringNoCurrent job lifecycle status.
success_item_countintegerNoNumber of items with a conclusive registration result.
unique_item_countintegerNoNumber of unique normalized domains to process.
valid_input_countintegerNoNumber of valid input entries before deduplication.

Get batch progress

GET/whois/v1/batches/{job_id}

Use job_id from the create response to inspect job progress. Stop polling after completion, cancellation, failure or expiry. Read results using data.results_url. Polling and reading results are free; only successful domain lookups are charged when the batch settles.

Parameters

ParameterLocationTypeRequiredDescription
job_idpathstringYesBatch job identifier

Success response200

JSON model
{
  "code": 0,
  "data": {
    "active_item_count": 0,
    "completed_item_count": 0,
    "expires_at": "2026-10-27T08:00:00Z",
    "failed_item_count": 0,
    "input_count": 2,
    "job_id": "job_0123456789abcdef0123456789abcdef",
    "processing_item_count": 2,
    "progress": 0,
    "results_url": "/whois/v1/batches/job_0123456789abcdef0123456789abcdef/results",
    "status": "queued",
    "success_item_count": 0,
    "unique_item_count": 2,
    "valid_input_count": 2
  },
  "error": ""
}

Illustrative JSON shape generated from the published schema. Field values are examples, not live results.

Fields inside data

NameTypeRequiredDescription
active_item_countintegerNoNumber of items currently being executed.
completed_item_countintegerNoNumber of unique items that have reached a terminal state.
expires_atstringNoUTC expiry timestamp; present after the job becomes terminal.
failed_item_countintegerNoNumber of items that failed.
input_countintegerNoNumber of submitted input entries.
job_idstringNoBatch identifier used by status and result endpoints.
processing_item_countintegerNoUnique items not yet completed; includes queued work.
progressintegerNoCompleted unique items as a percentage from 0 to 100.
results_urlstringNoRelative Gateway path for paginated batch results.
statusstringNoCurrent job lifecycle status.
success_item_countintegerNoNumber of items with a conclusive registration result.
unique_item_countintegerNoNumber of unique normalized domains to process.
valid_input_countintegerNoNumber of valid input entries before deduplication.

Read batch results

GET/whois/v1/batches/{job_id}/results

Read results in original input order. When has_more is true, send next_cursor unchanged as the cursor query parameter. A successful page request does not mean every item succeeded. Inspect each item status, state and error_code.

Parameters

ParameterLocationTypeRequiredDescription
job_idpathstringYesBatch job identifier
cursorquerystringNoOpaque next_cursor from the previous result page
limitqueryintegerNoPage size from 1 to 500

Success response200

JSON model
{
  "code": 0,
  "data": {
    "has_more": false,
    "next_cursor": "<NEXT_CURSOR>",
    "results": [
      {
        "error_code": 0,
        "input_domain": "example.com",
        "normalized_domain": "example.com",
        "position": 0,
        "positions": [
          0
        ],
        "result": {
          "domain": {
            "input": "example.com",
            "queried": "example.com",
            "unicode": "example.com"
          },
          "quality": {
            "completeness": "partial",
            "support_level": "standard",
            "warnings": [
              "CONTACT_REDACTED"
            ]
          },
          "record": {
            "contacts": [
              {
                "address": {
                  "country": "US",
                  "locality": "Example City",
                  "postal_code": "12345",
                  "region": "Example Region",
                  "street": [
                    "123 Example Street"
                  ]
                },
                "emails": [
                  "[email protected]"
                ],
                "handle": "contact-example",
                "name": "Example Contact",
                "organization": "Example Organization",
                "phones": [
                  "+1.2025550100"
                ],
                "roles": [
                  "registrant"
                ]
              }
            ],
            "dates": {
              "expires_at": "2027-01-01T00:00:00Z",
              "registered_at": "2020-01-01T00:00:00Z",
              "updated_at": "2026-10-20T00:00:00Z"
            },
            "handle": "EXAMPLE-123",
            "nameservers": [
              {
                "ldh_name": "ns1.example.test",
                "unicode_name": "ns1.example.test"
              }
            ],
            "notices": [
              {
                "description": [
                  "Example registry terms apply."
                ],
                "links": [
                  "https://registry.example.test/terms"
                ],
                "title": "Terms of use"
              }
            ],
            "redactions": [
              {
                "field": "contacts.emails",
                "reason": "Contact details withheld by registry policy"
              }
            ],
            "registrar": {
              "handle": "registrar-example",
              "iana_id": "9999",
              "name": "Example Registrar"
            },
            "secure_dns": {
              "delegation_signed": true
            },
            "statuses": [
              "active"
            ]
          },
          "registration": {
            "registered": true
          },
          "source": {
            "cache_expires_at": "2026-10-21T08:00:00Z",
            "cache_hit": false,
            "fetched_at": "2026-10-20T08:00:00Z",
            "parser_version": "rdap-v1",
            "protocol": "rdap",
            "server": "https://rdap.example.test",
            "source_version": "2026-10-20"
          }
        },
        "state": "registered",
        "status": "succeeded"
      }
    ]
  },
  "error": ""
}

Illustrative JSON shape generated from the published schema. Field values are examples, not live results.

Fields inside data

NameTypeRequiredDescription
has_morebooleanNoWhether another page is available.
next_cursorstringNoOpaque cursor for the next page; omitted on the last page.
resultsobject[]NoResults for this page in original input order.

Cancel a batch lookup

POST/whois/v1/batches/{job_id}:cancel

Stop scheduling new work for this job. Completed results remain available; in-flight work may finish. Repeated cancellation is safe.

Parameters

ParameterLocationTypeRequiredDescription
job_idpathstringYesBatch job identifier

Success response200

JSON model
{
  "code": 0,
  "data": {
    "active_item_count": 0,
    "completed_item_count": 0,
    "expires_at": "2026-10-27T08:00:00Z",
    "failed_item_count": 0,
    "input_count": 2,
    "job_id": "job_0123456789abcdef0123456789abcdef",
    "processing_item_count": 2,
    "progress": 0,
    "results_url": "/whois/v1/batches/job_0123456789abcdef0123456789abcdef/results",
    "status": "queued",
    "success_item_count": 0,
    "unique_item_count": 2,
    "valid_input_count": 2
  },
  "error": ""
}

Illustrative JSON shape generated from the published schema. Field values are examples, not live results.

Fields inside data

NameTypeRequiredDescription
active_item_countintegerNoNumber of items currently being executed.
completed_item_countintegerNoNumber of unique items that have reached a terminal state.
expires_atstringNoUTC expiry timestamp; present after the job becomes terminal.
failed_item_countintegerNoNumber of items that failed.
input_countintegerNoNumber of submitted input entries.
job_idstringNoBatch identifier used by status and result endpoints.
processing_item_countintegerNoUnique items not yet completed; includes queued work.
progressintegerNoCompleted unique items as a percentage from 0 to 100.
results_urlstringNoRelative Gateway path for paginated batch results.
statusstringNoCurrent job lifecycle status.
success_item_countintegerNoNumber of items with a conclusive registration result.
unique_item_countintegerNoNumber of unique normalized domains to process.
valid_input_countintegerNoNumber of valid input entries before deduplication.