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

Source: https://domscan.net/ru/docs/products/domain-pricing

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

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

[Открыть страницу продукта](https://domscan.net/ru/domain-pricing-api)

## Операции

GET `/v1/prices` [Открыть справочник API](https://domscan.net/ru/docs/products/domain-pricing#getPrices)

POST `/v1/prices/bulk` [Открыть справочник API](https://domscan.net/ru/docs/products/domain-pricing#bulkPricing)

GET `/v1/prices/tld/:tld` [Открыть справочник API](https://domscan.net/ru/docs/products/domain-pricing#getTldPricing)

GET `/v1/prices/registrars` [Открыть справочник API](https://domscan.net/ru/docs/products/domain-pricing#getRegistrars)

GET `/v1/prices/compare` [Открыть справочник API](https://domscan.net/ru/docs/products/domain-pricing#comparePrices)

GET `/v1/pricing` [Открыть справочник API](https://domscan.net/ru/docs/products/domain-pricing#getPricingInfo)

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

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

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

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

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

```go
package main

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

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

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

```json
{
  "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 |

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

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

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

```python
import os
import requests

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

```go
package main

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

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

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

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

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

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

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

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

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

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

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

```python
import os
import requests

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

```go
package main

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

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

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

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

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

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

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

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

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

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

```python
import os
import requests

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

```go
package main

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

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

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

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

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

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

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

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

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

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

```python
import os
import requests

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

```go
package main

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

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

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

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

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

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

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

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

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

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

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

```python
import requests

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

```go
package main

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

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

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

	data, err := io.ReadAll(resp.Body)
	if err != nil {
		panic(err)
	}
	fmt.Println(resp.Status, string(data))
}
```

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

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

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

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

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

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

- `200` OK
- `429` Слишком много запросов

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

[OpenAPI 3.0](https://domscan.net/v1/openapi.json)
[Postman](https://domscan.net/v1/postman.json)
[MCP](https://domscan.net/ru/mcp-domain-checker)
