Antwoordindeling
DomScan-API: Alle antwoorden zijn JSON. Elk domeinresultaat bevat deze algemene velden:
Antwoordindeling
Alle antwoorden zijn JSON. Elk domeinresultaat bevat deze algemene velden:
domain- Volledige domeinnaamavailable- Booleaanse beschikbaarheidsstatussource- "rdap" of "cache"checked_at- ISO 8601-tijdstempelerror- Aanwezig als er een fout is opgetreden
Metadata van de response
Elke API-response bevat een request-ID en een waarde voor dataversheid. Wanneer beschikbaar tonen response-headers ook de aangevraagde, in rekening gebrachte, terugbetaalde en resterende credits, plus uw plan, limiet, resterende capaciteit en beleid voor snelheidslimieten. Een waarde voor dataversheid van unknown betekent dat de dataversheid voor die response niet kon worden vastgesteld. Het betekent niet dat de gegevens actueel zijn.
Veldselectie en compacte antwoorden
Voeg fields of compact toe aan de querystring van een GET- of POST-verzoek om een kleiner JSON-antwoord te ontvangen. Beide zijn optioneel. Bij POST-verzoeken staan ze in de querystring, niet in de body. Geen van beide wijzigt de creditkosten.
Velden selecteren
fields accepteert door komma's gescheiden puntpaden, zoals fields=domain,classification.status,records.data. Als een pad door een lijst loopt, geldt het voor elk item. Items behouden hun positie en een item zonder geselecteerd veld wordt {}. Een null-waarde langs een pad blijft null.
Stuur maximaal 50 paden, elk met maximaal 6 segmenten van 1 tot 64 letters, cijfers of underscores. Elke andere waarde geeft 400 INVALID_PARAMETER terug voordat het verzoek wordt uitgevoerd, dus er wordt niets in rekening gebracht.
Paden die niets in het antwoord opleveren, worden weggelaten en vermeld in de antwoordheader X-Fields-Ignored, tot maximaal 20 paden.
Compacte antwoorden
compact=true verwijdert uitsluitend het volgende, en alleen op het hoogste niveau van het antwoord:
- In het object
meta:served_byen de timingsleutelsduration_ms,query_time_ms,total_ms,total_time_ms,latency_ms,generation_msencheck_duration_ms. Het objectmetazelf wordt verwijderd als er niets anders in overblijft. warnings,caveats,notesenerrorswanneer het lege lijsten zijn.request_idwanneer het de headerX-Request-Idherhaalt.
Gegevensvelden, classification, geneste objecten en lijstitems worden nooit verwijderd. Als beide parameters worden verzonden, wordt eerst compact toegepast en daarna fields.
Alleen geslaagde JSON-antwoorden worden hervormd. Foutantwoorden, CSV-, tekst- en streamingantwoorden en dry_run-schattingen worden ongewijzigd teruggegeven. Hervormde antwoorden worden zonder inspringing verzonden.
Met een Idempotency-Key maken fields en compact deel uit van het verzoek. Een nieuwe poging met dezelfde waarden geeft het opgeslagen, hervormde antwoord terug. Hergebruik van de sleutel met andere waarden geeft 422 IDEMPOTENCY_KEY_REUSED terug.
MCP-tools accepteren dezelfde optionele argumenten fields en compact. Paden zonder overeenkomst worden vermeld in _meta.fields_ignored van het toolresultaat.
Voorbeeld
curl -H "X-API-Key: $DOMSCAN_API_KEY" "https://domscan.net/v1/dns?domain=google.com&type=TXT&fields=domain,status,records.data,records.ttl,owner&compact=true"
X-Fields-Ignored: owner
{
"domain": "google.com",
"records": [
{
"data": "v=spf1 include:_spf.google.com ~all",
"ttl": 300
},
{
"data": "google-site-verification=abc123",
"ttl": 300
}
],
"status": "success"
}
snake_case-sleutels (naming)
De meeste responsesleutels zijn al snake_case, maar enkele endpoints geven een aantal camelCase-sleutels terug, zoals registrarName in prijsresultaten, tldTier in waarderingsfactoren en eventDate in RDAP-events. Voeg naming=snake toe aan de querystring, of stuur de header DomScan-Naming: snake mee, om al die sleutels in snake_case te ontvangen. Zonder deze optie behouden responses hun huidige sleutels.
Een sleutel verandert alleen als hij met een kleine letter begint, uitsluitend letters en cijfers bevat en minstens één hoofdletter heeft. Elk nieuw woord krijgt een underscore en de sleutel wordt omgezet naar kleine letters. Afkortingen blijven bij elkaar, waaronder IPv4 en meervouden zoals IPs: registrarName wordt registrar_name, secureDNS wordt secure_dns, ipv4Address wordt ipv4_address en nameserverIPs wordt nameserver_ips.
Sleutels die gegevens zijn in plaats van veldnamen behouden hun exacte schrijfwijze, bijvoorbeeld DNS-recordtypen zoals A en MX, scores zoals A+, domeinnamen, headernamen en technologienamen. Waarden worden nooit gewijzigd, en geneste objecten en lijsten worden op elk niveau omgezet.
Als een object de snake_case-naam al heeft, bijvoorbeeld zowel fooBar als foo_bar, behoudt foo_bar zijn waarde en behoudt fooBar zijn oorspronkelijke naam, zodat er niets verloren gaat. De volgorde van de sleutels verandert niet.
De queryparameter heeft voorrang op de header, dus met naming=default schakelt u een opt-in via de header voor één verzoek uit. Geaccepteerde waarden zijn snake en default. Elke andere waarde geeft 400 INVALID_PARAMETER terug voordat het verzoek wordt uitgevoerd, dus er worden geen kosten in rekening gebracht. Responses bevatten Vary: DomScan-Naming.
naming wordt uitgevoerd vóór compact en fields, dus schrijf fields-paden in snake_case, zoals fields=factors.tld_tier. Foutresponses zijn al snake_case en veranderen nooit, en de kredietkosten blijven gelijk.
Bij een Idempotency-Key maakt de naamgevingskeuze deel uit van het verzoek, ongeacht of die uit de parameter of de header komt, zodat een nieuwe poging dezelfde sleutels teruggeeft.
MCP-tools accepteren hetzelfde optionele argument naming. MCP-aanroepen lezen de header niet.
curl -H "X-API-Key: $DOMSCAN_API_KEY" -H "DomScan-Naming: snake" "https://domscan.net/v1/value?domain=example.com&fields=domain,factors.tld_tier,factors.has_hyphens"
{
"domain": "example.com",
"factors": {
"tld_tier": "premium",
"has_hyphens": false
}
}
Versheidsbeheer (max_age)
Endpoints die kunnen antwoorden met recent gecontroleerde gegevens accepteren max_age, een geheel aantal seconden van 0 tot 2592000 (30 dagen). Gegevens die ouder zijn dan max_age worden opnieuw gecontroleerd voordat ze worden teruggegeven, en max_age=0 controleert altijd opnieuw. Zonder max_age behoudt elk endpoint zijn gebruikelijke gedrag.
Elk geslaagd antwoord van deze endpoints bevat een cache_age_s op het hoogste niveau: de leeftijd in seconden van de gebruikte gegevens, of 0 als ze net opnieuw zijn gecontroleerd. Dezelfde waarde wordt meegestuurd in de responsheader X-Cache-Age. Als een antwoord meerdere items bevat, zoals een beschikbaarheidscontrole voor meerdere domeinen, is het de leeftijd van het oudste item, en behouden items hun eigen cache_age_s waar ze er al een hadden.
max_age verandert nooit hoe een resultaat wordt geclassificeerd. Een resultaat dat niet kon worden bevestigd blijft unknown, hoe recent het ook is, en recente gegevens worden nooit als aanwezig of afwezig getoond tenzij de oorspronkelijke controle dat heeft bevestigd.
max_age verandert niets aan de kosten van een verzoek. Een nieuwe controle en een antwoord uit recente gegevens kosten evenveel credits.
Op /v1/status en /v1/status/bulk zijn geforceerde nieuwe controles (max_age=0) per client beperkt om registers te beschermen. Boven die limiet wordt het verzoek beantwoord alsof max_age niet was verstuurd, en cache_age_s toont de leeftijd van wat u hebt ontvangen. Een max_age die geen geheel getal van 0 tot 2592000 is, geeft 400 INVALID_PARAMETER terug voordat het verzoek wordt uitgevoerd, zodat er niets in rekening wordt gebracht.
Endpoints die max_age accepteren: GET /v1/status, POST /v1/status/bulk, GET /v1/subdomains, GET /v1/certificates, GET /v1/tech, GET /v1/categorize, GET /v1/identity-assets, GET /v1/identity-resolution, GET /v1/url-intelligence, GET /v1/agent-readiness, GET /v1/robots, GET /v1/ssl/deep-scan
Oudere cacheparameters
Deze parameters blijven werken en zijn nu verouderde aliassen van max_age. Als u ook max_age meestuurt, heeft max_age voorrang.
| Parameter | Endpoints | Gelijk aan |
|---|---|---|
prefer_cache | /v1/status, /v1/subdomains | max_age=2592000 |
skip_cache | /v1/status, /v1/tech, /v1/categorize, /v1/identity-assets, /v1/identity-resolution, /v1/url-intelligence, /v1/agent-readiness, /v1/robots | max_age=0 |
cache_skip | /v1/status | max_age=0 |
cache-skip | /v1/status | max_age=0 |
options.prefer_cache (body) | /v1/status/bulk | max_age=2592000 |
prefer_cache (body) | /v1/status/bulk | max_age=2592000 |
options.skip_cache (body) | /v1/status/bulk | max_age=0 |
options.cache_skip (body) | /v1/status/bulk | max_age=0 |
options.cache-skip (body) | /v1/status/bulk | max_age=0 |
refresh | /v1/ssl/deep-scan | max_age=0 |
Op /v1/subdomains behoudt prefer_cache ook zijn gedrag met alleen cache: als er nog niets is opgeslagen, geeft het verzoek 202 terug zonder kosten en start het de opzoeking op de achtergrond.
MCP-tools voor deze endpoints accepteren hetzelfde optionele argument max_age, en hun resultaten bevatten cache_age_s.
Paginering (limit en cursor)
Endpoints die lange lijsten teruggeven accepteren limit en cursor, en elk antwoord bevat has_more en next_cursor. Herhaal het verzoek met cursor ingesteld op next_cursor om de volgende pagina op te halen. Op de laatste pagina is has_more false en is next_cursor null.
Zonder limit geeft elk endpoint hetzelfde aantal items terug als voorheen, zodat bestaande verzoeken ongewijzigd blijven. U kunt limit van pagina tot pagina wijzigen.
Cursors zijn ondoorzichtig en ondertekend. Een cursor werkt alleen voor het account dat hem heeft ontvangen en voor dezelfde query, bijvoorbeeld hetzelfde domein en dezelfde filters. Een cursor die is aangepast, bij een ander account hoort of met andere filters wordt verstuurd, geeft 400 INVALID_CURSOR terug.
Pagina's volgen een vaste volgorde, zodat items die tussen verzoeken worden toegevoegd of verwijderd niet worden herhaald of overgeslagen. Bij de geschiedenis-endpoints beschrijven samenvattingsvelden de items op de huidige pagina.
Elke pagina is een gewoon verzoek en kost de gebruikelijke credits van het endpoint, precies zoals een verzoek met limit voorheen. Gratis endpoints blijven gratis.
Oudere parameters blijven werken: offset op /v1/email/blacklist en de numerieke pagination.next_cursor op /v1/certificates.
| Endpoint | Standaardpaginagrootte | Maximale limit |
|---|---|---|
GET /v1/whois/history | 50 | 100 |
GET /v1/dns/history | 100 | 1000 |
GET /v1/subdomains | 500 | 2000 |
GET /v1/certificates | 100 | 1000 |
GET /v1/watchlist | Hele lijst | 100 |
GET /v1/watchlist/expiring | Hele lijst | 100 |
GET /v1/watchlist/available | Hele lijst | 100 |
GET /v1/brand-monitor | Hele lijst | 100 |
GET /v1/email/blacklist | 1000 | 10000 |
Voorbeeld
curl -H "X-API-Key: $DOMSCAN_API_KEY" "https://domscan.net/v1/whois/history?domain=example.com&limit=20"
{
"domain": "example.com",
"snapshots": [
"..."
],
"has_more": true,
"next_cursor": "eyJvIjoi..."
}
curl -H "X-API-Key: $DOMSCAN_API_KEY" "https://domscan.net/v1/whois/history?domain=example.com&limit=20&cursor=eyJvIjoi..."
Classificatiestatus
Endpoints die aangeven of iets bestaat (domeinregistratie, social handles, DNS- en e-mailauthenticatierecords, security.txt, robots.txt, sitemaps, beveiligingsheaders, parking, typosquat-registraties en SSL-certificaten) voegen naast hun bestaande velden een classification-object toe. Bestaande velden behouden hun naam en betekenis.
status-present,absentofunknown. Present en absent worden alleen teruggegeven als de controle exact, gezaghebbend bewijs opleverde.reason- Wordt alleen teruggegeven als de statusunknownis. Legt uit waarom er geen eenduidig antwoord mogelijk was.evidence- Waar het antwoord vandaan komt:source,method,observed_aten een optioneeldetailzoalshttp_404ofnxdomain.checked_at- Wanneer DomScan de classificatie heeft bepaald. Bij gecachete resultaten ligtevidence.observed_ateerder.
Redenen voor unknown
blocked- Het doel weigerde toegang, bijvoorbeeld met HTTP 401, 403 of een botcontrole.rate_limited- Het doel of het register vroeg ons te vertragen, bijvoorbeeld met HTTP 429.timeout- De controle was niet klaar binnen het tijdsbudget.ambiguous- Er kwam een antwoord, maar dat bewees geen aanwezigheid of afwezigheid, bijvoorbeeld een onverwachte statuscode of een onjuist opgebouwd record.upstream_error- De gegevensbron faalde, bijvoorbeeld door een storing van de DNS-server of een HTTP 5xx-antwoord.unsupported- Deze controle is niet beschikbaar voor de invoer, bijvoorbeeld bij een niet-ondersteunde TLD of een platform zonder betrouwbare controle.
{
"classification": {
"status": "unknown",
"reason": "rate_limited",
"evidence": {
"source": "rdap",
"method": "rdap_lookup",
"observed_at": "2026-10-10T09:30:00.000Z",
"detail": "http_429"
},
"checked_at": "2026-10-10T09:30:00.000Z"
}
}
unknown als “probeer het later opnieuw” en niet als “bestaat niet”, en beschouw afwezigheid nooit als bewijs dat een naam te claimen is.Scores en cijfers met onbekende controles
Scores tellen een onbekende controle nooit als ontbrekend. De DNS-beveiligingsscore en het cijfer voor e-mailauthenticatie laten onbekende controles buiten beschouwing, melden ze in checks_unknown en zetten score_confidence op partial. Wanneer alle controles onbekend zijn, zijn de score en het cijfer null. Het SSL-cijfer en de SSL-score zijn null met grade_reason ingesteld op certificate_not_retrieved wanneer er geen certificaat kon worden gelezen, en de reputatiescore meldt onbekende parking als null in plaats van niet geparkeerd.