개발자 참고자료

DNS 히스토리

DomScan API로 이전에 성공한 DomScan 조회에서 관측된 DNS 값을 일 단위로 확인합니다. 이 베타 범위는 인터넷 전체의 패시브 DNS 아카이브가 아닙니다.

DNS 히스토리

이전에 성공한 DomScan 조회에서 관측된 DNS 값을 일 단위로 확인합니다. 이 베타 범위는 인터넷 전체의 패시브 DNS 아카이브가 아닙니다.

GET /v1/dns/history 크레딧: 3

쿼리 매개변수

매개변수 유형 필수
domain string 필수
type string 선택 사항
from string 선택 사항
to string 선택 사항
limit integer
기본값 100
선택 사항
cursor string 선택 사항

응답 필드

필드 유형
has_more boolean
next_cursor string | null
domain string
history[] object[]
history[] object
history[].date string
history[].record_type string
history[].changes[] object[]
history[].changes[] object
history[].changes[].action string
history[].changes[].value string
history[].changes[].ttl integer | null
current_records object
first_seen string | null
last_seen string | null
total_changes integer
record_types_tracked[] string[]
beta_notice string
meta object
meta.note string
meta.data_source string
meta.history_limit integer
meta.history_rows_evaluated integer
meta.history_rows_truncated boolean
meta.removal_confirmation_days integer
meta.current_records_scope string

예제 요청

curl -H "X-API-Key: $DOMSCAN_API_KEY" "https://domscan.net/v1/dns/history?domain=example.com&type=A&from=2026-01-01&to=2026-04-15&limit=10"
const response = await fetch("https://domscan.net/v1/dns/history?domain=example.com&type=A&from=2026-01-01&to=2026-04-15&limit=10", {
  headers: { "X-API-Key": process.env.DOMSCAN_API_KEY },
});
const data = await response.json();
console.log(data);
import os
import requests

response = requests.get(
    "https://domscan.net/v1/dns/history?domain=example.com&type=A&from=2026-01-01&to=2026-04-15&limit=10",
    headers={"X-API-Key": os.environ["DOMSCAN_API_KEY"]},
)
print(response.json())
package main

import (
	"fmt"
	"io"
	"net/http"
	"os"
)

func main() {
	req, err := http.NewRequest(http.MethodGet, "https://domscan.net/v1/dns/history?domain=example.com&type=A&from=2026-01-01&to=2026-04-15&limit=10", nil)
	if err != nil {
		panic(err)
	}
	req.Header.Set("X-API-Key", os.Getenv("DOMSCAN_API_KEY"))

	resp, err := http.DefaultClient.Do(req)
	if err != nil {
		panic(err)
	}
	defer resp.Body.Close()

	data, err := io.ReadAll(resp.Body)
	if err != nil {
		panic(err)
	}
	fmt.Println(resp.Status, string(data))
}
require "json"
require "net/http"

uri = URI("https://domscan.net/v1/dns/history?domain=example.com&type=A&from=2026-01-01&to=2026-04-15&limit=10")
request = Net::HTTP::Get.new(uri)
request["X-API-Key"] = ENV.fetch("DOMSCAN_API_KEY")

response = Net::HTTP.start(uri.hostname, uri.port, use_ssl: true) do |http|
  http.request(request)
end
puts JSON.pretty_generate(JSON.parse(response.body))

예제 응답

{
  "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"
  }
}

HTTP 상태 코드

  • 200 성공
  • 400 잘못된 요청
  • 401 인증되지 않음
  • 402 결제 필요
  • 429 요청 과다