Tech-Stack-Erkennung
Entdecken Sie die API-Dokumentation zu Tech-Stack-Erkennung, Anfrageparameter, Antwortfelder, Codebeispiele und Fehlerbehandlung für DomScan-Integrationen.
Tech-Stack-Erkennung
Erkennt über 500 verifizierte Technologien in über 80 Kategorien. Der Modus fast prüft begrenzte HTTP-Signale, der Modus rendered beobachtet Laufzeit-JavaScript und Netzwerkanfragen über den isolierten Edge-Relay-Browser, während der Modus deep bis zu fünf repräsentative Seiten desselben Ursprungs analysiert. Ergebnisse enthalten Konfidenz, bereinigte seitenbezogene Nachweise, Einschränkungen und explizite Abdeckungsgrenzen.
Abfrageparameter
| Parameter | Typ | Beschreibung |
|---|---|---|
| url optional | string | Vollständige öffentliche HTTP(S)-URL zur Analyse. Wenn sowohl URL als auch domain angegeben sind, hat URL Vorrang. |
| domain optional | string | Öffentliche Domain oder HTTP(S)-URL zur Analyse. Geben Sie entweder URL oder domain an. |
| mode optional | string | Scanmodus: fast kostet 3 Credits, rendered kostet 6 Credits und deep kostet 9 Credits. |
| max_pages optional | integer | Maximale Anzahl von Seiten desselben Ursprungs, die im Modus deep analysiert werden, von 1 bis 5. Der Standardwert ist 3. |
Technologie-Kategorien
| Kategorie | Beispiele |
|---|---|
cdn | Cloudflare, Fastly, Akamai, CloudFront |
cms | WordPress, Drupal, Shopify, Squarespace |
analytics | Google Analytics, Mixpanel, Segment |
framework | React, Vue.js, Angular, Next.js |
server | nginx, Apache, IIS, LiteSpeed |
hosting | AWS, Google Cloud, Azure, Vercel |
platform | GitHub, Medium, Substack, GitBook |
Beispielanfrage
curl -H "X-API-Key: your-api-key" "https://domscan.net/v1/tech?url=https%3A%2F%2Fwordpress.example%2F" -H "x-api-key: YOUR_API_KEY"
const domscanFetch = (url, options = {}) =>
fetch(url, {
...options,
headers: { ...options.headers, "X-API-Key": "your-api-key" },
});
const response = await domscanFetch(
"https://domscan.net/v1/tech?url=https%3A%2F%2Fwordpress.example%2F",
{ headers: { "x-api-key": "YOUR_API_KEY" } }
);
const data = await response.json();
for (const tech of data.technologies) {
console.log(`${tech.id}: ${tech.confidence_score}/100`);
}
import requests
domscan = requests.Session()
domscan.headers.update({"X-API-Key": "your-api-key"})
response = domscan.get(
"https://domscan.net/v1/tech",
params={"url": "https://wordpress.example/"},
headers={"x-api-key": "YOUR_API_KEY"}
)
data = response.json()
for tech in data['technologies']:
print(f"{tech['id']}: {tech['confidence_score']}/100")
Beispielantwort
{
"url": "https://wordpress.example/",
"technologies": [
{
"id": "wordpress",
"name": "WordPress",
"category": "cms",
"version": "6.8.2",
"version_kind": "product",
"confidence": "high",
"confidence_score": 98,
"evidence": "Meta: generator",
"evidence_details": [
{
"source": "meta",
"key": "generator",
"matched": "WordPress 6.8.2"
}
],
"source_count": 1,
"caveats": [
"generator_can_be_removed_or_spoofed",
"asset_paths_can_be_rewritten"
],
"reference": {
"website": "https://wordpress.org/",
"source_url": "https://developer.wordpress.org/reference/functions/get_the_generator/",
"source_owner": "WordPress.org",
"source_kind": "official_docs",
"access": "public",
"access_method": "target_response_inspection",
"cost": "none",
"terms_status": "public_source_reviewed_factual_signature",
"expected_freshness": "reverify_on_source_or_signature_change",
"maintenance_risk": "medium",
"runtime_rate_limits": "not_applicable_no_source_request",
"fallback_behavior": "unmatched_or_unavailable_signal_is_not_detected",
"last_verified": "2026-07-15"
}
}
],
"detection_summary": {
"detected_count": 1,
"category_count": 1,
"categories": [
"cms"
],
"high_confidence_count": 1,
"medium_confidence_count": 0,
"low_confidence_count": 0,
"versioned_count": 1,
"evidence_sources": {
"header": 0,
"html": 0,
"asset_url": 0,
"network_url": 0,
"javascript": 0,
"meta": 1,
"cookie": 0,
"url": 0
},
"catalog_size": 522,
"catalog_category_count": 87,
"summary_field_count": 1
},
"summary": {
"cms": "WordPress"
},
"meta": {
"title": "Example WordPress site",
"description": "A reserved example response for the technology detection contract.",
"canonical_url": "https://wordpress.example/",
"language": "en",
"favicon": "https://wordpress.example/favicon.ico",
"open_graph": {
"title": null,
"description": null,
"image": null,
"url": null,
"type": null,
"site_name": null,
"locale": null
},
"twitter_card": {
"card": null,
"site": null,
"creator": null,
"title": null,
"description": null,
"image": null
},
"author": null,
"generator": "WordPress 6.8.2",
"theme_color": null,
"manifest_url": null,
"robots": "index, follow"
},
"headers": {
"content-type": "text/html; charset=UTF-8"
},
"ssl": {
"enabled": true
},
"analysis": {
"status": "complete",
"requested_url": "https://wordpress.example/",
"final_url": "https://wordpress.example/",
"response_status": 200,
"redirect_count": 0,
"relay_used": false,
"signals_checked": [
"url",
"header",
"cookie",
"html",
"asset_url",
"meta"
],
"signals_unavailable": [],
"html_characters_analyzed": 412,
"html_bytes_analyzed": 412,
"html_byte_limit": 1000000,
"html_truncated": false,
"response_body_truncated": false,
"mode": "fast",
"rendered": false,
"javascript_executed": false,
"pages_requested": 1,
"pages_analyzed": 1,
"page_limit": 1,
"network_requests_observed": 0,
"page_limit_reached": false,
"resource_limit_reached": false,
"redirected_to_different_host": false,
"no_detection_reason": null,
"recommended_mode": null,
"pages": [
{
"url": "https://wordpress.example/",
"status": 200,
"html_truncated": false,
"network_requests_observed": 0
}
]
},
"total_time_ms": 128,
"checked_at": "2026-07-15T10:30:00Z",
"_meta": {
"served_by": "pop=MAD country=ES",
"worker_version": "2.14.0",
"analysis_status": "ok",
"response_status": 200
}
}
Antwort-Felder
| Feld | Typ |
|---|---|
url |
string |
technologies[] |
object[] |
technologies[] |
object |
technologies[].id |
string |
technologies[].name |
string |
technologies[].category |
string |
technologies[].version |
string |
technologies[].version_kind |
string |
technologies[].confidence |
string |
technologies[].confidence_score |
integer |
technologies[].evidence |
string |
technologies[].evidence_details[] |
object[] |
technologies[].evidence_details[] |
object |
technologies[].evidence_details[].source |
string |
technologies[].evidence_details[].key |
string |
technologies[].evidence_details[].matched |
string |
technologies[].evidence_details[].page_url |
string |
technologies[].source_count |
integer |
technologies[].caveats[] |
string[] |
technologies[].reference |
object |
technologies[].reference.website |
string |
technologies[].reference.source_url |
string |
technologies[].reference.source_owner |
string |
technologies[].reference.source_kind |
string |
technologies[].reference.access |
string |
technologies[].reference.access_method |
string |
technologies[].reference.cost |
string |
technologies[].reference.terms_status |
string |
technologies[].reference.expected_freshness |
string |
technologies[].reference.maintenance_risk |
string |
technologies[].reference.runtime_rate_limits |
string |
technologies[].reference.fallback_behavior |
string |
technologies[].reference.last_verified |
string |
detection_summary |
object |
detection_summary.detected_count |
integer |
detection_summary.category_count |
integer |
detection_summary.categories[] |
string[] |
detection_summary.high_confidence_count |
integer |
detection_summary.medium_confidence_count |
integer |
detection_summary.low_confidence_count |
integer |
detection_summary.versioned_count |
integer |
detection_summary.evidence_sources |
object |
detection_summary.evidence_sources.header |
integer |
detection_summary.evidence_sources.html |
integer |
detection_summary.evidence_sources.asset_url |
integer |
detection_summary.evidence_sources.network_url |
integer |
detection_summary.evidence_sources.javascript |
integer |
detection_summary.evidence_sources.meta |
integer |
detection_summary.evidence_sources.cookie |
integer |
detection_summary.evidence_sources.url |
integer |
detection_summary.catalog_size |
integer |
detection_summary.catalog_category_count |
integer |
detection_summary.summary_field_count |
integer |
summary |
object |
summary.cdn |
string |
summary.server |
string |
summary.framework |
string |
summary.cms |
string |
summary.hosting |
string |
summary.platform |
string |
summary.analytics[] |
string[] |
headers |
object |
meta |
object |
ssl |
object |
ssl.enabled |
boolean |
analysis |
object |
analysis.status |
string |
analysis.requested_url |
string |
analysis.final_url |
string |
analysis.response_status |
integer |
analysis.redirect_count |
integer |
analysis.relay_used |
boolean |
analysis.signals_checked[] |
string[] |
analysis.signals_unavailable[] |
string[] |
analysis.html_characters_analyzed |
integer |
analysis.html_bytes_analyzed |
integer |
analysis.html_byte_limit |
integer |
analysis.html_truncated |
boolean |
analysis.response_body_truncated |
boolean |
analysis.mode |
string |
analysis.rendered |
boolean |
analysis.javascript_executed |
boolean |
analysis.pages_requested |
integer |
analysis.pages_analyzed |
integer |
analysis.page_limit |
integer |
analysis.network_requests_observed |
integer |
analysis.page_limit_reached |
boolean |
analysis.resource_limit_reached |
boolean |
analysis.redirected_to_different_host |
boolean |
analysis.no_detection_reason |
string | null |
analysis.recommended_mode |
string | null |
analysis.pages[] |
object[] |
analysis.pages[] |
object |
analysis.pages[].url |
string |
analysis.pages[].status |
integer |
analysis.pages[].html_truncated |
boolean |
analysis.pages[].network_requests_observed |
integer |
total_time_ms |
integer |
checked_at |
string |
_meta |
object |
_meta.served_by |
string |
_meta.worker_version |
string |
_meta.analysis_status |
string |
_meta.response_status |
integer |
Schnelle Bulk-Erkennung
POST /v1/tech/bulk führt bis zu 10 schnelle Scans in der angegebenen Reihenfolge aus. Gültige Ziele kosten jeweils 3 Credits, ungültige Ziele kosten nichts, und Fehler bei vorgelagerten Diensten werden pro Element erstattet.
curl -H "X-API-Key: your-api-key" -X POST "https://domscan.net/v1/tech/bulk" -H "x-api-key: YOUR_API_KEY" -H "content-type: application/json" -d '{"targets":["example.com",{"url":"https://shop.example.com/","reference":"shop"}]}'
Asynchrone Scan-Aufträge
POST /v1/tech/jobs akzeptiert bis zu 100 Ziele im Modus fast, rendered oder deep. Aufträge unterstützen idempotente Erstellung, Statusabfragen mit Zugriff nur für den Eigentümer, signierte Ergebnispaginierung, Abbruch und Erstattungen pro Element. Vollständige Ergebnisse verfallen nach 48 Stunden.
curl -H "X-API-Key: your-api-key" -X POST "https://domscan.net/v1/tech/jobs" -H "x-api-key: YOUR_API_KEY" -H "Idempotency-Key: scan-batch-2026-07-15" -H "content-type: application/json" -d '{"mode":"deep","max_pages":3,"targets":["example.com","shop.example.com"]}'
curl -H "X-API-Key: your-api-key" "https://domscan.net/v1/tech/jobs?limit=25" -H "x-api-key: YOUR_API_KEY"
curl -H "X-API-Key: your-api-key" "https://domscan.net/v1/tech/jobs/tsj_JOB_ID" -H "x-api-key: YOUR_API_KEY"
curl -H "X-API-Key: your-api-key" "https://domscan.net/v1/tech/jobs/tsj_JOB_ID/results?limit=25" -H "x-api-key: YOUR_API_KEY"
curl -H "X-API-Key: your-api-key" -X DELETE "https://domscan.net/v1/tech/jobs/tsj_JOB_ID" -H "x-api-key: YOUR_API_KEY"
Abfrageparameter
| Parameter | Typ | erforderlich |
|---|---|---|
| domain | string | erforderlich |
Antwort-Felder
| Feld | Typ |
|---|---|
domain |
string |
hosting |
object |
hosting.provider |
string |
hosting.provider_id |
string |
hosting.confidence |
number |
hosting.region |
string |
hosting.detection_method |
string |
cdn |
object |
cdn.detected |
boolean |
cdn.provider |
string |
cdn.provider_id |
string |
cdn.confidence |
number |
cdn.detection_method |
string |
cdn.features[] |
string[] |
waf |
object |
waf.detected |
boolean |
waf.provider |
string |
waf.provider_id |
string |
waf.confidence |
number |
waf.detection_method |
string |
dns_provider |
object |
dns_provider.provider |
string |
dns_provider.provider_id |
string |
dns_provider.nameservers[] |
string[] |
dns_provider.confidence |
number |
dns_providers[] |
object[] |
dns_providers[] |
object |
dns_providers[].provider_id |
string |
dns_providers[].provider |
string |
email_provider |
object |
email_provider.provider |
string |
email_provider.provider_id |
string |
email_provider.mx_records[] |
string[] |
email_provider.confidence |
number |
ssh |
object |
ssh.host |
string |
ssh.port |
integer |
ssh.reachable |
boolean |
ssh.banner |
string | null |
ssh.algorithms[] |
string[] |
ssh.weak_algorithms[] |
string[] |
ssh.keys[] |
object[] |
ssh.keys[] |
object |
ssh.keys[].host |
string |
ssh.keys[].algorithm |
string |
ssh.keys[].key_size |
integer | null |
ssh.keys[].fingerprint_sha256 |
string | null |
ssh.keys[].weak |
boolean |
ssh.keys[].weak_reasons[] |
string[] |
ssh.error |
string | null |
ssh.checked_at |
string |
provider_summary |
object |
provider_summary.cache_status |
string |
provider_summary.provider_count |
integer |
provider_summary.detected_surfaces[] |
string[] |
provider_summary.confidence |
string |
provider_summary.confidence_score |
integer |
provider_summary.hosting_provider |
string | null |
provider_summary.cdn_provider |
string | null |
provider_summary.waf_provider |
string | null |
provider_summary.dns_provider_count |
integer |
provider_summary.email_provider |
string | null |
provider_summary.ssh_exposed |
boolean | null |
provider_summary.evidence[] |
object[] |
provider_summary.evidence[] |
object |
provider_summary.evidence[].surface |
string |
provider_summary.evidence[].provider |
string |
provider_summary.evidence[].confidence |
number | null |
provider_summary.evidence[].method |
string | null |
ip_info |
object |
ip_info.ipv4[] |
string[] |
ip_info.ipv6[] |
string[] |
checked_at |
string |
check_duration_ms |
integer |
Beispielanfrage
curl -H "X-API-Key: $DOMSCAN_API_KEY" "https://domscan.net/v1/hosting?domain=example.com"
Beispielantwort
{
"domain": "github.com",
"hosting": {
"provider": "Microsoft Azure",
"provider_id": "azure",
"confidence": 0.86,
"detection_method": "ip_range"
},
"cdn": {
"detected": true,
"provider": "Fastly",
"provider_id": "fastly",
"confidence": 0.94,
"detection_method": "headers"
},
"waf": {
"detected": false,
"confidence": 0.2,
"detection_method": "headers"
},
"dns_provider": {
"provider": "AWS Route 53",
"provider_id": "route53",
"nameservers": [
"ns-1283.awsdns-32.org",
"ns-1707.awsdns-21.co.uk"
],
"confidence": 0.9
},
"email_provider": {
"provider": "Google Workspace",
"provider_id": "google_workspace",
"mx_records": [
"aspmx.l.google.com"
],
"confidence": 0.95
},
"ssh": {
"host": "github.com",
"port": 22,
"reachable": true,
"banner": "SSH-2.0-babeld",
"algorithms": [
"ssh-ed25519",
"ecdsa-sha2-nistp256"
],
"weak_algorithms": [],
"keys": [
{
"host": "github.com",
"algorithm": "ssh-ed25519",
"key_size": 256,
"fingerprint_sha256": "SHA256:+DiY3wvvV6TuJJhbpZisF/Ym7N3QKXNoZk6sJ2x2d2s",
"weak": false,
"weak_reasons": []
}
],
"error": null,
"checked_at": "2026-04-18T21:00:00Z"
},
"provider_summary": {
"cache_status": "miss",
"provider_count": 4,
"detected_surfaces": [
"hosting",
"cdn",
"dns",
"email",
"ssh"
],
"confidence": "high",
"confidence_score": 92,
"hosting_provider": "Microsoft Azure",
"cdn_provider": "Fastly",
"waf_provider": null,
"dns_provider_count": 1,
"email_provider": "Google Workspace",
"ssh_exposed": true,
"evidence": [
{
"surface": "hosting",
"provider": "Microsoft Azure",
"confidence": 0.86,
"method": "ip_range"
},
{
"surface": "cdn",
"provider": "Fastly",
"confidence": 0.94,
"method": "headers"
},
{
"surface": "dns",
"provider": "AWS Route 53",
"confidence": 0.9,
"method": "ns"
},
{
"surface": "email",
"provider": "Google Workspace",
"confidence": 0.95,
"method": "mx"
},
{
"surface": "ssh",
"provider": "public-ssh",
"confidence": 90,
"method": "edge-relay"
}
]
},
"ip_info": {
"ipv4": [
"140.82.121.4"
],
"ipv6": []
},
"checked_at": "2026-04-18T21:00:00Z",
"check_duration_ms": 156
}
Body-Parameter
| Parameter | Typ | erforderlich |
|---|---|---|
| domains | string[] | erforderlich |
Antwort-Felder
| Feld | Typ |
|---|---|
results[] |
unknown[] |
meta |
object |
meta.total |
integer |
meta.succeeded |
integer |
meta.failed |
integer |
meta.max_items |
integer |
meta.credits_per_item |
integer |
meta.duration_ms |
integer |
Beispielanfrage
curl -X POST "https://domscan.net/v1/hosting/bulk" \
-H "Content-Type: application/json" \
-H "X-API-Key: $DOMSCAN_API_KEY" \
-d '{
"domains": [
"example.com",
"cloudflare.com"
]
}'
Beispielantwort
{
"results": [
null
],
"meta": {
"total": 1,
"succeeded": 1,
"failed": 1,
"max_items": 10,
"credits_per_item": 1,
"duration_ms": 1
}
}
Abfrageparameter
| Parameter | Typ | erforderlich |
|---|---|---|
| domain | string | erforderlich |
Antwort-Felder
| Feld | Typ |
|---|---|
domain |
string |
is_parked |
boolean |
is_for_sale |
boolean |
parking_provider |
string | null |
aftermarket_listings[] |
object[] |
aftermarket_listings[] |
object |
aftermarket_listings[].platform |
string |
aftermarket_listings[].detected_via |
string |
signals[] |
object[] |
signals[] |
object |
signals[].type |
string |
signals[].detail |
string |
signals[].provider |
string |
confidence |
number |
checked_at |
string |
check_duration_ms |
integer |
Beispielanfrage
curl -H "X-API-Key: $DOMSCAN_API_KEY" "https://domscan.net/v1/parking?domain=example.com"
Beispielantwort
{
"domain": "example.com",
"is_parked": true,
"is_for_sale": true,
"parking_provider": "string",
"aftermarket_listings": [
{
"platform": "string",
"detected_via": "dns"
}
],
"signals": [
{
"type": "string",
"detail": "string",
"provider": "string"
}
],
"confidence": 1,
"checked_at": "2026-04-15T12:00:00Z",
"check_duration_ms": 1
}