IntoDNS.ai Scan API

Domain scanning operations

GitHub OpenAPI

Operations 7

GET /scan/quick Quick domain scan #
GET /scan/nis2 NIS2 quickscan #
POST /scan/deep Deep security scan #
GET /report/everything Everything report #
GET /report/snapshot Create Everything report snapshot (legacy GET compatibility) #
POST /report/snapshot Create Everything report snapshot #
GET /report/snapshot/{snapshotId} Read Everything report snapshot #

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-scan-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-scan-api-openapi.yml Raw ↑
openapi: 3.2.0
info:
  title: IntoDNS.AI Scan 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: Scan
  description: Domain scanning operations
paths:
  /scan/quick:
    get:
      tags:
      - Scan
      summary: Quick domain scan
      description: Perform a fast security overview of a domain covering DNS, email, and basic security checks.
      operationId: quickScan
      parameters:
      - name: domain
        in: query
        required: true
        description: Domain name to scan (e.g., example.com)
        schema:
          type: string
          example: example.com
      responses:
        '200':
          description: Scan completed successfully
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/QuickScanResult'
        '400':
          description: Invalid domain name
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
  /scan/nis2:
    get:
      tags:
      - Scan
      summary: NIS2 quickscan
      description: Compute a NIS2 readiness indicator from the DNS and email layer. Maps the quickscan evidence onto NIS2 Article 21.2 measures (a–j) and returns a weighted 0-100 score, per-measure status, evidence rows, critical gaps, and fix suggestions. Evidence that is not applicable for a given domain (e.g. DNSSEC on a TLD that does not support it) is excluded from the measure's score and reduces the measure's effective weight in the total. The result is a readiness indicator only — full NIS2 compliance also requires audit of web applications, supply chain, organisational processes, and training.
      operationId: nis2Quickscan
      parameters:
      - name: domain
        in: query
        required: true
        description: Domain name to scan (e.g., example.com).
        schema:
          type: string
          example: example.com
      - name: lang
        in: query
        required: false
        description: Language for the standard caveat text. Defaults to English.
        schema:
          type: string
          enum:
          - en
          - nl
          example: en
      responses:
        '200':
          description: NIS2 scorecard returned successfully
          content:
            application/json:
              schema:
                type: object
                properties:
                  domain:
                    type: string
                  scannedAt:
                    type: string
                    format: date-time
                  total:
                    type: integer
                    minimum: 0
                    maximum: 100
                  status:
                    type: string
                    enum:
                    - compliant
                    - partial
                    - non-compliant
                    - unscannable
                  measures:
                    type: array
                    items:
                      type: object
                      properties:
                        id:
                          type: string
                          enum:
                          - a
                          - b
                          - c
                          - d
                          - e
                          - f
                          - g
                          - h
                          - i
                          - j
                        label:
                          type: string
                        description:
                          type: string
                        weight:
                          type: integer
                        score:
                          type: integer
                          minimum: 0
                          maximum: 100
                        status:
                          type: string
                          enum:
                          - pass
                          - warning
                          - fail
                          - not-applicable
                        evidence:
                          type: array
                          items:
                            type: object
                            properties:
                              checkId:
                                type: string
                              label:
                                type: string
                              result:
                                type: string
                                enum:
                                - pass
                                - fail
                                - missing
                                - not-applicable
                              detail:
                                type: string
                        fixes:
                          type: array
                          items:
                            type: string
                  criticalGaps:
                    type: array
                    items:
                      type: string
                      enum:
                      - a
                      - b
                      - c
                      - d
                      - e
                      - f
                      - g
                      - h
                      - i
                      - j
                  caveat:
                    type: string
        '400':
          description: Invalid domain name
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
  /scan/deep:
    post:
      tags:
      - Scan
      summary: Deep security scan
      description: Comprehensive security analysis using Internet.nl infrastructure. This is an asynchronous operation.
      operationId: deepScan
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/DeepScanRequest'
      responses:
        '200':
          description: Scan started successfully
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/DeepScanResponse'
        '400':
          description: Invalid request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
  /report/everything:
    get:
      tags:
      - Scan
      summary: Everything report
      description: Generate a bookmarkable full DNS and email security report as JSON or Markdown. Includes quick scan, DNS records, DNSSEC, SPF lookup graph, DKIM, DMARC, BIMI logo/certificate checks, MTA-STS, SMTP STARTTLS, FCrDNS, blacklists, sender requirements, and web security signals.
      operationId: everythingReport
      parameters:
      - name: domain
        in: query
        required: true
        description: Domain to report on
        schema:
          type: string
          example: example.com
      - name: format
        in: query
        required: false
        description: Response format
        schema:
          type: string
          enum:
          - json
          - markdown
          default: json
      responses:
        '200':
          description: Everything report generated
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/EverythingReport'
            text/markdown:
              schema:
                type: string
  /report/snapshot:
    get:
      tags:
      - Scan
      summary: Create Everything report snapshot (legacy GET compatibility)
      description: Backward-compatible GET variant for existing browser, MCP, and agent clients. New integrations should use POST. Successful responses include Deprecation and Link headers pointing to the canonical POST operation.
      operationId: createReportSnapshotLegacyGet
      deprecated: true
      parameters:
      - name: domain
        in: query
        required: true
        description: Domain to snapshot
        schema:
          type: string
          example: example.com
      - name: format
        in: query
        required: false
        description: Response format
        schema:
          type: string
          enum:
          - json
          - markdown
          default: json
      responses:
        '201':
          description: Report snapshot created
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/EverythingReport'
            text/markdown:
              schema:
                type: string
    post:
      tags:
      - Scan
      summary: Create Everything report snapshot
      description: Canonical method for creating a free fixed Everything Report evidence snapshot with timestamp, content hash, and stable JSON/Markdown retrieval URL. No signup or API key is required; generous abuse protection may return HTTP 429 with Retry-After.
      operationId: createReportSnapshot
      parameters:
      - name: domain
        in: query
        required: true
        description: Domain to snapshot
        schema:
          type: string
          example: example.com
      - name: format
        in: query
        required: false
        description: Response format
        schema:
          type: string
          enum:
          - json
          - markdown
          default: json
      responses:
        '201':
          description: Report snapshot created
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/EverythingReport'
            text/markdown:
              schema:
                type: string
  /report/snapshot/{snapshotId}:
    get:
      tags:
      - Scan
      summary: Read Everything report snapshot
      description: Retrieve a previously created free fixed Everything Report evidence snapshot.
      operationId: readReportSnapshot
      parameters:
      - name: snapshotId
        in: path
        required: true
        description: Snapshot identifier returned by /report/snapshot
        schema:
          type: string
      - name: format
        in: query
        required: false
        description: Response format
        schema:
          type: string
          enum:
          - json
          - markdown
          default: json
      responses:
        '200':
          description: Report snapshot
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/EverythingReport'
            text/markdown:
              schema:
                type: string
        '404':
          description: Snapshot not found
components:
  schemas:
    EverythingReport:
      type: object
      properties:
        domain:
          type: string
        generatedAt:
          type: string
          format: date-time
        reportUrl:
          type: string
        summary:
          type: object
        sections:
          type: object
        citations:
          type: array
          items:
            type: object
        machineReadable:
          type: object
        evidence:
          type: object
          properties:
            liveReportUrl:
              type: string
            snapshotCreateUrl:
              type: string
            snapshotUrl:
              type: string
            snapshotMarkdownUrl:
              type: string
            snapshotId:
              type: string
            contentHash:
              type: string
            formatVersion:
              type: string
            retentionPolicy:
              type: string
              enum:
              - indefinite
              description: Stored snapshots have no automatic expiry.
            retentionNotice:
              type: string
              description: Operational exceptions to the snapshot retention policy.
    DeepScanResponse:
      type: object
      properties:
        success:
          type: boolean
        scan_id:
          type: string
        status:
          type: string
          enum:
          - running
          - completed
          - failed
        estimated_time:
          type: integer
          description: Estimated completion time in seconds
    QuickScanResult:
      type: object
      properties:
        success:
          type: boolean
        domain:
          type: string
        score:
          type: integer
          minimum: 0
          maximum: 100
        categories:
          type: object
          properties:
            dns:
              $ref: '#/components/schemas/CategoryScore'
            email:
              $ref: '#/components/schemas/CategoryScore'
            security:
              $ref: '#/components/schemas/CategoryScore'
        critical_issues:
          type: integer
        warnings:
          type: integer
        timestamp:
          type: string
          format: date-time
    DeepScanRequest:
      type: object
      required:
      - domain
      - type
      properties:
        domain:
          type: string
          example: example.com
        type:
          type: string
          enum:
          - web
          - mail
          example: web
    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
    CategoryScore:
      type: object
      properties:
        score:
          type: integer
          minimum: 0
          maximum: 100
        issues:
          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.