API-Referenz
Umfassende Referenz für alle Endpunkte der ReportedIP API v2 mit Code-Beispielen in cURL, PHP, Python und JavaScript.
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.
https://reportedip.de/wp-json/reportedip/v2/
X-Key Kopfzeile. Öffentliche Endpunkte erfordern keine Authentifizierung, unterliegen jedoch einer Ratenbegrenzung.
- Kontingent prüfen:
GET /check(+1) undPOST /bulk-check(+N, einmal pro gültiger IP-Adresse). - Meldekontingent:
POST /report(+1) undPOST /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 eineX-KeyHeader, 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.
/check-public
Ü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).
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
curl "https://reportedip.de/wp-json/reportedip/v2/check-public?ip=1.2.3.4"
$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);
import requests
response = requests.get(
'https://reportedip.de/wp-json/reportedip/v2/check-public',
params={'ip': '1.2.3.4'}
)
data = response.json()
const response = await fetch(
'https://reportedip.de/wp-json/reportedip/v2/check-public?ip=1.2.3.4'
);
const data = await response.json();
Antwort
{
"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"
}
}
/stats-public
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.
Beispiele
curl "https://reportedip.de/wp-json/reportedip/v2/stats-public"
$response = wp_remote_get(
'https://reportedip.de/wp-json/reportedip/v2/stats-public'
);
$data = json_decode(wp_remote_retrieve_body($response), true);
import requests
response = requests.get(
'https://reportedip.de/wp-json/reportedip/v2/stats-public'
)
data = response.json()
const response = await fetch(
'https://reportedip.de/wp-json/reportedip/v2/stats-public'
);
const data = await response.json();
Antwort
{
"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}
]
}
}
/search-public
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.
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
curl "https://reportedip.de/wp-json/reportedip/v2/search-public?q=1.2.3"
Antwort
{
"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"}
]
}
}
/categories
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.
Beispiele
curl "https://reportedip.de/wp-json/reportedip/v2/categories"
$response = wp_remote_get(
'https://reportedip.de/wp-json/reportedip/v2/categories'
);
$data = json_decode(wp_remote_retrieve_body($response), true);
import requests
response = requests.get(
'https://reportedip.de/wp-json/reportedip/v2/categories'
)
data = response.json()
const response = await fetch(
'https://reportedip.de/wp-json/reportedip/v2/categories'
);
const data = await response.json();
Antwort
{
"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
}
]
}
/attack-map-data
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.
Beispiele
curl "https://reportedip.de/wp-json/reportedip/v2/attack-map-data"
$response = wp_remote_get(
'https://reportedip.de/wp-json/reportedip/v2/attack-map-data'
);
$data = json_decode( wp_remote_retrieve_body( $response ), true );
import requests
response = requests.get(
'https://reportedip.de/wp-json/reportedip/v2/attack-map-data'
)
data = response.json()
const response = await fetch(
'https://reportedip.de/wp-json/reportedip/v2/attack-map-data'
);
const data = await response.json();
Antwort
{
"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.
/check
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
curl -H "X-Key: YOUR_API_KEY" \
"https://reportedip.de/wp-json/reportedip/v2/check?ip=1.2.3.4&verbose=true"
$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);
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()
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
{
"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
}
}
}
/report
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
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"
$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);
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()
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
{
"meta": {
"success": true,
"code": 200,
"message": "Report submitted successfully"
},
"data": {
"reportId": 58234,
"ip": "1.2.3.4",
"categories": [18, 21],
"abuseConfidencePercentage": 89
}
}
/verify-key
Ü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
curl -H "X-Key: YOUR_API_KEY" \
"https://reportedip.de/wp-json/reportedip/v2/verify-key"
$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);
import requests
response = requests.get(
'https://reportedip.de/wp-json/reportedip/v2/verify-key',
headers={'X-Key': 'YOUR_API_KEY'}
)
data = response.json()
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
{
"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
}
}
}
/statistics
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
curl -H "X-Key: YOUR_KEY" "https://reportedip.de/wp-json/reportedip/v2/statistics?period=today"
Antwort
{
"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.
/blacklist
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
# 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"
$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);
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()
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
{
"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]
}
]
}
}
/blacklist-categories
Alle verfügbaren Blacklist-Kategorien abrufen, die zur Klassifizierung von Einträgen verwendet werden. Wird nicht auf das Tageskontingent angerechnet.
Beispiele
curl "https://reportedip.de/wp-json/reportedip/v2/blacklist-categories"
$response = wp_remote_get(
'https://reportedip.de/wp-json/reportedip/v2/blacklist-categories'
);
$data = json_decode(wp_remote_retrieve_body($response), true);
import requests
response = requests.get(
'https://reportedip.de/wp-json/reportedip/v2/blacklist-categories'
)
data = response.json()
const response = await fetch(
'https://reportedip.de/wp-json/reportedip/v2/blacklist-categories'
);
const data = await response.json();
Antwort
{
"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"
}
]
}
/blacklist-stats
Statistiken zur Blacklist abrufen, einschließlich Gesamtzahlen und Aufschlüsselung nach Konfidenzstufe und Kategorie. Wird nicht auf das Tageskontingent angerechnet.
Beispiele
curl "https://reportedip.de/wp-json/reportedip/v2/blacklist-stats"
$response = wp_remote_get(
'https://reportedip.de/wp-json/reportedip/v2/blacklist-stats'
);
$data = json_decode(wp_remote_retrieve_body($response), true);
import requests
response = requests.get(
'https://reportedip.de/wp-json/reportedip/v2/blacklist-stats'
)
data = response.json()
const response = await fetch(
'https://reportedip.de/wp-json/reportedip/v2/blacklist-stats'
);
const data = await response.json();
Antwort
{
"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“.
/reports/{ip}
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
curl -H "X-Key: YOUR_API_KEY" \
"https://reportedip.de/wp-json/reportedip/v2/reports/1.2.3.4?page=1&per_page=25"
$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);
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()
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
{
"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
}
}
/trends
Ruft Trend- und Zeitreihendaten ab, die Angriffsmuster über einen bestimmten Zeitraum hinweg darstellen. Nützlich für Dashboards und Analysen. Wird nicht auf das tägliche Kontingent angerechnet – berechtigungsabhängige Funktion (ab Professional).
Parameter
| Name | Typ | Erforderlich | Standard | Beschreibung |
|---|---|---|---|---|
| Zeitraum | Zeichenkette | Nein | 7d | Zeitraum: 24 Stunden, 7 Tage oder 30 Tage |
| Kategorie | Ganzzahl | Nein | — | Nach Bedrohungskategorie-ID filtern |
Beispiele
curl -H "X-Key: YOUR_API_KEY" \
"https://reportedip.de/wp-json/reportedip/v2/trends?period=7d"
$response = wp_remote_get(
'https://reportedip.de/wp-json/reportedip/v2/trends?period=7d',
array(
'headers' => array(
'X-Key' => 'YOUR_API_KEY',
),
)
);
$data = json_decode(wp_remote_retrieve_body($response), true);
import requests
response = requests.get(
'https://reportedip.de/wp-json/reportedip/v2/trends',
params={'period': '7d'},
headers={'X-Key': 'YOUR_API_KEY'}
)
data = response.json()
const response = await fetch(
'https://reportedip.de/wp-json/reportedip/v2/trends?period=7d',
{
headers: { 'X-Key': 'YOUR_API_KEY' }
}
);
const data = await response.json();
Antwort
{
"meta": {
"success": true,
"code": 200,
"message": "OK"
},
"data": {
"period": "7d",
"timeSeries": [
{"date": "2026-03-03", "reports": 1842, "newIPs": 312},
{"date": "2026-03-04", "reports": 2104, "newIPs": 356},
{"date": "2026-03-05", "reports": 1956, "newIPs": 298},
{"date": "2026-03-06", "reports": 2347, "newIPs": 401},
{"date": "2026-03-07", "reports": 1893, "newIPs": 287},
{"date": "2026-03-08", "reports": 2156, "newIPs": 342},
{"date": "2026-03-09", "reports": 1847, "newIPs": 318}
],
"topCategories": [
{"id": 18, "name": "Brute-Force", "count": 5432},
{"id": 21, "name": "Web App Attack", "count": 3218},
{"id": 22, "name": "SSH", "count": 2847}
]
}
}
/bulk-check
Ü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
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"
$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);
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()
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
{
"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
}
}
/bulk-report
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
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"
$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);
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()
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
{
"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.
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).
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.
/relay-quota
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
curl -H 'X-Key: YOUR_API_KEY' \
https://reportedip.de/wp-json/reportedip/v2/relay-quota
$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 );
import requests
response = requests.get(
'https://reportedip.de/wp-json/reportedip/v2/relay-quota',
headers={'X-Key': 'YOUR_API_KEY'}
)
data = response.json()
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
{
"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
}
/relay-mail
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
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
$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>',
) ),
)
);
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>',
},
)
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
{
"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"
}
}
/relay-sms
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
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
$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' ),
) ),
)
);
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'},
},
)
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
{
"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
| Status | Code | Bedeutung |
|---|---|---|
401 | missing_api_key / invalid_api_key | Die X-Key Der Header fehlt, ist fehlerhaft oder verweist auf einen deaktivierten Schlüssel. |
403 | tier_forbidden | Die Stufe des Anrufers (Kostenlos / Mitwirkender) ist nicht für die Relay-Zustellung berechtigt. |
402 | cap_reached_buy_bundle | Das 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. |
402 | monthly_cap_reached | Das monatliche Inklusivlimit wurde in einer Tarifstufe erreicht, in der kein Paket in Anspruch genommen werden kann. |
429 | recipient_backoff / site_daily_cap | Betrugsschutz-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.
/blacklist-detailed
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).
/blacklist-combined
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).
/blacklist-export/git
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).