API Цены на домены
Получайте цены на регистрацию и продление доменов по регистраторам. Используйте этот справочник, чтобы выбрать операцию и встроить её документированный контракт ответа.
Операции
GET /v1/prices
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®istrars=porkbun%2Cdynadot&skip_cache=false"const response = await fetch("https://domscan.net/v1/prices?tlds=com%2Cnet%2Corg®istrars=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®istrars=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®istrars=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®istrars=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
200OK400Неверный запрос401Не авторизован402Требуется оплата429Слишком много запросов503Сервис недоступен
POST /v1/prices/bulk
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
200OK400Неверный запрос401Не авторизован402Требуется оплата409HTTP 409422HTTP 422429Слишком много запросов503Сервис недоступен
GET /v1/prices/tld/:tld
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
200OK400Неверный запрос401Не авторизован402Требуется оплата429Слишком много запросов503Сервис недоступен
GET /v1/prices/registrars
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
200OK401Не авторизован429Слишком много запросов
GET /v1/prices/compare
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®istrars=porkbun&skip_cache=false"const response = await fetch("https://domscan.net/v1/prices/compare?domain=example.com®istrars=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®istrars=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®istrars=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®istrars=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
200OK400Неверный запрос401Не авторизован402Требуется оплата429Слишком много запросов503Сервис недоступен
GET /v1/pricing
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
200OK429Слишком много запросов