DEVELOPERS/ API v1

The internet.
One request away.

A small API with a lot to uncover. Discover subdomains, resolve DNS records, and put domain intelligence to work.

No API key required 1,000 requests / day JSON · TXT · XML
01 / THE DETAILS

Less setup. More discovery.

Start with a domain. Get a clean, deduplicated list of observed hostnames, with the most recently seen names first.

GEThttps://resolvify.xyz/api/v1/searchPUBLIC
curl --fail-with-body \
  'https://resolvify.xyz/api/v1/search?domain=example.com&format=json&view=detailed'

All requests use HTTPS. The example updates as you change the playground below.

02 / THE DETAILS

Meet your next API call.

Try a real request right here. No keys to find, no environment to set up.

REQUEST BUILDER

Each request uses your shared daily allowance.

EXAMPLE RESPONSE
{
  "domain": "example.com",
  "total": 3,
  "page": 1,
  "limit": 100,
  "totalPages": 1,
  "queriedAt": "2026-10-27T00:00:00.000Z",
  "cached": true,
  "stale": false,
  "results": [
    {
      "hostname": "www.example.com",
      "firstSeen": "2025-01-08T10:00:00.000Z",
      "lastSeen": "2026-10-26T09:42:00.000Z",
      "certificateCount": 12,
      "wildcard": false,
      "issuer": "Example Certificate Authority",
      "expiresAt": "2027-01-24T09:42:00.000Z"
    },
    {
      "hostname": "api.example.com",
      "firstSeen": "2025-04-19T11:00:00.000Z",
      "lastSeen": "2026-10-25T14:20:00.000Z",
      "certificateCount": 4,
      "wildcard": false
    },
    {
      "hostname": "mail.example.com",
      "firstSeen": "2025-02-11T08:30:00.000Z",
      "lastSeen": "2026-10-20T08:30:00.000Z",
      "certificateCount": 6,
      "wildcard": false
    }
  ]
}
REQUEST URLhttps://resolvify.xyz/api/v1/search?domain=example.com&format=json&view=detailed
04 / THE DETAILS

Go from a name to a record.

Resolve a domain or subdomain over DNS. Use this endpoint when you need DNS answers rather than historical hostname discovery.

GET/api/v1/resolve
DNS resolver query parameters
ParameterDefaultDescription
domainrequired—The domain or subdomain to resolve.
typeAA, AAAA, MX, NS, TXT, CNAME, SOA or CAA.
formatjsonjson, txt or xml.
viewdetaileddetailed returns record objects. simple returns record values only.
Example DNS response · JSON
{
  "domain": "example.com",
  "type": "A",
  "records": [
    {
      "name": "example.com",
      "type": "A",
      "ttl": 300,
      "value": "93.184.215.14"
    }
  ],
  "queriedAt": "2026-10-27T00:00:00.000Z",
  "cached": false,
  "stale": false,
  "status": "NOERROR"
}

DNS answers can change and may include CNAME links. ttl is the answer’s time to live in seconds. A successful response with an empty records array means no answers were returned for that query. status distinguishes NOERROR from NXDOMAIN.

05 / THE DETAILS

Your workflow. Your format.

Keep structured metadata for an application, or take just the names for a shell pipeline.

{ }

JSON

Structured, predictable, ready for your application. Includes pagination and cache metadata.

application/json
Aa

Plain text

Names only with view=simple. Use detailed mode for tab-separated observation fields.

text/plain
</>

XML

Structured names and metadata, ready for XML tools and existing integrations.

application/xml
A pipeline-friendly request
curl -fsS 'https://resolvify.xyz/api/v1/search?domain=example.com&format=txt&view=simple&limit=1000'

Every format uses the same pagination. Check X-Total-Count and X-Total-Pages response headers when working with text output. Request subsequent pages to collect the complete available dataset.

06 / THE DETAILS

Open access. A fair share.

A generous daily allowance keeps Resolvify useful for everyone. The website, API, and all response formats share one allowance.

1,000/ day

Per client IP. Resets at midnight UTC.

30/ minute

A short burst limit to keep requests smooth.

24hours

Fresh subdomain cache lifetime.

Cache hits and admitted invalid requests still count as requests. IPv6 addresses are grouped by /64 network, and people on a shared connection may share an allowance. Shared service capacity protections can temporarily pause lookups even when your own allowance remains. When a limit is reached, wait for the time indicated by Retry-After; do not retry immediately.

Rate limit response headers · example
X-RateLimit-Limit: 1000
X-RateLimit-Remaining: 999
X-RateLimit-Reset: 1793145600

# HTTP 429 also includes:
Retry-After: 60
BUILT FOR REPEATED LOOKUPS

Repeated searches reuse the same cached dataset. Empty search results are cached for ten minutes. If a fresh subdomain lookup is temporarily unavailable, a cached dataset up to seven days old may be returned with stale: true. DNS results use a 30–300 second fresh cache based on record TTLs, with up to one hour of fallback. An unavailable lookup without a cached result returns an error, never invented results.

07 / THE DETAILS

Errors you can work with.

Use the HTTP status to choose your next step. Error responses include a machine-readable code, a readable message, and a requestId also returned in X-Request-ID.

HTTP status codes
StatusWhat happenedNext step
400The domain or query parameters are invalid.Check the domain, format, view, and pagination.
422The dataset exceeds the search size limit.This domain is too large for a single search.
429A daily, burst, or service protection limit was reached.Wait for Retry-After before retrying.
503Search is in progress, shared capacity is reached, or a lookup is unavailable or timed out.Honor Retry-After when present, then retry with backoff.
Example error · JSON
{
  "error": {
    "code": "INVALID_DOMAIN",
    "message": "Enter an apex domain, such as example.com, without a URL or path."
  },
  "requestId": "6ca6f0f5-6ef8-4b6f-b5d0-1ac54a79b700"
}
THAT’S THE WHOLE SETUP.

Go uncover something.

Your next discovery starts with a domain.

Open domain explorer