IntoDNS.ai Dns API

DNS lookup and validation

GitHub OpenAPI

Operations 5

GET /dns/lookup DNS record lookup #
GET /dns/dnssec DNSSEC validation #
GET /dns/propagation DNS propagation check #
GET /dns/tlsa DANE/TLSA check #
POST /dns/tlsa/generate Generate a DANE TLSA record #

Work with this as data

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/intodns-ai:intodns-ai-dns-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 Specification

intodns-ai-dns-api-openapi.yml Raw ↑
openapi: 3.2.0
info:
  title: IntoDNS.AI Dns API
  description: Public DNS security and email deliverability analysis API. Analyze SPF, DKIM, DMARC, DNSSEC, MTA-STS, BIMI, SMTP STARTTLS, FCrDNS, blacklists, and more with deterministic results and optional AI explanations.
  version: 2.0.0
  contact:
    name: IntoDNS.AI Support
    url: https://intodns.ai
    email: support@cobytes.com
  license:
    name: Proprietary
    url: https://intodns.ai/terms
servers:
- url: https://intodns.ai/api
  description: Production server
security: []
tags:
- name: DNS
  description: DNS lookup and validation
paths:
  /dns/lookup:
    get:
      tags:
      - DNS
      summary: DNS record lookup
      description: Query DNS records for a domain. Supports all major record types.
      operationId: dnsLookup
      parameters:
      - name: domain
        in: query
        required: true
        description: Domain name to query
        schema:
          type: string
          example: example.com
      - name: type
        in: query
        required: false
        description: 'DNS record type (default: all)'
        schema:
          type: string
          enum:
          - A
          - AAAA
          - MX
          - TXT
          - NS
          - SOA
          - CAA
          - CNAME
          - PTR
          example: A
      responses:
        '200':
          description: DNS records retrieved
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/DNSLookupResult'
        '400':
          description: Invalid request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
  /dns/dnssec:
    get:
      tags:
      - DNS
      summary: DNSSEC validation
      description: Validate DNSSEC chain of trust for a domain.
      operationId: dnssecValidation
      parameters:
      - name: domain
        in: query
        required: true
        description: Domain to validate
        schema:
          type: string
          example: example.com
      responses:
        '200':
          description: DNSSEC validation result
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/DNSSECResult'
        '400':
          description: Invalid request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
  /dns/propagation:
    get:
      tags:
      - DNS
      summary: DNS propagation check
      description: 'Check DNS propagation across global nameservers. Each resolver answer is compared as a whole RRset; TTLs are ignored. propagation.percentage is the share of answering resolvers that agree on the most common answer, not coverage: resolversQueried, resolversAnswered and resolversFailed report coverage separately.'
      operationId: dnsPropagation
      parameters:
      - name: domain
        in: query
        required: true
        description: Domain to check
        schema:
          type: string
          example: example.com
      - name: type
        in: query
        required: false
        description: 'Record type (default: A)'
        schema:
          type: string
          enum:
          - A
          - AAAA
          - MX
          - TXT
          example: A
      responses:
        '200':
          description: Propagation check result
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PropagationResult'
  /dns/tlsa:
    get:
      tags:
      - DNS
      summary: DANE/TLSA check
      description: Check SMTP DANE/TLSA records for domain MX hosts.
      operationId: tlsaCheck
      parameters:
      - name: domain
        in: query
        required: true
        description: Domain to check
        schema:
          type: string
          example: example.com
      responses:
        '200':
          description: DANE/TLSA result
          content:
            application/json:
              schema:
                type: object
  /dns/tlsa/generate:
    post:
      tags:
      - DNS
      summary: Generate a DANE TLSA record
      description: Hash a CERTIFICATE or SubjectPublicKeyInfo PUBLIC KEY PEM block into a TLSA record. Private keys and unsupported PEM labels are rejected. Profile 3 1 1 is recommended for SMTP; DANE requires a DNSSEC-signed zone.
      operationId: generateTlsaRecord
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              required:
              - pem
              properties:
                pem:
                  type: string
                  maxLength: 20000
                usage:
                  type: integer
                  enum:
                  - 0
                  - 1
                  - 2
                  - 3
                  default: 3
                selector:
                  type: integer
                  enum:
                  - 0
                  - 1
                  default: 1
                matching:
                  type: integer
                  enum:
                  - 0
                  - 1
                  - 2
                  default: 1
                host:
                  type: string
                  maxLength: 253
                  example: mail.example.com
                port:
                  type: integer
                  minimum: 1
                  maximum: 65535
                  default: 25
      responses:
        '200':
          description: Generated TLSA record, hash, decoded profile, warnings, and DNS entry
          content:
            application/json:
              schema:
                type: object
        '400':
          description: Invalid PEM block or generator input
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
components:
  schemas:
    DNSLookupResult:
      type: object
      properties:
        success:
          type: boolean
        domain:
          type: string
        records:
          type: object
          additionalProperties:
            type: array
            items:
              type: string
        cached:
          type: boolean
        timestamp:
          type: string
          format: date-time
    Error:
      type: object
      properties:
        success:
          type: boolean
          example: false
        error:
          type: object
          properties:
            code:
              type: string
              example: INVALID_DOMAIN
            message:
              type: string
              example: The provided domain is not valid
            details:
              type: string
    DNSSECResult:
      type: object
      properties:
        domain:
          type: string
        signed:
          type: boolean
          description: Whether the domain has DNSKEY records (DNSSEC enabled)
        valid:
          type: boolean
          description: Whether DNSSEC validation passes (AD flag set by resolver)
        chain:
          type: array
          description: DNSKEY and DS records forming the chain of trust
          items:
            type: object
            properties:
              domain:
                type: string
              algorithm:
                type: integer
              digestType:
                type: integer
                description: 0 for DNSKEY, 1=SHA-1, 2=SHA-256, 4=SHA-384 for DS
              digest:
                type: string
              flags:
                type: integer
                description: DNSKEY flags (256=ZSK, 257=KSK)
              protocol:
                type: integer
              publicKey:
                type: string
        nsec3param:
          type: object
          description: NSEC3 parameter check results
          properties:
            exists:
              type: boolean
            hashAlgorithm:
              type: integer
            flags:
              type: integer
            iterations:
              type: integer
            salt:
              type: string
            rfc9276Compliant:
              type: boolean
            issues:
              type: array
              items:
                type: object
        rrsig:
          type: object
          description: RRSIG signature check results
          properties:
            exists:
              type: boolean
            records:
              type: array
              items:
                type: object
                properties:
                  typeCovered:
                    type: string
                  algorithm:
                    type: integer
                  originalTTL:
                    type: integer
                  daysUntilExpiry:
                    type: integer
                  isExpired:
                    type: boolean
            algorithmSecurity:
              type: string
              enum:
              - modern
              - acceptable
              - deprecated
              - insecure
              - unknown
            issues:
              type: array
              items:
                type: object
        errors:
          type: array
          items:
            type: string
    PropagationResult:
      type: object
      properties:
        success:
          type: boolean
        domain:
          type: string
        type:
          type: string
        propagated:
          type: boolean
        servers_checked:
          type: integer
        servers_matching:
          type: integer
        results:
          type: array
          items:
            type: object
            properties:
              server:
                type: string
              location:
                type: string
              value:
                type: array
                items:
                  type: string
              response_time:
                type: integer
  securitySchemes:
    SessionCookie:
      type: apiKey
      in: cookie
      name: __Secure-authjs.session-token
      description: Auth.js JWT session established by signing in at https://intodns.ai/login. On HTTPS the cookie is HttpOnly, Secure, SameSite=Lax, Path=/. Local HTTP development uses authjs.session-token without Secure. Auth.js manages cookies and numbered chunks when needed. This is browser session authentication, not an API key or bearer token; do not construct tokens or share session cookies with AI assistants. OpenAPI 3 represents cookie authentication with type apiKey.
x-access:
  authentication: None for public diagnostics; POST /ai/explain and POST /ai/fix require a signed-in free account using an Auth.js session cookie.
  publicEndpoints: Public DNS, email, blacklist, quick-scan, Everything Report, report snapshot, and record generator endpoints are free and available without signup or API keys for normal diagnostic use. Generous abuse protection may return HTTP 429 with Retry-After for bursts and write-style snapshot creation.
  canonicalApiOrigin: https://intodns.ai/api
  invalidApiOrigins:
  - https://api.intodns.io
  - https://intodns.io/api-docs/v1
  invalidApiExamples:
  - https://api.intodns.io/v1/domain/{domain}
  - https://api.intodns.io/v1/domain/example.com
  llmDiscovery: 'LLM discovery files are static and cacheable: /llms.txt, /llms-full.txt, /llms.json, /llm/api.md.'
  protection: Costly write-style or AI/raw-message endpoints may return HTTP 429 with Retry-After if abuse protection triggers.