Справочник API

API Цены на домены

Получайте цены на регистрацию и продление доменов по регистраторам. Используйте этот справочник, чтобы выбрать операцию и встроить её документированный контракт ответа.

Операции

GET /v1/prices

Операция: getPrices Кредиты и аутентификация: 0-1 Требуется аутентификация
GET /v1/prices Кредиты: 0-1/pair

Параметры запроса

Параметр Тип обязателен
tlds string опционально
registrars string опционально
skip_cache boolean
По умолчанию false
опционально
dry_run string
Допустимые значения true
опционально

Поля ответа

Поле Тип
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

Пример запроса

curl -H "X-API-Key: $DOMSCAN_API_KEY" "https://domscan.net/v1/prices?tlds=com%2Cnet%2Corg&registrars=porkbun%2Cdynadot&skip_cache=false"
const response = await fetch("https://domscan.net/v1/prices?tlds=com%2Cnet%2Corg&registrars=porkbun%2Cdynadot&skip_cache=false", {
  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/prices?tlds=com%2Cnet%2Corg&registrars=porkbun%2Cdynadot&skip_cache=false",
    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/prices?tlds=com%2Cnet%2Corg&registrars=porkbun%2Cdynadot&skip_cache=false", 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/prices?tlds=com%2Cnet%2Corg&registrars=porkbun%2Cdynadot&skip_cache=false")
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))

Пример ответа

{
  "success": true,
  "data": {
    "results": [
      {
        "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": "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.03,
          "renew": 14.53,
          "transfer": 9.95
        },
        "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": 2,
          "registrar_coverage_ratio": 0.02,
          "price_points": {
            "register": 2,
            "renew": 2,
            "transfer": 2
          },
          "source_counts": {
            "api": 2,
            "cached": 0,
            "fallback": 0
          },
          "confidence_counts": {
            "high": 2,
            "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": 2,
          "quality_status": "healthy"
        },
        "checkAccounting": {
          "plannedChecks": 4,
          "actualChecks": 4,
          "successfulRows": 4,
          "creditsCharged": 4,
          "creditsPerCheck": 1,
          "selectedRegistrars": [
            "porkbun",
            "namecheap"
          ]
        }
      },
      {
        "tld": "org",
        "prices": [
          {
            "registrar": "porkbun",
            "registrarName": "Porkbun",
            "register": 7.99,
            "renew": 12.37,
            "transfer": 12.37,
            "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
          },
          {
            "registrar": "namecheap",
            "registrarName": "Namecheap",
            "register": 8.88,
            "renew": 15.98,
            "transfer": 11.98,
            "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
          }
        ],
        "cheapest": {
          "register": {
            "registrar": "porkbun",
            "price": 7.99
          },
          "renew": {
            "registrar": "porkbun",
            "price": 12.37
          },
          "transfer": {
            "registrar": "namecheap",
            "price": 11.98
          }
        },
        "averagePrice": {
          "register": 8.44,
          "renew": 14.18,
          "transfer": 12.18
        },
        "priceRange": {
          "register": {
            "min": 7.99,
            "max": 8.88
          },
          "renew": {
            "min": 12.37,
            "max": 15.98
          },
          "transfer": {
            "min": 11.98,
            "max": 12.37
          }
        },
        "lastUpdated": "2026-10-09T18:00:00.000Z",
        "dataQuality": {
          "sourcesQueried": 3,
          "sourcesSucceeded": 3,
          "cacheHitRate": 1,
          "averageConfidence": "high"
        },
        "price_summary": {
          "registrar_count": 2,
          "registrar_coverage_ratio": 0.02,
          "price_points": {
            "register": 2,
            "renew": 2,
            "transfer": 2
          },
          "source_counts": {
            "api": 2,
            "cached": 0,
            "fallback": 0
          },
          "confidence_counts": {
            "high": 2,
            "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": 0.89,
            "renew_usd": 3.61,
            "transfer_usd": 0.39
          },
          "outlier_count": 0,
          "cheapest_register": {
            "registrar": "porkbun",
            "price": 7.99
          },
          "cheapest_renew": {
            "registrar": "porkbun",
            "price": 12.37
          },
          "cheapest_transfer": {
            "registrar": "namecheap",
            "price": 11.98
          },
          "recommendation_eligible_registrar_count": 2,
          "quality_status": "healthy"
        },
        "checkAccounting": {
          "plannedChecks": 4,
          "actualChecks": 4,
          "successfulRows": 4,
          "creditsCharged": 4,
          "creditsPerCheck": 1,
          "selectedRegistrars": [
            "porkbun",
            "namecheap"
          ]
        }
      }
    ],
    "summary": {
      "tldsRequested": 2,
      "tldsWithData": 2,
      "totalPricePoints": 4,
      "quoteCount": 4,
      "numericPriceFieldCount": 12,
      "market_summary": {
        "tlds_requested": 2,
        "tlds_with_data": 2,
        "quote_count": 4,
        "integrated_source_count": 2,
        "total_price_points": 12,
        "average_registrar_coverage_ratio": 0.02,
        "stale_tld_count": 0,
        "fallback_tld_count": 0,
        "outlier_tld_count": 0,
        "widest_register_spread_tld": "com",
        "max_register_spread_usd": 4.1,
        "freshest_price_at": "2026-10-09T18:00:00.000Z",
        "oldest_price_at": "2026-10-09T18:00:00.000Z",
        "checkAccounting": {
          "plannedChecks": 4,
          "actualChecks": 4,
          "successfulRows": 4,
          "creditsCharged": 4,
          "creditsPerCheck": 1,
          "selectedRegistrars": [
            "porkbun",
            "namecheap"
          ]
        }
      },
      "checkAccounting": {
        "plannedChecks": 4,
        "actualChecks": 4,
        "successfulRows": 4,
        "creditsCharged": 4,
        "creditsPerCheck": 1,
        "selectedRegistrars": [
          "porkbun",
          "namecheap"
        ]
      }
    }
  },
  "meta": {
    "requestId": "req_8f3k2m1x",
    "servedBy": "pop=MAD",
    "durationMs": 184,
    "cacheStatus": "hit"
  }
}

Коды состояния HTTP

  • 200 OK
  • 400 Неверный запрос
  • 401 Не авторизован
  • 402 Требуется оплата
  • 429 Слишком много запросов
  • 503 Сервис недоступен

POST /v1/prices/bulk

Операция: bulkPricing Кредиты и аутентификация: 1 Требуется аутентификация
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

Пример запроса

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"
  ]
}'
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);
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())
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")

	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/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"
  ]
})

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

Пример ответа

{
  "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 OK
  • 400 Неверный запрос
  • 401 Не авторизован
  • 402 Требуется оплата
  • 409 HTTP 409
  • 422 HTTP 422
  • 429 Слишком много запросов
  • 503 Сервис недоступен

GET /v1/prices/tld/:tld

Операция: getTldPricing Кредиты и аутентификация: 1 Требуется аутентификация
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

Пример запроса

curl -H "X-API-Key: $DOMSCAN_API_KEY" "https://domscan.net/v1/prices/tld/com?registrars=porkbun%2Cdynadot&skip_cache=false"
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);
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())
package main

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

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

	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/prices/tld/com?registrars=porkbun%2Cdynadot&skip_cache=false")
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))

Пример ответа

{
  "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 OK
  • 400 Неверный запрос
  • 401 Не авторизован
  • 402 Требуется оплата
  • 429 Слишком много запросов
  • 503 Сервис недоступен

GET /v1/prices/registrars

Операция: getRegistrars Кредиты и аутентификация: Бесплатно Требуется аутентификация
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

Пример запроса

curl -H "X-API-Key: $DOMSCAN_API_KEY" "https://domscan.net/v1/prices/registrars"
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);
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())
package main

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

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

	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/prices/registrars")
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))

Пример ответа

{
  "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 OK
  • 401 Не авторизован
  • 429 Слишком много запросов

GET /v1/prices/compare

Операция: comparePrices Кредиты и аутентификация: 1 Требуется аутентификация
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

Пример запроса

curl -H "X-API-Key: $DOMSCAN_API_KEY" "https://domscan.net/v1/prices/compare?domain=example.com&registrars=porkbun&skip_cache=false"
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);
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())
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"))

	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/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")

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

Пример ответа

{
  "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 OK
  • 400 Неверный запрос
  • 401 Не авторизован
  • 402 Требуется оплата
  • 429 Слишком много запросов
  • 503 Сервис недоступен

GET /v1/pricing

Операция: getPricingInfo Кредиты и аутентификация: Бесплатно Аутентификация необязательна
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

Пример запроса

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

response = requests.get(
    "https://domscan.net/v1/pricing",
)
print(response.json())
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))
}
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))

Пример ответа

{
  "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 OK
  • 429 Слишком много запросов

Справочные материалы