DomScan Email Authentication API

Build and validate SPF, DMARC, and DKIM records

Operations 7

POST /v1/tools/spf/build Build SPF record #
POST /v1/tools/spf/validate Validate SPF record #
POST /v1/tools/spf/flatten Flatten SPF record #
POST /v1/tools/dmarc/build Build DMARC record #
POST /v1/tools/dmarc/validate Validate DMARC record #
GET /v1/tools/dkim/check Check DKIM selector #
GET /v1/tools/dkim/discover Discover DKIM selectors #

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/domscan-email-authentication-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 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

domscan-email-authentication-api-openapi.yml Raw ↑
openapi: 3.2.0
info:
  title: DomScan Email Authentication API
  description: DomScan is a domain intelligence API providing domain analysis tools.
  version: 2.15.0
  contact:
    name: DomScan Support
    url: https://domscan.net
    email: support@domscan.net
  termsOfService: https://domscan.net/legal/terms
  license:
    name: MIT
    url: https://opensource.org/licenses/MIT
servers:
- url: https://domscan.net
  description: Production server
security:
- apiKey: []
tags:
- name: Email Authentication
  description: Build and validate SPF, DMARC, and DKIM records
paths:
  /v1/tools/spf/build:
    post:
      tags:
      - Email Authentication
      summary: Build SPF record
      description: Generate an SPF record from specified parameters
      operationId: buildSpf
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              required:
              - all
              properties:
                include:
                  type: array
                  items:
                    type: string
                  description: Domains to include
                ip4:
                  type: array
                  items:
                    type: string
                  description: IPv4 addresses/ranges
                ip6:
                  type: array
                  items:
                    type: string
                  description: IPv6 addresses/ranges
                a:
                  type: boolean
                  description: Include A record
                mx:
                  type: boolean
                  description: Include MX record
                redirect:
                  type: string
                  description: Redirect to another domain
                all:
                  type: string
                  enum:
                  - pass
                  - fail
                  - softfail
                  - neutral
                  description: Default policy
      responses:
        '200':
          description: Generated SPF record
          content:
            application/json:
              schema:
                type: object
                properties:
                  record:
                    type: string
                  dns_name:
                    type: string
                  record_type:
                    type: string
                  dns_lookups:
                    type: integer
                  valid:
                    type: boolean
                  warnings:
                    type: array
                    items:
                      type: string
                  explanation:
                    type: object
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '402':
          $ref: '#/components/responses/PaymentRequired'
        '429':
          $ref: '#/components/responses/RateLimited'
      x-domscan-credits:
        model: per_request
        default: 1
  /v1/tools/spf/validate:
    post:
      tags:
      - Email Authentication
      summary: Validate SPF record
      description: Validate an SPF record and check for issues
      operationId: validateSpf
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                record:
                  type: string
                  description: SPF record to validate
                domain:
                  type: string
                  description: Domain to fetch SPF record from (if record not provided)
      responses:
        '200':
          description: SPF validation result
          content:
            application/json:
              schema:
                type: object
                properties:
                  valid:
                    type: boolean
                  version:
                    type: string
                  mechanisms:
                    type: array
                    items:
                      type: object
                  dns_lookups:
                    type: integer
                  lookup_limit_exceeded:
                    type: boolean
                  policy:
                    type: string
                  issues:
                    type: array
                    items:
                      type: string
                  warnings:
                    type: array
                    items:
                      type: string
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '402':
          $ref: '#/components/responses/PaymentRequired'
        '429':
          $ref: '#/components/responses/RateLimited'
      x-domscan-credits:
        model: per_request
        default: 1
  /v1/tools/spf/flatten:
    post:
      tags:
      - Email Authentication
      summary: Flatten SPF record
      description: Flatten SPF includes to IP addresses to reduce DNS lookups
      operationId: flattenSpf
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              required:
              - domain
              properties:
                domain:
                  type: string
                  description: Domain to flatten SPF for
      responses:
        '200':
          description: Flattened SPF record
          content:
            application/json:
              schema:
                type: object
                properties:
                  domain:
                    type: string
                  original_record:
                    type: string
                  flattened_record:
                    type: string
                  original_lookups:
                    type: integer
                  flattened_lookups:
                    type: integer
                  resolved_ips:
                    type: object
                  warnings:
                    type: array
                    items:
                      type: string
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '402':
          $ref: '#/components/responses/PaymentRequired'
        '429':
          $ref: '#/components/responses/RateLimited'
      x-domscan-credits:
        model: per_request
        default: 2
  /v1/tools/dmarc/build:
    post:
      tags:
      - Email Authentication
      summary: Build DMARC record
      description: Generate a DMARC record from specified parameters
      operationId: buildDmarc
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              required:
              - policy
              properties:
                policy:
                  type: string
                  enum:
                  - none
                  - quarantine
                  - reject
                  description: DMARC policy
                subdomain_policy:
                  type: string
                  enum:
                  - none
                  - quarantine
                  - reject
                percentage:
                  type: integer
                  minimum: 0
                  maximum: 100
                rua:
                  type: array
                  items:
                    type: string
                  description: Aggregate report addresses
                ruf:
                  type: array
                  items:
                    type: string
                  description: Forensic report addresses
                adkim:
                  type: string
                  enum:
                  - relaxed
                  - strict
                aspf:
                  type: string
                  enum:
                  - relaxed
                  - strict
      responses:
        '200':
          description: Generated DMARC record
          content:
            application/json:
              schema:
                type: object
                properties:
                  record:
                    type: string
                  dns_name:
                    type: string
                  record_type:
                    type: string
                  valid:
                    type: boolean
                  explanation:
                    type: object
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '402':
          $ref: '#/components/responses/PaymentRequired'
        '429':
          $ref: '#/components/responses/RateLimited'
      x-domscan-credits:
        model: per_request
        default: 1
  /v1/tools/dmarc/validate:
    post:
      tags:
      - Email Authentication
      summary: Validate DMARC record
      description: Validate a DMARC record and check for issues
      operationId: validateDmarc
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                record:
                  type: string
                  description: DMARC record to validate
                domain:
                  type: string
                  description: Domain to fetch DMARC record from (if record not provided)
      responses:
        '200':
          description: DMARC validation result
          content:
            application/json:
              schema:
                type: object
                properties:
                  valid:
                    type: boolean
                  version:
                    type:
                    - string
                    - 'null'
                  policy:
                    type:
                    - string
                    - 'null'
                  subdomain_policy:
                    type:
                    - string
                    - 'null'
                  percentage:
                    type: integer
                  rua:
                    type: array
                    items:
                      type: string
                  ruf:
                    type: array
                    items:
                      type: string
                  strength:
                    type: string
                    enum:
                    - strong
                    - moderate
                    - weak
                    - monitoring
                  issues:
                    type: array
                    items:
                      type: string
                  warnings:
                    type: array
                    items:
                      type: string
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '402':
          $ref: '#/components/responses/PaymentRequired'
        '429':
          $ref: '#/components/responses/RateLimited'
      x-domscan-credits:
        model: per_request
        default: 1
  /v1/tools/dkim/check:
    get:
      tags:
      - Email Authentication
      summary: Check DKIM selector
      description: Check a specific DKIM selector for a domain
      operationId: checkDkim
      parameters:
      - name: domain
        in: query
        required: true
        schema:
          type: string
        description: Domain to check
      - name: selector
        in: query
        required: true
        schema:
          type: string
        description: DKIM selector name
      responses:
        '200':
          description: DKIM check result
          content:
            application/json:
              schema:
                type: object
                properties:
                  domain:
                    type: string
                  selector:
                    type: string
                  dns_name:
                    type: string
                  exists:
                    type: boolean
                  valid:
                    type: boolean
                  record:
                    type: string
                  key_type:
                    type: string
                  key_size:
                    type: integer
                  issues:
                    type: array
                    items:
                      type: string
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '402':
          $ref: '#/components/responses/PaymentRequired'
        '429':
          $ref: '#/components/responses/RateLimited'
      x-domscan-credits:
        model: per_request
        default: 1
  /v1/tools/dkim/discover:
    get:
      tags:
      - Email Authentication
      summary: Discover DKIM selectors
      description: Discover common DKIM selectors for a domain
      operationId: discoverDkim
      parameters:
      - name: domain
        in: query
        required: true
        schema:
          type: string
        description: Domain to scan
      responses:
        '200':
          description: DKIM discovery result
          content:
            application/json:
              schema:
                type: object
                properties:
                  domain:
                    type: string
                  selectors_checked:
                    type: array
                    items:
                      type: string
                  selectors_found:
                    type: array
                    items:
                      type: object
                      properties:
                        selector:
                          type: string
                        dns_name:
                          type: string
                        exists:
                          type: boolean
                        record:
                          type:
                          - string
                          - 'null'
                        record_type:
                          type:
                          - string
                          - 'null'
                          enum:
                          - TXT
                          - CNAME
                        cname_targets:
                          type: array
                          items:
                            type: string
                        key_type:
                          type:
                          - string
                          - 'null'
                        key_size:
                          type:
                          - integer
                          - 'null'
                        provider_hint:
                          type:
                          - string
                          - 'null'
                        valid:
                          type: boolean
                        revoked:
                          type: boolean
                        weak:
                          type: boolean
                        hash_algorithms:
                          type: array
                          items:
                            type: string
                        service_type:
                          type:
                          - string
                          - 'null'
                        flags:
                          type: array
                          items:
                            type: string
                        issues:
                          type: array
                          items:
                            type: string
                  total_found:
                    type: integer
                  common_providers_detected:
                    type: array
                    items:
                      type: string
                  providers_detected:
                    type: array
                    items:
                      type: string
                  valid_selector_count:
                    type: integer
                  weak_selector_count:
                    type: integer
                  revoked_selector_count:
                    type: integer
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '402':
          $ref: '#/components/responses/PaymentRequired'
        '429':
          $ref: '#/components/responses/RateLimited'
      x-domscan-credits:
        model: per_request
        default: 2
components:
  responses:
    Unauthorized:
      description: 'Authentication required. All API endpoints require a valid API key (x-api-key header or Authorization: Bearer) or an active session cookie.'
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ErrorResponse'
          example:
            error:
              code: AUTH_REQUIRED
              message: 'Authentication required. Provide an API key via x-api-key header or Authorization: Bearer header.'
              docs: https://domscan.net/docs/authentication
              get_key: https://domscan.net/login
    PaymentRequired:
      description: Insufficient credits for this request
      headers:
        X-Credits-Remaining:
          schema:
            type: integer
          description: Credits remaining on your API key
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ErrorResponse'
          example:
            error:
              code: INSUFFICIENT_CREDITS
              message: Insufficient credits. This endpoint costs 2 credits but you have 0. Purchase more at https://domscan.net/billing or wait for your monthly reset.
              credits_remaining: 0
              credits_required: 2
              purchase_url: https://domscan.net/billing
    RateLimited:
      description: Rate limit exceeded. Free accounts can sustain 120 requests per minute per account with a burst capacity of 60. Free bulk traffic is additionally limited to 20 requests per minute per account across all bulk endpoints and 100 per minute per IPv4 address or IPv6 /56 network. Paid accounts can sustain 600 requests per minute with a burst capacity of 120.
      headers:
        Retry-After:
          schema:
            type: integer
          description: Seconds to wait before retrying
        X-RateLimit-Plan:
          schema:
            type: string
            enum:
            - free
            - paid
          description: The account plan whose policy was applied.
        X-RateLimit-Limit:
          schema:
            type: integer
          description: The immediate burst capacity, or the active bulk fixed-window limit when a bulk-specific limit is exceeded.
        X-RateLimit-Remaining:
          schema:
            type: integer
            example: 0
          description: Immediate burst tokens remaining, or requests remaining in the active bulk fixed window.
        X-RateLimit-Policy:
          schema:
            type: string
          description: Machine-readable summary of the active tier and limit policy.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ErrorResponse'
          example:
            error:
              code: RATE_LIMITED
              message: Rate limit exceeded. Please wait before making more requests.
    BadRequest:
      description: Bad request - invalid parameters
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ErrorResponse'
          example:
            error:
              code: BAD_REQUEST
              message: Invalid domain format
              suggestion: Domain must be a valid format like example.com
  schemas:
    ErrorResponse:
      type: object
      description: Standard error response format
      properties:
        error:
          type: object
          properties:
            code:
              type: string
              description: Error code for programmatic handling
              example: INVALID_DOMAIN
            type:
              type: string
              enum:
              - authentication_error
              - credits_error
              - permission_error
              - not_found_error
              - conflict_error
              - rate_limit_error
              - timeout_error
              - validation_error
              - upstream_error
              - api_error
              - request_error
              description: Stable error category used by official SDK subclasses
            message:
              type: string
              description: Human-readable error message
              example: Invalid domain format
            status:
              type: integer
              minimum: 400
              maximum: 599
              description: HTTP status repeated in the JSON error for queue and log processors
            retryable:
              type: boolean
              description: Whether retrying can be appropriate after applying retry guidance
            request_id:
              type: string
              description: Request identifier matching the X-Request-Id response header
            suggestion:
              type: string
              description: Suggestion for fixing the error
            details:
              type: object
              description: Optional structured context for the error
              additionalProperties: true
            retry_after:
              type: integer
              minimum: 0
              description: Seconds to wait before retrying when the error is temporary
              example: 300
            docs_url:
              type: string
              description: Link to relevant documentation
              example: /docs#parameters
          required:
          - type
          - code
          - message
          - status
          - retryable
          - request_id
          - docs_url
  securitySchemes:
    apiKey:
      type: apiKey
      in: header
      name: x-api-key
      description: 'API key for authentication. Get yours free at https://domscan.net. Also accepts Authorization: Bearer header.'
    sessionCookie:
      type: apiKey
      in: cookie
      name: session
      description: Active DomScan browser session. Used by account-management endpoints.
externalDocs:
  description: Full API Documentation
  url: https://domscan.net/docs
x-rapidapi-product: domscan
x-domscan-rate-limits:
  free:
    general:
      scope: account
      sustained_requests_per_minute: 120
      burst_capacity: 60
      shared_across_api_keys_and_sessions: true
    bulk:
      scope: all bulk endpoints combined
      account_requests_per_minute: 20
      network_requests_per_minute: 100
      ipv6_network_prefix: 56
  paid:
    general:
      scope: API key for key-authenticated requests; IP for browser sessions
      sustained_requests_per_minute: 600
      burst_capacity: 120
    free_bulk_budget_applies: false
  response:
    status: 429
    retry_header: Retry-After
    headers_on_every_authenticated_response:
    - X-RateLimit-Plan
    - X-RateLimit-Limit
    - X-RateLimit-Remaining
    - X-RateLimit-Policy
    burst_headers:
    - X-RateLimit-Limit
    - X-RateLimit-Remaining
    policy_header: X-RateLimit-Policy
x-domscan-response-metadata:
  compatibility: additive response headers; established JSON success bodies are unchanged
  headers:
    X-Request-Id: Unique request identifier for logs and support
    X-API-Version: DomScan API release version
    X-Response-Time: Server processing duration in milliseconds
    X-Credits-Requested: Credits requested before refund settlement
    X-Credits-Charged: Credits retained after settlement
    X-Credits-Refunded: Credits returned during settlement
    X-Credits-Remaining: Authenticated account balance after the request
    X-Data-Freshness: fresh, cached, stale, mixed, or unknown
    X-RateLimit-Limit: Active burst capacity
    X-RateLimit-Remaining: Remaining burst capacity
    X-RateLimit-Plan: Active plan, or not_applicable before authentication
    X-RateLimit-Policy: Machine-readable active rate policy