DomScan SSL Certificates API

Certificate transparency search and subdomain discovery

Operations 2

GET /v1/certificates Certificate transparency search #
GET /v1/subdomains Subdomain discovery #

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-ssl-certificates-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-ssl-certificates-api-openapi.yml Raw ↑
openapi: 3.2.0
info:
  title: DomScan SSL Certificates 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: SSL Certificates
  description: Certificate transparency search and subdomain discovery
paths:
  /v1/certificates:
    get:
      tags:
      - SSL Certificates
      summary: Certificate transparency search
      description: Find SSL certificates issued for a domain via CT logs. Includes an intelligence summary with source, cache, truncation, wildcard, issuer, and expiry posture.
      operationId: getCertificates
      parameters:
      - name: domain
        description: Domain to search certificate transparency logs for.
        in: query
        required: true
        schema:
          type: string
      - name: include_subdomains
        description: Include certificates issued for subdomains of the requested domain.
        in: query
        schema:
          type: boolean
          default: true
      - name: include_expired
        description: Include certificates that have already expired.
        in: query
        schema:
          type: boolean
          default: false
      - name: limit
        in: query
        description: Maximum certificates to return on this page.
        schema:
          type: integer
          minimum: 1
          maximum: 1000
          default: 100
      - name: cursor
        in: query
        description: Offset cursor from `pagination.next_cursor`.
        schema:
          type: string
          example: '100'
      responses:
        '200':
          description: Certificate list
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CertificatesResponse'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '402':
          $ref: '#/components/responses/PaymentRequired'
        '429':
          $ref: '#/components/responses/RateLimited'
        '503':
          description: Certificate transparency sources were unavailable and no cached result could be served. The charged credits are automatically refunded; retry after the `retry_after` seconds.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '504':
          description: Certificate search timed out
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
      x-domscan-credits:
        model: per_request
        default: 2
  /v1/subdomains:
    get:
      tags:
      - SSL Certificates
      summary: Subdomain discovery
      description: Return best-effort hostname evidence from public certificate and passive discovery sources. `sources=ct` is the only accepted compatibility selector. CT evidence uses the public append-only log model described by RFC 9162. DomScan does not brute-force labels or crawl the target site, so coverage is incomplete. Optional DNS verification checks only the names selected for the response and does not discover more. Wildcard evidence is returned separately when requested. Cache-only misses return 202 and all-source failures without stale cache return 503; both responses refund credits.
      operationId: getSubdomains
      parameters:
      - name: domain
        in: query
        required: true
        description: Root domain to search.
        schema:
          type: string
          example: example.com
      - name: sources
        in: query
        required: false
        description: Compatibility selector. Only `ct` is accepted. It starts the passive discovery pipeline, but response entries identify the provider that supplied their evidence.
        schema:
          type: string
          enum:
          - ct
          default: ct
      - name: verify
        in: query
        required: false
        description: Check DNS only for the returned names. Verification does not discover additional names. Values outside the documented enum return HTTP 400.
        schema:
          type: string
          enum:
          - 'true'
          - 'false'
          - '1'
          - '0'
          - 'yes'
          - 'no'
          default: 'false'
          example: 'yes'
      - name: include_wildcards
        in: query
        required: false
        description: Return wildcard certificate SAN patterns in the separate `wildcards` array. Wildcards are never mixed into the concrete hostname list. Values outside the documented enum return HTTP 400.
        schema:
          type: string
          enum:
          - 'true'
          - 'false'
          - '1'
          - '0'
          - 'yes'
          - 'no'
          default: 'false'
          example: '1'
      - name: limit
        in: query
        required: false
        description: Maximum number of concrete hostname entries to return. The value must be an integer from 1 through 2000; other values return HTTP 400.
        schema:
          type: integer
          minimum: 1
          maximum: 2000
          default: 500
          example: 500
      - name: prefer_cache
        in: query
        required: false
        description: Serve cached results only. If no fresh or stale cache is available, return 202, queue a background refresh, and refund the request credits. Values outside the documented enum return HTTP 400.
        schema:
          type: string
          enum:
          - 'true'
          - 'false'
          - '1'
          - '0'
          - 'yes'
          - 'no'
          default: 'false'
          example: 'false'
      responses:
        '200':
          description: Subdomain list
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SubdomainsResponse'
              examples:
                ct_primary:
                  summary: crt.sh evidence with DNS verification and wildcard output
                  value:
                    domain: example.com
                    subdomains:
                    - name: api.example.com
                      source: crtsh
                      first_seen: '2025-01-15T00:00:00Z'
                      verified: true
                      dns_records:
                        A:
                        - 192.0.2.10
                    wildcards:
                    - pattern: '*.example.com'
                      source: crtsh
                      first_seen: '2024-11-20T00:00:00Z'
                    summary:
                      total_found: 1
                      returned: 1
                      verified_count: 1
                      unverified_count: 0
                      sources_used:
                      - crtsh
                      apex_included: false
                      wildcard_suppressed_count: 1
                      wildcard_returned_count: 1
                    intelligence_summary:
                      data_sources:
                      - crtsh
                      source_count: 1
                      cache_status: live
                      returned_count: 1
                      total_found: 1
                      truncated: false
                      limit: 500
                      verification_requested: true
                      include_wildcards: true
                      verified_count: 1
                      verified_ratio: 1
                      live_dns_record_count: 1
                      apex_included: false
                      wildcard_suppressed_count: 1
                      wildcard_returned_count: 1
                      first_seen_oldest: '2025-01-15T00:00:00Z'
                      first_seen_newest: '2025-01-15T00:00:00Z'
                      warning_count: 0
                    meta:
                      query_time_ms: 184
                      cached: false
                passive_fallback:
                  summary: Passive fallback evidence without a first-seen certificate time
                  value:
                    domain: example.com
                    subdomains:
                    - name: archive.example.com
                      source: wayback
                      first_seen: null
                      verified: false
                      dns_records: null
                    summary:
                      total_found: 1
                      returned: 1
                      verified_count: 0
                      unverified_count: 1
                      sources_used:
                      - wayback
                      apex_included: false
                      wildcard_suppressed_count: 0
                      wildcard_returned_count: 0
                    intelligence_summary:
                      data_sources:
                      - wayback
                      source_count: 1
                      cache_status: live
                      returned_count: 1
                      total_found: 1
                      truncated: false
                      limit: 500
                      verification_requested: false
                      include_wildcards: false
                      verified_count: 0
                      verified_ratio: 0
                      live_dns_record_count: 0
                      apex_included: false
                      wildcard_suppressed_count: 0
                      wildcard_returned_count: 0
                      first_seen_oldest: null
                      first_seen_newest: null
                      warning_count: 0
                    meta:
                      query_time_ms: 412
                      cached: false
        '202':
          description: No fresh or stale subdomain result was available for a cache-only request. A background refresh was queued and the request credits were refunded.
          headers:
            Retry-After:
              description: Suggested delay before retrying the cache-only request.
              schema:
                type: integer
                example: 30
          content:
            application/json:
              schema:
                type: object
                properties:
                  status:
                    type: string
                    example: pending
                  code:
                    type: string
                    example: CACHE_MISS_REFRESH_QUEUED
                  message:
                    type: string
                    example: Try again in a moment
                  domain:
                    type: string
                    example: example.com
                  retry_after:
                    type: integer
                    example: 30
                  credits_charged:
                    type: integer
                    example: 0
                    description: Pending cache refresh responses do not consume credits.
                  billing_status:
                    type: string
                    example: not_charged
                    description: Billing status for this pending response.
                  request_id:
                    type: string
        '400':
          description: Invalid domain, source selector, boolean token, or limit. Boolean query values accept only true, false, 1, 0, yes, or no.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '402':
          $ref: '#/components/responses/PaymentRequired'
        '429':
          $ref: '#/components/responses/RateLimited'
        '503':
          description: Every discovery source was unavailable and no stale cache could be served. The request credits were refunded.
          headers:
            Retry-After:
              description: Suggested delay before retrying the request.
              schema:
                type: integer
                example: 300
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
              example:
                error:
                  code: UPSTREAM_UNAVAILABLE
                  message: Service temporarily unavailable
                  suggestion: Try again in a moment
                  retry_after: 300
        '504':
          description: Subdomain enumeration timed out
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
      x-domscan-credits:
        model: per_request
        default: 4
        variants:
        - parameter: verify
          equals: true
          credits: 5
        note: 4 credits by default; 5 credits when verify=true.
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
    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.
    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
    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:
    SubdomainIntelligenceSummary:
      type: object
      description: Compact source, cache, truncation, wildcard, and optional DNS verification summary. Counts describe the best-effort response, not every subdomain that exists.
      properties:
        data_sources:
          type: array
          items:
            type: string
            enum:
            - ct
            - crtsh
            - crtname
            - hackertarget
            - threatminer
            - wayback
            - certspotter
        source_count:
          type: integer
        cache_status:
          type: string
          enum:
          - live
          - fresh_cache
          - stale_cache
        returned_count:
          type: integer
        total_found:
          type: integer
        truncated:
          type: boolean
        limit:
          type: integer
        verification_requested:
          type: boolean
          description: Whether DNS was checked for the returned concrete hostnames.
        include_wildcards:
          type: boolean
          description: Whether wildcard certificate evidence was requested separately.
        verified_count:
          type: integer
        verified_ratio:
          type:
          - number
          - 'null'
        live_dns_record_count:
          type: integer
          description: Returned hostnames with at least one A or CNAME verification record.
        apex_included:
          type: boolean
        wildcard_suppressed_count:
          type: integer
        wildcard_returned_count:
          type: integer
        first_seen_oldest:
          type:
          - string
          - 'null'
          description: Oldest valid first_seen value among returned entries, or null.
        first_seen_newest:
          type:
          - string
          - 'null'
          description: Newest valid first_seen value among returned entries, or null.
        warning_count:
          type: integer
    CertificatePagination:
      type: object
      description: Offset cursor pagination for certificate transparency results.
      properties:
        limit:
          type: integer
        offset:
          type: integer
        returned:
          type: integer
        total:
          type: integer
        has_more:
          type: boolean
        next_cursor:
          type:
          - string
          - 'null'
    SubdomainsResponse:
      type: object
      description: Best-effort public hostname evidence. This response is not a complete inventory and can include the apex when a source returns it.
      required:
      - domain
      - subdomains
      - summary
      - intelligence_summary
      - meta
      properties:
        domain:
          type: string
          example: example.com
        subdomains:
          type: array
          description: Concrete hostnames returned after deduplication and the requested limit. Wildcard patterns are kept out of this array.
          items:
            type: object
            required:
            - name
            - source
            - first_seen
            - verified
            - dns_records
            properties:
              name:
                type: string
                description: Returned hostname. This can equal the requested apex when the source includes it.
                example: api.example.com
              source:
                type: string
                enum:
                - ct
                - crtsh
                - crtname
                - hackertarget
                - threatminer
                - wayback
                - certspotter
                description: Provider that supplied the evidence. `ct` is retained for older cached entries; new live results use a concrete provider value.
                example: crtsh
              first_seen:
                type:
                - string
                - 'null'
                description: For crt.sh and CertSpotter evidence, the earliest valid certificate not-before value found for this hostname. This is certificate validity evidence, not a CT log inclusion timestamp. Passive fallback sources return null.
                example: '2025-01-15T00:00:00Z'
              verified:
                type: boolean
                description: True only when DNS verification was requested and resolution succeeded for this returned hostname.
              dns_records:
                type:
                - object
                - 'null'
                description: A and CNAME records collected while verifying this returned hostname, or null. DNS verification does not discover additional names.
                properties:
                  A:
                    type: array
                    items:
                      type: string
                  CNAME:
                    type:
                    - string
                    - 'null'
        wildcards:
          type: array
          description: Wildcard certificate SAN evidence returned when include_wildcards is enabled. These patterns stay separate from concrete hostnames and do not count toward subdomains.
          items:
            type: object
            required:
            - pattern
            - source
            - first_seen
            properties:
              pattern:
                type: string
                example: '*.example.com'
              source:
                type: string
                enum:
                - ct
                - crtsh
                - certspotter
                description: '`ct` can appear in legacy cached wildcard evidence.'
              first_seen:
                type:
                - string
                - 'null'
                description: Earliest valid certificate not-before evidence for the pattern.
        summary:
          type: object
          properties:
            total_found:
              type: integer
              description: Concrete hostname entries found before applying the response limit.
            returned:
              type: integer
              description: Concrete hostname entries returned.
            verified_count:
              type: integer
              description: Returned hostnames that resolved during optional DNS verification.
            unverified_count:
              type: integer
              description: Returned hostnames that were not verified, including every entry when verification was not requested.
            sources_used:
              type: array
              description: Discovery providers that returned successfully during this request.
              items:
                type: string
                enum:
                - ct
                - crtsh
                - crtname
                - hackertarget
                - threatminer
                - wayback
                - certspotter
            apex_included:
              type: boolean
              description: Whether the concrete hostname list contains the requested apex.
            wildcard_suppressed_count:
              type: integer
              description: Wildcard SAN observations excluded from the concrete hostname list.
            wildcard_returned_count:
              type: integer
              description: Wildcard patterns returned in the separate wildcards array.
        intelligence_summary:
          $ref: '#/components/schemas/SubdomainIntelligenceSummary'
        warnings:
          type: array
          description: Non-fatal upstream warnings when a useful response can still be served.
          items:
            type: string
        meta:
          type: object
          properties:
            query_time_ms:
              type: integer
            cached:
              type: boolean
            stale:
              type: boolean
    CertificateIntelligenceSummary:
      type: object
      description: Compact source, freshness, truncation, and certificate posture summary for CT search results.
      properties:
        data_source:
          type: string
        ct_log_sources:
          type: array
          items:
            type: string
        source_count:
          type: integer
        cache_status:
          type: string
          enum:
          - live
          - fresh_cache
          - stale_cache
          - partial_unavailable
        returned_count:
          type: integer
        total_found:
          type: integer
        truncated:
          type: boolean
        limit:
          type: integer
        include_subdomains:
          type: boolean
        include_expired:
          type: boolean
        unique_name_count:
          type: integer
        unique_subdomains:
          type: integer
        issuer_count:
          type: integer
        wildcard_cert_count:
          type: integer
        active_cert_count:
          type: integer
        expired_cert_count:
          type: integer
        expiring_within_30_days_count:
          type: integer
        earliest_cert:
          type:
          - string
          - 'null'
        latest_cert:
          type:
          - string
          - 'null'
        latest_expiry:
          type:
          - string
          - 'null'
        has_more:
          type: boolean
        next_cursor:
          type:
          - string
          - 'null'
        warning_code:
          type:
          - string
          - 'null'
    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
    CertificatesResponse:
      type: object
      description: Certificate transparency search results
      properties:
        domain:
          type: string
        certificates:
          type: array
          items:
            type: object
            properties:
              id:
                type: string
              issuer:
                type: object
                additionalProperties: true
              common_name:
                type: string
              san:
                type: array
                items:
                  type: string
              not_before:
                type: string
                format: date-time
              not_after:
                type: string
                format: date-time
              is_expired:
                type: boolean
              is_wildcard:
                type: boolean
              fingerprint_sha256:
                type: string
        summary:
          type: object
          properties:
            total_found:
              type: integer
            returned:
              type: integer
            unique_subdomains:
              type: integer
            issuers:
              type: array
              items:
                type: string
            earliest_cert:
              type:
              - string
              - 'null'
            latest_cert:
              type:
              - string
              - 'null'
        pagination:
          $ref: '#/components/schemas/CertificatePagination'
        intelligence_summary:
          $ref: '#/components/schemas/CertificateIntelligenceSummary'
        meta:
          type: object
          additionalProperties: true
  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