DomScan Domain Health API

Comprehensive domain health analysis including DNS, SSL, and security

Operations 3

GET /v1/health Full domain health check #
GET /v1/health/quick Quick health check #
POST /v1/health/bulk Bulk health 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/domscan-domain-health-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-domain-health-api-openapi.yml Raw ↑
openapi: 3.2.0
info:
  title: DomScan Domain Health 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: Domain Health
  description: Comprehensive domain health analysis including DNS, SSL, and security
paths:
  /v1/health:
    get:
      tags:
      - Domain Health
      summary: Full domain health check
      description: 'Comprehensive health analysis: DNS configuration, SSL certificates, email authentication records, security headers, and more. Accepts a subdomain (e.g. blog.example.com) as well as a registrable domain. Host-based checks run against the exact hostname, while registration and age data reflect the parent domain. Deprecated SMTP port probing is no longer performed.'
      operationId: getDomainHealth
      parameters:
      - name: domain
        in: query
        required: true
        description: Domain or subdomain to analyze (e.g. example.com or blog.example.com)
        schema:
          type: string
          example: example.com
      - name: details
        in: query
        description: Include detailed breakdown
        schema:
          type: boolean
          default: true
      responses:
        '200':
          description: Health check results
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HealthResponse'
              example:
                domain: cloudflare.com
                health_score: 94
                grade: A
                checks:
                  dns_configured: true
                  ssl_valid: true
                  email_deliverable: true
                  blacklist_status: clean
                  age_years: 15
                  registration_stable: true
                  dnssec_enabled: true
                enriched:
                  tls:
                    grade: A+
                    protocol: TLSv1.3
                    cipher: TLS_AES_256_GCM_SHA384
                    chain_valid: true
                    days_to_expiry: 72
                    hostname_match: true
                    ocsp_stapling: true
                    grade_reasons:
                    - TLS 1.3 enabled
                    - Valid certificate chain
                  http_versions:
                    http1_1: true
                    http2: true
                    http3: true
                    alt_svc: h3=":443"; ma=86400
                    http3_advertised: true
                    alt_svc_protocols:
                    - h3
                    curl_http3_supported: true
                    h2_alpn_accepted: h2
                    h3_alpn_accepted: h3
                  hsts:
                    reachable: true
                    final_url: https://cloudflare.com/
                    status_code: 200
                    header_present: true
                    hsts_header: max-age=31536000; includeSubDomains
                    max_age: 31536000
                    include_subdomains: true
                    preload_directive: false
                    preload_eligible: true
                    preload_status: preloaded
                    preloaded_domain: cloudflare.com
                    preload_bulk: false
                    issues:
                    - missing preload directive
                    errors: []
                warnings: []
                recommendations:
                - Publish the HSTS preload directive if you want preload-list eligibility.
                checked_at: '2026-04-18T21:00:00Z'
                details:
                  dns:
                    has_a_record: true
                    has_aaaa_record: true
                    has_nameservers: true
                    has_mx_record: true
                    nameservers:
                    - ns3.cloudflare.com
                    - ns5.cloudflare.com
                    mx_records:
                    - route1.mx.cloudflare.net
                    a_records:
                    - 104.16.132.229
                    - 104.16.133.229
                    aaaa_records:
                    - 2606:4700::6810:84e5
                    - 2606:4700::6810:85e5
                  ssl:
                    https_works: true
                    certificate_valid: true
                    days_until_expiry: 72
                    issuer: Google Trust Services
                  email:
                    has_mx: true
                    has_spf: true
                    has_dmarc: true
                    has_dkim_selector: true
                    spf_record: v=spf1 include:_spf.google.com ~all
                    dmarc_policy: reject
                    mx_hosts:
                    - route1.mx.cloudflare.net
                  security:
                    dnssec_enabled: true
                    has_caa_record: true
                    caa_issuers:
                    - digicert.com
                    - letsencrypt.org
                    http_to_https_redirect: true
                    has_security_txt: true
                    security_txt_fields:
                    - Contact
                    - Expires
                    - Preferred-Languages
                    security_headers:
                      has_hsts: true
                      hsts_max_age: 31536000
                      has_csp: true
                      has_x_frame_options: true
                      has_x_content_type_options: true
                      has_referrer_policy: true
                      has_permissions_policy: true
                      score: 92
                  age:
                    registration_date: '2010-07-06T00:00:00Z'
                    expiration_date: '2030-07-06T00:00:00Z'
                    last_updated: '2025-07-06T00:00:00Z'
                    age_days: 5766
                    age_years: 15
                    days_until_expiry: 1540
                    registrar: Cloudflare Registrar
                  blacklist:
                    clean: true
                    status: clean
                    listed_on: []
                    checked_lists:
                    - spamhaus
                    - surbl
                    domain_listed_on: []
                    ip_listed_on: []
                    check_type: mixed
                health_checks:
                - category: dns
                  name: Authoritative DNS records present
                  passed: true
                  score: 100
                  weight: 15
                meta:
                  check_duration_ms: 248
                  served_by: pop=MAD country=ES
        '401':
          $ref: '#/components/responses/Unauthorized'
        '402':
          $ref: '#/components/responses/PaymentRequired'
        '429':
          $ref: '#/components/responses/RateLimited'
      x-domscan-credits:
        model: per_request
        default: 3
  /v1/health/quick:
    get:
      tags:
      - Domain Health
      summary: Quick health check
      description: Fast health check focusing on DNS resolution and SSL certificate status. Accepts a subdomain (e.g. blog.example.com) as well as a registrable domain.
      operationId: getQuickHealth
      parameters:
      - name: domain
        in: query
        required: true
        description: Domain or subdomain to check (e.g. example.com or blog.example.com)
        schema:
          type: string
          example: example.com
      responses:
        '200':
          description: Quick health results
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/QuickHealthResponse'
              example:
                domain: example.com
                dns_ok: true
                https_ok: true
                checked_at: '2026-04-18T21:00:00Z'
                meta:
                  check_duration_ms: 89
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '402':
          $ref: '#/components/responses/PaymentRequired'
        '429':
          $ref: '#/components/responses/RateLimited'
        '500':
          $ref: '#/components/responses/InternalError'
      x-domscan-credits:
        model: per_request
        default: 1
  /v1/health/bulk:
    post:
      tags:
      - Domain Health
      summary: Bulk health check
      description: 'Check health of multiple domains at once. Use quick=true for faster results with basic DNS/SSL checks only.


        **Credits:** 3 credits per domain. Example: 10 domains = 30 credits.'
      operationId: bulkHealthCheck
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              required:
              - domains
              properties:
                domains:
                  type: array
                  items:
                    type: string
                  minItems: 1
                  maxItems: 10
                  description: Array of domains or subdomains to check (max 10)
                  example:
                  - example.com
                  - google.com
                quick:
                  type: boolean
                  default: false
                  description: Use quick check mode (DNS + SSL only)
      responses:
        '200':
          description: Bulk health results
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/BulkHealthResponse'
        '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_item
        default: 3
components:
  schemas:
    QuickHealthConfidence:
      type: object
      description: Additive quick-health confidence object for DNS and HTTPS checks.
      properties:
        checks_run:
          type: array
          items:
            type: string
            enum:
            - dns
            - https
        passed_count:
          type: integer
        failed_count:
          type: integer
        unknown_count:
          type: integer
        confidence:
          type: string
          enum:
          - high
          - medium
          - low
        dns_ok:
          type:
          - boolean
          - 'null'
        https_ok:
          type:
          - boolean
          - 'null'
    BulkHealthResponse:
      type: object
      description: Bulk health check results
      properties:
        results:
          type: array
          items:
            type: object
            properties:
              domain:
                type: string
              health_score:
                type: integer
              grade:
                type: string
              checks:
                type: object
              warnings:
                type: array
                items:
                  type: string
              error:
                type: string
        meta:
          type: object
          properties:
            total:
              type: integer
            successful:
              type: integer
            check_duration_ms:
              type: integer
    HealthResponse:
      type: object
      description: Comprehensive domain health check response
      properties:
        domain:
          type: string
          description: Domain checked
        health_score:
          type: integer
          minimum: 0
          maximum: 100
          description: Overall health score
        grade:
          type: string
          enum:
          - A
          - B
          - C
          - D
          - F
          description: Health grade
        checks:
          type: object
          description: Individual check results
          properties:
            dns_configured:
              type: boolean
            ssl_valid:
              type: boolean
            email_deliverable:
              type: boolean
            blacklist_status:
              type: string
              enum:
              - clean
              - listed
              - unknown
            age_years:
              type:
              - integer
              - 'null'
            registration_stable:
              type: boolean
            dnssec_enabled:
              type: boolean
        enriched:
          type: object
          description: 'HLTH-003/006/008/009: additive supplemental probes. Only present when optional enrichment is configured and at least one probe returned data.'
          properties:
            tls:
              type: object
              description: Full TLS handshake introspection (HLTH-003 / REP-002).
              properties:
                grade:
                  type: string
                  enum:
                  - A+
                  - A
                  - B
                  - C
                  - F
                protocol:
                  type:
                  - string
                  - 'null'
                cipher:
                  type:
                  - string
                  - 'null'
                chain_valid:
                  type: boolean
                days_to_expiry:
                  type: integer
                hostname_match:
                  type:
                  - boolean
                  - 'null'
                ocsp_stapling:
                  type: boolean
                grade_reasons:
                  type: array
                  items:
                    type: string
            http_versions:
              type: object
              description: 'HLTH-008: HTTP/1.1, HTTP/2, HTTP/3 support.'
              properties:
                http1_1:
                  type: boolean
                http2:
                  type: boolean
                http3:
                  type: boolean
                alt_svc:
                  type:
                  - string
                  - 'null'
                http3_advertised:
                  type: boolean
                alt_svc_protocols:
                  type: array
                  items:
                    type: string
                curl_http3_supported:
                  type: boolean
                h2_alpn_accepted:
                  type:
                  - string
                  - 'null'
                h3_alpn_accepted:
                  type:
                  - string
                  - 'null'
            hsts:
              type: object
              description: 'HLTH-023: live HSTS header and preload-list audit from the proxy.'
              properties:
                reachable:
                  type: boolean
                final_url:
                  type:
                  - string
                  - 'null'
                status_code:
                  type:
                  - integer
                  - 'null'
                header_present:
                  type: boolean
                hsts_header:
                  type:
                  - string
                  - 'null'
                max_age:
                  type:
                  - integer
                  - 'null'
                include_subdomains:
                  type:
                  - boolean
                  - 'null'
                preload_directive:
                  type:
                  - boolean
                  - 'null'
                preload_eligible:
                  type: boolean
                preload_status:
                  type:
                  - string
                  - 'null'
                preloaded_domain:
                  type:
                  - string
                  - 'null'
                preload_bulk:
                  type:
                  - boolean
                  - 'null'
                issues:
                  type: array
                  items:
                    type: string
                errors:
                  type: array
                  items:
                    type: string
            smtp:
              type: object
              deprecated: true
              description: Deprecated legacy field. Health checks no longer perform SMTP port probes and this field is no longer emitted.
              properties:
                host:
                  type: string
                port:
                  type: integer
                reachable:
                  type: boolean
                tls_mode:
                  type: string
                  enum:
                  - implicit
                  - starttls
                tls_negotiated:
                  type: boolean
                tls_protocol:
                  type: string
                tls_cipher:
                  type: string
                starttls_offered:
                  type:
                  - boolean
                  - 'null'
                banner:
                  type: string
                error:
                  type: string
                  description: Failure detail when neither probed SMTP TLS path responded successfully.
                fcrdns:
                  type: object
                  description: 'HLTH-019: forward-confirmed reverse DNS check for the primary MX hostname.'
                  properties:
                    addresses:
                      type: array
                      items:
                        type: string
                    ptr_hostnames:
                      type: array
                      items:
                        type: string
                    all_forward_confirmed:
                      type: boolean
                    confirmed_addresses:
                      type: array
                      items:
                        type: string
                    unconfirmed_addresses:
                      type: array
                      items:
                        type: string
        warnings:
          type: array
          items:
            type: string
          description: Warning messages
        recommendations:
          type: array
          items:
            type: string
          description: Improvement recommendations
        component_summary:
          $ref: '#/components/schemas/HealthComponentSummary'
        details:
          type: object
          description: Detailed check results
        health_checks:
          type: array
          description: Weighted per-check scoring details. Only present when details are included.
          items:
            type: object
            properties:
              category:
                type: string
              name:
                type: string
              passed:
                type: boolean
              score:
                type: integer
              weight:
                type: integer
              details:
                type:
                - string
                - 'null'
        checked_at:
          type: string
          format: date-time
        meta:
          type: object
          properties:
            check_duration_ms:
              type: integer
            served_by:
              type: string
    QuickHealthResponse:
      type: object
      description: Quick health check (DNS + SSL only)
      properties:
        domain:
          type: string
        dns_ok:
          type:
          - boolean
          - 'null'
          description: Whether DNS resolves correctly; null when resolver checks were unavailable.
        https_ok:
          type:
          - boolean
          - 'null'
          description: Whether HTTPS responds successfully; null when its DNS prerequisite is unknown.
        dns_complete:
          type: boolean
          description: Whether every DNS query needed by the quick check completed.
        checked_at:
          type: string
          format: date-time
        confidence:
          $ref: '#/components/schemas/QuickHealthConfidence'
        meta:
          type: object
          properties:
            check_duration_ms:
              type: integer
    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
    HealthComponentSummary:
      type: object
      description: Additive full-health rollup for component pass/fail counts, warnings, recommendations, and optional enrichment coverage.
      properties:
        score:
          type: integer
          minimum: 0
          maximum: 100
        grade:
          type: string
          enum:
          - A
          - B
          - C
          - D
          - F
        check_count:
          type: integer
        passed_count:
          type: integer
        failed_count:
          type: integer
        warning_count:
          type: integer
        recommendation_count:
          type: integer
        confidence:
          type: string
          enum:
          - high
          - medium
          - low
        dns_ok:
          type: boolean
        https_ok:
          type: boolean
        email_ok:
          type: boolean
        blacklist_status:
          type: string
          enum:
          - clean
          - listed
          - unknown
        dnssec_enabled:
          type: boolean
        enriched_section_count:
          type: integer
        enriched_sections:
          type: array
          items:
            type: string
  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
    InternalError:
      description: Unexpected service error.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ErrorResponse'
    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
  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