> For the complete documentation index see https://domscan.net/llms.txt. Markdown versions of every docs page are available by appending .md to the page URL.

Source: https://domscan.net/ko/docs/pricing

# 도메인 가격

등록기관 공식 API의 정기 조회 결과와 공식 가격 페이지의 통제된 조회 결과에서 표준 등록, 갱신, 이전 가격을 가져옵니다. 오래된 출처는 제외하며 누락된 항목을 추정해 채우지 않습니다.

등록기관 공식 API의 정기 조회 결과와 공식 가격 페이지의 통제된 조회 결과에서 표준 등록, 갱신, 이전 가격을 가져옵니다. 오래된 출처는 제외하며 누락된 항목을 추정해 채우지 않습니다. 개별 도메인 견적은 자격 증명이 필요한 별도 어댑터를 사용합니다. 실제 확인한 고유한 TLD와 선택한 등록기관 조합마다 1크레딧이 부과됩니다. 고유한 TLD를 최대 50개까지 지정하는 대량 요청과 /v1/prices에서 TLD를 5개 초과해 요청하는 경우도 같습니다. /v1/prices/compare에서는 같은 조합의 표준 가격 행과 정확한 도메인 견적을 합쳐 한 번만 청구합니다. 중복된 TLD와 등록기관 ID는 한 번만 계산되며, 등록기관 필터를 사용하면 확인 및 청구되는 조합이 줄어듭니다. 정확한 견적이 실패하거나 결과를 알 수 없는 경우, 해당 조합의 표준 가격 행이 반환되지 않았을 때만 1크레딧을 환불합니다. 응답에는 예정 확인 수와 실제 확인 수가 표시됩니다. 제공 범위는 출처마다 다르므로 최종 가격은 결제 시 확인하세요.

[확장자별 가격 비교](https://domscan.net/ko/domain-pricing) · [연결된 모든 가격 제공업체 보기](https://domscan.net/ko/domain-pricing/registrars)

GET /v1/prices

#### 쿼리 매개변수

| 매개변수 | 유형 | 설명 |
| --- | --- | --- |
| tlds 선택 사항 | string | 가격을 조회할 TLD (예: "com", "io") |
| registrars 선택 사항 | string | 아니요. 실제 확인한 고유한 TLD와 선택한 등록기관 조합마다 1크레딧이 부과됩니다. 표준 조회, 고유한 TLD 최대 50개의 대량 요청, TLD 5개 초과 요청, 정확한 도메인의 실시간 견적 모두 같은 요금이 적용됩니다. 비교에서는 같은 조합의 표준 가격 행과 정확한 견적을 합쳐 한 번만 청구합니다. 중복 입력은 한 번만 계산되고, 등록기관 필터를 사용하면 요금이 줄어듭니다. 정확한 견적이 실패하거나 결과를 알 수 없는 경우, 해당 조합의 표준 가격 행이 반환되지 않았을 때만 1크레딧을 환불합니다. |

#### 예제 응답

```json
{
                "success": true,
                "data": {
                "results": [
                {
                "tld": "com",
                "prices": [
                {
                "registrar": "dynadot",
                "registrarName": "Dynadot",
                "register": 10.88,
                "renew": 10.88,
                "transfer": 10.88,
                "currency": "USD",
                "lastUpdated": "2026-07-12T02:00:00.000Z",
                "source": "cached",
                "sourceType": "official_page",
                "sourceName": "Dynadot official pricing page",
                "sourceUrl": "https://www.dynadot.com/domain/prices",
                "quoteScope": "tld_standard",
                "recommendationEligible": true,
                "confidence": "medium"
                },
                {
                "registrar": "porkbun",
                "registrarName": "Porkbun",
                "register": 11.08,
                "renew": 11.08,
                "transfer": 11.08,
                "currency": "USD",
                "lastUpdated": "2026-07-12T02:00:00.000Z",
                "source": "api",
                "sourceType": "official_api",
                "sourceName": "Porkbun public pricing API",
                "sourceUrl": "https://porkbun.com/api/json/v3/documentation",
                "quoteScope": "tld_standard",
                "recommendationEligible": true,
                "confidence": "high"
                }
                ],
                "lastUpdated": "2026-07-12T02:00:00.000Z",
                "price_summary": {
                "registrar_count": 2,
                "price_points": { "register": 2, "renew": 2, "transfer": 2 },
                "source_counts": { "api": 1, "cached": 1, "fallback": 0 },
                "freshness": {
                "freshest_at": "2026-07-12T02:00:00.000Z",
                "oldest_at": "2026-07-12T02:00:00.000Z"
                },
                "recommendation_eligible_registrar_count": 2,
                "quality_status": "healthy"
                }
                }
                ],
                "summary": {
                "tldsRequested": 1,
                "tldsWithData": 1,
                "totalPricePoints": 2,
                "market_summary": {
                "tlds_requested": 1,
                "tlds_with_data": 1,
                "total_price_points": 6,
                "fallback_tld_count": 0,
                "freshest_price_at": "2026-07-12T02:00:00.000Z",
                "oldest_price_at": "2026-07-12T02:00:00.000Z"
                },
                "checkAccounting": {
                "plannedChecks": 2,
                "actualChecks": 2,
                "successfulRows": 2,
                "creditsCharged": 2,
                "creditsPerCheck": 1,
                "selectedRegistrars": ["porkbun", "dynadot"]
                }
                }
                },
                "meta": {
                "cacheStatus": "hit"
                }
                }
```

#### 응답 필드

| 필드 | 유형 |
| --- | --- |
| `success` | boolean |
| `data` | object |
| `data.supportedTlds[]` | string[] |
| `data.count` | integer |
| `data.hint` | string |
| `data.results[]` | object[] |
| `data.results[]` | object |
| `data.results[].tld` | string |
| `data.results[].prices[]` | object[] |
| `data.results[].prices[]` | object |
| `data.results[].prices[].registrar` | string |
| `data.results[].prices[].registrarName` | string |
| `data.results[].prices[].register` | number \| null |
| `data.results[].prices[].renew` | number \| null |
| `data.results[].prices[].transfer` | number \| null |
| `data.results[].prices[].currency` | string |
| `data.results[].prices[].promoPrice` | number \| null |
| `data.results[].prices[].promoDetails` | string \| null |
| `data.results[].prices[].features` | object |
| `data.results[].prices[].features.freeWhoisPrivacy` | boolean |
| `data.results[].prices[].features.freeDns` | boolean |
| `data.results[].prices[].lastUpdated` | string \| null |
| `data.results[].prices[].source` | string |
| `data.results[].prices[].sourceName` | string |
| `data.results[].prices[].sourceUrl` | string \| null |
| `data.results[].prices[].confidence` | string |
| `data.results[].prices[].sourceType` | string |
| `data.results[].prices[].quoteScope` | string |
| `data.results[].prices[].observedAt` | string \| null |
| `data.results[].prices[].recommendationEligible` | boolean |
| `data.results[].prices[].recommendationExclusionReason` | string \| null |
| `data.results[].cheapest` | object |
| `data.results[].cheapest.register` | object \| null |
| `data.results[].cheapest.renew` | object \| null |
| `data.results[].cheapest.transfer` | object \| null |
| `data.results[].averagePrice` | object |
| `data.results[].averagePrice.register` | number \| null |
| `data.results[].averagePrice.renew` | number \| null |
| `data.results[].averagePrice.transfer` | number \| null |
| `data.results[].priceRange` | object |
| `data.results[].priceRange.register` | object \| null |
| `data.results[].priceRange.renew` | object \| null |
| `data.results[].priceRange.transfer` | object \| null |
| `data.results[].lastUpdated` | string \| null |
| `data.results[].dataQuality` | object |
| `data.results[].dataQuality.sourcesQueried` | integer |
| `data.results[].dataQuality.sourcesSucceeded` | integer |
| `data.results[].dataQuality.cacheHitRate` | number |
| `data.results[].dataQuality.averageConfidence` | string |
| `data.results[].price_summary` | object |
| `data.results[].price_summary.registrar_count` | integer |
| `data.results[].price_summary.registrar_coverage_ratio` | number |
| `data.results[].price_summary.price_points` | object |
| `data.results[].price_summary.price_points.register` | integer |
| `data.results[].price_summary.price_points.renew` | integer |
| `data.results[].price_summary.price_points.transfer` | integer |
| `data.results[].price_summary.source_counts` | object |
| `data.results[].price_summary.confidence_counts` | object |
| `data.results[].price_summary.freshness` | object |
| `data.results[].price_summary.freshness.freshest_at` | string \| null |
| `data.results[].price_summary.freshness.oldest_at` | string \| null |
| `data.results[].price_summary.freshness.newest_age_hours` | number \| null |
| `data.results[].price_summary.freshness.stale_price_count` | integer |
| `data.results[].price_summary.freshness.unknown_freshness_count` | integer |
| `data.results[].price_summary.spread` | object |
| `data.results[].price_summary.spread.register_usd` | number \| null |
| `data.results[].price_summary.spread.renew_usd` | number \| null |
| `data.results[].price_summary.spread.transfer_usd` | number \| null |
| `data.results[].price_summary.outlier_count` | integer |
| `data.results[].price_summary.recommendation_eligible_registrar_count` | integer |
| `data.results[].price_summary.quality_status` | string |
| `data.results[].price_summary.cheapest_register` | object \| null |
| `data.results[].price_summary.cheapest_renew` | object \| null |
| `data.results[].price_summary.cheapest_transfer` | object \| null |
| `data.results[].checkAccounting` | object |
| `data.results[].checkAccounting.plannedChecks` | integer |
| `data.results[].checkAccounting.actualChecks` | integer |
| `data.results[].checkAccounting.successfulRows` | integer |
| `data.results[].checkAccounting.creditsCharged` | integer |
| `data.results[].checkAccounting.creditsPerCheck` | integer |
| `data.results[].checkAccounting.liveQuoteChecks` | integer |
| `data.results[].checkAccounting.creditsPerLiveQuote` | integer |
| `data.results[].checkAccounting.creditsRefunded` | integer |
| `data.results[].checkAccounting.selectedRegistrars[]` | string[] |
| `data.summary` | object |
| `data.summary.tldsRequested` | integer |
| `data.summary.tldsWithData` | integer |
| `data.summary.totalPricePoints` | integer |
| `data.summary.quoteCount` | integer |
| `data.summary.numericPriceFieldCount` | integer |
| `data.summary.market_summary` | object |
| `data.summary.market_summary.tlds_requested` | integer |
| `data.summary.market_summary.tlds_with_data` | integer |
| `data.summary.market_summary.quote_count` | integer |
| `data.summary.market_summary.integrated_source_count` | integer |
| `data.summary.market_summary.total_price_points` | integer |
| `data.summary.market_summary.average_registrar_coverage_ratio` | number |
| `data.summary.market_summary.stale_tld_count` | integer |
| `data.summary.market_summary.fallback_tld_count` | integer |
| `data.summary.market_summary.outlier_tld_count` | integer |
| `data.summary.market_summary.widest_register_spread_tld` | string \| null |
| `data.summary.market_summary.max_register_spread_usd` | number \| null |
| `data.summary.market_summary.freshest_price_at` | string \| null |
| `data.summary.market_summary.oldest_price_at` | string \| null |
| `data.summary.market_summary.checkAccounting` | object |
| `data.summary.market_summary.checkAccounting.plannedChecks` | integer |
| `data.summary.market_summary.checkAccounting.actualChecks` | integer |
| `data.summary.market_summary.checkAccounting.successfulRows` | integer |
| `data.summary.market_summary.checkAccounting.creditsCharged` | integer |
| `data.summary.market_summary.checkAccounting.creditsPerCheck` | integer |
| `data.summary.market_summary.checkAccounting.liveQuoteChecks` | integer |
| `data.summary.market_summary.checkAccounting.creditsPerLiveQuote` | integer |
| `data.summary.market_summary.checkAccounting.creditsRefunded` | integer |
| `data.summary.market_summary.checkAccounting.selectedRegistrars[]` | string[] |
| `data.summary.checkAccounting` | object |
| `data.summary.checkAccounting.plannedChecks` | integer |
| `data.summary.checkAccounting.actualChecks` | integer |
| `data.summary.checkAccounting.successfulRows` | integer |
| `data.summary.checkAccounting.creditsCharged` | integer |
| `data.summary.checkAccounting.creditsPerCheck` | integer |
| `data.summary.checkAccounting.liveQuoteChecks` | integer |
| `data.summary.checkAccounting.creditsPerLiveQuote` | integer |
| `data.summary.checkAccounting.creditsRefunded` | integer |
| `data.summary.checkAccounting.selectedRegistrars[]` | string[] |
| `meta` | object |
| `meta.requestId` | string |
| `meta.servedBy` | string |
| `meta.durationMs` | integer |
| `meta.cacheStatus` | string |

GET /v1/prices/tld/:tld 크레딧: 1/pair

#### 쿼리 매개변수

| 매개변수 | 유형 | 필수 |
| --- | --- | --- |
| tld | string | 필수 |
| registrars | string | 선택 사항 |
| skip_cache | boolean 기본값 `false` | 선택 사항 |
| dry_run | string 허용된 값 `true` | 선택 사항 |

#### 응답 필드

| 필드 | 유형 |
| --- | --- |
| `success` | boolean |
| `data` | object |
| `data.tld` | string |
| `data.prices[]` | object[] |
| `data.prices[]` | object |
| `data.prices[].registrar` | string |
| `data.prices[].registrarName` | string |
| `data.prices[].register` | number \| null |
| `data.prices[].renew` | number \| null |
| `data.prices[].transfer` | number \| null |
| `data.prices[].currency` | string |
| `data.prices[].promoPrice` | number \| null |
| `data.prices[].promoDetails` | string \| null |
| `data.prices[].features` | object |
| `data.prices[].features.freeWhoisPrivacy` | boolean |
| `data.prices[].features.freeDns` | boolean |
| `data.prices[].lastUpdated` | string \| null |
| `data.prices[].source` | string |
| `data.prices[].sourceName` | string |
| `data.prices[].sourceUrl` | string \| null |
| `data.prices[].confidence` | string |
| `data.prices[].sourceType` | string |
| `data.prices[].quoteScope` | string |
| `data.prices[].observedAt` | string \| null |
| `data.prices[].recommendationEligible` | boolean |
| `data.prices[].recommendationExclusionReason` | string \| null |
| `data.cheapest` | object |
| `data.cheapest.register` | object \| null |
| `data.cheapest.renew` | object \| null |
| `data.cheapest.transfer` | object \| null |
| `data.averagePrice` | object |
| `data.averagePrice.register` | number \| null |
| `data.averagePrice.renew` | number \| null |
| `data.averagePrice.transfer` | number \| null |
| `data.priceRange` | object |
| `data.priceRange.register` | object \| null |
| `data.priceRange.renew` | object \| null |
| `data.priceRange.transfer` | object \| null |
| `data.lastUpdated` | string \| null |
| `data.dataQuality` | object |
| `data.dataQuality.sourcesQueried` | integer |
| `data.dataQuality.sourcesSucceeded` | integer |
| `data.dataQuality.cacheHitRate` | number |
| `data.dataQuality.averageConfidence` | string |
| `data.price_summary` | object |
| `data.price_summary.registrar_count` | integer |
| `data.price_summary.registrar_coverage_ratio` | number |
| `data.price_summary.price_points` | object |
| `data.price_summary.price_points.register` | integer |
| `data.price_summary.price_points.renew` | integer |
| `data.price_summary.price_points.transfer` | integer |
| `data.price_summary.source_counts` | object |
| `data.price_summary.confidence_counts` | object |
| `data.price_summary.freshness` | object |
| `data.price_summary.freshness.freshest_at` | string \| null |
| `data.price_summary.freshness.oldest_at` | string \| null |
| `data.price_summary.freshness.newest_age_hours` | number \| null |
| `data.price_summary.freshness.stale_price_count` | integer |
| `data.price_summary.freshness.unknown_freshness_count` | integer |
| `data.price_summary.spread` | object |
| `data.price_summary.spread.register_usd` | number \| null |
| `data.price_summary.spread.renew_usd` | number \| null |
| `data.price_summary.spread.transfer_usd` | number \| null |
| `data.price_summary.outlier_count` | integer |
| `data.price_summary.recommendation_eligible_registrar_count` | integer |
| `data.price_summary.quality_status` | string |
| `data.price_summary.cheapest_register` | object \| null |
| `data.price_summary.cheapest_renew` | object \| null |
| `data.price_summary.cheapest_transfer` | object \| null |
| `data.checkAccounting` | object |
| `data.checkAccounting.plannedChecks` | integer |
| `data.checkAccounting.actualChecks` | integer |
| `data.checkAccounting.successfulRows` | integer |
| `data.checkAccounting.creditsCharged` | integer |
| `data.checkAccounting.creditsPerCheck` | integer |
| `data.checkAccounting.liveQuoteChecks` | integer |
| `data.checkAccounting.creditsPerLiveQuote` | integer |
| `data.checkAccounting.creditsRefunded` | integer |
| `data.checkAccounting.selectedRegistrars[]` | string[] |
| `meta` | object |
| `meta.requestId` | string |
| `meta.servedBy` | string |
| `meta.durationMs` | integer |
| `meta.cacheStatus` | string |

#### 예제 요청

```bash
curl -H "X-API-Key: $DOMSCAN_API_KEY" "https://domscan.net/v1/prices/tld/com?registrars=porkbun%2Cdynadot&skip_cache=false"
```

```javascript
const response = await fetch("https://domscan.net/v1/prices/tld/com?registrars=porkbun%2Cdynadot&skip_cache=false", {
  headers: { "X-API-Key": process.env.DOMSCAN_API_KEY },
});
const data = await response.json();
console.log(data);
```

```python
import os
import requests

response = requests.get(
    "https://domscan.net/v1/prices/tld/com?registrars=porkbun%2Cdynadot&skip_cache=false",
    headers={"X-API-Key": os.environ["DOMSCAN_API_KEY"]},
)
print(response.json())
```

```go
package main

func main() {
	req, err := http.NewRequest(http.MethodGet, "https://domscan.net/v1/prices/tld/com?registrars=porkbun%2Cdynadot&skip_cache=false", nil)
	if err != nil {
		panic(err)
	}
	req.Header.Set("X-API-Key", os.Getenv("DOMSCAN_API_KEY"))

```ruby
require "json"
require "net/http"

uri = URI("https://domscan.net/v1/prices/tld/com?registrars=porkbun%2Cdynadot&skip_cache=false")
request = Net::HTTP::Get.new(uri)
request["X-API-Key"] = ENV.fetch("DOMSCAN_API_KEY")

#### 예제 응답

```json
{
  "success": true,
  "data": {
    "tld": "com",
    "prices": [
      {
        "registrar": "example",
        "registrarName": "example",
        "register": 0.5,
        "renew": 0.5,
        "transfer": 0.5,
        "currency": "USD",
        "promoPrice": 0.5,
        "promoDetails": "example",
        "features": {
          "freeWhoisPrivacy": false,
          "freeDns": false
        },
        "lastUpdated": "2026-08-27T12:00:00Z",
        "source": "api",
        "sourceName": "example",
        "sourceUrl": "https://example.com",
        "confidence": "high",
        "sourceType": "official_api",
        "quoteScope": "tld_standard",
        "observedAt": "2026-08-27T12:00:00Z",
        "recommendationEligible": false,
        "recommendationExclusionReason": "stale"
      }
    ],
    "cheapest": {
      "register": {},
      "renew": {},
      "transfer": {}
    },
    "averagePrice": {
      "register": 0.5,
      "renew": 0.5,
      "transfer": 0.5
    },
    "priceRange": {
      "register": {},
      "renew": {},
      "transfer": {}
    },
    "lastUpdated": "2026-08-27T12:00:00Z",
    "dataQuality": {
      "sourcesQueried": 1,
      "sourcesSucceeded": 1,
      "cacheHitRate": 0.5,
      "averageConfidence": "high"
    },
    "price_summary": {
      "registrar_count": 1,
      "registrar_coverage_ratio": 0.5,
      "price_points": {
        "register": 1,
        "renew": 1,
        "transfer": 1
      },
      "source_counts": {},
      "confidence_counts": {},
      "freshness": {
        "freshest_at": "2026-08-27T12:00:00Z",
        "oldest_at": "2026-08-27T12:00:00Z",
        "newest_age_hours": 0.5,
        "stale_price_count": 1,
        "unknown_freshness_count": 1
      },
      "spread": {
        "register_usd": 0.5,
        "renew_usd": 0.5,
        "transfer_usd": 0.5
      },
      "outlier_count": 1,
      "recommendation_eligible_registrar_count": 1,
      "quality_status": "healthy",
      "cheapest_register": {},
      "cheapest_renew": {},
      "cheapest_transfer": {}
    },
    "checkAccounting": {
      "plannedChecks": 1,
      "actualChecks": 1,
      "successfulRows": 1,
      "creditsCharged": 1,
      "creditsPerCheck": 1,
      "selectedRegistrars": [
        "example"
      ],
      "liveQuoteChecks": 1,
      "creditsPerLiveQuote": 1,
      "creditsRefunded": 1
    }
  },
  "meta": {
    "requestId": "request-id",
    "servedBy": "example",
    "durationMs": 1,
    "cacheStatus": "hit"
  }
}
```

#### HTTP 상태 코드

- `200` 성공
- `400` 잘못된 요청
- `401` 인증되지 않음
- `402` 결제 필요
- `429` 요청 과다
- `503` 서비스 이용 불가

POST /v1/prices/bulk 크레딧: 1/pair

#### 쿼리 매개변수

| 매개변수 | 유형 | 필수 |
| --- | --- | --- |
| dry_run | string 허용된 값 `true` | 선택 사항 |

#### 본문 매개변수

| 매개변수 | 유형 | 필수 |
| --- | --- | --- |
| tlds | string[] | 필수 |
| registrars | string[] | 선택 사항 |
| options | object | 선택 사항 |

#### 응답 필드

| 필드 | 유형 |
| --- | --- |
| `success` | boolean |
| `data` | object |
| `data.results[]` | object[] |
| `data.results[]` | object |
| `data.results[].tld` | string |
| `data.results[].prices[]` | object[] |
| `data.results[].prices[]` | object |
| `data.results[].prices[].registrar` | string |
| `data.results[].prices[].registrarName` | string |
| `data.results[].prices[].register` | number \| null |
| `data.results[].prices[].renew` | number \| null |
| `data.results[].prices[].transfer` | number \| null |
| `data.results[].prices[].currency` | string |
| `data.results[].prices[].promoPrice` | number \| null |
| `data.results[].prices[].promoDetails` | string \| null |
| `data.results[].prices[].features` | object |
| `data.results[].prices[].features.freeWhoisPrivacy` | boolean |
| `data.results[].prices[].features.freeDns` | boolean |
| `data.results[].prices[].lastUpdated` | string \| null |
| `data.results[].prices[].source` | string |
| `data.results[].prices[].sourceName` | string |
| `data.results[].prices[].sourceUrl` | string \| null |
| `data.results[].prices[].confidence` | string |
| `data.results[].prices[].sourceType` | string |
| `data.results[].prices[].quoteScope` | string |
| `data.results[].prices[].observedAt` | string \| null |
| `data.results[].prices[].recommendationEligible` | boolean |
| `data.results[].prices[].recommendationExclusionReason` | string \| null |
| `data.results[].cheapest` | object |
| `data.results[].cheapest.register` | object \| null |
| `data.results[].cheapest.renew` | object \| null |
| `data.results[].cheapest.transfer` | object \| null |
| `data.results[].averagePrice` | object |
| `data.results[].averagePrice.register` | number \| null |
| `data.results[].averagePrice.renew` | number \| null |
| `data.results[].averagePrice.transfer` | number \| null |
| `data.results[].priceRange` | object |
| `data.results[].priceRange.register` | object \| null |
| `data.results[].priceRange.renew` | object \| null |
| `data.results[].priceRange.transfer` | object \| null |
| `data.results[].lastUpdated` | string \| null |
| `data.results[].dataQuality` | object |
| `data.results[].dataQuality.sourcesQueried` | integer |
| `data.results[].dataQuality.sourcesSucceeded` | integer |
| `data.results[].dataQuality.cacheHitRate` | number |
| `data.results[].dataQuality.averageConfidence` | string |
| `data.results[].price_summary` | object |
| `data.results[].price_summary.registrar_count` | integer |
| `data.results[].price_summary.registrar_coverage_ratio` | number |
| `data.results[].price_summary.price_points` | object |
| `data.results[].price_summary.price_points.register` | integer |
| `data.results[].price_summary.price_points.renew` | integer |
| `data.results[].price_summary.price_points.transfer` | integer |
| `data.results[].price_summary.source_counts` | object |
| `data.results[].price_summary.confidence_counts` | object |
| `data.results[].price_summary.freshness` | object |
| `data.results[].price_summary.freshness.freshest_at` | string \| null |
| `data.results[].price_summary.freshness.oldest_at` | string \| null |
| `data.results[].price_summary.freshness.newest_age_hours` | number \| null |
| `data.results[].price_summary.freshness.stale_price_count` | integer |
| `data.results[].price_summary.freshness.unknown_freshness_count` | integer |
| `data.results[].price_summary.spread` | object |
| `data.results[].price_summary.spread.register_usd` | number \| null |
| `data.results[].price_summary.spread.renew_usd` | number \| null |
| `data.results[].price_summary.spread.transfer_usd` | number \| null |
| `data.results[].price_summary.outlier_count` | integer |
| `data.results[].price_summary.recommendation_eligible_registrar_count` | integer |
| `data.results[].price_summary.quality_status` | string |
| `data.results[].price_summary.cheapest_register` | object \| null |
| `data.results[].price_summary.cheapest_renew` | object \| null |
| `data.results[].price_summary.cheapest_transfer` | object \| null |
| `data.results[].checkAccounting` | object |
| `data.results[].checkAccounting.plannedChecks` | integer |
| `data.results[].checkAccounting.actualChecks` | integer |
| `data.results[].checkAccounting.successfulRows` | integer |
| `data.results[].checkAccounting.creditsCharged` | integer |
| `data.results[].checkAccounting.creditsPerCheck` | integer |
| `data.results[].checkAccounting.liveQuoteChecks` | integer |
| `data.results[].checkAccounting.creditsPerLiveQuote` | integer |
| `data.results[].checkAccounting.creditsRefunded` | integer |
| `data.results[].checkAccounting.selectedRegistrars[]` | string[] |
| `data.summary` | object |
| `data.summary.tlds_requested` | integer |
| `data.summary.tlds_with_data` | integer |
| `data.summary.quote_count` | integer |
| `data.summary.integrated_source_count` | integer |
| `data.summary.total_price_points` | integer |
| `data.summary.average_registrar_coverage_ratio` | number |
| `data.summary.stale_tld_count` | integer |
| `data.summary.fallback_tld_count` | integer |
| `data.summary.outlier_tld_count` | integer |
| `data.summary.widest_register_spread_tld` | string \| null |
| `data.summary.max_register_spread_usd` | number \| null |
| `data.summary.freshest_price_at` | string \| null |
| `data.summary.oldest_price_at` | string \| null |
| `data.summary.checkAccounting` | object |
| `data.summary.checkAccounting.plannedChecks` | integer |
| `data.summary.checkAccounting.actualChecks` | integer |
| `data.summary.checkAccounting.successfulRows` | integer |
| `data.summary.checkAccounting.creditsCharged` | integer |
| `data.summary.checkAccounting.creditsPerCheck` | integer |
| `data.summary.checkAccounting.liveQuoteChecks` | integer |
| `data.summary.checkAccounting.creditsPerLiveQuote` | integer |
| `data.summary.checkAccounting.creditsRefunded` | integer |
| `data.summary.checkAccounting.selectedRegistrars[]` | string[] |
| `data.meta` | object |
| `meta` | object |
| `meta.requestId` | string |
| `meta.servedBy` | string |
| `meta.durationMs` | integer |
| `meta.cacheStatus` | string |

#### 예제 요청

```bash
curl -X POST "https://domscan.net/v1/prices/bulk" \
  -H "Content-Type: application/json" \
  -H "X-API-Key: $DOMSCAN_API_KEY" \
  -d '{
  "tlds": [
    "com",
    "net",
    "org"
  ],
  "registrars": [
    "porkbun",
    "dynadot"
  ]
}'
```

```javascript
const response = await fetch("https://domscan.net/v1/prices/bulk", {
  method: "POST",
  headers: { "X-API-Key": process.env.DOMSCAN_API_KEY, "Content-Type": "application/json" },
  body: JSON.stringify({
    "tlds": [
      "com",
      "net",
      "org"
    ],
    "registrars": [
      "porkbun",
      "dynadot"
    ]
  }),
});
const data = await response.json();
console.log(data);
```

```python
import os
import requests

response = requests.post(
    "https://domscan.net/v1/prices/bulk",
    headers={"X-API-Key": os.environ["DOMSCAN_API_KEY"]},
    json={
        "tlds": [
            "com",
            "net",
            "org",
        ],
        "registrars": [
            "porkbun",
            "dynadot",
        ],
    },
)
print(response.json())
```

```go
package main

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

func main() {
	body := strings.NewReader(`{
	  "tlds": [
	    "com",
	    "net",
	    "org"
	  ],
	  "registrars": [
	    "porkbun",
	    "dynadot"
	  ]
	}`)
	req, err := http.NewRequest(http.MethodPost, "https://domscan.net/v1/prices/bulk", body)
	if err != nil {
		panic(err)
	}
	req.Header.Set("X-API-Key", os.Getenv("DOMSCAN_API_KEY"))
	req.Header.Set("Content-Type", "application/json")

```ruby
require "json"
require "net/http"

uri = URI("https://domscan.net/v1/prices/bulk")
request = Net::HTTP::Post.new(uri)
request["X-API-Key"] = ENV.fetch("DOMSCAN_API_KEY")
request["Content-Type"] = "application/json"
request.body = JSON.generate({
  "tlds" => [
    "com",
    "net",
    "org"
  ],
  "registrars" => [
    "porkbun",
    "dynadot"
  ]
})

#### 예제 응답

```json
{
  "success": true,
  "data": {
    "results": [
      {
        "tld": "com",
        "prices": [
          {
            "registrar": "example",
            "registrarName": "example",
            "register": 0.5,
            "renew": 0.5,
            "transfer": 0.5,
            "currency": "USD",
            "promoPrice": 0.5,
            "promoDetails": "example",
            "features": {
              "freeWhoisPrivacy": false,
              "freeDns": false
            },
            "lastUpdated": "2026-08-27T12:00:00Z",
            "source": "api",
            "sourceName": "example",
            "sourceUrl": "https://example.com",
            "confidence": "high",
            "sourceType": "official_api",
            "quoteScope": "tld_standard",
            "observedAt": "2026-08-27T12:00:00Z",
            "recommendationEligible": false,
            "recommendationExclusionReason": "stale"
          }
        ],
        "cheapest": {
          "register": {},
          "renew": {},
          "transfer": {}
        },
        "averagePrice": {
          "register": 0.5,
          "renew": 0.5,
          "transfer": 0.5
        },
        "priceRange": {
          "register": {},
          "renew": {},
          "transfer": {}
        },
        "lastUpdated": "2026-08-27T12:00:00Z",
        "dataQuality": {
          "sourcesQueried": 1,
          "sourcesSucceeded": 1,
          "cacheHitRate": 0.5,
          "averageConfidence": "high"
        },
        "price_summary": {
          "registrar_count": 1,
          "registrar_coverage_ratio": 0.5,
          "price_points": {
            "register": 1,
            "renew": 1,
            "transfer": 1
          },
          "source_counts": {},
          "confidence_counts": {},
          "freshness": {
            "freshest_at": "2026-08-27T12:00:00Z",
            "oldest_at": "2026-08-27T12:00:00Z",
            "newest_age_hours": 0.5,
            "stale_price_count": 1,
            "unknown_freshness_count": 1
          },
          "spread": {
            "register_usd": 0.5,
            "renew_usd": 0.5,
            "transfer_usd": 0.5
          },
          "outlier_count": 1,
          "recommendation_eligible_registrar_count": 1,
          "quality_status": "healthy",
          "cheapest_register": {},
          "cheapest_renew": {},
          "cheapest_transfer": {}
        },
        "checkAccounting": {
          "plannedChecks": 1,
          "actualChecks": 1,
          "successfulRows": 1,
          "creditsCharged": 1,
          "creditsPerCheck": 1,
          "selectedRegistrars": [
            "example"
          ],
          "liveQuoteChecks": 1,
          "creditsPerLiveQuote": 1,
          "creditsRefunded": 1
        }
      }
    ],
    "summary": {
      "tlds_requested": 1,
      "tlds_with_data": 1,
      "quote_count": 1,
      "integrated_source_count": 1,
      "total_price_points": 1,
      "average_registrar_coverage_ratio": 0.5,
      "stale_tld_count": 1,
      "fallback_tld_count": 1,
      "outlier_tld_count": 1,
      "widest_register_spread_tld": "com",
      "max_register_spread_usd": 0.5,
      "freshest_price_at": "2026-08-27T12:00:00Z",
      "oldest_price_at": "2026-08-27T12:00:00Z",
      "checkAccounting": {
        "plannedChecks": 1,
        "actualChecks": 1,
        "successfulRows": 1,
        "creditsCharged": 1,
        "creditsPerCheck": 1,
        "selectedRegistrars": [
          "example"
        ],
        "liveQuoteChecks": 1,
        "creditsPerLiveQuote": 1,
        "creditsRefunded": 1
      }
    },
    "meta": {}
  },
  "meta": {
    "requestId": "request-id",
    "servedBy": "example",
    "durationMs": 1,
    "cacheStatus": "hit"
  }
}
```

#### HTTP 상태 코드

- `200` 성공
- `400` 잘못된 요청
- `401` 인증되지 않음
- `402` 결제 필요
- `409` HTTP 409
- `422` HTTP 422
- `429` 요청 과다
- `503` 서비스 이용 불가

GET /v1/prices/registrars 크레딧: 0

#### 쿼리 매개변수

| 매개변수 | 유형 | 필수 |
| --- | --- | --- |
| dry_run | string 허용된 값 `true` | 선택 사항 |

#### 응답 필드

| 필드 | 유형 |
| --- | --- |
| `success` | boolean |
| `data` | object |
| `data.registrars[]` | object[] |
| `data.registrars[]` | object |
| `data.registrars[].id` | string |
| `data.registrars[].name` | string |
| `data.registrars[].website` | string |
| `data.registrars[].apiAvailable` | boolean |
| `data.registrars[].providerType` | string |
| `data.registrars[].pricingIntegrated` | boolean |
| `data.registrars[].pricingIntegration` | string \| null |
| `data.registrars[].standardPricingIntegration` | string \| null |
| `data.registrars[].exactDomainPricingIntegrated` | boolean |
| `data.registrars[].pricingModes[]` | string[] |
| `data.registrars[].features` | object |
| `data.registrars[].features.freeWhoisPrivacy` | boolean |
| `data.registrars[].features.freeDns` | boolean |
| `data.registrars[].features.bulkDiscounts` | boolean |
| `data.pricingCoverage` | object |
| `data.pricingCoverage.listedRegistrarCount` | integer |
| `data.pricingCoverage.integratedRegistrarCount` | integer |
| `data.pricingCoverage.standardPricingSources[]` | string[] |
| `data.pricingCoverage.directPricingSources[]` | string[] |
| `data.pricingCoverage.scrapedPricingSources[]` | string[] |
| `data.pricingCoverage.exactDomainPricingSources[]` | string[] |
| `data.pricingCoverage.snapshotGeneratedAt` | string \| null |
| `data.pricingCoverage.sourceHealth[]` | object[] |
| `data.pricingCoverage.sourceHealth[]` | object |
| `data.pricingCoverage.sourceHealth[].source` | string |
| `data.pricingCoverage.sourceHealth[].registrar` | string \| null |
| `data.pricingCoverage.sourceHealth[].configured` | boolean |
| `data.pricingCoverage.sourceHealth[].success` | boolean |
| `data.pricingCoverage.sourceHealth[].sourceType` | string \| null |
| `data.pricingCoverage.sourceHealth[].tldCount` | integer |
| `data.pricingCoverage.sourceHealth[].durationMs` | integer |
| `data.pricingCoverage.sourceHealth[].error` | string \| null |
| `data.pricingCoverage.sourceHealth[].retainedPreviousSnapshot` | boolean |
| `data.pricingCoverage.sourceHealth[].runId` | string |
| `data.pricingCoverage.sourceHealth[].fetchedAt` | string |
| `data.pricingCoverage.sourceHealth[].previousTldCount` | integer \| null |
| `data.pricingCoverage.sourceHealth[].lastSuccessAt` | string \| null |
| `data.pricingCoverage.sourceHealth[].contentHash` | string \| null |
| `data.pricingCoverage.sourceHealth[].schemaFingerprint` | string \| null |
| `data.pricingCoverage.sourceHealth[].fieldCoverage` | object |
| `data.pricingCoverage.sourceHealth[].fieldCoverage.register` | integer |
| `data.pricingCoverage.sourceHealth[].fieldCoverage.renew` | integer |
| `data.pricingCoverage.sourceHealth[].fieldCoverage.transfer` | integer |
| `data.pricingCoverage.note` | string |
| `data.lastUpdated` | string |
| `meta` | object |
| `meta.requestId` | string |
| `meta.servedBy` | string |
| `meta.durationMs` | integer |
| `meta.cacheStatus` | string |

#### 예제 요청

```bash
curl -H "X-API-Key: $DOMSCAN_API_KEY" "https://domscan.net/v1/prices/registrars"
```

```javascript
const response = await fetch("https://domscan.net/v1/prices/registrars", {
  headers: { "X-API-Key": process.env.DOMSCAN_API_KEY },
});
const data = await response.json();
console.log(data);
```

```python
import os
import requests

response = requests.get(
    "https://domscan.net/v1/prices/registrars",
    headers={"X-API-Key": os.environ["DOMSCAN_API_KEY"]},
)
print(response.json())
```

```go
package main

func main() {
	req, err := http.NewRequest(http.MethodGet, "https://domscan.net/v1/prices/registrars", nil)
	if err != nil {
		panic(err)
	}
	req.Header.Set("X-API-Key", os.Getenv("DOMSCAN_API_KEY"))

```ruby
require "json"
require "net/http"

uri = URI("https://domscan.net/v1/prices/registrars")
request = Net::HTTP::Get.new(uri)
request["X-API-Key"] = ENV.fetch("DOMSCAN_API_KEY")

#### 예제 응답

```json
{
  "success": true,
  "data": {
    "registrars": [
      {
        "id": "porkbun",
        "name": "Porkbun",
        "website": "https://porkbun.com",
        "apiAvailable": true,
        "providerType": "registrar",
        "pricingIntegrated": true,
        "pricingIntegration": "official_api",
        "standardPricingIntegration": "official_api",
        "exactDomainPricingIntegrated": false,
        "pricingModes": [
          "tld_standard"
        ],
        "features": {
          "freeWhoisPrivacy": true,
          "freeDns": true,
          "bulkDiscounts": false
        }
      }
    ],
    "pricingCoverage": {
      "listedRegistrarCount": 120,
      "integratedRegistrarCount": 29,
      "standardPricingSources": [
        "porkbun",
        "dynadot",
        "namesilo"
      ],
      "directPricingSources": [
        "porkbun",
        "namesilo",
        "namebright"
      ],
      "scrapedPricingSources": [
        "dynadot",
        "gandi",
        "name_com"
      ],
      "exactDomainPricingSources": [
        "cloudflare",
        "namesilo",
        "name_com",
        "spaceship",
        "vercel",
        "openprovider"
      ],
      "snapshotGeneratedAt": "2026-07-12T10:35:11.735Z",
      "sourceHealth": [
        {
          "source": "porkbun",
          "registrar": "porkbun",
          "configured": true,
          "success": true,
          "sourceType": "official_api",
          "tldCount": 907,
          "durationMs": 421,
          "error": null,
          "retainedPreviousSnapshot": false
        }
      ],
      "note": "Registrar entries are metadata. Standard and exact-domain integrations are reported separately."
    },
    "lastUpdated": "2026-07-12T10:35:11.735Z"
  },
  "meta": {
    "requestId": "req_example",
    "servedBy": "pop=MAD",
    "durationMs": 12,
    "cacheStatus": "bypass"
  }
}
```

#### HTTP 상태 코드

- `200` 성공
- `401` 인증되지 않음
- `429` 요청 과다

GET /v1/prices/compare 크레딧: 1/pair

#### 쿼리 매개변수

| 매개변수 | 유형 | 필수 |
| --- | --- | --- |
| domain | string | 필수 |
| registrars | string | 선택 사항 |
| skip_cache | boolean 기본값 `false` | 선택 사항 |
| dry_run | string 허용된 값 `true` | 선택 사항 |

#### 응답 필드

| 필드 | 유형 |
| --- | --- |
| `success` | boolean |
| `data` | object |
| `data.domain` | string |
| `data.tld` | string |
| `data.pricing` | object |
| `data.pricing.tld` | string |
| `data.pricing.prices[]` | object[] |
| `data.pricing.prices[]` | object |
| `data.pricing.prices[].registrar` | string |
| `data.pricing.prices[].registrarName` | string |
| `data.pricing.prices[].register` | number \| null |
| `data.pricing.prices[].renew` | number \| null |
| `data.pricing.prices[].transfer` | number \| null |
| `data.pricing.prices[].currency` | string |
| `data.pricing.prices[].promoPrice` | number \| null |
| `data.pricing.prices[].promoDetails` | string \| null |
| `data.pricing.prices[].features` | object |
| `data.pricing.prices[].features.freeWhoisPrivacy` | boolean |
| `data.pricing.prices[].features.freeDns` | boolean |
| `data.pricing.prices[].lastUpdated` | string \| null |
| `data.pricing.prices[].source` | string |
| `data.pricing.prices[].sourceName` | string |
| `data.pricing.prices[].sourceUrl` | string \| null |
| `data.pricing.prices[].confidence` | string |
| `data.pricing.prices[].sourceType` | string |
| `data.pricing.prices[].quoteScope` | string |
| `data.pricing.prices[].observedAt` | string \| null |
| `data.pricing.prices[].recommendationEligible` | boolean |
| `data.pricing.prices[].recommendationExclusionReason` | string \| null |
| `data.pricing.cheapest` | object |
| `data.pricing.cheapest.register` | object \| null |
| `data.pricing.cheapest.renew` | object \| null |
| `data.pricing.cheapest.transfer` | object \| null |
| `data.pricing.averagePrice` | object |
| `data.pricing.averagePrice.register` | number \| null |
| `data.pricing.averagePrice.renew` | number \| null |
| `data.pricing.averagePrice.transfer` | number \| null |
| `data.pricing.priceRange` | object |
| `data.pricing.priceRange.register` | object \| null |
| `data.pricing.priceRange.renew` | object \| null |
| `data.pricing.priceRange.transfer` | object \| null |
| `data.pricing.lastUpdated` | string \| null |
| `data.pricing.dataQuality` | object |
| `data.pricing.dataQuality.sourcesQueried` | integer |
| `data.pricing.dataQuality.sourcesSucceeded` | integer |
| `data.pricing.dataQuality.cacheHitRate` | number |
| `data.pricing.dataQuality.averageConfidence` | string |
| `data.pricing.price_summary` | object |
| `data.pricing.price_summary.registrar_count` | integer |
| `data.pricing.price_summary.registrar_coverage_ratio` | number |
| `data.pricing.price_summary.price_points` | object |
| `data.pricing.price_summary.price_points.register` | integer |
| `data.pricing.price_summary.price_points.renew` | integer |
| `data.pricing.price_summary.price_points.transfer` | integer |
| `data.pricing.price_summary.source_counts` | object |
| `data.pricing.price_summary.confidence_counts` | object |
| `data.pricing.price_summary.freshness` | object |
| `data.pricing.price_summary.freshness.freshest_at` | string \| null |
| `data.pricing.price_summary.freshness.oldest_at` | string \| null |
| `data.pricing.price_summary.freshness.newest_age_hours` | number \| null |
| `data.pricing.price_summary.freshness.stale_price_count` | integer |
| `data.pricing.price_summary.freshness.unknown_freshness_count` | integer |
| `data.pricing.price_summary.spread` | object |
| `data.pricing.price_summary.spread.register_usd` | number \| null |
| `data.pricing.price_summary.spread.renew_usd` | number \| null |
| `data.pricing.price_summary.spread.transfer_usd` | number \| null |
| `data.pricing.price_summary.outlier_count` | integer |
| `data.pricing.price_summary.recommendation_eligible_registrar_count` | integer |
| `data.pricing.price_summary.quality_status` | string |
| `data.pricing.price_summary.cheapest_register` | object \| null |
| `data.pricing.price_summary.cheapest_renew` | object \| null |
| `data.pricing.price_summary.cheapest_transfer` | object \| null |
| `data.pricing.checkAccounting` | object |
| `data.pricing.checkAccounting.plannedChecks` | integer |
| `data.pricing.checkAccounting.actualChecks` | integer |
| `data.pricing.checkAccounting.successfulRows` | integer |
| `data.pricing.checkAccounting.creditsCharged` | integer |
| `data.pricing.checkAccounting.creditsPerCheck` | integer |
| `data.pricing.checkAccounting.liveQuoteChecks` | integer |
| `data.pricing.checkAccounting.creditsPerLiveQuote` | integer |
| `data.pricing.checkAccounting.creditsRefunded` | integer |
| `data.pricing.checkAccounting.selectedRegistrars[]` | string[] |
| `data.recommendation` | object |
| `data.recommendation.registrar` | string |
| `data.recommendation.reason` | string |
| `data.recommendation.savings` | number |
| `data.recommendation_status` | string |
| `data.cloudflare` | object |
| `data.cloudflare.source` | string |
| `data.cloudflare.checked` | boolean |
| `data.cloudflare.status` | string |
| `data.cloudflare.supported` | boolean \| null |
| `data.cloudflare.registrable` | boolean \| null |
| `data.cloudflare.reason` | string \| null |
| `data.cloudflare.pricing` | object |
| `data.cloudflare.pricing.currency` | string \| null |
| `data.cloudflare.pricing.registrationCost` | number \| null |
| `data.cloudflare.pricing.renewalCost` | number \| null |
| `data.cloudflare.checkedAt` | string \| null |
| `data.exact_quotes[]` | object[] |
| `data.exact_quotes[]` | object |
| `data.exact_quotes[].registrar` | string |
| `data.exact_quotes[].sourceType` | string |
| `data.exact_quotes[].sourceName` | string |
| `data.exact_quotes[].sourceUrl` | string |
| `data.exact_quotes[].quoteScope` | string |
| `data.exact_quotes[].checked` | boolean |
| `data.exact_quotes[].configured` | boolean |
| `data.exact_quotes[].status` | string |
| `data.exact_quotes[].available` | boolean \| null |
| `data.exact_quotes[].definitive` | boolean \| null |
| `data.exact_quotes[].premium` | boolean \| null |
| `data.exact_quotes[].minimumRegistrationYears` | integer \| null |
| `data.exact_quotes[].currency` | string \| null |
| `data.exact_quotes[].register` | number \| null |
| `data.exact_quotes[].renew` | number \| null |
| `data.exact_quotes[].transfer` | number \| null |
| `data.exact_quotes[].checkedAt` | string \| null |
| `data.exact_quotes[].errorCode` | string \| null |
| `data.checkAccounting` | object |
| `data.checkAccounting.plannedChecks` | integer |
| `data.checkAccounting.actualChecks` | integer |
| `data.checkAccounting.successfulRows` | integer |
| `data.checkAccounting.creditsCharged` | integer |
| `data.checkAccounting.creditsPerCheck` | integer |
| `data.checkAccounting.liveQuoteChecks` | integer |
| `data.checkAccounting.creditsPerLiveQuote` | integer |
| `data.checkAccounting.creditsRefunded` | integer |
| `data.checkAccounting.selectedRegistrars[]` | string[] |
| `data.comparison_summary` | object |
| `data.comparison_summary.first_year_registrar` | string \| null |
| `data.comparison_summary.renewal_registrar` | string \| null |
| `data.comparison_summary.transfer_registrar` | string \| null |
| `data.comparison_summary.first_year_price` | number \| null |
| `data.comparison_summary.renewal_price` | number \| null |
| `data.comparison_summary.transfer_price` | number \| null |
| `data.comparison_summary.first_year_vs_renewal_delta_usd` | number \| null |
| `data.comparison_summary.first_year_vs_renewal_delta_pct` | number \| null |
| `data.comparison_summary.cheapest_register_renews_higher` | boolean |
| `data.comparison_summary.renewal_trap_warning` | boolean |
| `data.comparison_summary.transfer_savings_usd` | number \| null |
| `data.comparison_summary.cloudflare_live_status` | string |
| `data.comparison_summary.recommendation_basis` | string |
| `meta` | object |
| `meta.requestId` | string |
| `meta.servedBy` | string |
| `meta.durationMs` | integer |
| `meta.cacheStatus` | string |

#### 예제 요청

```bash
curl -H "X-API-Key: $DOMSCAN_API_KEY" "https://domscan.net/v1/prices/compare?domain=example.com&registrars=porkbun&skip_cache=false"
```

```javascript
const response = await fetch("https://domscan.net/v1/prices/compare?domain=example.com&registrars=porkbun&skip_cache=false", {
  headers: { "X-API-Key": process.env.DOMSCAN_API_KEY },
});
const data = await response.json();
console.log(data);
```

```python
import os
import requests

response = requests.get(
    "https://domscan.net/v1/prices/compare?domain=example.com&registrars=porkbun&skip_cache=false",
    headers={"X-API-Key": os.environ["DOMSCAN_API_KEY"]},
)
print(response.json())
```

```go
package main

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

func main() {
	req, err := http.NewRequest(http.MethodGet, "https://domscan.net/v1/prices/compare?domain=example.com&registrars=porkbun&skip_cache=false", nil)
	if err != nil {
		panic(err)
	}
	req.Header.Set("X-API-Key", os.Getenv("DOMSCAN_API_KEY"))

```ruby
require "json"
require "net/http"

uri = URI("https://domscan.net/v1/prices/compare?domain=example.com&registrars=porkbun&skip_cache=false")
request = Net::HTTP::Get.new(uri)
request["X-API-Key"] = ENV.fetch("DOMSCAN_API_KEY")

#### 예제 응답

```json
{
  "success": true,
  "data": {
    "domain": "brandpilot.com",
    "tld": "com",
    "pricing": {
      "tld": "com",
      "prices": [
        {
          "registrar": "namecheap",
          "registrarName": "Namecheap",
          "register": 6.98,
          "renew": 17.98,
          "transfer": 9.16,
          "currency": "USD",
          "features": {
            "freeWhoisPrivacy": true,
            "freeDns": true
          },
          "lastUpdated": "2026-10-09T18:00:00.000Z",
          "source": "api",
          "sourceName": "Namecheap users.getPricing API",
          "sourceUrl": "https://www.namecheap.com/support/api/methods/users/get-pricing/",
          "confidence": "high",
          "sourceType": "official_api",
          "quoteScope": "tld_standard",
          "observedAt": "2026-10-09T18:00:00.000Z",
          "recommendationEligible": true,
          "recommendationExclusionReason": null
        },
        {
          "registrar": "dynadot",
          "registrarName": "Dynadot",
          "register": 10.99,
          "renew": 11.99,
          "transfer": 10.49,
          "currency": "USD",
          "features": {
            "freeWhoisPrivacy": true,
            "freeDns": true
          },
          "lastUpdated": "2026-10-09T18:00:00.000Z",
          "source": "api",
          "sourceName": "Dynadot official pricing",
          "sourceUrl": "https://www.dynadot.com/domain/prices",
          "confidence": "high",
          "sourceType": "official_api",
          "quoteScope": "tld_standard",
          "observedAt": "2026-10-09T18:00:00.000Z",
          "recommendationEligible": true,
          "recommendationExclusionReason": null
        },
        {
          "registrar": "porkbun",
          "registrarName": "Porkbun",
          "register": 11.08,
          "renew": 11.08,
          "transfer": 10.74,
          "currency": "USD",
          "features": {
            "freeWhoisPrivacy": true,
            "freeDns": true
          },
          "lastUpdated": "2026-10-09T18:00:00.000Z",
          "source": "api",
          "sourceName": "Porkbun public pricing API",
          "sourceUrl": "https://porkbun.com/api/json/v3/documentation",
          "confidence": "high",
          "sourceType": "official_api",
          "quoteScope": "tld_standard",
          "observedAt": "2026-10-09T18:00:00.000Z",
          "recommendationEligible": true,
          "recommendationExclusionReason": null
        }
      ],
      "cheapest": {
        "register": {
          "registrar": "namecheap",
          "price": 6.98
        },
        "renew": {
          "registrar": "porkbun",
          "price": 11.08
        },
        "transfer": {
          "registrar": "namecheap",
          "price": 9.16
        }
      },
      "averagePrice": {
        "register": 9.68,
        "renew": 13.68,
        "transfer": 10.13
      },
      "priceRange": {
        "register": {
          "min": 6.98,
          "max": 11.08
        },
        "renew": {
          "min": 11.08,
          "max": 17.98
        },
        "transfer": {
          "min": 9.16,
          "max": 10.74
        }
      },
      "lastUpdated": "2026-10-09T18:00:00.000Z",
      "dataQuality": {
        "sourcesQueried": 3,
        "sourcesSucceeded": 3,
        "cacheHitRate": 1,
        "averageConfidence": "high"
      },
      "price_summary": {
        "registrar_count": 3,
        "registrar_coverage_ratio": 0.03,
        "price_points": {
          "register": 3,
          "renew": 3,
          "transfer": 3
        },
        "source_counts": {
          "api": 3,
          "cached": 0,
          "fallback": 0
        },
        "confidence_counts": {
          "high": 3,
          "medium": 0,
          "low": 0
        },
        "freshness": {
          "freshest_at": "2026-10-09T18:00:00.000Z",
          "oldest_at": "2026-10-09T18:00:00.000Z",
          "newest_age_hours": 3.1,
          "stale_price_count": 0,
          "unknown_freshness_count": 0
        },
        "spread": {
          "register_usd": 4.1,
          "renew_usd": 6.9,
          "transfer_usd": 1.58
        },
        "outlier_count": 0,
        "cheapest_register": {
          "registrar": "namecheap",
          "price": 6.98
        },
        "cheapest_renew": {
          "registrar": "porkbun",
          "price": 11.08
        },
        "cheapest_transfer": {
          "registrar": "namecheap",
          "price": 9.16
        },
        "recommendation_eligible_registrar_count": 3,
        "quality_status": "healthy"
      },
      "checkAccounting": {
        "plannedChecks": 4,
        "actualChecks": 4,
        "successfulRows": 4,
        "creditsCharged": 4,
        "creditsPerCheck": 1,
        "liveQuoteChecks": 1,
        "creditsPerLiveQuote": 1,
        "creditsRefunded": 0,
        "selectedRegistrars": [
          "porkbun",
          "dynadot",
          "namecheap",
          "cloudflare"
        ]
      }
    },
    "recommendation": {
      "registrar": "namecheap",
      "reason": "Lowest registration price: 6.98 USD",
      "savings": 4.1
    },
    "recommendation_status": "available",
    "cloudflare": {
      "source": "registrar_api_beta",
      "checked": true,
      "status": "registrable",
      "supported": true,
      "registrable": true,
      "reason": null,
      "pricing": {
        "currency": "USD",
        "registrationCost": 10.46,
        "renewalCost": 10.46
      },
      "checkedAt": "2026-10-09T18:03:12.000Z"
    },
    "exact_quotes": [
      {
        "registrar": "cloudflare",
        "sourceType": "official_api",
        "sourceName": "Cloudflare Registrar domain check API",
        "sourceUrl": "https://developers.cloudflare.com/registrar/registrar-api/",
        "quoteScope": "exact_domain",
        "checked": true,
        "configured": true,
        "status": "registrable",
        "available": true,
        "definitive": true,
        "premium": false,
        "minimumRegistrationYears": null,
        "currency": "USD",
        "register": 10.46,
        "renew": 10.46,
        "transfer": null,
        "checkedAt": "2026-10-09T18:03:12.000Z",
        "errorCode": null
      }
    ],
    "checkAccounting": {
      "plannedChecks": 4,
      "actualChecks": 4,
      "successfulRows": 4,
      "creditsCharged": 4,
      "creditsPerCheck": 1,
      "liveQuoteChecks": 1,
      "creditsPerLiveQuote": 1,
      "creditsRefunded": 0,
      "selectedRegistrars": [
        "porkbun",
        "dynadot",
        "namecheap",
        "cloudflare"
      ]
    },
    "comparison_summary": {
      "first_year_registrar": "namecheap",
      "renewal_registrar": "porkbun",
      "transfer_registrar": "namecheap",
      "first_year_price": 6.98,
      "renewal_price": 17.98,
      "transfer_price": 9.16,
      "first_year_vs_renewal_delta_usd": 11,
      "first_year_vs_renewal_delta_pct": 157.59,
      "cheapest_register_renews_higher": true,
      "renewal_trap_warning": true,
      "transfer_savings_usd": -2.18,
      "cloudflare_live_status": "registrable",
      "recommendation_basis": "renewal_savings"
    }
  },
  "meta": {
    "requestId": "req_5t9p4c7z",
    "servedBy": "pop=MAD",
    "durationMs": 1260,
    "cacheStatus": "hit"
  }
}
```

#### HTTP 상태 코드

- `200` 성공
- `400` 잘못된 요청
- `401` 인증되지 않음
- `402` 결제 필요
- `429` 요청 과다
- `503` 서비스 이용 불가

GET /v1/pricing 크레딧: 0

#### 응답 필드

| 필드 | 유형 |
| --- | --- |
| `currency` | string |
| `signup_bonus` | integer |
| `monthly_free_credits` | integer |
| `monthly_refresh` | string |
| `enforcement` | string |
| `bulk_pricing_note` | string |
| `endpoints[]` | object[] |
| `endpoints[]` | object |
| `endpoints[].endpoint` | string |
| `endpoints[].method` | string |
| `endpoints[].credits` | integer |
| `endpoints[].variants[]` | object[] |
| `endpoints[].variants[]` | object |
| `endpoints[].variants[].parameter` | string |
| `endpoints[].variants[].equals` | unknown |
| `endpoints[].variants[].credits` | integer |
| `endpoints[].bulk_pricing` | object |
| `endpoints[].bulk_pricing.per_item_rate` | integer |
| `endpoints[].bulk_pricing.formula` | string |
| `endpoints[].bulk_pricing.min_cost` | integer |
| `endpoints[].pair_rates[]` | integer[] |
| `endpoints[].note` | string |
| `free_endpoints[]` | string[] |
| `note` | string |

#### 예제 요청

```bash
curl "https://domscan.net/v1/pricing"
```

```javascript
const response = await fetch("https://domscan.net/v1/pricing");
const data = await response.json();
console.log(data);
```

```python
import requests

response = requests.get(
    "https://domscan.net/v1/pricing",
)
print(response.json())
```

```go
package main

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

func main() {
	req, err := http.NewRequest(http.MethodGet, "https://domscan.net/v1/pricing", nil)
	if err != nil {
		panic(err)
	}

	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))
}
```

```ruby
require "json"
require "net/http"

uri = URI("https://domscan.net/v1/pricing")
request = Net::HTTP::Get.new(uri)

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))
```

#### 예제 응답

```json
{
  "currency": "credits",
  "signup_bonus": 1,
  "monthly_free_credits": 1,
  "monthly_refresh": "example",
  "enforcement": "example",
  "bulk_pricing_note": "example",
  "endpoints": [
    {
      "endpoint": "example",
      "method": "GET",
      "credits": 1,
      "variants": [
        {
          "parameter": "example",
          "credits": 1
        }
      ],
      "bulk_pricing": {
        "per_item_rate": 1,
        "formula": "example",
        "min_cost": 1
      },
      "pair_rates": [
        1
      ],
      "note": "example"
    }
  ],
  "free_endpoints": [
    "example"
  ],
  "note": "example"
}
```

#### HTTP 상태 코드

- `200` 성공
- `429` 요청 과다
