IntoDNS.ai Email API

Email security checks

GitHub OpenAPI

Operations 12

GET /email/check Email security check #
GET /email/spf SPF record check #
POST /email/spf/generate Generate an SPF record #
GET /email/dkim DKIM discovery #
GET /email/dmarc DMARC policy check #
POST /email/dmarc/generate Generate a DMARC record #
GET /email/bimi BIMI record, logo, and mark-certificate check #
GET /email/mta-sts MTA-STS policy check #
GET /email/smtp-tls SMTP STARTTLS and certificate check #
GET /email/fcrdns FCrDNS / PTR check #
GET /email/blacklist Mail-server blacklist check #
GET /email/sender-requirements Google/Yahoo/Microsoft sender requirements check #

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-email-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-email-api-openapi.yml Raw ↑
openapi: 3.2.0
info:
  title: IntoDNS.AI Email 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: Email
  description: Email security checks
paths:
  /email/check:
    get:
      tags:
      - Email
      summary: Email security check
      description: Comprehensive email authentication and deliverability analysis including SPF, DKIM, DMARC.
      operationId: emailCheck
      parameters:
      - name: domain
        in: query
        required: true
        description: Domain to analyze
        schema:
          type: string
          example: example.com
      responses:
        '200':
          description: Email security analysis
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/EmailCheckResult'
        '400':
          description: Invalid request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
  /email/spf:
    get:
      tags:
      - Email
      summary: SPF record check
      description: Analyze SPF (Sender Policy Framework) record for a domain.
      operationId: spfCheck
      parameters:
      - name: domain
        in: query
        required: true
        description: Domain to check
        schema:
          type: string
          example: example.com
      responses:
        '200':
          description: SPF analysis result
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SPFResult'
  /email/spf/generate:
    post:
      tags:
      - Email
      summary: Generate an SPF record
      description: 'Build an SPF TXT record from direct mechanisms. Pure computation: no DNS is changed and no data is stored. The returned lookupCount covers direct mechanisms only; include and redirect targets can add nested lookups, so validate the published record with /email/spf before treating the count as final.'
      operationId: generateSpfRecord
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                mechanisms:
                  type: array
                  maxItems: 50
                  items:
                    type: object
                    required:
                    - type
                    - value
                    properties:
                      type:
                        type: string
                        enum:
                        - ip4
                        - ip6
                        - include
                        - a
                        - mx
                        - exists
                        - redirect
                      value:
                        type: string
                        maxLength: 253
                useA:
                  type: boolean
                useMx:
                  type: boolean
                policy:
                  type: string
                  enum:
                  - fail
                  - softfail
                  - neutral
                  - pass
                  default: fail
            example:
              mechanisms:
              - type: include
                value: _spf.google.com
              useMx: true
              policy: fail
      responses:
        '200':
          description: Generated SPF record, direct lookup count, warnings, and DNS entry
          content:
            application/json:
              schema:
                type: object
        '400':
          description: Invalid generator input
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
  /email/dkim:
    get:
      tags:
      - Email
      summary: DKIM discovery
      description: Discover and validate DKIM keys for a domain.
      operationId: dkimDiscovery
      parameters:
      - name: domain
        in: query
        required: true
        description: Domain to check
        schema:
          type: string
          example: example.com
      responses:
        '200':
          description: DKIM discovery result
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/DKIMResult'
  /email/dmarc:
    get:
      tags:
      - Email
      summary: DMARC policy check
      description: Analyze DMARC policy for a domain.
      operationId: dmarcCheck
      parameters:
      - name: domain
        in: query
        required: true
        description: Domain to check
        schema:
          type: string
          example: example.com
      responses:
        '200':
          description: DMARC analysis result
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/DMARCResult'
  /email/dmarc/generate:
    post:
      tags:
      - Email
      summary: Generate a DMARC record
      description: 'Build a DMARC TXT record with rollout and reporting warnings. Pure computation: no DNS is changed and no data is stored.'
      operationId: generateDmarcRecord
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                policy:
                  type: string
                  enum:
                  - none
                  - quarantine
                  - reject
                  default: none
                subdomainPolicy:
                  type: string
                  enum:
                  - none
                  - quarantine
                  - reject
                rua:
                  oneOf:
                  - type: string
                  - type: array
                    items:
                      type: string
                ruf:
                  oneOf:
                  - type: string
                  - type: array
                    items:
                      type: string
                percentage:
                  type: integer
                  minimum: 1
                  maximum: 100
                  default: 100
                spfAlignment:
                  type: string
                  enum:
                  - relaxed
                  - strict
                dkimAlignment:
                  type: string
                  enum:
                  - relaxed
                  - strict
                reportFormat:
                  type: string
                  maxLength: 20
                reportInterval:
                  type: integer
                  minimum: 60
                  maximum: 604800
            example:
              policy: none
              rua: dmarc@example.com
      responses:
        '200':
          description: Generated DMARC record, warnings, and DNS entry
          content:
            application/json:
              schema:
                type: object
        '400':
          description: Invalid generator input
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
  /email/bimi:
    get:
      tags:
      - Email
      summary: BIMI record, logo, and mark-certificate check
      description: Analyze BIMI record syntax, hosted SVG logo reachability, and optional VMC/CMC authority certificate URL.
      operationId: bimiCheck
      parameters:
      - name: domain
        in: query
        required: true
        description: Domain to check
        schema:
          type: string
          example: example.com
      responses:
        '200':
          description: BIMI analysis result
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/BIMIResult'
  /email/mta-sts:
    get:
      tags:
      - Email
      summary: MTA-STS policy check
      description: Check the _mta-sts TXT record and fetch the HTTPS MTA-STS policy file.
      operationId: mtaStsCheck
      parameters:
      - name: domain
        in: query
        required: true
        description: Domain to check
        schema:
          type: string
          example: example.com
      responses:
        '200':
          description: MTA-STS analysis result
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/MTASTSResult'
  /email/smtp-tls:
    get:
      tags:
      - Email
      summary: SMTP STARTTLS and certificate check
      description: 'Connect to MX servers on SMTP port 25, verify STARTTLS support, TLS certificate trust, hostname match, expiry, and FCrDNS. Measured from the IntoDNS.ai server: a host that does not answer there has reachable=false and startTlsSupported=null (not measured), which is not evidence that it lacks STARTTLS.'
      operationId: smtpTlsCheck
      parameters:
      - name: domain
        in: query
        required: true
        description: Domain to check
        schema:
          type: string
          example: example.com
      responses:
        '200':
          description: SMTP STARTTLS analysis result
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SMTPTLSResult'
  /email/fcrdns:
    get:
      tags:
      - Email
      summary: FCrDNS / PTR check
      description: Check PTR records and forward-confirmed reverse DNS for mail-server IPs.
      operationId: fcrdnsCheck
      parameters:
      - name: domain
        in: query
        required: true
        description: Domain to check
        schema:
          type: string
          example: example.com
      responses:
        '200':
          description: FCrDNS analysis result
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/FCrDNSResult'
  /email/blacklist:
    get:
      tags:
      - Email
      summary: Mail-server blacklist check
      description: Check domain mail-server IPs against common DNSBL blocklists. A provider error code, a timeout, or a list that does not answer its RFC 5782 test entry is reported in providerHealth.unavailableProviders (status unknown), never as clean.
      operationId: blacklistCheck
      parameters:
      - name: domain
        in: query
        required: true
        description: Domain to check
        schema:
          type: string
          example: example.com
      responses:
        '200':
          description: Blacklist analysis result
          content:
            application/json:
              schema:
                type: object
  /email/sender-requirements:
    get:
      tags:
      - Email
      summary: Google/Yahoo/Microsoft sender requirements check
      description: Check SPF, DKIM, DMARC, FCrDNS, and other mailbox-provider sender requirements.
      operationId: senderRequirementsCheck
      parameters:
      - name: domain
        in: query
        required: true
        description: Domain to check
        schema:
          type: string
          example: example.com
      responses:
        '200':
          description: Sender requirements result
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SenderRequirementsResult'
components:
  schemas:
    SPFResult:
      type: object
      properties:
        exists:
          type: boolean
        record:
          type: string
        valid:
          type: boolean
        mechanisms:
          type: array
          items:
            type: string
        lookups:
          type: integer
        lookupGraph:
          type: object
          description: Recursive SPF include/redirect lookup graph
        flattened:
          type: object
          description: Generated flattened SPF record and warnings
        warnings:
          type: array
          items:
            type: string
    EmailCheckResult:
      type: object
      properties:
        success:
          type: boolean
        domain:
          type: string
        spf:
          $ref: '#/components/schemas/SPFResult'
        dkim:
          $ref: '#/components/schemas/DKIMResult'
        dmarc:
          $ref: '#/components/schemas/DMARCResult'
        mx:
          type: object
          properties:
            records:
              type: array
              items:
                type: object
                properties:
                  priority:
                    type: integer
                  host:
                    type: string
        score:
          type: integer
    DMARCResult:
      type: object
      properties:
        exists:
          type: boolean
        policy:
          type: string
          enum:
          - none
          - quarantine
          - reject
        pct:
          type: integer
        rua:
          type: array
          items:
            type: string
    MTASTSResult:
      type: object
      properties:
        exists:
          type: boolean
        record:
          type: string
        policyId:
          type: string
        policy:
          type: object
        policyUrl:
          type: string
        valid:
          type: boolean
        issues:
          type: array
          items:
            type: string
    BIMIResult:
      type: object
      properties:
        exists:
          type: boolean
        record:
          type: string
        valid:
          type: boolean
        logoUrl:
          type: string
        authorityUrl:
          type: string
        logo:
          type: object
          description: Hosted SVG reachability, content type, and size checks
        authority:
          type: object
          description: VMC/CMC mark-certificate reachability and parse result
        issues:
          type: array
          items:
            type: string
    DKIMResult:
      type: object
      properties:
        selectors_found:
          type: array
          items:
            type: string
        valid_keys:
          type: integer
    SMTPTLSResult:
      type: object
      properties:
        domain:
          type: string
        checkedAt:
          type: string
          format: date-time
        mxRecords:
          type: array
          items:
            type: object
        servers:
          type: array
          items:
            type: object
        summary:
          type: object
        issues:
          type: array
          items:
            type: string
    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
    FCrDNSResult:
      type: object
      properties:
        domain:
          type: string
        timestamp:
          type: string
          format: date-time
        check:
          type: string
          example: fcrdns
        description:
          type: string
        result:
          type: object
          properties:
            checked:
              type: boolean
            results:
              type: array
              items:
                type: object
            issues:
              type: array
              items:
                type: string
        citationUrl:
          type: string
        apiUrl:
          type: string
    SenderRequirementsResult:
      type: object
      properties:
        domain:
          type: string
        overallStatus:
          type: string
        checks:
          type: array
          items:
            type: object
        summary:
          type: object
  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.