Entwickler-Referenz

Domain-Preisgestaltung

Entdecken Sie die API-Dokumentation zu Domain-Preisgestaltung, Anfrageparameter, Antwortfelder, Codebeispiele und Fehlerbehandlung für DomScan-Integrationen.

Domain-Preisgestaltung

Rufen Sie Standardpreise für Registrierung, Verlängerung und Transfer aus planmäßig abgefragten offiziellen Registrar-APIs und kontrolliert ausgelesenen offiziellen Preisseiten ab. Veraltete Quellen werden ausgeschlossen und fehlende Felder nicht geschätzt. Angebote für exakte Domains verwenden separate authentifizierte Adapter. Jedes tatsächlich geprüfte eindeutige Paar aus TLD und ausgewähltem Registrar kostet 1 Credit, auch bei Bulk-Anfragen mit bis zu 50 eindeutigen TLDs und bei GET /v1/prices mit mehr als 5 TLDs. Bei /v1/prices/compare werden die Standardpreiszeile und das exakte Live-Angebot für dasselbe Paar zusammen nur einmal berechnet. Doppelte TLDs und Registrar-IDs werden nur einmal gezählt, und Registrar-Filter senken die Zahl der geprüften Paare und der abgerechneten Credits. Ein fehlgeschlagenes oder unbekanntes exaktes Angebot wird nur erstattet, wenn für dieses Paar keine Standardpreiszeile zurückgegeben wird. Die Antworten nennen geplante und tatsächliche Prüfungen. Die Abdeckung variiert, prüfen Sie daher den endgültigen Preis beim Checkout.

Preise nach Domainendung vergleichen · Alle verbundenen Preisanbieter anzeigen

GET /v1/prices

Abfrageparameter

ParameterTypBeschreibung
tlds optional string TLD zum Abrufen von Preisen (z.B. "com", "io")
registrars optional string Nein. Jedes tatsächlich geprüfte eindeutige Paar aus TLD und ausgewähltem Registrar kostet 1 Credit, bei Standardabfragen, Bulk-Anfragen mit bis zu 50 eindeutigen TLDs, Anfragen mit mehr als 5 TLDs und exakten Live-Angeboten. Bei Vergleichen werden eine Standardpreiszeile und ein exaktes Angebot für dasselbe Paar zusammen nur einmal berechnet. Doppelte Eingaben zählen nur einmal, Registrar-Filter senken die Kosten, und ein fehlgeschlagenes oder unbekanntes exaktes Angebot wird nur erstattet, wenn für dieses Paar keine Standardpreiszeile zurückgegeben wird.

Beispielantwort

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

Antwortfelder

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

Abfrageparameter

Parameter Typ erforderlich
tld string erforderlich
registrars string optional
skip_cache boolean
Standard false
optional
dry_run string
Zulässige Werte true
optional

Antwortfelder

Feld Typ
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

Beispielanfrage

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

Beispielantwort

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

  • 200 OK
  • 400 Ungültige Anfrage
  • 401 Nicht autorisiert
  • 402 Zahlung erforderlich
  • 429 Zu viele Anfragen
  • 503 Dienst nicht verfügbar
POST /v1/prices/bulk Credits: 1/pair

Abfrageparameter

Parameter Typ erforderlich
dry_run string
Zulässige Werte true
optional

Body-Parameter

Parameter Typ erforderlich
tlds string[] erforderlich
registrars string[] optional
options object optional

Antwortfelder

Feld Typ
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

Beispielanfrage

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

Beispielantwort

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

  • 200 OK
  • 400 Ungültige Anfrage
  • 401 Nicht autorisiert
  • 402 Zahlung erforderlich
  • 409 HTTP 409
  • 422 HTTP 422
  • 429 Zu viele Anfragen
  • 503 Dienst nicht verfügbar
GET /v1/prices/registrars Credits: 0

Abfrageparameter

Parameter Typ erforderlich
dry_run string
Zulässige Werte true
optional

Antwortfelder

Feld Typ
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

Beispielanfrage

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

Beispielantwort

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

  • 200 OK
  • 401 Nicht autorisiert
  • 429 Zu viele Anfragen
GET /v1/prices/compare Credits: 1/pair

Abfrageparameter

Parameter Typ erforderlich
domain string erforderlich
registrars string optional
skip_cache boolean
Standard false
optional
dry_run string
Zulässige Werte true
optional

Antwortfelder

Feld Typ
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

Beispielanfrage

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

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

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

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

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

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

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

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

Beispielantwort

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

  • 200 OK
  • 400 Ungültige Anfrage
  • 401 Nicht autorisiert
  • 402 Zahlung erforderlich
  • 429 Zu viele Anfragen
  • 503 Dienst nicht verfügbar
GET /v1/pricing Credits: 0

Antwortfelder

Feld Typ
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

Beispielanfrage

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

Beispielantwort

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

  • 200 OK
  • 429 Zu viele Anfragen