API-Dokumentation
Integrieren Sie TraceMapper mit unserer REST API in Ihre Anwendungen.
Die API ist in den Pro- und Business-Tarifen enthalten. Erstellen Sie Ihren Schlüssel im Dashboard und senden Sie ihn im Authorization-Header.
Authentifizierung
Alle API-Anfragen benötigen einen API-Schlüssel, der im Authorization-Header als Bearer-Token gesendet wird. Schlüssel in der URL werden abgelehnt. Erzeugen Sie Ihren API-Schlüssel im Dashboard.
Authorization-Header (empfohlen)
Authorization: Bearer tm_your_api_keyAPI-Schlüssel laufen nach 1 Jahr ab. Sie können sie im Dashboard neu generieren.
Fehlercodes
Jeder Endpoint liefert Fehler als JSON mit einem stabilen error-Code. Das Feld message ist, falls vorhanden, englisch und für Ihre Logs gedacht: Werten Sie den Code aus.
Endpunkte
/api/v1/traceFühren Sie einen Traceroute zu einem Ziel durch und erhalten Sie alle Hops mit Geolokalisierung, ASN, Latenz, Jitter und Paketverlustdaten.
Parameter
| Parameter | Typ | Erforderlich | Beschreibung |
|---|---|---|---|
| dest | string | erforderlich | Ziel-IP-Adresse oder Hostname |
| maxHops | integer | optional | Maximale Anzahl Hops (1–64, Standard: 30) |
| protocol | string | optional | Protokoll: icmp, udp oder tcp (Standard: icmp) |
| source | string | optional | Messpunkt: local (Falkenstein, Standard), paris (Gravelines) oder die ID eines Globalping-Standorts, z. B. gp-uk. GET /api/v1/status listet sie auf. |
Beispielantwort
{
"dest": "8.8.8.8",
"source": "local",
"protocol": "icmp",
"status": "completed",
"address": "8.8.8.8",
"totalHops": 12,
"hops": [
{
"hopNumber": 1,
"ip": "192.168.1.1",
"hostname": "router.local",
"asn": null,
"asnOrg": null,
"city": null,
"country": null,
"lat": null,
"lon": null,
"latencyAvg": 1.2,
"latencyMin": 0.8,
"latencyMax": 1.5,
"jitter": 0.3,
"packetLoss": 0.0,
"isTimeout": false
}
]
}/api/v1/tracesListen Sie Ihre gespeicherten Traces mit Paginierung auf. Unterstützt Filterung nach Ziel.
| Parameter | Typ | Beschreibung |
|---|---|---|
| limit | integer | Ergebnisse pro Seite (1-100, Standard: 20) |
| offset | integer | Anzahl der zu überspringenden Ergebnisse (Standard: 0) |
| dest | string | Nach Ziel-IP oder Hostname filtern |
/api/v1/statusAPI-Status, verfügbare Quellen und Ratenlimit-Informationen abrufen. Keine Authentifizierung erforderlich.
/api/v1/pingEinen Host anpingen und Latenzstatistiken, Paketverlust und einzelne Roundtrip-Zeiten zurückgeben.
Parameter
| Parameter | Typ | Erforderlich | Beschreibung |
|---|---|---|---|
| host | string | erforderlich | IP-Adresse oder Hostname zum Anpingen |
| count | integer | optional | Anzahl der Ping-Pakete (1-20, Standard: 4) |
| family | string | optional | IP-Version: auto (Standard), 4 oder 6. Die Antwort nennt die tatsächlich verwendete Familie. |
Beispielantwort
{
"host": "8.8.8.8",
"resolvedIp": "8.8.8.8",
"count": 4,
"sent": 4,
"received": 4,
"packetLoss": 0,
"latency": {
"min": 1.23,
"avg": 2.45,
"max": 3.67,
"jitter": 0.89
},
"rtts": [1.23, 2.45, 3.67, 2.45],
"family": 4
}/api/v1/dnsEine DNS-Abfrage für eine Domain durchführen und die aufgelösten Einträge mit Abfragezeit zurückgeben.
Parameter
| Parameter | Typ | Erforderlich | Beschreibung |
|---|---|---|---|
| domain | string | erforderlich | Domainname zum Auflösen |
| type | string | optional | Eintragstyp: A, AAAA, CNAME, MX, NS, TXT, SOA, PTR, CAA oder SRV (Standard: A). Bei PTR darf domain eine IP-Adresse sein. |
| resolver | string | optional | Antwortender Resolver: cloudflare (Standard), google, quad9, opendns oder authoritative (die Nameserver der Zone). Der frühere Wert system wird als cloudflare gelesen. Die Antwort nennt die tatsächlich abgefragten Server. |
Beispielantwort
{
"domain": "example.com",
"type": "A",
"records": [
{ "address": "93.184.216.34", "ttl": 300 }
],
"queryTime": 12.34,
"server": "cloudflare",
"servers": ["1.1.1.1", "1.0.0.1"]
}/api/v1/http-checkEine HTTP(S)-URL prüfen und Statuscode, Antwortzeit, Weiterleitungskette, Header und SSL-Zertifikatdetails zurückgeben.
Parameter
| Parameter | Typ | Erforderlich | Beschreibung |
|---|---|---|---|
| url | string | erforderlich | Zu prüfende URL (https:// wird ergänzt, falls es fehlt). Nur die Ports 80, 443, 8080 und 8443: Jeder andere Port ergibt 400 PORT_NOT_ALLOWED. |
Beispielantwort
{
"url": "https://example.com",
"reachable": true,
"failure": null,
"statusCode": 200,
"statusText": "OK",
"responseTime": 145,
"redirects": [],
"headers": {
"content-type": "text/html; charset=UTF-8",
"server": "nginx"
},
"ssl": {
"valid": true,
"problem": null,
"problemCode": null,
"issuer": "DigiCert Inc",
"validFrom": "2026-01-01",
"validTo": "2027-01-01",
"daysRemaining": 180,
"protocol": "TLSv1.3",
"sans": ["example.com", "www.example.com"]
},
"security": {
"grade": "B",
"score": 75,
"findings": [
{ "key": "strict-transport-security", "present": true,
"value": "max-age=31536000", "status": "ok" },
{ "key": "content-security-policy", "present": false,
"value": null, "status": "missing" }
]
},
"resolvedIp": "93.184.216.34",
"family": 4
}reachable ist false, wenn keine HTTP-Antwort erhalten wurde; failure nennt dann Code und Grund. Ein Zertifikatsproblem (abgelaufen, falscher Hostname, unvollständige Kette) ist eine Antwort, kein Fehler: Der Status ist 200, mit reachable: false, dem Zertifikatscode in failure und dem Zertifikat selbst in ssl. security bewertet die Sicherheits-Header von A bis F, ein Befund pro Header.
Zertifikatsfehler (HTTP 200)
{
"url": "https://expired.example.com",
"reachable": false,
"failure": {
"code": "CERT_HAS_EXPIRED",
"message": "The certificate has expired."
},
"statusCode": null,
"ssl": {
"valid": false,
"problemCode": "CERT_HAS_EXPIRED",
"validTo": "2026-01-01",
"daysRemaining": -267
},
"security": null
}/api/v1/port-checkPrüfen, ob ein TCP-Port auf einem Host geöffnet ist, und Antwortzeit sowie Dienstname zurückgeben.
Parameter
| Parameter | Typ | Erforderlich | Beschreibung |
|---|---|---|---|
| host | string | erforderlich | IP-Adresse oder Hostname zum Prüfen |
| port | integer | optional | Zu prüfende Portnummer (1-65535). Erforderlich, außer wenn ports=common angegeben ist. |
| ports | string | optional | Verwenden Sie "common" statt port, um die gängigen Ports zu prüfen (21, 22, 25, 53, 80, 443, ...). Die Antwort enthält dann ein results-Array mit einem Eintrag pro Port. |
| timeout | integer | optional | Verbindungs-Timeout pro Port in Millisekunden (500-10000, Standard: 3000). |
Beispielantwort
{
"host": "example.com",
"resolvedIp": "93.184.216.34",
"family": 4,
"port": 443,
"state": "open",
"open": true,
"responseTime": 23,
"service": "HTTPS"
}/api/v1/ip-reputationDie Reputation einer IP-Adresse über DNS-Blacklists und AbuseIPDB prüfen, mit Geolokalisierungsdaten.
Jede Liste, die die Adresse führt, gibt ein kind an: abuse (Spam, infizierter Rechner, gekapertes Netz) oder policy. Für Spamhaus ZEN übersetzt categories die Rückgabecodes (sbl, css, xbl, drop, pbl). Ein PBL-Eintrag (127.0.0.10 oder 127.0.0.11) kennzeichnet nur einen Endkundenanschluss: Er ist policy und zählt nicht zur Bewertung.
Parameter
| Parameter | Typ | Erforderlich | Beschreibung |
|---|---|---|---|
| ip | string | erforderlich | Zu prüfende IPv4- oder IPv6-Adresse |
Beispielantwort
{
"ip": "8.8.8.8",
"reputation": "clean",
"score": 0,
"listsAnswered": 5,
"listsQueried": 5,
"abuseipdb": {
"status": "ok",
"score": 0,
"totalReports": 12,
"lastReported": "2026-06-01T10:00:00Z"
},
"blacklists": [
{ "name": "Spamhaus ZEN", "status": "clean", "listed": false },
{ "name": "SpamCop", "status": "clean", "listed": false },
{ "name": "Barracuda", "status": "unavailable", "listed": false, "reason": "no_answer" }
],
"geo": {
"country": "US",
"isp": "Google LLC",
"org": "Google LLC",
"as": "AS15169 Google LLC"
}
}/api/v1/whoisRegistrierungsdaten einer öffentlichen IP-Adresse über RDAP: Organisation, Netzbereich, Land, Missbrauchskontakt und Reverse-DNS-Name.
Parameter
| Parameter | Typ | Erforderlich | Beschreibung |
|---|---|---|---|
| ip | string | erforderlich | Öffentliche IPv4- oder IPv6-Adresse zum Nachschlagen |
Beispielantwort
{
"ip": "8.8.8.8",
"hostname": "dns.google",
"org": "Google LLC",
"netName": "GOGL",
"netRange": "8.8.8.0/24",
"country": "US",
"countrySource": "geoip",
"abuse": "network-abuse@google.com",
"registry": "whois.arin.net",
"registryUnavailable": false,
"asn": "AS15169 Google LLC",
"reserved": false
}/api/v1/subdomainsListet die Namen auf, die eine Domain zertifiziert hat, gelesen aus den öffentlichen Certificate-Transparency-Logs. Die Antwort nennt die Quelle und ob die Sicht unvollständig ist.
Parameter
| Parameter | Typ | Erforderlich | Beschreibung |
|---|---|---|---|
| domain | string | erforderlich | Zu durchsuchender registrierbarer Domainname (z. B. beispiel.de) |
Beispielantwort
{
"domain": "tracemapper.com",
"source": "crtsh",
"sources": [{ "id": "crtsh", "status": "ok" }],
"partial": false,
"subdomains": [
{
"name": "tracemapper.com",
"firstSeen": "2026-08-07T00:00:00.000Z",
"lastSeen": "2026-11-05T01:22:00.000Z",
"certificates": 1,
"wildcard": false
}
],
"certificates": [],
"totals": { "subdomains": 3, "wildcards": 1, "certificates": 13 },
"stale": false,
"fetchedAt": "2026-09-11T07:20:00.000Z"
}/api/v1/email-checkSPF, DKIM, DMARC und MX einer Domain, interpretiert. Das Feld spf.lookups zählt DNS-abfragende Terme rekursiv über jeden Include, das Limit, das Einträge still überschreiten.
Parameter
| Parameter | Typ | Erforderlich | Beschreibung |
|---|---|---|---|
| domain | string | erforderlich | Zu prüfende Mail-Domain (z. B. beispiel.de) |
| selectors | string | optional | Bis zu fünf DKIM-Selektoren, kommagetrennt. Ohne Angabe werden die gängigen probiert. |
Beispielantwort
{
"domain": "example.com",
"verdict": "warning",
"spf": {
"status": "warning",
"record": "v=spf1 include:_spf.example.net ~all",
"lookups": 9,
"lookupLimit": 10,
"truncated": false,
"allQualifier": "~",
"includes": [{ "domain": "_spf.example.net", "depth": 0, "cost": 9 }],
"findings": [
{ "code": "spf_lookups_near_limit", "severity": "warning",
"params": { "count": 9, "limit": 10 } }
]
},
"dmarc": { "status": "warning", "policy": "none", "rua": ["mailto:d@example.com"], "findings": [] },
"dkim": { "status": "unknown", "found": [], "selectorsTried": ["default", "google"] },
"mx": { "status": "ok", "hosts": [{ "host": "mx.example.com", "priority": 10, "resolves": true }] },
"checkedAt": "2026-09-11T09:30:00.000Z"
}/api/v1/outagesVon Cloudflare Radar beobachtete Internetausfälle und Störungen: betroffene Länder und autonome Systeme, angegebene Ursache, Beginn und Ende. Nach ASN filtern, um zu erfahren, ob ein Netz auf Ihrem Pfad ein Problem meldet. Liefert 503 mit dem Status unconfigured oder unavailable, wenn der Feed selbst nicht antworten konnte, was nie dasselbe ist wie eine leere Liste.
Parameter
| Parameter | Typ | Erforderlich | Beschreibung |
|---|---|---|---|
| range | string | optional | Abgefragter Zeitraum: 1d, 7d (Standard), 14d oder 28d |
| asn | string | optional | Nur Ausfälle behalten, die dieses autonome System betreffen, z. B. 3215 oder AS3215 |
Beispielantwort
{
"status": "ok",
"events": [
{
"id": "1234",
"locations": [{ "code": "IQ", "name": "Iraq" }],
"networks": [{ "asn": 203214, "name": "HulumTele" }],
"cause": "GOVERNMENT_DIRECTED",
"outageType": "NATIONWIDE",
"scope": null,
"description": "Exam Shutdown",
"startDate": "2026-09-10T03:30:00.000Z",
"endDate": "2026-09-10T03:45:00.000Z",
"ongoing": false,
"linkedUrl": null
}
],
"totals": { "ongoing": 0, "ended": 5 },
"dateRange": "7d",
"stale": false,
"fetchedAt": "2026-09-11T07:20:00.000Z"
}/api/v1/bgpBGP-Routinginformationen für eine IP-Adresse, ein Präfix oder ein autonomes System abrufen. Für eine Adresse oder ein Präfix: angekündigtes Präfix, Ursprungs-ASN, AS-Pfade, Upstream-Provider und RPKI-Status. Für eine AS-Nummer: die angekündigten Präfixe und die Nachbarn, in einer anderen Antwortform.
Parameter
| Parameter | Typ | Erforderlich | Beschreibung |
|---|---|---|---|
| target | string | erforderlich | IP-Adresse, Präfix (z. B. 8.8.8.0/24) oder AS-Nummer (z. B. AS15169) |
Antwort für eine Adresse oder ein Präfix
{
"kind": "prefix",
"target": "8.8.8.8",
"prefix": "8.8.8.0/24",
"allocationBlock": "8.0.0.0/8",
"announced": true,
"origin": { "asn": 15169, "holder": "Google LLC" },
"rpki": "valid",
"paths": [
{
"collector": "rrc00",
"peer": "80.249.208.1",
"asPath": [13335, 15169],
"asPathCollapsed": [13335, 15169],
"communities": ["13335:10000"]
}
],
"pathCount": 245,
"collectorCount": 24,
"upstreamAsns": [
{ "asn": 13335, "holder": "Cloudflare Inc", "count": 45 }
]
}Antwort für eine AS-Nummer (target=AS15169)
{
"kind": "asn",
"target": "AS15169",
"asn": 15169,
"holder": "GOOGLE - Google LLC",
"announced": true,
"prefixCount": 1024,
"prefixes": ["8.8.8.0/24", "8.8.4.0/24"],
"prefixesTruncated": true,
"prefixesUnavailable": false,
"neighboursUnavailable": false,
"neighbours": [
{ "asn": 3356, "holder": "LEVEL3", "relation": "upstream" },
{ "asn": 36040, "holder": "YOUTUBE", "relation": "downstream" }
]
}Ratenlimits
Alle authentifizierten Endpoints, /trace eingeschlossen, teilen sich ein Kontingent pro API-Schlüssel: 60 Anfragen pro Minute im Pro-Tarif und 300 pro Minute im Business-Tarif. Darüber erhalten Sie einen 429 mit einem Retry-After-Header. Zusätzlich läuft pro Konto immer nur ein Trace gleichzeitig, und /port-check öffnet höchstens 120 Verbindungen pro Minute und Konto (ports=common zählt jeden Port).
Codebeispiele
cURL
# Mit Authorization-Header curl -H "Authorization: Bearer tm_your_api_key" \ "https://tracemapper.com/api/v1/trace?dest=8.8.8.8" # Gespeicherte Traces auflisten curl -H "Authorization: Bearer tm_your_api_key" \ "https://tracemapper.com/api/v1/traces?limit=10" # Ping curl -H "Authorization: Bearer tm_your_api_key" \ "https://tracemapper.com/api/v1/ping?host=8.8.8.8&count=4" # DNS curl -H "Authorization: Bearer tm_your_api_key" \ "https://tracemapper.com/api/v1/dns?domain=_dmarc.example.com&type=TXT&resolver=authoritative" # HTTP Check curl -H "Authorization: Bearer tm_your_api_key" \ "https://tracemapper.com/api/v1/http-check?url=https://example.com" # Port Check curl -H "Authorization: Bearer tm_your_api_key" \ "https://tracemapper.com/api/v1/port-check?host=example.com&port=443" # IP Reputation curl -H "Authorization: Bearer tm_your_api_key" \ "https://tracemapper.com/api/v1/ip-reputation?ip=8.8.8.8" # BGP: an address, a prefix, or an AS number curl -H "Authorization: Bearer tm_your_api_key" \ "https://tracemapper.com/api/v1/bgp?target=AS15169" # WHOIS / RDAP curl -H "Authorization: Bearer tm_your_api_key" \ "https://tracemapper.com/api/v1/whois?ip=8.8.8.8" # Subdomains aus den Certificate-Transparency-Logs curl -H "Authorization: Bearer tm_your_api_key" \ "https://tracemapper.com/api/v1/subdomains?domain=example.com" # Ausfälle, die für ein autonomes System gemeldet sind curl -H "Authorization: Bearer tm_your_api_key" \ "https://tracemapper.com/api/v1/outages?range=7d&asn=AS3215" # SPF, DKIM, DMARC und MX einer Domain curl -H "Authorization: Bearer tm_your_api_key" \ "https://tracemapper.com/api/v1/email-check?domain=example.com&selectors=resend"
JavaScript / Node.js
const API_KEY = "tm_your_api_key";
const headers = { Authorization: `Bearer ${API_KEY}` };
// Traceroute
const trace = await fetch(
"https://tracemapper.com/api/v1/trace?dest=8.8.8.8",
{ headers }
).then(r => r.json());
console.log(trace.hops);
// Ping
const ping = await fetch(
"https://tracemapper.com/api/v1/ping?host=8.8.8.8",
{ headers }
).then(r => r.json());
console.log(ping.latency);
// DNS
const dns = await fetch(
"https://tracemapper.com/api/v1/dns?domain=example.com&type=A",
{ headers }
).then(r => r.json());
console.log(dns.records);Python
import requests
headers = {"Authorization": "Bearer tm_your_api_key"}
# Traceroute
r = requests.get(
"https://tracemapper.com/api/v1/trace",
params={"dest": "8.8.8.8"},
headers=headers,
)
print(r.json()["hops"])
# Ping
r = requests.get(
"https://tracemapper.com/api/v1/ping",
params={"host": "8.8.8.8", "count": 4},
headers=headers,
)
print(r.json()["latency"])
# DNS
r = requests.get(
"https://tracemapper.com/api/v1/dns",
params={"domain": "example.com", "type": "MX"},
headers=headers,
)
print(r.json()["records"])