DNS & WHOIS Lookup
Look up all 13 DNS record types plus full WHOIS registration data for up to 10 domains in one call. Send up to 10 domain names and get back every DNS record type (A, AAAA, MX, CNAME, TXT, NS, PTR, SOA, SRV, CAA, NAPTR, DS, TLSA) plus the full WHOIS registration profile (registrar, dates, contacts, status, nameservers) for each one. URLs are accepted and automatically stripped down to the bare domain. Duplicate domains are quietly removed before processing. Results come back as one flat row per domain, ready to drop into a spreadsheet, database, or pipeline. Pay-per-call at $0.01 USDC over x402 on Base or Solana — no account, no API key. OpenAPI 3.1.0; 1 operation(s): POST /lookup.
Documentation
Specifications
Other Resources
openapi: 3.1.0
info:
title: DNS & WHOIS Lookup
description: Send up to 10 domain names and get back every DNS record type (A, AAAA, MX, CNAME, TXT, NS, PTR, SOA, SRV,
CAA, NAPTR, DS, TLSA) plus the full WHOIS registration profile (registrar, dates, contacts, status, nameservers) for each
one. URLs are accepted and automatically stripped down to the bare domain. Duplicate domains are quietly removed before
processing. Results come back as one flat row per domain, ready to drop into a spreadsheet, database, or pipeline.
version: 1.0.0
contact:
name: _done
url: https://forms.gle/5KzuSFH7p8hHtDmz7
email: info@underscoredone.com
x-openapi-url: https://dns-whois-lookup.underscoredone.com/openapi.json
x-logo:
url: https://underscoredone.com/logo.png
altText: _done
x-guidance: POST an array of domain names (or full URLs) under the key 'domains'. You may send between 1 and 10 entries.
The response is an array of objects, one per unique domain, each containing fields prefixed with 'dns_' (all 13 record
types) and 'whois_' (full registration data). All fields are always present; empty string means no record found or data
not available. Multiple values within a single record type are joined with ' | '. MX records are prefixed with their priority
number. SOA is returned as a single human-readable string. DS and TLSA are attempted but silently left empty if unsupported.
Raise a 400 error back to the caller if the API returns a 400. Never pass more than 10 domains in one call; split larger
lists into batches.
x-ai-instructions: POST an array of domain names (or full URLs) under the key 'domains'. You may send between 1 and 10 entries.
The response is an array of objects, one per unique domain, each containing fields prefixed with 'dns_' (all 13 record
types) and 'whois_' (full registration data). All fields are always present; empty string means no record found or data
not available. Multiple values within a single record type are joined with ' | '. MX records are prefixed with their priority
number. SOA is returned as a single human-readable string. DS and TLSA are attempted but silently left empty if unsupported.
Raise a 400 error back to the caller if the API returns a 400. Never pass more than 10 domains in one call; split larger
lists into batches.
x-provider: _done — single-purpose utility APIs for developers and AI agents. Pay per call with USDC on Base Mainnet or
Solana Mainnet.
x-pricing:
model: pay-per-call
currency: USDC
network: Base Mainnet or Solana Mainnet
price: $0.01
x-keywords:
- network
- dns
- whois
- domain lookup
- dns records
- domain audit
- mx record
- spf dkim dmarc
- domain expiry
- migration verification
- infrastructure check
- bulk domain
- utility
- api
- ai-agent
- pay-per-call
- usdc
- x402
x-category: dns lookup
x-provider-url: https://underscoredone.com
x-agentcash-auth:
mode: paid
x-402:
price: $0.01
network: eip155:8453
asset: '0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913'
pay_to: '0xE9740820225B3918b4ddd1292C7cA4Ca0e2C2F08'
facilitator: https://api.cdp.coinbase.com/platform/v2/x402
scheme: exact
description: Send up to 10 domain names and get back every DNS record type (A, AAAA, MX, CNAME, TXT, NS, PTR, SOA, SRV,
CAA, NAPTR, DS, TLSA) plus the full WHOIS registration profile (registrar, dates, contacts, status, nameservers) for
each one. URLs are accepted and automatically stripped down to the bare domain. Duplicate domains are quietly removed
before processing. Results come back as one flat row per domain, ready to drop into a spreadsheet, database, or pipeline.
mime_type: application/json
networks:
- network: eip155:8453
asset: '0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913'
pay_to: '0xE9740820225B3918b4ddd1292C7cA4Ca0e2C2F08'
- network: solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp
asset: EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v
pay_to: 8ugAWAXDB8V18kiUrGZTq1oMvU3C6Fxs8hfC6rvzQT3b
paths:
/lookup:
post:
tags:
- dns lookup
- whois lookup
- dns
- whois
- domain lookup
- dns records
- nameservers
- mx records
- registrar lookup
- rdap
- domain registration
- txt records
- a record lookup
- domain intelligence
- bulk dns
summary: Get all DNS records and WHOIS data for up to 10 domains at once
description: Look up all DNS record types and WHOIS registration data for up to 10 domains at once.
operationId: handler_lookup_post
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/Request'
required: true
responses:
'200':
description: Successful response
content:
application/json:
schema:
$ref: '#/components/schemas/Response'
examples:
success:
summary: Successful response
value:
api_version: 1.0.0
results:
- domain: onescales.com
checkedAt: '2026-06-15T01:45:08.607Z'
dns_a: 23.227.38.65
dns_aaaa: ''
dns_mx: 5 alt2.aspmx.l.google.com | 1 aspmx.l.google.com | 10 alt3.aspmx.l.google.com | 10 alt4.aspmx.l.google.com
| 5 alt1.aspmx.l.google.com
dns_cname: ''
dns_txt: openai-domain-verification=dv-Y9cDXv64Bj8Z6h43mpki1rgt | v=spf1 include:_spf.google.com ~all
dns_ns: carter.ns.cloudflare.com | bonnie.ns.cloudflare.com
dns_ptr: ''
dns_soa: mname=bonnie.ns.cloudflare.com rname=dns.cloudflare.com serial=2406862386 refresh=10000 retry=2400
expire=604800 minttl=1800
dns_srv: ''
dns_caa: ''
dns_naptr: ''
dns_ds: ''
dns_tlsa: ''
whois_registrar: Cloudflare, Inc.
whois_iana_id: '1910'
whois_registrar_url: http://www.cloudflare.com
whois_registrar_abuse_email: registrar-abuse@cloudflare.com
whois_registrar_abuse_phone: '+1.6503198930'
whois_created: '2022-10-11T10:20:28Z'
whois_expires: '2028-10-11T10:20:28Z'
whois_updated: '2023-02-13T02:38:06Z'
whois_status: clientTransferProhibited
whois_nameservers: bonnie.ns.cloudflare.com | carter.ns.cloudflare.com
whois_registrant_name: ''
whois_registrant_org: ''
whois_registrant_address: ''
whois_registrant_country: ''
whois_registrant_phone: ''
whois_admin_name: ''
whois_admin_org: ''
whois_admin_email: ''
whois_admin_country: ''
'422':
description: Unprocessable — a required field is missing or the wrong type. Check the detail field for specifics.
content:
application/json:
schema:
type: object
properties:
detail:
type: array
'402':
description: Payment required. Send a signed USDC payment on Base Mainnet or Solana Mainnet using the x402 protocol.
headers:
X-Payment-Response:
description: x402 payment challenge — base64-encoded JSON with payment details.
schema:
type: string
'400':
description: Bad request — your input failed validation or could not be processed. Check the detail field for specifics.
content:
application/json:
schema:
type: object
properties:
detail:
type: string
x-ai-instructions: POST an array of domain names (or full URLs) under the key 'domains'. You may send between 1 and
10 entries. The response is an array of objects, one per unique domain, each containing fields prefixed with 'dns_'
(all 13 record types) and 'whois_' (full registration data). All fields are always present; empty string means no
record found or data not available. Multiple values within a single record type are joined with ' | '. MX records
are prefixed with their priority number. SOA is returned as a single human-readable string. DS and TLSA are attempted
but silently left empty if unsupported. Raise a 400 error back to the caller if the API returns a 400. Never pass
more than 10 domains in one call; split larger lists into batches.
x-guidance: POST an array of domain names (or full URLs) under the key 'domains'. You may send between 1 and 10 entries.
The response is an array of objects, one per unique domain, each containing fields prefixed with 'dns_' (all 13 record
types) and 'whois_' (full registration data). All fields are always present; empty string means no record found or
data not available. Multiple values within a single record type are joined with ' | '. MX records are prefixed with
their priority number. SOA is returned as a single human-readable string. DS and TLSA are attempted but silently left
empty if unsupported. Raise a 400 error back to the caller if the API returns a 400. Never pass more than 10 domains
in one call; split larger lists into batches.
x-payment-info:
price:
fixed:
mode: fixed
currency: USD
amount: '0.01'
protocols:
- x402: {}
components:
schemas:
DomainResult:
properties:
domain:
type: string
title: Domain
description: The bare domain name that was looked up.
checkedAt:
type: string
title: Checkedat
description: The date and time this lookup was performed, in UTC.
dns_a:
type: string
title: Dns A
description: IPv4 address records. Multiple values joined with ' | '.
default: ''
dns_aaaa:
type: string
title: Dns Aaaa
description: IPv6 address records. Multiple values joined with ' | '.
default: ''
dns_mx:
type: string
title: Dns Mx
description: Mail server records, each prefixed with its priority number. Multiple values joined with ' | '.
default: ''
dns_cname:
type: string
title: Dns Cname
description: Canonical name alias records. Multiple values joined with ' | '.
default: ''
dns_txt:
type: string
title: Dns Txt
description: Text records (SPF, DKIM, domain verification, etc). Multiple values joined with ' | '.
default: ''
dns_ns:
type: string
title: Dns Ns
description: Name server records. Multiple values joined with ' | '.
default: ''
dns_ptr:
type: string
title: Dns Ptr
description: Reverse DNS pointer records. Multiple values joined with ' | '.
default: ''
dns_soa:
type: string
title: Dns Soa
description: Start of Authority record as a single human-readable string.
default: ''
dns_srv:
type: string
title: Dns Srv
description: Service locator records. Multiple values joined with ' | '.
default: ''
dns_caa:
type: string
title: Dns Caa
description: Certification Authority Authorization records. Multiple values joined with ' | '.
default: ''
dns_naptr:
type: string
title: Dns Naptr
description: Naming Authority Pointer records. Multiple values joined with ' | '.
default: ''
dns_ds:
type: string
title: Dns Ds
description: Delegation Signer records for DNSSEC. Multiple values joined with ' | '.
default: ''
dns_tlsa:
type: string
title: Dns Tlsa
description: TLS Authentication records. Multiple values joined with ' | '.
default: ''
whois_registrar:
type: string
title: Whois Registrar
description: The company that registered this domain.
default: ''
whois_iana_id:
type: string
title: Whois Iana Id
description: The registrar's IANA identifier number.
default: ''
whois_registrar_url:
type: string
title: Whois Registrar Url
description: The registrar's website.
default: ''
whois_registrar_abuse_email:
type: string
title: Whois Registrar Abuse Email
description: The registrar's abuse contact email.
default: ''
whois_registrar_abuse_phone:
type: string
title: Whois Registrar Abuse Phone
description: The registrar's abuse contact phone number.
default: ''
whois_created:
type: string
title: Whois Created
description: When this domain was first registered.
default: ''
whois_expires:
type: string
title: Whois Expires
description: When this domain registration expires.
default: ''
whois_updated:
type: string
title: Whois Updated
description: When this domain registration was last updated.
default: ''
whois_status:
type: string
title: Whois Status
description: The current status flags on the domain registration.
default: ''
whois_nameservers:
type: string
title: Whois Nameservers
description: The nameservers listed in the WHOIS record. Multiple values joined with ' | '.
default: ''
whois_registrant_name:
type: string
title: Whois Registrant Name
description: The name of the person or entity that registered the domain.
default: ''
whois_registrant_org:
type: string
title: Whois Registrant Org
description: The organisation that registered the domain.
default: ''
whois_registrant_address:
type: string
title: Whois Registrant Address
description: The registrant's street address.
default: ''
whois_registrant_country:
type: string
title: Whois Registrant Country
description: The registrant's country.
default: ''
whois_registrant_phone:
type: string
title: Whois Registrant Phone
description: The registrant's phone number.
default: ''
whois_admin_name:
type: string
title: Whois Admin Name
description: The name of the administrative contact for this domain.
default: ''
whois_admin_org:
type: string
title: Whois Admin Org
description: The organisation of the administrative contact.
default: ''
whois_admin_email:
type: string
title: Whois Admin Email
description: The email address of the administrative contact.
default: ''
whois_admin_country:
type: string
title: Whois Admin Country
description: The country of the administrative contact.
default: ''
type: object
required:
- domain
- checkedAt
title: DomainResult
HTTPValidationError:
properties:
detail:
items:
$ref: '#/components/schemas/ValidationError'
type: array
title: Detail
type: object
title: HTTPValidationError
Request:
properties:
domains:
items:
type: string
type: array
title: Domains
description: A list of domain names or full web addresses to look up. You can pass bare domains like 'example.com',
or full addresses like 'https://www.example.com/page' — the system will automatically extract just the domain.
Send between 1 and 10 entries per request.
type: object
required:
- domains
title: Request
example:
domains:
- onescales.com
- hillms.com
- underscore.com
Response:
properties:
api_version:
type: string
title: Api Version
description: The version of this API.
default: 1.0.0
results:
items:
$ref: '#/components/schemas/DomainResult'
type: array
title: Results
description: One result object per unique domain, containing all DNS records and WHOIS registration data.
type: object
required:
- results
title: Response
example:
api_version: 1.0.0
results:
- checkedAt: '2026-06-15T01:45:08.607Z'
dns_a: 23.227.38.65
dns_aaaa: ''
dns_caa: ''
dns_cname: ''
dns_ds: ''
dns_mx: 1 aspmx.l.google.com | 5 alt1.aspmx.l.google.com | 5 alt2.aspmx.l.google.com | 10 alt3.aspmx.l.google.com
| 10 alt4.aspmx.l.google.com
dns_naptr: ''
dns_ns: bonnie.ns.cloudflare.com | carter.ns.cloudflare.com
dns_ptr: ''
dns_soa: mname=bonnie.ns.cloudflare.com rname=dns.cloudflare.com serial=2406862386 refresh=10000 retry=2400 expire=604800
minttl=1800
dns_srv: ''
dns_tlsa: ''
dns_txt: openai-domain-verification=dv-Y9cDXv64Bj8Z6h43mpki1rgt | v=spf1 include:_spf.google.com ~all
domain: onescales.com
whois_admin_country: ''
whois_admin_email: ''
whois_admin_name: ''
whois_admin_org: ''
whois_created: '2022-10-11T10:20:28Z'
whois_expires: '2028-10-11T10:20:28Z'
whois_iana_id: '1910'
whois_nameservers: bonnie.ns.cloudflare.com | carter.ns.cloudflare.com
whois_registrant_address: ''
whois_registrant_country: ''
whois_registrant_name: ''
whois_registrant_org: ''
whois_registrant_phone: ''
whois_registrar: Cloudflare, Inc.
whois_registrar_abuse_email: registrar-abuse@cloudflare.com
whois_registrar_abuse_phone: '+1.6503198930'
whois_registrar_url: http://www.cloudflare.com
whois_status: clientTransferProhibited
whois_updated: '2023-02-13T02:38:06Z'
ValidationError:
properties:
loc:
items:
anyOf:
- type: string
- type: integer
type: array
title: Location
msg:
type: string
title: Message
type:
type: string
title: Error Type
input:
title: Input
ctx:
type: object
title: Context
type: object
required:
- loc
- msg
- type
title: ValidationError
securitySchemes:
siwx:
type: apiKey
in: header
name: SIGN-IN-WITH-X
description: CAIP-122 wallet signature for repeat access after payment
servers:
- url: https://dns-whois-lookup.underscoredone.com
description: Production
tags:
- name: dns lookup
- name: whois lookup
- name: dns
- name: whois
- name: domain lookup
- name: dns records
- name: nameservers
- name: mx records
- name: registrar lookup
- name: rdap
- name: domain registration
- name: txt records
- name: a record lookup
- name: domain intelligence
- name: bulk dns
x402Version: 2
x-payment-accepts:
- scheme: exact
network: eip155:8453
payTo: '0xE9740820225B3918b4ddd1292C7cA4Ca0e2C2F08'
asset: '0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913'
- scheme: exact
network: solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp
payTo: 8ugAWAXDB8V18kiUrGZTq1oMvU3C6Fxs8hfC6rvzQT3b
asset: EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v