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/isitdns-net:isitdns-net-api"
All apis
curl "https://apis.io/api/v1/apis?limit=25"
Calls without X-API-Key need no key. Calls with it need a paid plan — get a key.
Get an API key
Free tier, no form to fill in. Signing in shares your email address with us — we
store it to create your key and to recognise you if you sign in with another
provider. See our Privacy Policy and
Terms.
A second provider on the same verified email joins the account you already have.
openapi: 3.1.0
info:
title: isitdns API
version: '2026-11-12'
description: 'GENERATED FROM DOCUMENTATION by API Evangelist on 2026-11-12: 12 operation(s) read from 9 public documentation page(s) (each operation
names its page in x-source). This is not the provider''s published contract; isitdns has published no machine-readable contract that the pipeline
could find. Engine: local.'
x-evidence-tiers:
code-example: 3
documentation: 9
pages-with-code: 9
pages-read: 9
x-generated-from: documentation
x-provenance: generated
x-authored-by: API Evangelist
x-generated: '2026-11-12'
x-generator: generate-contract-from-docs.py
x-engine: local
x-sources:
- https://isitdns.net/api/openapi.json
- https://isitdns.net/wiki/security/ksk-roll-2026-reference
- https://isitdns.net/wiki/dig/dig-examples
- https://isitdns.net/wiki/reference/outlook-2026-11-12
- https://isitdns.net/wiki/security/dnssec-troubleshooting
- https://isitdns.net/wiki/security/dot-doh
- https://isitdns.net/wiki/security/ddns
- https://isitdns.net/wiki/security/extended-dns-errors
- https://isitdns.net/agents
paths:
/api/check:
post:
operationId: post_api_check
tags:
- Api
summary: What eleven DNS checks found for a domain, or for the zone a hostname sits in
x-source: https://isitdns.net/api/openapi.json
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/PostApiCheckRequest'
responses:
'201':
description: Success (status as documented)
content:
application/json:
schema:
$ref: '#/components/schemas/PostApiCheckResponse'
x-evidence:
kind: documentation
/api/dnssec-chain:
get:
operationId: get_api_dnssec_chain
tags:
- Api
summary: DNSSEC chain
description: Retrieve the DNSSEC chain for a given name.
x-source: https://isitdns.net/wiki/reference/outlook-2026-11-12
parameters:
- name: name
in: query
required: true
schema:
type: string
description: The DNS name to retrieve DNSSEC chain for.
- name: type
in: query
required: true
schema:
type: string
description: The DNS record type.
responses:
'200':
description: Success (status as documented)
x-evidence:
kind: documentation
/api/query:
get:
operationId: get_api_query
tags:
- Api
summary: Ask a public resolver, or any public address, for a record
x-source: https://isitdns.net/api/openapi.json
parameters:
- name: name
in: query
required: true
schema:
type: string
- name: type
in: query
required: false
schema:
type: string
description: Record type, e.g. A, MX, TXT, DS, HTTPS, or TYPE<n>
- name: resolver
in: query
required: false
schema:
type: string
description: A board resolver id (cloudflare, google, quad9, opendns, adguard, ...), its address or host name (8.8.8.8, dns.google), "all"
for cloudflare, google, quad9 and adguard side by side, or any public IP address. With "all", a row the requested transport cannot reach
is asked over one it can (tcp53, dot, doh), and transportUsed names it; over udp53 such a row is not asked.
- name: ip
in: query
required: false
schema:
type: string
description: Up to 6 public addresses, comma separated, asked in place of resolver.
- name: transport
in: query
required: false
schema:
type: string
description: doh, dot and tcp53 are asked from the edge; udp53 from a probe, theoracle (Phoenix) unless from names a region
- name: dnssec
in: query
required: false
schema:
type: boolean
description: Set DO and read AD; dnssec=0 turns it off
- name: cd
in: query
required: false
schema:
type: boolean
description: Set CD (checking disabled)
- name: ecs
in: query
required: false
schema:
type: string
description: EDNS Client Subnet, CIDR, e.g. 192.0.2.0/24
- name: norec
in: query
required: false
schema:
type: boolean
description: Clear RD, like dig +norec
- name: nsid
in: query
required: false
schema:
type: boolean
- name: family
in: query
required: false
schema:
type: string
description: 'Address family dialled over dot, tcp53 and udp53 (both: a row per family the resolver has an address in); over DoH the family
is not chosen'
- name: from
in: query
required: false
schema:
type: string
description: 'Ask over Do53/UDP from the probe in this region (no other transport): north-america is theoracle (Phoenix), europe is thewizard
(Amsterdam)'
- name: follow
in: query
required: false
schema:
type: boolean
description: 'Also walk the CNAME chain from the name, hop by hop, to its addresses: each hop asked for CNAME at Cloudflare''s DoH from
the edge. The chain is the response''s follow, beside results; the text form prints it after the dig. Nothing is walked for a refused
name.'
responses:
'200':
description: Success (status as documented)
content:
application/json:
schema:
$ref: '#/components/schemas/GetApiQueryResponse'
x-evidence:
kind: documentation
post:
operationId: post_api_query
tags:
- Api
summary: The same query as a JSON body
x-source: https://isitdns.net/api/openapi.json
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/PostApiQueryRequest'
responses:
'201':
description: Success (status as documented)
content:
application/json:
schema:
$ref: '#/components/schemas/PostApiQueryResponse'
x-evidence:
kind: documentation
/api/status:
get:
operationId: get_api_status
tags:
- Api
summary: For agents
x-source: https://isitdns.net/agents
responses:
'200':
description: Success (status as documented)
x-evidence:
kind: documentation
/api/sweep:
get:
operationId: get_api_sweep
tags:
- Api
summary: the zone's servers
description: Sweep zone servers for specified names and record types.
x-source: https://isitdns.net/wiki/reference/outlook-2026-11-12
parameters:
- name: domain
in: query
required: true
schema:
type: string
description: Domain to sweep.
- name: names
in: query
required: true
schema:
type: string
description: Comma‑separated list of name prefixes (URL‑encoded).
- name: types
in: query
required: true
schema:
type: string
description: Comma‑separated list of DNS record types to query (URL‑encoded).
responses:
'200':
description: Success (status as documented)
x-evidence:
kind: documentation
post:
operationId: post_api_sweep
tags:
- Api
summary: Ask each authoritative nameserver of a zone every name x type, recursion off, widen on evidence, and compare
x-source: https://isitdns.net/api/openapi.json
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/PostApiSweepRequest'
responses:
'201':
description: Success (status as documented)
content:
application/json:
schema:
$ref: '#/components/schemas/PostApiSweepResponse'
x-evidence:
kind: documentation
/api/trace:
get:
operationId: get_api_trace
tags:
- Api
summary: delegation
description: Trace DNS delegation for a name.
x-source: https://isitdns.net/wiki/reference/outlook-2026-11-12
parameters:
- name: name
in: query
required: true
schema:
type: string
description: The DNS name to trace.
- name: type
in: query
required: true
schema:
type: string
description: The DNS record type.
responses:
'200':
description: Success (status as documented)
x-evidence:
kind: documentation
post:
operationId: post_api_trace
tags:
- Api
summary: Walk the delegation from the root, like dig +trace
x-source: https://isitdns.net/api/openapi.json
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/PostApiTraceRequest'
responses:
'201':
description: Success (status as documented)
content:
application/json:
schema:
$ref: '#/components/schemas/PostApiTraceResponse'
x-evidence:
kind: documentation
/cdn-cgi/trace:
get:
operationId: get_cdn_cgi_trace
tags:
- Cdn Cgi
summary: GET /cdn-cgi/trace
x-source: https://isitdns.net/wiki/security/ddns
responses:
'200':
description: Success (status as documented)
x-evidence:
kind: code-example
language: curl
snippet: "curl -s https://cloudflare.com/cdn-cgi/trace , or your router's WAN status page). If they don't match, the client didn't run\
\ or its last update failed. Providers that expose a DNS API update the record with one call, for example Cloudflare's PATCH DNS record\
\ endpoint against a zone-scoped token. \n Things that go wrong # \n Stale record. The client missed an update (crashed, offline, expired\
\ credent"
/dns-query:
get:
operationId: get_dns_query
tags:
- Dns Query
summary: GET /dns-query
x-source: https://isitdns.net/wiki/dig/dig-examples
responses:
'200':
description: Success (status as documented)
x-evidence:
kind: code-example
language: curl
snippet: "curl -s -H 'accept: application/dns-json' 'https://cloudflare-dns.com/dns-query?name= not-a-real-website.example &type= A '\
\ \n copy {\n \"Status\": 3,\n \"AD\": true,\n \"Question\": [{\"name\": \" not-a-real-website.example \", \"type\": 1}],\n \"Authority\"\
: [{\"name\": \"\", \"type\": 6, \"TTL\": 86400,\n \"data\": \" a.root-servers.net. nstld.verisign-grs.com. 2026090200 1800 900 604800\
\ 86400\"}]\n} \n \"Status\": 3 is NXDOMAIN"
/root-anchors/root-anchors.xml:
get:
operationId: get_root_anchors_root_anchors_xml
tags:
- Root Anchors
summary: GET /root-anchors/root-anchors.xml
x-source: https://isitdns.net/wiki/security/ksk-roll-2026-reference
responses:
'200':
description: Success (status as documented)
x-evidence:
kind: code-example
language: curl
snippet: "curl -s https://data.iana.org/root-anchors/root-anchors.xml \n copy <KeyDigest id=\"Klajeyz\" validFrom=\"2017-02-02T00:00:00+00:00\"\
>\n <KeyTag> 20326 </KeyTag>\n ...\n<KeyDigest id=\"Kmyv6jo\" validFrom=\"2024-07-18T00:00:00+00:00\">\n <KeyTag> 38696 </KeyTag>\n\
\ ... \n Your resolver must trust 38696 , which has signed the root alone since 2026-10-11. The root still publishes both keys; the\
\ two with flags 257 a"
components:
schemas:
PostApiCheckRequest:
type: object
properties:
name:
type: string
from:
type: string
required:
- name
PostApiCheckResponse:
type: object
properties:
'200':
type: string
description: Each check with what it found
GetApiQueryResponse:
type: object
properties:
'200':
type: string
description: The answer from each resolver asked
'400':
type: string
description: The name, type, transport or an address did not validate
'429':
type: string
description: Rate limited
PostApiQueryRequest:
type: object
properties:
name:
type: string
type:
type: string
resolver:
type: string
ip:
type: string
transport:
type: string
dnssec:
type: boolean
cd:
type: boolean
ecs:
type: string
norec:
type: boolean
nsid:
type: boolean
family:
type: string
from:
type: string
follow:
type: boolean
required:
- name
PostApiQueryResponse:
type: object
properties:
'200':
type: string
description: 'See GET. JSON, or the same dig-shaped text when this request states Accept: text/plain.'
PostApiSweepRequest:
type: object
properties:
domain:
type: string
names:
type: string
types:
type: string
required:
- domain
PostApiSweepResponse:
type: object
properties:
'200':
type: string
description: Each asked address's answer per name and type (an address never asked reads not_asked), the addresses not asked and the
questions not widened, the flags where they differ, the parent's NS and DS, certificate readiness, and the vantage.
PostApiTraceRequest:
type: object
properties:
name:
type: string
type:
type: string
required:
- name
PostApiTraceResponse:
type: object
properties:
'200':
type: string
description: Every hop, root to authority, with the final answer
tags:
- name: Api
- name: Cdn Cgi
- name: Dns Query
- name: Root Anchors