JSON
Structured, predictable, ready for your application. Includes pagination and cache metadata.
application/jsonA small API with a lot to uncover. Discover subdomains, resolve DNS records, and put domain intelligence to work.
Start with a domain. Get a clean, deduplicated list of observed hostnames, with the most recently seen names first.
https://resolvify.xyz/api/v1/searchPUBLICcurl --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.
Try a real request right here. No keys to find, no environment to set up.
{
"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
}
]
}https://resolvify.xyz/api/v1/search?domain=example.com&format=json&view=detailedOne hostname per result. Certificate observations are grouped together, so repeated renewals never clutter the list.
/api/v1/search| Parameter | Type / default | Description |
|---|---|---|
domainrequired | string | A registrable apex domain, such as example.com or example.co.uk. International domains are supported. |
format | json | json, txt or xml. |
view | detailed | detailed includes observation metadata. simple returns names only. |
page | integer · 1 | Page number, from 1 to 1,000,000. |
limit | integer · 100 | Results per page, from 1 to 1,000. Pagination happens after deduplication and sorting. |
Use each parameter once. Unknown or repeated parameters return 400. Domains should be plain hostnames, without a URL scheme, path, or wildcard.
lastSeen is the latest certificate observation; firstSeen is the earliest in the returned dataset. certificateCount counts distinct certificates. A wildcard observation is grouped under its base hostname and marked wildcard: true. These are historical observations, so a discovered hostname may no longer resolve.
| Field | Meaning |
|---|---|
total, totalPages | Unique names across the dataset and the number of pages. |
queriedAt | ISO 8601 time the dataset was fetched, in UTC. |
cached | Whether a previously fetched dataset served this request. |
stale | Whether an older cached dataset was served while a fresh lookup was in progress or unavailable. |
issuer, expiresAt | Optional certificate details from the most recent observation. |
Resolve a domain or subdomain over DNS. Use this endpoint when you need DNS answers rather than historical hostname discovery.
/api/v1/resolve| Parameter | Default | Description |
|---|---|---|
domainrequired | — | The domain or subdomain to resolve. |
type | A | A, AAAA, MX, NS, TXT, CNAME, SOA or CAA. |
format | json | json, txt or xml. |
view | detailed | detailed returns record objects. simple returns record values only. |
{
"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.
Keep structured metadata for an application, or take just the names for a shell pipeline.
Structured, predictable, ready for your application. Includes pagination and cache metadata.
application/jsonNames only with view=simple. Use detailed mode for tab-separated observation fields.
text/plainStructured names and metadata, ready for XML tools and existing integrations.
application/xmlcurl -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.
A generous daily allowance keeps Resolvify useful for everyone. The website, API, and all response formats share one allowance.
Per client IP. Resets at midnight UTC.
A short burst limit to keep requests smooth.
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.
X-RateLimit-Limit: 1000
X-RateLimit-Remaining: 999
X-RateLimit-Reset: 1793145600
# HTTP 429 also includes:
Retry-After: 60Repeated 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.
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.
| Status | What happened | Next step |
|---|---|---|
| 400 | The domain or query parameters are invalid. | Check the domain, format, view, and pagination. |
| 422 | The dataset exceeds the search size limit. | This domain is too large for a single search. |
| 429 | A daily, burst, or service protection limit was reached. | Wait for Retry-After before retrying. |
| 503 | Search is in progress, shared capacity is reached, or a lookup is unavailable or timed out. | Honor Retry-After when present, then retry with backoff. |
{
"error": {
"code": "INVALID_DOMAIN",
"message": "Enter an apex domain, such as example.com, without a URL or path."
},
"requestId": "6ca6f0f5-6ef8-4b6f-b5d0-1ac54a79b700"
}Your next discovery starts with a domain.