openapi: 3.2.0 info: title: DomScan DNS History 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: DNS History description: Review lookup-driven, day-level DNS observations from DomScan paths: /v1/dns/history: get: tags: - DNS History summary: Get prior DomScan DNS observations description: Retrieve the beta, lookup-driven DNS observation log for a domain. Successful DNS API lookups can record non-empty answers and close previously observed record sets when a successful answer becomes empty. Dates are day-level, gaps between lookups can miss changes, and no external passive DNS sources are included. operationId: getDnsHistory parameters: - name: domain in: query required: true schema: type: string example: example.com description: Domain to search in DomScan observations - name: type in: query schema: type: string example: A description: Filter by record type (A, AAAA, MX, NS, TXT, etc.) - name: from in: query schema: type: string format: date example: '2026-01-01' description: Earliest day-level observation date to include - name: to in: query schema: type: string format: date example: '2026-04-15' description: Latest day-level observation date to include - name: limit in: query schema: type: integer default: 100 minimum: 1 maximum: 1000 example: 10 description: Maximum stored history rows to evaluate. Defaults to 100; meta.history_rows_truncated reports whether matching rows remain beyond the returned window. responses: '200': description: Prior DNS observations stored by DomScan content: application/json: schema: type: object properties: domain: type: string history: type: array items: type: object properties: date: type: string format: date record_type: type: string changes: type: array items: type: object properties: action: type: string enum: - added - removed value: type: string ttl: type: - integer - 'null' description: Observed TTL when available for an added event current_records: type: object description: Complete set of values currently marked active in the DomScan observation store, scoped only by the optional type filter. Date filters and the history row limit do not truncate this field. Removals require a two-day absence window to reduce false CDN and recursive-resolver rotation events. This is not a live DNS lookup. additionalProperties: type: array items: type: string first_seen: type: - string - 'null' format: date description: Earliest stored first_seen or last_seen observation boundary inside the requested date window and evaluated history rows. last_seen: type: - string - 'null' format: date description: Latest stored first_seen or last_seen observation boundary inside the requested date window and evaluated history rows. Never later than the requested to date. total_changes: type: integer description: Number of added and removed observation events in the returned history array. record_types_tracked: type: array description: Record types present in the evaluated history row window. items: type: string beta_notice: type: string meta: type: object properties: note: type: string data_source: type: string history_limit: type: integer history_rows_evaluated: type: integer history_rows_truncated: type: boolean removal_confirmation_days: type: integer enum: - 2 current_records_scope: type: string enum: - all_stored_current_records example: domain: example.com history: - date: '2026-04-13' record_type: A changes: - action: added value: 104.20.23.154 - action: added value: 172.66.147.243 - action: removed value: 104.18.26.120 current_records: A: - 104.20.23.154 - 172.66.147.243 first_seen: '2026-01-01' last_seen: '2026-04-13' total_changes: 3 record_types_tracked: - A beta_notice: Beta observation log. Coverage comes only from successful DomScan DNS lookups. Dates are day-level, changes between lookups can be missed, and no external passive DNS sources are included. meta: note: Lookup-driven DomScan observations only. Dates are day-level, gaps can miss changes, and no external passive DNS sources are included. data_source: internal history_limit: 100 history_rows_evaluated: 3 history_rows_truncated: false removal_confirmation_days: 2 current_records_scope: all_stored_current_records '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: 3 components: responses: 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 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 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