Every API here is available over the APIs.io API and to AI agents over MCP.
MCP server
One button, every client — Claude, Cursor, VS Code and the rest.
https://apis.io/mcp
Tools for apis
7 MCP tools reach this
find_apisBrowse and filter every API in the catalog.
get_api_artifactsOne API's artifacts, grouped by type.
get_openapiThe primary OpenAPI for this API.
find_similar_apisAPIs that look like this one.
apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.
resolveTurn a domain, URL or GitHub org into the provider it belongs to.
find_cohortsEvery scored population of providers in the catalog.
All 92 tools →
Call it yourself
curl for this page
This API
curl "https://apis.io/api/v1/apis/done-dns-lookup-api"
All apis
curl "https://apis.io/api/v1/apis?limit=25"
Discovery needs no key. Ratings and market analysis are Pro.
Get an API key
Free tier, no email required.
A second provider on the same verified email joins the account you already have.
openapi: 3.2.0
info:
title: DNS & WHOIS Lookup dns lookup API
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
servers:
- url: https://dns-whois-lookup.underscoredone.com
description: Production
tags:
- name: dns lookup
paths:
/lookup:
post:
tags:
- dns lookup
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:
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
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
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'
securitySchemes:
siwx:
type: apiKey
in: header
name: SIGN-IN-WITH-X
description: CAIP-122 wallet signature for repeat access after payment
x-payment-accepts:
- scheme: exact
network: eip155:8453
payTo: '0xE9740820225B3918b4ddd1292C7cA4Ca0e2C2F08'
asset: '0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913'
- scheme: exact
network: solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp
payTo: 8ugAWAXDB8V18kiUrGZTq1oMvU3C6Fxs8hfC6rvzQT3b
asset: EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v