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 header. Public endpoints do not require authentication but are rate-limited. Keys, tiers, rate limits and error codes are explained in detail on the Authentication & Rate Limits page.
- 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.
HOLEN
/check-public
— Public IP Check
Ü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"
}
}
HOLEN
/stats-public
— Detailed Public Statistics
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}
]
}
}
HOLEN
/search-public
— Public IP Search
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"}
]
}
}
HOLEN
/categories
— Threat 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
}
]
}
HOLEN
/attack-map-data
— Live Attack Map Dataset
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.
HOLEN
/check
— Full IP 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
}
}
}
BEITRAG
/report
— Report IP Address
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
}
}
HOLEN
/verify-key
— Verify API 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
}
}
}
HOLEN
/statistics
— Service Statistics
Public, service-wide statistics: total tracked IPs, total reports, reports submitted today and active API keys. No API key required — rate-limited per IP like the other public endpoints. Does not count against any daily quota. Your personal usage and quota figures live in the <a href="https://reportedip.de/dashboard/">Dashboard</a>.
Beispiele
curl "https://reportedip.de/wp-json/reportedip/v2/statistics"
Antwort
{
"meta": {"success": true, "code": 200},
"data": {
"total_ips": 181402,
"total_reports": 2643918,
"reports_today": 10457,
"active_api_keys": 312
}
}
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
— Get Blacklist
Retrieve the IP blacklist in various formats. Supports filtering by confidence level and threat category — combine both to build service-specific block lists (SSH, mail, web, FTP). Lists are regenerated server-side every 15 minutes; the endpoint returns an ETag and honors If-None-Match, so unchanged lists answer with 304 Not Modified. Does not count against any daily quota — tier-gated feature (Contributor and up).
Parameter
| Name | Typ | Erforderlich | Standard | Beschreibung |
|---|---|---|---|---|
| Format | Zeichenkette | Nein | json | Antwortformat: JSON, TXT oder CSV |
| Quelle | Zeichenkette | Nein | dynamic | Blacklist source: dynamic (default) — the community-driven, automatically scored blacklist. Other values are reserved for internal use |
| confidence | Ganzzahl | Nein | 75 | Minimum abuse confidence percentage (0-100). Alias: confidenceMinimum. Recommended for automated blocking: 90 |
| Kategorie | Zeichenkette | Nein | — | One or more threat category IDs, comma-separated (e.g. 22,18 for an SSH block list). Full catalogue via GET /categories |
| Grenze | Ganzzahl | Nein | 10000 | Maximum number of entries to return. Keep the default — smaller values truncate the list |
Beispiele
# JSON format
curl -H "X-Key: YOUR_API_KEY" \
"https://reportedip.de/wp-json/reportedip/v2/blacklist?confidence=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?confidence=90&format=txt&limit=10000"
# Service-specific list: SSH attackers only (categories 22 + 18)
curl -H "X-Key: YOUR_API_KEY" \
"https://reportedip.de/wp-json/reportedip/v2/blacklist?confidence=90&format=txt&limit=10000&category=22,18"
# Conditional request: returns 304 Not Modified if the list is unchanged
curl -H "X-Key: YOUR_API_KEY" \
-H 'If-None-Match: W/"2438413-90-2f6c8ad881b6"' \
"https://reportedip.de/wp-json/reportedip/v2/blacklist?confidence=90&format=txt&limit=10000"
$response = wp_remote_get(
'https://reportedip.de/wp-json/reportedip/v2/blacklist?confidence=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': 90,
'format': 'txt',
'limit': 10000,
'category': '22,18'
},
headers={'X-Key': 'YOUR_API_KEY'}
)
ips = response.text.splitlines()
const response = await fetch(
'https://reportedip.de/wp-json/reportedip/v2/blacklist?confidence=90',
{
headers: { 'X-Key': 'YOUR_API_KEY' }
}
);
const data = await response.json();
Antwort
{
"meta": {
"generatedAt": "2026-07-21T17:43:13+00:00",
"confidence": "90",
"confidenceMinimum": "90",
"count": 4821,
"format": "reportapi_v2"
},
"data": [
{
"ip": "1.2.3.4",
"ipAddress": "1.2.3.4",
"abuseConfidencePercentage": 100,
"lastReportedAt": "2026-07-21T14:22:31+00:00"
},
{
"ip": "5.6.7.8",
"ipAddress": "5.6.7.8",
"abuseConfidencePercentage": 95,
"lastReportedAt": "2026-07-21T13:45:12+00:00"
}
]
}
HOLEN
/blacklist-categories
— 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"
}
]
}
HOLEN
/blacklist-stats
— Blacklist Statistics
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“.
HOLEN
/reports/{ip}
— Reports for 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
}
}
HOLEN
/trends
— Trend Data
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}
]
}
}
BEITRAG
/bulk-check
— Bulk IP 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
}
}
BEITRAG
/bulk-report
— 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.
HOLEN
/relay-quota
— Relay Quota Status
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
}
BEITRAG
/relay-mail
— Send 2FA 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 |
|---|---|---|---|---|
| recipient | Zeichenkette | Ja | — | E-Mail-Adresse des Empfängers |
| Betreff | Zeichenkette | Ja | — | Betreffzeile der E-Mail |
| body_html | Zeichenkette | Nein | '' | HTML-Textkörper der E-Mail |
| body_text | Zeichenkette | Nein | '' | Plain-text body / fallback |
| reply_to | Zeichenkette | Nein | '' | Reply-To address — plain email or RFC 5322 <code>Display Name <email@host></code> |
| headers | Array | Nein | [] | Additional mail headers |
| 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 '{"recipient":"[email protected]","subject":"Your 2FA code","body_html":"<p>Code: 123456</p>","body_text":"Code: 123456"}' \
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(
'recipient' => '[email protected]',
'subject' => 'Your 2FA code',
'body_html' => '<p>Code: 123456</p>',
'body_text' => 'Code: 123456',
) ),
)
);
import requests
response = requests.post(
'https://reportedip.de/wp-json/reportedip/v2/relay-mail',
headers={'X-Key': 'YOUR_API_KEY'},
json={
'recipient': '[email protected]',
'subject': 'Your 2FA code',
'body_html': '<p>Code: 123456</p>',
'body_text': 'Code: 123456',
},
)
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({
recipient: '[email protected]',
subject: 'Your 2FA code',
body_html: '<p>Code: 123456</p>',
body_text: 'Code: 123456',
}),
}
);
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"
}
}
BEITRAG
/relay-sms
— Send 2FA 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 |
|---|---|---|---|---|
| recipient_phone | Zeichenkette | Ja | — | Telefonnummer des Empfängers im E.164-Format (z. B. +49170...) |
| Vorlagencode | Zeichenkette | Nein | '' | Server-side template id, e.g. <code>2fa_login</code>. When set, the message is rendered server-side and <code>message</code> is ignored |
| template_vars | Objekt | Nein | {} | Template variables: <code>{ code, expiry_min, lang? }</code> |
| message | Zeichenkette | Nein | '' | Raw message text — used only when no <code>template_code</code> is given. One of <code>message</code> or <code>template_code</code> is required (HTTP 422 otherwise) |
| 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 '{"recipient_phone":"+491701234567","template_code":"2fa_login","template_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(
'recipient_phone' => '+491701234567',
'template_code' => '2fa_login',
'template_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={
'recipient_phone': '+491701234567',
'template_code': '2fa_login',
'template_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({
recipient_phone: '+491701234567',
template_code: '2fa_login',
template_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.
HOLEN
/blacklist-detailed
— Detailed Blacklist (Deprecated)
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
— Combined Blacklist (Deprecated)
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
— Git Export (Deprecated)
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).
Zuletzt aktualisiert: · Betreut vom ReportedIP