Zum Hauptinhalt springenZur Fußzeile springen

API-Referenz

Umfassende Referenz für alle Endpunkte der ReportedIP API v2 mit Code-Beispielen in cURL, PHP, Python und JavaScript.

Tägliche Kontingente pro Stufe: Kostenlos 1,000 checks · 50 reports · Mitwirkender 5,000 / 200 · Professionell 25,000 / 1,000 · Business 100,000 / 5,000 pro Lizenz · Enterprise unlimited. Business skalieren mit der Anzahl der Lizenzen (x2–x20), z. B. x5 = 500,000 / 25,000. Siehe Preise für den vollständigen Vergleich der Tarife.
Basis-URL https://reportedip.de/wp-json/reportedip/v2/
Authentifizierung: Für authentifizierte Endpunkte ist ein API-Schlüssel erforderlich, der über die X-Key Kopfzeile. Öffentliche Endpunkte erfordern keine Authentifizierung, unterliegen jedoch einer Ratenbegrenzung.
So werden Quoten gezählt (ab Version 2.5.1): Pro Endpunkt fallen Kosten an höchstens eins Tageszähler, niemals beides.
  • Kontingent prüfen: GET /check (+1) und POST /bulk-check (+N, einmal pro gültiger IP-Adresse).
  • Meldekontingent: POST /report (+1) und POST /bulk-report (+N, jeweils eine pro eingereichtem Bericht).
  • Keine der beiden Quoten: GET /blacklist, /blacklist-categories, /blacklist-stats, /reports/{ip}, /trends, /statistics, /verify-key — Dabei handelt es sich um Funktionen, die je nach Tarifstufe verfügbar sind, nicht um gebührenpflichtige Anrufe.
  • Begrenzung der öffentlichen IP-Adressen: 100 Anfragen pro Tag pro Quell-IP, verteilt auf alle nicht authentifizierten Aufrufe (/check-public, /stats-public, /search-public, /categories, /attack-map-data). Senden Sie eine X-Key Header, um stattdessen zum Pfad für die API-Schlüssel-Kontingente zu wechseln.

Öffentliche Endpunkte

Diese Endpunkte sind ohne Authentifizierung verfügbar. Die Anzahl der Anfragen ist auf 100 pro Tag und IP-Adresse begrenzt.

HOLEN /check-public
Öffentlich

Überprüfen Sie die Reputation einer IP-Adresse ohne Authentifizierung. Gibt den Missbrauchs-Konfidenzwert, die Gesamtzahl der Meldungen, die Bedrohungskategorien und das Datum der letzten Meldung zurück. Zählt als +1 auf das tägliche Limit der öffentlichen API pro IP-Adresse an (gemeinsam mit den anderen nicht authentifizierten Endpunkten).

Öffentliches Limit: 100 Anfragen pro Tag pro Quell-IP-Adresse, gemeinsam für alle nicht authentifizierten Endpunkte. Senden Sie einen X-Key-Header, um auf den API-Schlüssel-Kontingentpfad umzuschalten.

Parameter

Name Typ Erforderlich Standard Beschreibung
ip Zeichenkette Ja Zu überprüfende IPv4- oder IPv6-Adresse
ausführlich Boolescher Wert Nein falsch Bitte fügen Sie der Antwort eine detaillierte Aufschlüsselung der Konfidenzwerte bei

Beispiele

Locken
curl "https://reportedip.de/wp-json/reportedip/v2/check-public?ip=1.2.3.4"
php
$response = wp_remote_get(
    'https://reportedip.de/wp-json/reportedip/v2/check-public?ip=1.2.3.4'
);
$data = json_decode(wp_remote_retrieve_body($response), true);
Python
import requests

response = requests.get(
    'https://reportedip.de/wp-json/reportedip/v2/check-public',
    params={'ip': '1.2.3.4'}
)
data = response.json()
JavaScript
const response = await fetch(
    'https://reportedip.de/wp-json/reportedip/v2/check-public?ip=1.2.3.4'
);
const data = await response.json();

Antwort

200 OK
json
{
  "meta": {
    "success": true,
    "code": 200,
    "message": "OK"
  },
  "data": {
    "ip": "1.2.3.4",
    "abuseConfidencePercentage": 87,
    "totalReports": 42,
    "lastReportedAt": "2026-03-09T14:22:31Z",
    "categories": [18, 21, 22],
    "countryCode": "CN",
    "isp": "China Telecom"
  }
}
HOLEN /stats-public
Öffentlich

Rufen Sie erweiterte öffentliche Statistiken mit Aufschlüsselungen nach Kategorien, den häufigsten Bedrohungsarten und historischen Daten ab. Dies wird auf das tägliche Limit der öffentlichen API pro IP-Adresse angerechnet.

Öffentliches Limit: 100 Anfragen pro Tag pro Quell-IP-Adresse, gemeinsam für alle nicht authentifizierten Endpunkte.

Beispiele

Locken
curl "https://reportedip.de/wp-json/reportedip/v2/stats-public"
php
$response = wp_remote_get(
    'https://reportedip.de/wp-json/reportedip/v2/stats-public'
);
$data = json_decode(wp_remote_retrieve_body($response), true);
Python
import requests

response = requests.get(
    'https://reportedip.de/wp-json/reportedip/v2/stats-public'
)
data = response.json()
JavaScript
const response = await fetch(
    'https://reportedip.de/wp-json/reportedip/v2/stats-public'
);
const data = await response.json();

Antwort

200 OK
json
{
  "meta": {
    "success": true,
    "code": 200,
    "message": "OK"
  },
  "data": {
    "totalIPs": 158432,
    "totalReports": 892741,
    "last24h": {
      "newIPs": 342,
      "newReports": 1847
    },
    "last7d": {
      "newIPs": 2156,
      "newReports": 12493
    },
    "categoryBreakdown": [
      {"id": 18, "name": "Brute-Force", "count": 45231},
      {"id": 21, "name": "Web App Attack", "count": 32198},
      {"id": 22, "name": "SSH", "count": 28764},
      {"id": 15, "name": "Port Scan", "count": 18432}
    ],
    "topCountries": [
      {"code": "CN", "count": 42156},
      {"code": "US", "count": 18743},
      {"code": "RU", "count": 15892}
    ]
  }
}
HOLEN /search-public
Öffentlich

Durchsuchen Sie die öffentliche Reputationsdatenbank nach IP-Teiladressen, Ländercodes oder ASN. Nützlich für die öffentlich zugängliche Suchleiste auf reportedip.de. Zählt als +1 auf das tägliche Limit der öffentlichen API pro IP-Adresse an.

Öffentliches Limit: 100 Anfragen pro Tag und Quell-IP-Adresse, gemeinsam für alle nicht authentifizierten Endpunkte. Die Ergebnisse sind auf 50 Einträge pro Aufruf begrenzt.

Parameter

Name Typ Erforderlich Standard Beschreibung
q Zeichenkette Ja Suchanfrage: vollständige oder teilweise IP-Adresse, Ländercode (z. B. „CN“) oder ASN.
Grenze int Nein 20 Anzahl der Ergebnisse (max. 50).

Beispiele

Locken
curl "https://reportedip.de/wp-json/reportedip/v2/search-public?q=1.2.3"

Antwort

200 OK
json
{
  "meta": {"success": true, "code": 200},
  "data": {
    "query": "1.2.3",
    "results": [
      {"ip": "1.2.3.4", "abuseConfidencePercentage": 87, "totalReports": 42, "countryCode": "CN"},
      {"ip": "1.2.3.5", "abuseConfidencePercentage": 65, "totalReports": 12, "countryCode": "CN"}
    ]
  }
}
HOLEN /categories
Öffentlich

Rufe die Liste aller 30 vordefinierten Bedrohungskategorien ab, die zur Klassifizierung von IP-Meldungen verwendet werden. Jede Kategorie enthält ihre ID, ihren Namen, ihre Beschreibung und ihren Schweregrad. Der Aufruf ohne API-Schlüssel wird auf das tägliche Limit der öffentlichen API pro IP-Adresse angerechnet; mit einem X-Key-Header wird er nicht auf das tägliche Kontingent angerechnet.

Öffentliches Limit: 100 Anfragen pro Tag pro Quell-IP-Adresse, gemeinsam für alle nicht authentifizierten Endpunkte. Senden Sie einen X-Key-Header, um das öffentliche Limit zu umgehen (keine Quotenbegrenzung pro Aufruf bei Authentifizierung).

Beispiele

Locken
curl "https://reportedip.de/wp-json/reportedip/v2/categories"
php
$response = wp_remote_get(
    'https://reportedip.de/wp-json/reportedip/v2/categories'
);
$data = json_decode(wp_remote_retrieve_body($response), true);
Python
import requests

response = requests.get(
    'https://reportedip.de/wp-json/reportedip/v2/categories'
)
data = response.json()
JavaScript
const response = await fetch(
    'https://reportedip.de/wp-json/reportedip/v2/categories'
);
const data = await response.json();

Antwort

200 OK
json
{
  "meta": {
    "success": true,
    "code": 200,
    "message": "OK"
  },
  "data": [
    {
      "id": 1,
      "name": "DNS Compromise",
      "description": "Compromised DNS server or DNS hijacking",
      "severity_level": 8
    },
    {
      "id": 18,
      "name": "Brute-Force",
      "description": "Login brute-force attempts",
      "severity_level": 7
    },
    {
      "id": 21,
      "name": "Web App Attack",
      "description": "Web application attacks (SQLi, XSS, etc.)",
      "severity_level": 9
    }
  ]
}
HOLEN /attack-map-data
Öffentlich

Aggregierter Datensatz, der die Live-Angriffskarte auf reportedip.de speist. Liefert die Anzahl der Meldungen pro Land (Top 50), die rollierenden 24-Stunden-Daten zu länderübergreifenden Angriffsverbindungen (Top 30, Paare innerhalb desselben Landes ausgenommen) sowie einen Zähler für die heutigen Protokolle. Wird serverseitig 30 Minuten lang zwischengespeichert – wiederholte Aufrufe innerhalb dieses Zeitfensters greifen alle auf den Cache zu. Zählt als +1 auf das tägliche Limit der öffentlichen API pro IP-Adresse an.

Öffentliches Limit: 100 Anfragen pro Tag pro Quell-IP-Adresse, gemeinsam für alle nicht authentifizierten Endpunkte. Die Antwort wird serverseitig 30 Minuten lang zwischengespeichert, daher sollte ein Polling-Client dieses Intervall einhalten.

Beispiele

Locken
curl "https://reportedip.de/wp-json/reportedip/v2/attack-map-data"
php
$response = wp_remote_get(
    'https://reportedip.de/wp-json/reportedip/v2/attack-map-data'
);
$data = json_decode( wp_remote_retrieve_body( $response ), true );
Python
import requests

response = requests.get(
    'https://reportedip.de/wp-json/reportedip/v2/attack-map-data'
)
data = response.json()
JavaScript
const response = await fetch(
    'https://reportedip.de/wp-json/reportedip/v2/attack-map-data'
);
const data = await response.json();

Antwort

200 OK
json
{
  "meta": {
    "success": true,
    "code": 200,
    "message": "OK"
  },
  "data": {
    "country_data": {
      "CN": { "count": 42156, "avgThreat": 7.8 },
      "US": { "count": 18743, "avgThreat": 5.4 },
      "RU": { "count": 15892, "avgThreat": 7.1 }
    },
    "country_info": { },
    "total_reports": 76791,
    "max_reports": 42156,
    "recent_attacks": [
      {
        "id": 1,
        "source_country": "CN",
        "target_country": "DE",
        "confidence_score": 88,
        "attack_count": 214
      }
    ],
    "today_logs": 1847
  }
}

Authentifizierte Endpunkte

Für diese Endpunkte ist ein gültiger API-Schlüssel erforderlich, der über die X-Key Kopfzeile. Holen Sie sich Ihren API-Schlüssel von der Dashboard.

HOLEN /check
API-Schlüssel

Führen Sie eine vollständige IP-Reputationsprüfung mit detaillierten Daten durch. Die Ergebnisse umfassen umfassende Bedrohungsdaten, einschließlich einer Aufschlüsselung nach Konfidenzgrad, des Berichtverlaufs und von ISP-Informationen. Dies wird als +1 auf Ihr tägliches Prüfkontingent angerechnet.

Parameter

Name Typ Erforderlich Standard Beschreibung
ip Zeichenkette Ja Zu überprüfende IPv4- oder IPv6-Adresse
ausführlich Boolescher Wert Nein falsch Detaillierte Aufschlüsselung des Konfidenzwerts angeben
Berichte einbeziehen Boolescher Wert Nein falsch In der Antwort Einzelheiten des Berichts angeben

Beispiele

Locken
curl -H "X-Key: YOUR_API_KEY" \
     "https://reportedip.de/wp-json/reportedip/v2/check?ip=1.2.3.4&verbose=true"
php
$response = wp_remote_get(
    'https://reportedip.de/wp-json/reportedip/v2/check?ip=1.2.3.4&verbose=true',
    array(
        'headers' => array(
            'X-Key' => 'YOUR_API_KEY',
        ),
    )
);
$data = json_decode(wp_remote_retrieve_body($response), true);
Python
import requests

response = requests.get(
    'https://reportedip.de/wp-json/reportedip/v2/check',
    params={'ip': '1.2.3.4', 'verbose': 'true'},
    headers={'X-Key': 'YOUR_API_KEY'}
)
data = response.json()
JavaScript
const response = await fetch(
    'https://reportedip.de/wp-json/reportedip/v2/check?ip=1.2.3.4&verbose=true',
    {
        headers: { 'X-Key': 'YOUR_API_KEY' }
    }
);
const data = await response.json();

Antwort

200 OK
json
{
  "meta": {
    "success": true,
    "code": 200,
    "message": "OK"
  },
  "data": {
    "ip": "1.2.3.4",
    "abuseConfidencePercentage": 87,
    "totalReports": 42,
    "lastReportedAt": "2026-03-09T14:22:31Z",
    "categories": [18, 21, 22],
    "countryCode": "CN",
    "isp": "China Telecom",
    "isWhitelisted": false,
    "confidenceBreakdown": {
      "reportScore": 24.0,
      "diversityScore": 12.0,
      "recencyWeight": 13.5,
      "severityWeight": 12.3,
      "honeypotBonus": 25.0,
      "maxConfidence": 100,
      "constraintReasons": []
    },
    "debugInfo": {
      "reportCount": 42,
      "uniqueReporters": 8,
      "honeypotReportsCount": 5,
      "effectiveReportCount": 47,
      "timeDampeningFactor": 0.92
    }
  }
}
BEITRAG /report
API-Schlüssel

Melden Sie eine verdächtige IP-Adresse der Community. Die Meldung wird mit vorhandenen Daten zusammengeführt, um den Missbrauchs-Konfidenzwert der IP-Adresse zu aktualisieren. Meldungen desselben Melders für dieselbe IP-Adresse innerhalb von 5 Minuten werden automatisch zusammengefasst. Dies wird ausschließlich auf Ihr tägliches Melde-Kontingent angerechnet – niemals auf das Überprüfungs-Kontingent.

Parameter

Name Typ Erforderlich Standard Beschreibung
ip Zeichenkette Ja Zu meldende IPv4- oder IPv6-Adresse
Kategorien Array Ja Array von IDs für Bedrohungskategorien (z. B. [18, 21])
Kommentar Zeichenkette Nein Optionaler Kommentar zur Beschreibung der beobachteten böswilligen Aktivität

Beispiele

Locken
curl -X POST \
     -H "X-Key: YOUR_API_KEY" \
     -H "Content-Type: application/json" \
     -d '{"ip": "1.2.3.4", "categories": [18, 21], "comment": "SSH brute force"}' \
     "https://reportedip.de/wp-json/reportedip/v2/report"
php
$response = wp_remote_post(
    'https://reportedip.de/wp-json/reportedip/v2/report',
    array(
        'headers' => array(
            'X-Key'        => 'YOUR_API_KEY',
            'Content-Type' => 'application/json',
        ),
        'body' => wp_json_encode(array(
            'ip'         => '1.2.3.4',
            'categories' => array(18, 21),
            'comment'    => 'SSH brute force',
        )),
    )
);
$data = json_decode(wp_remote_retrieve_body($response), true);
Python
import requests

response = requests.post(
    'https://reportedip.de/wp-json/reportedip/v2/report',
    json={
        'ip': '1.2.3.4',
        'categories': [18, 21],
        'comment': 'SSH brute force'
    },
    headers={'X-Key': 'YOUR_API_KEY'}
)
data = response.json()
JavaScript
const response = await fetch(
    'https://reportedip.de/wp-json/reportedip/v2/report',
    {
        method: 'POST',
        headers: {
            'X-Key': 'YOUR_API_KEY',
            'Content-Type': 'application/json'
        },
        body: JSON.stringify({
            ip: '1.2.3.4',
            categories: [18, 21],
            comment: 'SSH brute force'
        })
    }
);
const data = await response.json();

Antwort

200 OK
json
{
  "meta": {
    "success": true,
    "code": 200,
    "message": "Report submitted successfully"
  },
  "data": {
    "reportId": 58234,
    "ip": "1.2.3.4",
    "categories": [18, 21],
    "abuseConfidencePercentage": 89
  }
}
HOLEN /verify-key
API-Schlüssel

Überprüfen Sie Ihren API-Schlüssel und rufen Sie Kontodaten ab, darunter Benutzerrolle, Berechtigungen, Ratenbegrenzungen und aktuelle Nutzungsstatistiken. Dies wird nicht auf das tägliche Kontingent angerechnet.

Beispiele

Locken
curl -H "X-Key: YOUR_API_KEY" \
     "https://reportedip.de/wp-json/reportedip/v2/verify-key"
php
$response = wp_remote_get(
    'https://reportedip.de/wp-json/reportedip/v2/verify-key',
    array(
        'headers' => array(
            'X-Key' => 'YOUR_API_KEY',
        ),
    )
);
$data = json_decode(wp_remote_retrieve_body($response), true);
Python
import requests

response = requests.get(
    'https://reportedip.de/wp-json/reportedip/v2/verify-key',
    headers={'X-Key': 'YOUR_API_KEY'}
)
data = response.json()
JavaScript
const response = await fetch(
    'https://reportedip.de/wp-json/reportedip/v2/verify-key',
    {
        headers: { 'X-Key': 'YOUR_API_KEY' }
    }
);
const data = await response.json();

Antwort

200 OK
json
{
  "meta": {
    "success": true,
    "code": 200,
    "message": "OK"
  },
  "data": {
    "valid": true,
    "role": "reportedip_professional",
    "permissions": {
      "check": true,
      "report": true,
      "bulk_check": true,
      "bulk_report": false,
      "reports_detail": true,
      "trends": true
    },
    "rateLimits": {
      "checksPerDay": 25000,
      "reportsPerDay": 1000
    },
    "usage": {
      "checksToday": 1247,
      "reportsToday": 38
    }
  }
}
HOLEN /statistics
Angemeldet

Authentifizierte Nutzerstatistiken: API-Aufrufe heute, Berichte heute, Gesamtzahl der Berichte, verifizierte Berichte, aktueller Reputationswert sowie die Nutzung der tier-spezifischen Kontingente. Wird nicht auf das tägliche Kontingent angerechnet.

Parameter

Name Typ Erforderlich Standard Beschreibung
Zeitraum Zeichenkette Nein heute One of <code>today</code>, <code>week</code>, <code>month</code>, <code>all</code>.

Beispiele

Locken
curl -H "X-Key: YOUR_KEY" "https://reportedip.de/wp-json/reportedip/v2/statistics?period=today"

Antwort

200 OK
json
{
  "meta": {"success": true, "code": 200},
  "data": {
    "apiCallsToday": 1247,
    "reportsToday": 38,
    "totalReports": 4271,
    "verifiedReports": 3892,
    "reputationScore": 87,
    "tier": "professional",
    "limits": {"checks": 25000, "reports": 1000}
  }
}

Endpunkte auf die schwarze Liste setzen

Greifen Sie auf die von der Community gepflegte IP-Blacklist zu, die anhand von Echtzeit-Meldungen automatisch bewertet wird. Verfügbar in den Formaten JSON, Klartext und CSV für die Integration in Firewalls.

HOLEN /blacklist
API-Schlüssel

Rufen Sie die IP-Blacklist in verschiedenen Formaten ab. Unterstützt die Filterung nach Konfidenzgrad, Quelle und Kategorie. Ideal für die Integration in Firewalls und automatisierte Sperrungen. Wird nicht auf das tägliche Kontingent angerechnet – stufenabhängige Funktion (ab „Contributor“).

Parameter

Name Typ Erforderlich Standard Beschreibung
Format Zeichenkette Nein json Antwortformat: JSON, TXT oder CSV
Quelle Zeichenkette Nein Gemeinschaft Quelle der Blacklist: Community (Standard) – es ist nur eine Quelle verfügbar; der Parameter „source“ ist für zukünftige Verwendung reserviert
Mindestvertrauen Ganzzahl Nein 75 Mindestprozentsatz für die Missbrauchswahrscheinlichkeit (0–100)
Kategorie Ganzzahl Nein Nach Bedrohungskategorie-ID filtern
Grenze Ganzzahl Nein 10000 Maximale Anzahl der zurückzugebenden Einträge

Beispiele

Locken
# JSON format
curl -H "X-Key: YOUR_API_KEY" \
     "https://reportedip.de/wp-json/reportedip/v2/blacklist?confidence_minimum=90"

# Plain text (one IP per line, for firewall rules)
curl -H "X-Key: YOUR_API_KEY" \
     "https://reportedip.de/wp-json/reportedip/v2/blacklist?format=txt&source=all"
php
$response = wp_remote_get(
    'https://reportedip.de/wp-json/reportedip/v2/blacklist?confidence_minimum=90',
    array(
        'headers' => array(
            'X-Key' => 'YOUR_API_KEY',
        ),
    )
);
$data = json_decode(wp_remote_retrieve_body($response), true);
Python
import requests

response = requests.get(
    'https://reportedip.de/wp-json/reportedip/v2/blacklist',
    params={
        'confidence_minimum': 90,
        'source': 'all'
    },
    headers={'X-Key': 'YOUR_API_KEY'}
)
data = response.json()
JavaScript
const response = await fetch(
    'https://reportedip.de/wp-json/reportedip/v2/blacklist?confidence_minimum=90',
    {
        headers: { 'X-Key': 'YOUR_API_KEY' }
    }
);
const data = await response.json();

Antwort

200 OK
json
{
  "meta": {
    "success": true,
    "code": 200,
    "message": "OK"
  },
  "data": {
    "generatedAt": "2026-03-09T15:00:00Z",
    "count": 4821,
    "confidenceMinimum": 90,
    "entries": [
      {
        "ip": "1.2.3.4",
        "abuseConfidencePercentage": 100,
        "totalReports": 156,
        "lastReportedAt": "2026-03-09T14:22:31Z",
        "categories": [18, 21, 22]
      },
      {
        "ip": "5.6.7.8",
        "abuseConfidencePercentage": 95,
        "totalReports": 87,
        "lastReportedAt": "2026-03-09T13:45:12Z",
        "categories": [15, 18]
      }
    ]
  }
}
HOLEN /blacklist-categories
Öffentlich

Alle verfügbaren Blacklist-Kategorien abrufen, die zur Klassifizierung von Einträgen verwendet werden. Wird nicht auf das Tageskontingent angerechnet.

Beispiele

Locken
curl "https://reportedip.de/wp-json/reportedip/v2/blacklist-categories"
php
$response = wp_remote_get(
    'https://reportedip.de/wp-json/reportedip/v2/blacklist-categories'
);
$data = json_decode(wp_remote_retrieve_body($response), true);
Python
import requests

response = requests.get(
    'https://reportedip.de/wp-json/reportedip/v2/blacklist-categories'
)
data = response.json()
JavaScript
const response = await fetch(
    'https://reportedip.de/wp-json/reportedip/v2/blacklist-categories'
);
const data = await response.json();

Antwort

200 OK
json
{
  "meta": {
    "success": true,
    "code": 200,
    "message": "OK"
  },
  "data": [
    {
      "id": 1,
      "name": "Botnet",
      "slug": "botnet",
      "description": "Known botnet command and control or participant"
    },
    {
      "id": 2,
      "name": "Brute-Force",
      "slug": "brute-force",
      "description": "Credential brute-force attacks"
    },
    {
      "id": 3,
      "name": "Spam",
      "slug": "spam",
      "description": "Spam sources"
    }
  ]
}
HOLEN /blacklist-stats
Öffentlich

Statistiken zur Blacklist abrufen, einschließlich Gesamtzahlen und Aufschlüsselung nach Konfidenzstufe und Kategorie. Wird nicht auf das Tageskontingent angerechnet.

Beispiele

Locken
curl "https://reportedip.de/wp-json/reportedip/v2/blacklist-stats"
php
$response = wp_remote_get(
    'https://reportedip.de/wp-json/reportedip/v2/blacklist-stats'
);
$data = json_decode(wp_remote_retrieve_body($response), true);
Python
import requests

response = requests.get(
    'https://reportedip.de/wp-json/reportedip/v2/blacklist-stats'
)
data = response.json()
JavaScript
const response = await fetch(
    'https://reportedip.de/wp-json/reportedip/v2/blacklist-stats'
);
const data = await response.json();

Antwort

200 OK
json
{
  "meta": {
    "success": true,
    "code": 200,
    "message": "OK"
  },
  "data": {
    "total": 12483,
    "community": 12483,
    "byConfidence": {
      "90-100": 4821,
      "75-89": 3247,
      "50-74": 2891,
      "25-49": 1524
    },
    "byCategory": [
      {"name": "Brute-Force", "count": 5432},
      {"name": "Web App Attack", "count": 3218},
      {"name": "SSH", "count": 2847},
      {"name": "Port Scan", "count": 986}
    ]
  }
}

Erweiterte Endpunkte

Erweiterte Endpunkte für fortgeschrittene Nutzer. Erfordert API-Schlüssel der Stufe „Professional“ oder „Enterprise“.

HOLEN /reports/{ip}
Professional+

Alle einzelnen Berichte für eine bestimmte IP-Adresse abrufen. Gibt paginierte Berichtsdetails zurück, darunter Informationen zum Ersteller, Kategorien und Zeitstempel. Wird nicht auf das tägliche Kontingent angerechnet – berechtigungsabhängige Funktion (ab Professional).

Parameter

Name Typ Erforderlich Standard Beschreibung
ip Zeichenkette Ja IPv4- oder IPv6-Adresse (im URL-Pfad)
Seite Ganzzahl Nein 1 Seitenzahl für die Paginierung
pro Seite Ganzzahl Nein 25 Berichte pro Seite

Beispiele

Locken
curl -H "X-Key: YOUR_API_KEY" \
     "https://reportedip.de/wp-json/reportedip/v2/reports/1.2.3.4?page=1&per_page=25"
php
$ip = '1.2.3.4';
$response = wp_remote_get(
    'https://reportedip.de/wp-json/reportedip/v2/reports/' . $ip . '?page=1',
    array(
        'headers' => array(
            'X-Key' => 'YOUR_API_KEY',
        ),
    )
);
$data = json_decode(wp_remote_retrieve_body($response), true);
Python
import requests

ip = '1.2.3.4'
response = requests.get(
    f'https://reportedip.de/wp-json/reportedip/v2/reports/{ip}',
    params={'page': 1, 'per_page': 25},
    headers={'X-Key': 'YOUR_API_KEY'}
)
data = response.json()
JavaScript
const ip = '1.2.3.4';
const response = await fetch(
    `https://reportedip.de/wp-json/reportedip/v2/reports/${ip}?page=1&per_page=25`,
    {
        headers: { 'X-Key': 'YOUR_API_KEY' }
    }
);
const data = await response.json();

Antwort

200 OK
json
{
  "meta": {
    "success": true,
    "code": 200,
    "message": "OK"
  },
  "data": {
    "ip": "1.2.3.4",
    "reports": [
      {
        "id": 58234,
        "categories": [18, 21],
        "comment": "SSH brute force with 500+ attempts",
        "reportedAt": "2026-03-09T14:22:31Z",
        "reporterRole": "honeypot",
        "aggregationCount": 12
      },
      {
        "id": 58102,
        "categories": [22],
        "comment": "Port scanning on TCP 22, 80, 443, 8080",
        "reportedAt": "2026-03-09T10:15:00Z",
        "reporterRole": "contributor",
        "aggregationCount": 0
      }
    ],
    "total": 42,
    "page": 1,
    "per_page": 25,
    "total_pages": 2
  }
}
BEITRAG /bulk-check
Professional+

Überprüfen Sie die Reputation mehrerer IP-Adressen in einer einzigen Anfrage. Pro Anfrage werden bis zu 1.000 IP-Adressen akzeptiert. Es werden +N von Ihrem täglichen Prüfkontingent abgezogen, wobei N die Anzahl der gültigen IP-Adressen in der Anfrage ist. Sollte der Aufruf das verbleibende Kontingent überschreiten, gibt der Server einen HTTP-429-Fehler zurück und der Zähler wird nicht erhöht.

Parameter

Name Typ Erforderlich Standard Beschreibung
ips Array Ja Array von IPv4-/IPv6-Adressen (max. 1.000)

Beispiele

Locken
curl -X POST \
     -H "X-Key: YOUR_API_KEY" \
     -H "Content-Type: application/json" \
     -d '{"ips": ["1.2.3.4", "5.6.7.8", "9.10.11.12"]}' \
     "https://reportedip.de/wp-json/reportedip/v2/bulk-check"
php
$response = wp_remote_post(
    'https://reportedip.de/wp-json/reportedip/v2/bulk-check',
    array(
        'headers' => array(
            'X-Key'        => 'YOUR_API_KEY',
            'Content-Type' => 'application/json',
        ),
        'body' => wp_json_encode(array(
            'ips' => array('1.2.3.4', '5.6.7.8', '9.10.11.12'),
        )),
    )
);
$data = json_decode(wp_remote_retrieve_body($response), true);
Python
import requests

response = requests.post(
    'https://reportedip.de/wp-json/reportedip/v2/bulk-check',
    json={
        'ips': ['1.2.3.4', '5.6.7.8', '9.10.11.12']
    },
    headers={'X-Key': 'YOUR_API_KEY'}
)
data = response.json()
JavaScript
const response = await fetch(
    'https://reportedip.de/wp-json/reportedip/v2/bulk-check',
    {
        method: 'POST',
        headers: {
            'X-Key': 'YOUR_API_KEY',
            'Content-Type': 'application/json'
        },
        body: JSON.stringify({
            ips: ['1.2.3.4', '5.6.7.8', '9.10.11.12']
        })
    }
);
const data = await response.json();

Antwort

200 OK
json
{
  "meta": {
    "success": true,
    "code": 200,
    "message": "OK"
  },
  "data": {
    "results": [
      {
        "ip": "1.2.3.4",
        "abuseConfidencePercentage": 87,
        "totalReports": 42,
        "lastReportedAt": "2026-03-09T14:22:31Z",
        "categories": [18, 21, 22]
      },
      {
        "ip": "5.6.7.8",
        "abuseConfidencePercentage": 0,
        "totalReports": 0,
        "lastReportedAt": null,
        "categories": []
      },
      {
        "ip": "9.10.11.12",
        "abuseConfidencePercentage": 45,
        "totalReports": 3,
        "lastReportedAt": "2026-03-07T09:30:00Z",
        "categories": [15]
      }
    ],
    "checked": 3
  }
}
BEITRAG /bulk-report
Unternehmen

Reichen Sie mehrere IP-Meldungen in einer einzigen Anfrage mithilfe von Daten im CSV-Format ein. Konzipiert für automatisierte Systeme und Honeypots, die große Mengen an böswilligen Aktivitäten melden müssen. Wird mit +N auf Ihr tägliches Melde-Kontingent angerechnet, wobei N die Anzahl der eingereichten Meldungen ist. Wird niemals auf das Überprüfungs-Kontingent angerechnet.

Parameter

Name Typ Erforderlich Standard Beschreibung
csv Zeichenkette Ja CSV-Daten mit den Spalten: IP, Kategorien, Kommentar (ein Eintrag pro Zeile)

Beispiele

Locken
curl -X POST \
     -H "X-Key: YOUR_API_KEY" \
     -H "Content-Type: application/json" \
     -d '{"csv": "1.2.3.4,18|21,SSH brute force\n5.6.7.8,22,Port scanning\n9.10.11.12,15|18,Distributed attack"}' \
     "https://reportedip.de/wp-json/reportedip/v2/bulk-report"
php
$csv = "1.2.3.4,18|21,SSH brute force\n";
$csv .= "5.6.7.8,22,Port scanning\n";
$csv .= "9.10.11.12,15|18,Distributed attack";

$response = wp_remote_post(
    'https://reportedip.de/wp-json/reportedip/v2/bulk-report',
    array(
        'headers' => array(
            'X-Key'        => 'YOUR_API_KEY',
            'Content-Type' => 'application/json',
        ),
        'body' => wp_json_encode(array(
            'csv' => $csv,
        )),
    )
);
$data = json_decode(wp_remote_retrieve_body($response), true);
Python
import requests

csv_data = """1.2.3.4,18|21,SSH brute force
5.6.7.8,22,Port scanning
9.10.11.12,15|18,Distributed attack"""

response = requests.post(
    'https://reportedip.de/wp-json/reportedip/v2/bulk-report',
    json={'csv': csv_data},
    headers={'X-Key': 'YOUR_API_KEY'}
)
data = response.json()
JavaScript
const csvData = [
    '1.2.3.4,18|21,SSH brute force',
    '5.6.7.8,22,Port scanning',
    '9.10.11.12,15|18,Distributed attack'
].join('\n');

const response = await fetch(
    'https://reportedip.de/wp-json/reportedip/v2/bulk-report',
    {
        method: 'POST',
        headers: {
            'X-Key': 'YOUR_API_KEY',
            'Content-Type': 'application/json'
        },
        body: JSON.stringify({ csv: csvData })
    }
);
const data = await response.json();

Antwort

200 OK
json
{
  "meta": {
    "success": true,
    "code": 200,
    "message": "Bulk report processed"
  },
  "data": {
    "success_count": 3,
    "error_count": 0,
    "errors": []
  }
}

2FA-Relay-Endpunkte

Verwaltete 2FA-Zustellung für das WordPress-Plugin ReportedIP “. Nutzer der PRO+-Stufen können Authentifizierungs-E-Mails und SMS über diesen Relay-Dienst in die Warteschlange stellen; der Dienst verbraucht zunächst das monatliche Inklusivkontingent und greift erst dann auf das Guthaben des Prepaid-Pakets zurück, sobald das Inklusivkontingent aufgebraucht ist.

Monatliches Inklusivkontingent: Kostenlos / Mitwirkender not eligible · Professionell 500 mails · 25 SMS · Business 2,500 mails · 75 SMS · Unternehmen fair-use unlimited. PRO- und Business über Prepaid-Pakete aufladen (hive_mail_bundle_1000/5000/25000, hive_sms_bundle_50/200/500).
Rückerstattungsschutz — bundle_balance lautet wie folgt: eine Rückerstattung über Stripe (charge.refunded) bei einem bereits in Anspruch genommenen Paket verringert das Guthaben und kann dazu führen, dass es unter null fällt. Solange das Guthaben nicht positiv ist und das Pauschalvolumen aufgebraucht ist, schlagen die Sendevorgänge mit HTTP 402 cap_reached_buy_bundle bis ein neues Paket erworben wird.
HOLEN /relay-quota
PRO / Business Enterprise

Gibt das monatliche Gesamtkontingent sowie das Guthaben des Prepaid-Pakets für E-Mail- und SMS-Relay zurück. Wird vom Hive-Plugin-Dashboard verwendet, um Verbrauchsbalken und Hinweise zum Paket anzuzeigen.

Beispiele

Locken
curl -H 'X-Key: YOUR_API_KEY' \
     https://reportedip.de/wp-json/reportedip/v2/relay-quota
php
$response = wp_remote_get(
    'https://reportedip.de/wp-json/reportedip/v2/relay-quota',
    array( 'headers' => array( 'X-Key' => 'YOUR_API_KEY' ) )
);
$data = json_decode( wp_remote_retrieve_body( $response ), true );
Python
import requests

response = requests.get(
    'https://reportedip.de/wp-json/reportedip/v2/relay-quota',
    headers={'X-Key': 'YOUR_API_KEY'}
)
data = response.json()
JavaScript
const response = await fetch(
    'https://reportedip.de/wp-json/reportedip/v2/relay-quota',
    { headers: { 'X-Key': 'YOUR_API_KEY' } }
);
const data = await response.json();

Antwort

200 OK
json
{
  "tier": "professional",
  "role": "reportedip_professional",
  "mail": {
    "sent": 18,
    "queued": 0,
    "queued_total": 18,
    "failed": 0,
    "limit": 500,
    "inclusive_limit": 500,
    "inclusive_used": 18,
    "inclusive_available": 482,
    "bundle_balance": 1000,
    "bundle_eligible": true,
    "period_start": "2026-05-01T00:00:00Z",
    "period_end":   "2026-05-31T23:59:59Z"
  },
  "sms": {
    "sent": 3,
    "queued": 0,
    "queued_total": 3,
    "failed": 0,
    "limit": 25,
    "inclusive_limit": 25,
    "inclusive_used": 3,
    "inclusive_available": 22,
    "bundle_balance": 50,
    "bundle_eligible": true,
    "period_start": "2026-05-01T00:00:00Z",
    "period_end":   "2026-05-31T23:59:59Z"
  },
  "mail_bundle_balance": 1000,
  "sms_bundle_balance":  50
}
BEITRAG /relay-mail
PRO / Business Enterprise

Stellt eine transaktionale 2FA-E-Mail über den SPF/DKIM/DMARC-verifizierten Relay in die Warteschlange. Verbraucht einen Slot aus dem monatlichen E-Mail-Kontingent; ist dieses aufgebraucht, wird ein Guthabenpunkt von `mail_bundle_balance` abgezogen. Gibt den HTTP-Status 402 zurück, wenn beide leer sind.

Parameter

Name Typ Erforderlich Standard Beschreibung
zu Zeichenkette Ja E-Mail-Adresse des Empfängers
Betreff Zeichenkette Ja Betreffzeile der E-Mail
html_body Zeichenkette Ja HTML-Textkörper der E-Mail
Klartext Zeichenkette Nein Optionaler Fallback-Text im Klartext
site_url Zeichenkette Nein URL der Ursprungsseite (wird für tägliche Obergrenzen pro Seite und Prüfprotokolle verwendet)

Beispiele

Locken
curl -X POST \
     -H 'X-Key: YOUR_API_KEY' \
     -H 'Content-Type: application/json' \
     -d '{"to":"[email protected]","subject":"Your 2FA code","html_body":"<p>Code: 123456</p>"}' \
     https://reportedip.de/wp-json/reportedip/v2/relay-mail
php
$response = wp_remote_post(
    'https://reportedip.de/wp-json/reportedip/v2/relay-mail',
    array(
        'headers' => array( 'X-Key' => 'YOUR_API_KEY', 'Content-Type' => 'application/json' ),
        'body'    => wp_json_encode( array(
            'to'        => '[email protected]',
            'subject'   => 'Your 2FA code',
            'html_body' => '<p>Code: 123456</p>',
        ) ),
    )
);
Python
import requests

response = requests.post(
    'https://reportedip.de/wp-json/reportedip/v2/relay-mail',
    headers={'X-Key': 'YOUR_API_KEY'},
    json={
        'to': '[email protected]',
        'subject': 'Your 2FA code',
        'html_body': '<p>Code: 123456</p>',
    },
)
JavaScript
const response = await fetch(
    'https://reportedip.de/wp-json/reportedip/v2/relay-mail',
    {
        method: 'POST',
        headers: { 'X-Key': 'YOUR_API_KEY', 'Content-Type': 'application/json' },
        body: JSON.stringify({
            to: '[email protected]',
            subject: 'Your 2FA code',
            html_body: '<p>Code: 123456</p>',
        }),
    }
);

Antwort

200 OK
json
{
  "ok": true,
  "queue_id": 48217,
  "remaining_quota": {
    "sent": 18,
    "queued": 1,
    "queued_total": 19,
    "failed": 0,
    "limit": 500,
    "inclusive_limit": 500,
    "inclusive_used": 19,
    "inclusive_available": 481,
    "bundle_balance": 1000,
    "bundle_eligible": true,
    "period_start": "2026-05-01T00:00:00Z",
    "period_end":   "2026-05-31T23:59:59Z"
  }
}
BEITRAG /relay-sms
PRO / Business Enterprise

Queues a 2FA SMS via the managed worldwide relay. The body is server-side rendered from a registered template (e.g. <code>2fa_login</code>) so the actual code never appears in client logs. HTTP 402 when both the inclusive quota and the prepaid bundle are exhausted; HTTP 422 with code <code>country_not_supported</code> when the destination country is unavailable for cost or operational reasons; HTTP 429 when the recipient or per-site daily anti-fraud cap is hit.

Parameter

Name Typ Erforderlich Standard Beschreibung
zu Zeichenkette Ja Telefonnummer des Empfängers im E.164-Format (z. B. +49170...)
Vorlagencode Zeichenkette Ja Server-side template id, e.g. <code>2fa_login</code>
Variablen Objekt Ja Template variables: <code>{ code, expiry_min, lang? }</code>
site_url Zeichenkette Nein URL der Ursprungsseite (wird für tägliche Obergrenzen pro Seite und Prüfprotokolle verwendet)

Beispiele

Locken
curl -X POST \
     -H 'X-Key: YOUR_API_KEY' \
     -H 'Content-Type: application/json' \
     -d '{"to":"+491701234567","template_code":"2fa_login","vars":{"code":"123456","expiry_min":5,"lang":"de"}}' \
     https://reportedip.de/wp-json/reportedip/v2/relay-sms
php
$response = wp_remote_post(
    'https://reportedip.de/wp-json/reportedip/v2/relay-sms',
    array(
        'headers' => array( 'X-Key' => 'YOUR_API_KEY', 'Content-Type' => 'application/json' ),
        'body'    => wp_json_encode( array(
            'to'            => '+491701234567',
            'template_code' => '2fa_login',
            'vars'          => array( 'code' => '123456', 'expiry_min' => 5, 'lang' => 'de' ),
        ) ),
    )
);
Python
import requests

response = requests.post(
    'https://reportedip.de/wp-json/reportedip/v2/relay-sms',
    headers={'X-Key': 'YOUR_API_KEY'},
    json={
        'to': '+491701234567',
        'template_code': '2fa_login',
        'vars': {'code': '123456', 'expiry_min': 5, 'lang': 'de'},
    },
)
JavaScript
const response = await fetch(
    'https://reportedip.de/wp-json/reportedip/v2/relay-sms',
    {
        method: 'POST',
        headers: { 'X-Key': 'YOUR_API_KEY', 'Content-Type': 'application/json' },
        body: JSON.stringify({
            to: '+491701234567',
            template_code: '2fa_login',
            vars: { code: '123456', expiry_min: 5, lang: 'de' },
        }),
    }
);

Antwort

200 OK
json
{
  "ok": true,
  "queue_id": 901,
  "remaining_quota": {
    "sent": 3,
    "queued": 1,
    "queued_total": 4,
    "failed": 0,
    "limit": 25,
    "inclusive_limit": 25,
    "inclusive_used": 4,
    "inclusive_available": 21,
    "bundle_balance": 50,
    "bundle_eligible": true,
    "period_start": "2026-05-01T00:00:00Z",
    "period_end":   "2026-05-31T23:59:59Z"
  }
}

Fehlermeldungen für Relais-Endpunkte

StatusCodeBedeutung
401missing_api_key / invalid_api_keyDie X-Key Der Header fehlt, ist fehlerhaft oder verweist auf einen deaktivierten Schlüssel.
403tier_forbiddenDie Stufe des Anrufers (Kostenlos / Mitwirkender) ist nicht für die Relay-Zustellung berechtigt.
402cap_reached_buy_bundleDas monatliche Datenvolumen ist aufgebraucht und das Guthaben des Prepaid-Pakets ist nach einer Rückerstattung aufgebraucht oder negativ. Kaufen Sie im Dashboard ein Paket, um die Nutzung fortzusetzen.
402monthly_cap_reachedDas monatliche Inklusivlimit wurde in einer Tarifstufe erreicht, in der kein Paket in Anspruch genommen werden kann.
429recipient_backoff / site_daily_capBetrugsschutz-Drosselung. Die retry-after Die Kopfzeile gibt an, wie lange gewartet werden soll.

Veraltete Endpunkte

Diese Endpunkte sind veraltet und werden in einer zukünftigen Version entfernt. Bitte wechseln Sie zu den empfohlenen Alternativen.

HOLEN /blacklist-detailed
API-Schlüssel
Veraltet. Verwenden Sie stattdessen GET /blacklist.

Lieferte zuvor eine detaillierte Blacklist. Wird aus Gründen der Abwärtskompatibilität mit älteren Hive-Installationen weiterhin bereitgestellt. Wird nicht auf das tägliche Kontingent angerechnet (seit Version 2.5.1 – wurde zuvor als Abfrage gezählt).

HOLEN /blacklist-combined
API-Schlüssel
Veraltet. Verwenden Sie stattdessen GET /blacklist?source=all.

Bisher wurde eine kombinierte Blacklist aus allen Quellen zurückgegeben. Wird aus Gründen der Abwärtskompatibilität mit älteren Hive-Installationen beibehalten. Wird nicht auf das tägliche Kontingent angerechnet (seit Version 2.5.1).

HOLEN /blacklist-export/git
API-Schlüssel
Veraltet. Verwenden Sie stattdessen GET /blacklist?format=txt.

Die Blacklist wurde zuvor im Klartextformat für die Integration in Git-Repositorys exportiert. Wird aus Gründen der Abwärtskompatibilität weiterhin bereitgestellt. Wird nicht auf das tägliche Kontingent angerechnet (seit Version 2.5.1).

Sicherheitsorientiert
DSGVO-konform
Hergestellt in Deutschland
Zurück zu den Dokumenten