API Reference
Vollständige Referenz für alle Endpoints der ReportedIP REST API v2 mit Code-Beispielen in cURL, PHP, Python und JavaScript.
1,000 checks · 50 reports ·
Contributor 5,000 / 200 ·
Professional 25,000 / 1,000 ·
Business 100,000 / 5,000 pro Lizenz ·
Enterprise unlimited.
Die Kontingente der „Business“-Stufe skalieren mit der Anzahl der Lizenzen (x2–x20), z. B. x5 = 500,000 / 25,000.
Einen vollständigen Vergleich der Tarife finden Sie unter „Preise“.
https://reportedip.com/wp-json/reportedip/v2/
X-Key Header gesendet werden muss. Öffentliche Endpoints erfordern keine Authentifizierung, unterliegen jedoch Rate Limits. Schlüssel, Tarife, Rate Limits und Fehlercodes werden auf der Seite „Authentifizierung & Rate Limits“ ausführlich erläutert.
- Kontingent prüfen:
GET /check(+1) undPOST /bulk-check(+N, jeweils einer pro gültiger IP-Adresse). - Kontingent melden:
POST /report(+1) undPOST /bulk-report(+N, jeweils eine pro eingereichtem Bericht). - Keine der beiden Kontingente:
GET /blacklist,/blacklist-categories,/blacklist-stats,/reports/{ip},/trends,/statistics,/verify-key— hierbei handelt es sich um stufenabhängige Funktionen, nicht um kontingentierte Aufrufe. - Beschränkung für öffentliche IP-Adressen: 100 Anfragen pro Tag pro Quell-IP, gemeinsam genutzt für alle nicht authentifizierten Aufrufe (
/check-public,/stats-public,/search-public,/categories). Senden Sie einenX-KeyHeader, um stattdessen auf den API-Key-Kontingentpfad umzuschalten.
Öffentliche Endpoints
These Endpoints are available without authentication. The rate is limited to 100 requests per day per IP address.
Überprüfen Sie die Reputation einer IP-Adresse ohne Authentifizierung. Gibt den Confidence Score für Missbrauch, die Gesamtzahl der Reports, die Threat Categories und das Datum der letzten Meldung zurück. Wird mit +1 auf das tägliche Limit der Public API pro IP-Adresse angerechnet (gemeinsam mit den anderen nicht authentifizierten Endpoints).
Parameters
| Name | Type | Required | Default | Description |
|---|---|---|---|---|
| ip | string | Yes | — | Zu überprüfende IPv4- oder IPv6-Adresse |
| verbose | boolean | No | false | Fügen Sie der Antwort eine detaillierte Aufschlüsselung der Konfidenzwerte bei |
Examples
curl "https://reportedip.com/wp-json/reportedip/v2/check-public?ip=1.2.3.4"
$response = wp_remote_get(
'https://reportedip.com/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.com/wp-json/reportedip/v2/check-public',
params={'ip': '1.2.3.4'}
)
data = response.json()
const response = await fetch(
'https://reportedip.com/wp-json/reportedip/v2/check-public?ip=1.2.3.4'
);
const data = await response.json();
Response
{
"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"
}
}
Rufen Sie erweiterte öffentliche Statistiken mit Aufschlüsselungen nach Kategorien, den häufigsten Bedrohungsarten und historischen Daten ab. Dies wird als +1 auf das tägliche Limit der Public API pro IP-Adresse angerechnet.
Examples
curl "https://reportedip.com/wp-json/reportedip/v2/stats-public"
$response = wp_remote_get(
'https://reportedip.com/wp-json/reportedip/v2/stats-public'
);
$data = json_decode(wp_remote_retrieve_body($response), true);
import requests
response = requests.get(
'https://reportedip.com/wp-json/reportedip/v2/stats-public'
)
data = response.json()
const response = await fetch(
'https://reportedip.com/wp-json/reportedip/v2/stats-public'
);
const data = await response.json();
Response
{
"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}
]
}
}
Durchsuchen Sie die öffentliche Reputationsdatenbank anhand einer IP-Teiladresse, eines Ländercodes oder einer ASN. Nützlich für die öffentlich zugängliche Suchleiste auf reportedip.com. Wird als +1 auf das tägliche Limit der Public API pro IP-Adresse angerechnet.
Parameters
| Name | Type | Required | Default | Description |
|---|---|---|---|---|
| q | string | Yes | — | Suchanfrage: vollständige oder teilweise IP-Adresse, Ländercode (z. B. „CN“) oder ASN. |
| limit | int | No | 20 | Anzahl der Ergebnisse (max. 50). |
Examples
curl "https://reportedip.com/wp-json/reportedip/v2/search-public?q=1.2.3"
Response
{
"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"}
]
}
}
Rufen Sie die Liste aller 58 vordefinierten Threat Categories ab, die zur Klassifizierung von IP-Reports verwendet werden. Jede Kategorie enthält ihre ID, ihren Namen, ihre Beschreibung und ihren Schweregrad. Der Aufruf ohne API-Key wird auf das tägliche Limit der Public API pro IP-Adresse mit +1 angerechnet; mit einem X-Key-Header wird er nicht auf das tägliche Kontingent angerechnet.
Examples
curl "https://reportedip.com/wp-json/reportedip/v2/categories"
$response = wp_remote_get(
'https://reportedip.com/wp-json/reportedip/v2/categories'
);
$data = json_decode(wp_remote_retrieve_body($response), true);
import requests
response = requests.get(
'https://reportedip.com/wp-json/reportedip/v2/categories'
)
data = response.json()
const response = await fetch(
'https://reportedip.com/wp-json/reportedip/v2/categories'
);
const data = await response.json();
Response
{
"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
}
]
}
Authentifizierte Endpoints
Für diese Endpoints ist ein gültiger API Key erforderlich, der über den X-Key Header übermittelt werden. Sie erhalten Ihren API Key über das Dashboard.
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 mit +1 auf Ihr tägliches Prüfkontingent angerechnet.
Parameters
| Name | Type | Required | Default | Description |
|---|---|---|---|---|
| ip | string | Yes | — | Zu überprüfende IPv4- oder IPv6-Adresse |
| verbose | boolean | No | false | Bitte fügen Sie eine detaillierte Aufschlüsselung des Confidence Scores bei |
| include_reports | boolean | No | false | Bitte fügen Sie in Ihrer Antwort die Einzelheiten des jeweiligen Reports bei |
Examples
curl -H "X-Key: YOUR_API_KEY" \
"https://reportedip.com/wp-json/reportedip/v2/check?ip=1.2.3.4&verbose=true"
$response = wp_remote_get(
'https://reportedip.com/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.com/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.com/wp-json/reportedip/v2/check?ip=1.2.3.4&verbose=true',
{
headers: { 'X-Key': 'YOUR_API_KEY' }
}
);
const data = await response.json();
Response
{
"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
}
}
}
Melden Sie eine bösartige IP-Adresse an die Community. Die Meldung wird mit vorhandenen Daten zusammengeführt, um den Confidence Score der IP-Adresse zu aktualisieren. Reports 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 Prüfkontingent.
Parameters
| Name | Type | Required | Default | Description |
|---|---|---|---|---|
| ip | string | Yes | — | Zu meldende IPv4- oder IPv6-Adresse |
| categories | array | Yes | — | Array mit IDs von Threat Categories (z. B. [18, 21]) |
| comment | string | No | — | Optionaler Kommentar zur Beschreibung der beobachteten böswilligen Aktivität |
Examples
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.com/wp-json/reportedip/v2/report"
$response = wp_remote_post(
'https://reportedip.com/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.com/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.com/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();
Response
{
"meta": {
"success": true,
"code": 200,
"message": "Report submitted successfully"
},
"data": {
"reportId": 58234,
"ip": "1.2.3.4",
"categories": [18, 21],
"abuseConfidencePercentage": 89
}
}
Überprüfen Sie Ihre API Key und rufen Sie Kontodaten ab, darunter Benutzerrolle, Berechtigungen, Rate Limits und aktuelle Nutzungsstatistiken. Dies wird nicht auf Ihr Tageskontingent angerechnet.
Examples
curl -H "X-Key: YOUR_API_KEY" \
"https://reportedip.com/wp-json/reportedip/v2/verify-key"
$response = wp_remote_get(
'https://reportedip.com/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.com/wp-json/reportedip/v2/verify-key',
headers={'X-Key': 'YOUR_API_KEY'}
)
data = response.json()
const response = await fetch(
'https://reportedip.com/wp-json/reportedip/v2/verify-key',
{
headers: { 'X-Key': 'YOUR_API_KEY' }
}
);
const data = await response.json();
Response
{
"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
}
}
}
Öffentliche, dienstweite Statistiken: Gesamtzahl der erfassten IP-Adressen, Gesamtzahl der Reports, heute eingereichte Reports und aktive API Keys. Es ist kein API Key erforderlich – die Zugriffsrate ist wie bei den anderen öffentlichen Endpoints pro IP-Adresse begrenzt. Dies wird nicht auf Ihr tägliches Kontingent angerechnet. Ihre persönlichen Nutzungs- und Kontingentzahlen finden Sie im https://reportedip.com/dashboard/">Dashboard.
Examples
curl "https://reportedip.com/wp-json/reportedip/v2/statistics"
Response
{
"meta": {"success": true, "code": 200},
"data": {
"total_ips": 181402,
"total_reports": 2643918,
"reports_today": 10457,
"active_api_keys": 312
}
}
Endpoints of the Blacklist
Greifen Sie auf die von der Community gepflegte IP-Blacklist zu, die automatisch anhand von Echtzeit-Reports bewertet wird. Verfügbar in den Formaten JSON, Klartext und CSV zur Integration in Firewalls.
Rufen Sie die IP-Blacklist in verschiedenen Formaten ab. Unterstützt die Filterung nach Konfidenzstufe und Threat Category – kombinieren Sie beide Kriterien, um dienstspezifische Blacklists (SSH, E-Mail, Web, FTP) zu erstellen. Die Listen werden serverseitig alle 15 Minuten neu generiert; der Endpoint gibt einen ETag zurück und berücksichtigt „If-None-Match“, sodass unveränderte Listen mit dem Status „304 Not Modified“ antworten. Wird nicht auf ein tägliches Kontingent angerechnet – stufenabhängige Funktion (ab „Contributor“).
Parameters
| Name | Type | Required | Default | Description |
|---|---|---|---|---|
| format | string | No | json | Antwortformat: json, txt oder csv |
| source | string | No | dynamic | Quelle der Blacklist: dynamisch (Standard) – die von der Community gepflegte, automatisch bewertete Blacklist. Andere Werte sind für den internen Gebrauch reserviert |
| confidence | integer | No | 75 | Mindestwert für den Missbrauchs-Vertrauensgrad (0–100). Alias: confidenceMinimum. Empfohlener Wert für die automatische Sperrung: 90 |
| category | string | No | — | Eine oder mehrere IDs von Threat Categories, durch Kommas getrennt (z. B. 22,18 für eine SSH-Sperrliste). Vollständiger Katalog über GET /categories |
| limit | integer | No | 10000 | Maximale Anzahl der zurückzugebenden Einträge. Behalten Sie die Standardeinstellung bei – bei kleineren Werten wird die Liste gekürzt. |
Examples
# JSON format
curl -H "X-Key: YOUR_API_KEY" \
"https://reportedip.com/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.com/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.com/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.com/wp-json/reportedip/v2/blacklist?confidence=90&format=txt&limit=10000"
$response = wp_remote_get(
'https://reportedip.com/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.com/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.com/wp-json/reportedip/v2/blacklist?confidence=90',
{
headers: { 'X-Key': 'YOUR_API_KEY' }
}
);
const data = await response.json();
Response
{
"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"
}
]
}
Rufen Sie alle verfügbaren Blacklist-Kategorien ab, die zur Klassifizierung von Einträgen verwendet werden. Dies wird nicht auf Ihr Tageskontingent angerechnet.
Examples
curl -H "X-Key: YOUR_API_KEY" \
"https://reportedip.com/wp-json/reportedip/v2/blacklist-categories"
$response = wp_remote_get(
'https://reportedip.com/wp-json/reportedip/v2/blacklist-categories',
array('headers' => array('X-Key' => 'YOUR_API_KEY'))
);
$data = json_decode(wp_remote_retrieve_body($response), true);
import requests
response = requests.get(
'https://reportedip.com/wp-json/reportedip/v2/blacklist-categories',
headers={'X-Key': 'YOUR_API_KEY'}
)
data = response.json()
const response = await fetch(
'https://reportedip.com/wp-json/reportedip/v2/blacklist-categories',
{ headers: { 'X-Key': 'YOUR_API_KEY' } }
);
const data = await response.json();
Response
{
"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"
}
]
}
Rufen Sie Statistiken zur Blacklist ab, einschließlich der Gesamtzahlen und der Verteilung nach Konfidenzstufe und Kategorie. Dies wird nicht auf Ihr Tageskontingent angerechnet.
Examples
curl -H "X-Key: YOUR_API_KEY" \
"https://reportedip.com/wp-json/reportedip/v2/blacklist-stats"
$response = wp_remote_get(
'https://reportedip.com/wp-json/reportedip/v2/blacklist-stats',
array('headers' => array('X-Key' => 'YOUR_API_KEY'))
);
$data = json_decode(wp_remote_retrieve_body($response), true);
import requests
response = requests.get(
'https://reportedip.com/wp-json/reportedip/v2/blacklist-stats',
headers={'X-Key': 'YOUR_API_KEY'}
)
data = response.json()
const response = await fetch(
'https://reportedip.com/wp-json/reportedip/v2/blacklist-stats',
{ headers: { 'X-Key': 'YOUR_API_KEY' } }
);
const data = await response.json();
Response
{
"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 Endpoints
Erweiterte Endpoints für fortgeschrittene Benutzer. Erfordern API Keys der Stufen „Professional“ oder „Enterprise“.
Ruft alle einzelnen Reports für eine bestimmte IP-Adresse ab. Gibt paginierte Reports-Details zurück, darunter Informationen zum Ersteller, Kategorien und Zeitstempel. Wird nicht auf das tägliche Kontingent angerechnet – diese Funktion ist an die Abonnementstufe gebunden (ab „Professional“).
Parameters
| Name | Type | Required | Default | Description |
|---|---|---|---|---|
| ip | string | Yes | — | IPv4- oder IPv6-Adresse (im URL-Pfad) |
| page | integer | No | 1 | Seitenzahl für die Paginierung |
| per_page | integer | No | 25 | Reports pro Seite |
Examples
curl -H "X-Key: YOUR_API_KEY" \
"https://reportedip.com/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.com/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.com/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.com/wp-json/reportedip/v2/reports/${ip}?page=1&per_page=25`,
{
headers: { 'X-Key': 'YOUR_API_KEY' }
}
);
const data = await response.json();
Response
{
"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
}
}
Rufen Sie Trend- und Zeitreihendaten ab, die Angriffsmuster über einen bestimmten Zeitraum hinweg darstellen. Nützlich für Dashboards und Analysen. Wird nicht auf Ihr Tageskontingent angerechnet – diese Funktion ist an die Abonnementstufe gebunden (ab Professional).
Parameters
| Name | Type | Required | Default | Description |
|---|---|---|---|---|
| period | string | No | 7d | Zeitraum: 24 Stunden, 7 Tage oder 30 Tage |
| category | integer | No | — | Nach ID der Threat Category filtern |
Examples
curl -H "X-Key: YOUR_API_KEY" \
"https://reportedip.com/wp-json/reportedip/v2/trends?period=7d"
$response = wp_remote_get(
'https://reportedip.com/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.com/wp-json/reportedip/v2/trends',
params={'period': '7d'},
headers={'X-Key': 'YOUR_API_KEY'}
)
data = response.json()
const response = await fetch(
'https://reportedip.com/wp-json/reportedip/v2/trends?period=7d',
{
headers: { 'X-Key': 'YOUR_API_KEY' }
}
);
const data = await response.json();
Response
{
"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}
]
}
}
Ü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 den HTTP-Status 429 zurück, und der Zähler wird nicht erhöht.
Parameters
| Name | Type | Required | Default | Description |
|---|---|---|---|---|
| ips | array | Yes | — | Array von IPv4-/IPv6-Adressen (max. 1.000) |
Examples
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.com/wp-json/reportedip/v2/bulk-check"
$response = wp_remote_post(
'https://reportedip.com/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.com/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.com/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();
Response
{
"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
}
}
Reichen Sie mehrere IP-Reports in einer einzigen Anfrage mithilfe von Daten im CSV-Format ein. Diese Funktion ist für automatisierte Systeme und Honeypots konzipiert, die große Mengen an böswilligen Aktivitäten melden müssen. Es werden +N auf Ihr tägliches Melde-Kontingent angerechnet, wobei N die Anzahl der eingereichten Reports ist. Dies wird niemals auf Ihr Prüfkontingent angerechnet.
Parameters
| Name | Type | Required | Default | Description |
|---|---|---|---|---|
| csv | string | Yes | — | CSV-Daten mit den Spalten: IP, Kategorien, Kommentar (ein Bericht pro Zeile) |
Examples
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.com/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.com/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.com/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.com/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();
Response
{
"meta": {
"success": true,
"code": 200,
"message": "Bulk report processed"
},
"data": {
"success_count": 3,
"error_count": 0,
"errors": []
}
}
2FA-Relay-Endpoints
Verwaltete 2FA-Übermittlung für das WordPress-Plugin „ReportedIP Hive“. In den PRO+-Tarifen können Authentifizierungs-E-Mails und SMS über diesen Relay in die Warteschlange gestellt werden; der Dienst verbraucht zunächst das monatlich inbegriffene Kontingent und greift erst dann auf das Guthaben des Prepaid-Pakets zurück, sobald die inbegriffene Obergrenze erreicht ist.
not eligible ·
Professional 500 mails · 25 SMS ·
Business 2,500 mails · 75 SMS ·
Enterprise fair-use unlimited.
PRO- und Business-Kunden können ihr Guthaben über Prepaid-Pakete aufladen
(hive_mail_bundle_1000/5000/25000, hive_sms_bundle_50/200/500).
bundle_balance“ ist aktiviert:
Eine Stripe-Rückerstattung (charge.refunded) für ein bereits aufgebrauchtes
Paket verringert das Guthaben und kann dazu führen, dass es unter null fällt. Solange das Guthaben
negativ ist und das inbegriffene Kontingent aufgebraucht ist, schlagen Sendevorgänge mit dem HTTP-Status
402 cap_reached_buy_bundle , bis ein neues Paket erworben wird.
Gibt das monatliche Pauschalvolumen einschließlich des Guthabens aus dem Prepaid-Paket sowohl für Mail Relay als auch für SMS Relay zurück. Wird vom Hive-Plugin-Dashboard zur Darstellung von Verbrauchsbalken und Hinweisen zum Paket verwendet.
Examples
curl -H 'X-Key: YOUR_API_KEY' \
https://reportedip.com/wp-json/reportedip/v2/relay-quota
$response = wp_remote_get(
'https://reportedip.com/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.com/wp-json/reportedip/v2/relay-quota',
headers={'X-Key': 'YOUR_API_KEY'}
)
data = response.json()
const response = await fetch(
'https://reportedip.com/wp-json/reportedip/v2/relay-quota',
{ headers: { 'X-Key': 'YOUR_API_KEY' } }
);
const data = await response.json();
Response
{
"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
}
Stellt eine transaktionale 2FA-E-Mail über den SPF/DKIM/DMARC-verifizierten Relay in die Warteschlange. Belegt 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.
Parameters
| Name | Type | Required | Default | Description |
|---|---|---|---|---|
| recipient | string | Yes | — | E-Mail-Adresse des Empfängers |
| subject | string | Yes | — | Betreffzeile der E-Mail |
| body_html | string | No | '' | HTML-Hauptteil der E-Mail |
| body_text | string | No | '' | Textkörper im Klartext / Fallback |
| reply_to | string | No | '' | „Reply-To“-Adresse – einfache E-Mail-Adresse oder RFC 5322 Display Name <email@host> |
| headers | array | No | [] | Zusätzliche E-Mail-Header |
| site_url | string | No | '' | URL der Ursprungswebsite (wird für die täglichen Obergrenzen pro Website und für Prüfprotokolle verwendet) |
Examples
curl -X POST \
-H 'X-Key: YOUR_API_KEY' \
-H 'Content-Type: application/json' \
-d '{"recipient":"user@example.com","subject":"Your 2FA code","body_html":"<p>Code: 123456</p>","body_text":"Code: 123456"}' \
https://reportedip.com/wp-json/reportedip/v2/relay-mail
$response = wp_remote_post(
'https://reportedip.com/wp-json/reportedip/v2/relay-mail',
array(
'headers' => array( 'X-Key' => 'YOUR_API_KEY', 'Content-Type' => 'application/json' ),
'body' => wp_json_encode( array(
'recipient' => 'user@example.com',
'subject' => 'Your 2FA code',
'body_html' => '<p>Code: 123456</p>',
'body_text' => 'Code: 123456',
) ),
)
);
import requests
response = requests.post(
'https://reportedip.com/wp-json/reportedip/v2/relay-mail',
headers={'X-Key': 'YOUR_API_KEY'},
json={
'recipient': 'user@example.com',
'subject': 'Your 2FA code',
'body_html': '<p>Code: 123456</p>',
'body_text': 'Code: 123456',
},
)
const response = await fetch(
'https://reportedip.com/wp-json/reportedip/v2/relay-mail',
{
method: 'POST',
headers: { 'X-Key': 'YOUR_API_KEY', 'Content-Type': 'application/json' },
body: JSON.stringify({
recipient: 'user@example.com',
subject: 'Your 2FA code',
body_html: '<p>Code: 123456</p>',
body_text: 'Code: 123456',
}),
}
);
Response
{
"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"
}
}
Stellt eine 2FA-SMS über den verwalteten weltweiten Relay-Dienst an. Der Textkörper wird serverseitig anhand einer registrierten Vorlage gerendert (z. B. 2fa_login), sodass der eigentliche Code niemals in den Client-Protokollen erscheint. HTTP 402, wenn sowohl das inbegriffene Kontingent als auch das Prepaid-Paket aufgebraucht sind; HTTP 422 mit Code country_not_supported , wenn das Zielland aus Kosten- oder betrieblichen Gründen nicht verfügbar ist; HTTP 429, wenn das Limit für den Empfänger oder das tägliche Betrugsschutzlimit pro Website erreicht ist.
Parameters
| Name | Type | Required | Default | Description |
|---|---|---|---|---|
| recipient_phone | string | Yes | — | Telefonnummer des Empfängers im E.164-Format (z. B. +49170...) |
| template_code | string | No | '' | Serverseitige Vorlagen-ID, z. B. 2fa_login. Ist diese Option gesetzt, wird die Meldung serverseitig gerendert und message wird ignoriert |
| template_vars | object | No | {} | Vorlagenvariablen: { code, expiry_min, lang? } |
| message | string | No | '' | Unbearbeiteter Nachrichtentext – wird nur verwendet, wenn kein template_code angegeben ist. Eine der folgenden Optionen message oder template_code ist erforderlich (ansonsten HTTP 422) |
| site_url | string | No | '' | URL der Ursprungswebsite (wird für die täglichen Obergrenzen pro Website und für Prüfprotokolle verwendet) |
Examples
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.com/wp-json/reportedip/v2/relay-sms
$response = wp_remote_post(
'https://reportedip.com/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.com/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.com/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' },
}),
}
);
Response
{
"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"
}
}
Fehlerantworten für Relay-Endpoints
| Status | Code | Bedeutung |
|---|---|---|
401 | missing_api_key / invalid_api_key | Der X-Key Header fehlt, ist fehlerhaft oder bezieht sich auf einen deaktivierten Schlüssel. |
403 | tier_forbidden | Die Stufe des Aufrufers (Free / Contributor) ist nicht für die Relay-Zustellung berechtigt. |
402 | cap_reached_buy_bundle | Das im Tarif enthaltene monatliche Limit ist erreicht, und das Guthaben des Prepaid-Pakets ist nach einer Rückerstattung aufgebraucht oder negativ. Erwerben Sie im Dashboard ein Paket, um den Vorgang fortzusetzen. |
402 | monthly_cap_reached | Das monatliche Inklusivlimit wurde in einer Stufe erreicht, in der keine Berechtigung für ein Paket besteht. |
429 | recipient_backoff / site_daily_cap | Betrugsschutz-Drosselung. Der retry-after Header gibt an, wie lange gewartet werden muss. |
Zuletzt aktualisiert: · Betreut vom ReportedIP-Team