Zum Inhalt springen

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_key

API-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.

400Ungültiger Parameter (INVALID_INPUT, INVALID_DESTINATION, INVALID_URL, PORT_NOT_ALLOWED...) oder ein Ziel, das nicht geprüft werden kann (UNRESOLVED_HOST, BLOCKED_TARGET für private und reservierte Adressen).
401Kein API-Schlüssel: API_KEY_MISSING, oder API_KEY_IN_QUERY, wenn der Schlüssel als ?key= in der URL gesendet wurde, was abgelehnt wird. Senden Sie den Authorization-Header.
403Schlüssel abgelehnt: API_KEY_INVALID (unbekannter Schlüssel oder Konto ohne bezahlten Tarif) oder API_KEY_EXPIRED (erzeugen Sie im Dashboard einen neuen).
429RATE_LIMITED; TOO_MANY_CONCURRENT bei /trace, solange ein anderer Trace Ihres Kontos läuft; GLOBALPING_QUOTA, wenn das stündliche Kontingent an Fernmessungen (Quellen außer unseren Servern) aufgebraucht ist; PORT_DAILY_LIMIT bei /port-check über 2.000 Ports pro Tag und Konto oder 500 pro Ziel (mit scope und limit). Warten Sie die im Header Retry-After angegebenen Sekunden.
502Eine vorgelagerte Quelle hat nichts Verwertbares geantwortet (ein DNS-Resolver, eine Registry, RIPEstat): Das Feld error enthält ihren Code (bei DNS: ESERVFAIL, EREFUSED...). Ein Fehler auf unserer Seite oder bei der Quelle wird nicht auf Ihr Kontingent angerechnet.
503Eine Einschränkung auf unserer Seite, kein Problem Ihrer Anfrage: Dieser Server hat keine Route in der angefragten IP-Familie (IPV6_UNSUPPORTED, IPV4_UNSUPPORTED), oder eine Datenquelle hat nicht geantwortet (OUTAGES_UNAVAILABLE, OUTAGES_UNCONFIGURED, SOURCES_UNAVAILABLE). Eine Teilantwort sagt es, statt zu scheitern: Bei /bgp bedeuten prefixesUnavailable oder neighboursUnavailable auf true und prefixCount auf null, dass die Anzahl nicht gelesen werden konnte, nicht null; bei /whois registryUnavailable.

Endpunkte

GET/api/v1/trace

Führen Sie einen Traceroute zu einem Ziel durch und erhalten Sie alle Hops mit Geolokalisierung, ASN, Latenz, Jitter und Paketverlustdaten.

Parameter

ParameterTypErforderlichBeschreibung
deststringerforderlichZiel-IP-Adresse oder Hostname
maxHopsintegeroptionalMaximale Anzahl Hops (1–64, Standard: 30)
protocolstringoptionalProtokoll: icmp, udp oder tcp (Standard: icmp)
sourcestringoptionalMesspunkt: 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
    }
  ]
}
GET/api/v1/traces

Listen Sie Ihre gespeicherten Traces mit Paginierung auf. Unterstützt Filterung nach Ziel.

ParameterTypBeschreibung
limitintegerErgebnisse pro Seite (1-100, Standard: 20)
offsetintegerAnzahl der zu überspringenden Ergebnisse (Standard: 0)
deststringNach Ziel-IP oder Hostname filtern
GET/api/v1/status

API-Status, verfügbare Quellen und Ratenlimit-Informationen abrufen. Keine Authentifizierung erforderlich.

GET/api/v1/ping

Einen Host anpingen und Latenzstatistiken, Paketverlust und einzelne Roundtrip-Zeiten zurückgeben.

Parameter

ParameterTypErforderlichBeschreibung
hoststringerforderlichIP-Adresse oder Hostname zum Anpingen
countintegeroptionalAnzahl der Ping-Pakete (1-20, Standard: 4)
familystringoptionalIP-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
}
GET/api/v1/dns

Eine DNS-Abfrage für eine Domain durchführen und die aufgelösten Einträge mit Abfragezeit zurückgeben.

Parameter

ParameterTypErforderlichBeschreibung
domainstringerforderlichDomainname zum Auflösen
typestringoptionalEintragstyp: A, AAAA, CNAME, MX, NS, TXT, SOA, PTR, CAA oder SRV (Standard: A). Bei PTR darf domain eine IP-Adresse sein.
resolverstringoptionalAntwortender 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"]
}
GET/api/v1/http-check

Eine HTTP(S)-URL prüfen und Statuscode, Antwortzeit, Weiterleitungskette, Header und SSL-Zertifikatdetails zurückgeben.

Parameter

ParameterTypErforderlichBeschreibung
urlstringerforderlichZu 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
}
GET/api/v1/port-check

Prüfen, ob ein TCP-Port auf einem Host geöffnet ist, und Antwortzeit sowie Dienstname zurückgeben.

Parameter

ParameterTypErforderlichBeschreibung
hoststringerforderlichIP-Adresse oder Hostname zum Prüfen
portintegeroptionalZu prüfende Portnummer (1-65535). Erforderlich, außer wenn ports=common angegeben ist.
portsstringoptionalVerwenden 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.
timeoutintegeroptionalVerbindungs-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"
}
GET/api/v1/ip-reputation

Die 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

ParameterTypErforderlichBeschreibung
ipstringerforderlichZu 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"
  }
}
GET/api/v1/whois

Registrierungsdaten einer öffentlichen IP-Adresse über RDAP: Organisation, Netzbereich, Land, Missbrauchskontakt und Reverse-DNS-Name.

Parameter

ParameterTypErforderlichBeschreibung
ipstringerforderlichÖ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
}
GET/api/v1/subdomains

Listet 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

ParameterTypErforderlichBeschreibung
domainstringerforderlichZu 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"
}
GET/api/v1/email-check

SPF, 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

ParameterTypErforderlichBeschreibung
domainstringerforderlichZu prüfende Mail-Domain (z. B. beispiel.de)
selectorsstringoptionalBis 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"
}
GET/api/v1/outages

Von 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

ParameterTypErforderlichBeschreibung
rangestringoptionalAbgefragter Zeitraum: 1d, 7d (Standard), 14d oder 28d
asnstringoptionalNur 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"
}
GET/api/v1/bgp

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

ParameterTypErforderlichBeschreibung
targetstringerforderlichIP-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"])