Request demo

Domain Detail API

Everything the Index Holds on a Domain Fits in One Record.

Pass a domain. Get back the record Deepinfo keeps for it: what the name is made of, WHOIS with its normalized and historical fields, DNS by record type, the addresses it has resolved to, its certificate and what its website answers.

From the indexall read

deepinfo.com GET /discovery/domain-detail

  1. Name

    8 characters · keywords deep, info

    no date of its own
  2. WHOIS

    godaddy online services cayman islands ltd. · created 2001-06-05 · expires 2028-10-20

    check_date 2026-09-22 15:14
  3. DNS

    A 104.26.10.21 · 104.26.11.21 · MX aspmx.l.google.com

    update_date 2026-09-22 15:14
  4. IP history

    104.21.29.10 · 172.67.171.60

    no date of its own
  5. SSL

    WE1 · Google Trust Services · to 2026-11-20 · is_valid true

    check_date 2026-09-22 15:43
  6. Web data

    301 → 200 · https://www.deepinfo.com/ · HSTS · X-Frame-Options DENY

    no date of its own

There is no single timestamp for the whole record.

The Record Every Discovery Call Returns.

This is the record that Domain Search and all Discovery finders return inside results. Code that reads one reads them all.

GET https://api.deepinfo.com/v1/discovery/domain-detail Reference
ParameterTypeDescription
domainstringRequiredA registered domain, for example deepinfo.com.

Request

curl "https://api.deepinfo.com/v1/discovery/domain-detail?domain=deepinfo.com" \
  -H "apikey: YOUR_API_KEY"

Response

200 OK · application/json
{
  "punycode": "deepinfo.com",
  "unicode": "deepinfo.com",
  "is_idn": false,
  "name": {
    "punycode": "deepinfo",
    "length": 8,
    "lang": "en",
    "keywords": ["deep", "info"],
    "contains_confusable": false
  },
  "domain": {
    "extension": { "punycode": "com", "unicode": "com", "is_idn": false },
    "registered": true,
    "whois": {
      "create_date": "2001-06-05T02:57:08Z",
      "expiry_date": "2028-10-20T11:59:59Z",
      "registrar": "godaddy online services cayman islands ltd.",
      "registrant": { "organization": "…", "country": "us" },
      "name_servers": ["may.ns.cloudflare.com", "simon.ns.cloudflare.com"],
      "check_date": "2026-09-22T15:14:21Z"
    },
    "whois_privacy_enabled": true,
    "whois_last_change_date": "2026-09-22T15:17:20Z"
  },
  "type": 1,
  "dns": {
    "a": {
      "update_date": "2026-09-22T15:14:25Z",
      "ip_addresses": ["104.26.10.21", "104.26.11.21"]
    },
    "mx": {
      "update_date": "2026-09-22T15:14:25Z",
      "mail_servers": ["aspmx.l.google.com", "alt1.aspmx.l.google.com"]
    }
  },
  "ip_history": ["104.21.29.10", "172.67.171.60"],
  "ssl": {
    "issuer": { "common_name": "WE1", "organization": "Google Trust Services" },
    "validity": {
      "start_date": "2026-08-22T16:13:55Z",
      "end_date": "2026-11-20T17:13:40Z"
    },
    "signature": { "is_self_signed": false, "is_valid": true },
    "check_date": "2026-09-22T15:43:21Z"
  },
  "webdata": {
    "connection_status": "success",
    "http": {
      "status_code_first": 301,
      "status_code_last": 200,
      "final_url": "https://www.deepinfo.com/",
      "headers": {
        "strict_transport_security": "max-age=31536000; includeSubDomains; preload",
        "x_frame_options": "DENY"
      }
    }
  }
}

The Layers the Index Keeps.

Each layer carries its own check_date, update_date or last-change date, so you can tell when each part of the record was last read. There is no single timestamp for the whole record.

nameThe label without its extension: length, language, keywords, letters, digits and hyphens, and flags for internationalized and confusable characters.
domain.whoisRegistrar, registrant, creation, update and expiry dates, name servers, status codes and the WHOIS server, with a check_date.
WHOIS history fieldsNormalized registrant organization, phone and email, past creation dates, past registrant emails, whois_privacy_enabled and whois_last_change_date.
dnsA, AAAA, NS, MX, SOA, TXT, CNAME and other types such as PTR, each with its own update_date.
ip_historyThe IP addresses the domain has resolved to over time.
sslIssuer, subject, validity, SHA-256, SHA-1 and MD5 fingerprints, signature checks, subject alternative names and signed certificate timestamps, with a check_date.
webdataConnection status, redirect chain, first and last status codes, final URL and domain, security headers as named fields, cookies and a hash of the page source.

Choose the Indexed Record or a Fresh Read.

Domain Detail reads Deepinfo’s index, so one call returns all layers as they were last observed.

When you need a value as it stands this minute, call the matching Lookup endpoint. Those go to the live source in real time, one layer per call.

From the index, GET /discovery/domain-detail · one call, every layerLive lookups, one layer a call, read at request time
Name Yes No
WHOIS check_date 2026-09-22 15:14 GET /lookup/whois · the registry
DNS update_date 2026-09-22 15:14 GET /lookup/dns · a resolver, by record type
IP history Yes No
SSL check_date 2026-09-22 15:43 GET /lookup/ssl · the host
Web data Yes GET /lookup/webdata · the page itself

Questions About Domain Detail API

Can we pass a subdomain?

Yes. A host such as www.deepinfo.com returns its own record, with type 2, its own DNS, certificate and web data, and the WHOIS of its registered domain.

What comes back for a domain behind WHOIS privacy?

whois_privacy_enabled is true, and the registrant block shows what the registrar publishes, usually a privacy or proxy service. whois_registrant_email_historical may still hold addresses from before privacy was switched on.

Does the record include a risk score?

No. It holds what was observed on each layer and leaves the judgment to you. Security scores per asset and per domain come from External Attack Surface Management, which scans the assets you approve.

Does it handle internationalized domain names?

Yes. Send the punycode form, for example xn--bcher-kva.example for bücher.example. The record returns both forms, in punycode and unicode, with is_idn set to true.

How is the Domain Detail API priced?

As part of an API services plan, priced by volume and frequency, separately from the platform. See Data & API pricing.

What does a malformed request return?

A missing domain returns a 400 application error with code 10400 and a parameters list that names the field. See errors.

What are the rate limits?

Plan-dependent. The default is one request per second per key and endpoint. See rate limits.

Pull the Record for a Domain You Care About.

Most teams start with a few of their own domains and a few they are investigating. We set up access and walk through the record on a short call.