Zum Hauptinhalt springenZur Fußzeile springen

API-Referenz

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

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

Öffentliche Endpunkte

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

HOLEN /check-public — Public IP Check

Öffentlich

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

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

Parameter

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

Beispiele

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

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

Antwort

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

HOLEN /stats-public — Detailed Public Statistics

Öffentlich

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

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

Beispiele

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

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

Antwort

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

HOLEN /search-public — Public IP Search

Öffentlich

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

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

Parameter

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

Beispiele

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

Antwort

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

HOLEN /categories — Threat Categories

Öffentlich

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

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

Beispiele

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

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

Antwort

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

HOLEN /attack-map-data — Live Attack Map Dataset

Öffentlich

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

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

Beispiele

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

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

Antwort

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

Authentifizierte Endpunkte

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

HOLEN /check — Full IP Check

API-Schlüssel

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

Parameter

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

Beispiele

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

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

Antwort

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

BEITRAG /report — Report IP Address

API-Schlüssel

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

Parameter

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

Beispiele

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

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

Antwort

200 OK
json
{
  "meta": {
    "success": true,
    "code": 200,
    "message": "Report submitted successfully"
  },
  "data": {
    "reportId": 58234,
    "ip": "1.2.3.4",
    "categories": [18, 21],
    "abuseConfidencePercentage": 89
  }
}

HOLEN /verify-key — Verify API Key

API-Schlüssel

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

Beispiele

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

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

Antwort

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

HOLEN /statistics — Service Statistics

Öffentlich

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
curl "https://reportedip.de/wp-json/reportedip/v2/statistics"

Antwort

200 OK
json
{
  "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

API-Schlüssel

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

curl
# 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"
php
$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);
Python
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()
JavaScript
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

200 OK
json
{
  "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

Öffentlich

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

Beispiele

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

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

Antwort

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

HOLEN /blacklist-stats — Blacklist Statistics

Öffentlich

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

Beispiele

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

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

Antwort

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

Erweiterte Endpunkte

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

HOLEN /reports/{ip} — Reports for IP

Professional+

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

Parameter

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

Beispiele

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

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

Antwort

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

BEITRAG /bulk-check — Bulk IP Check

Professional+

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

Parameter

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

Beispiele

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

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

Antwort

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

BEITRAG /bulk-report — Bulk Report

Unternehmen

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

Parameter

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

Beispiele

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

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

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

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

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

Antwort

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

2FA-Relay-Endpunkte

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

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

HOLEN /relay-quota — Relay Quota Status

PRO / Business Enterprise

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

Beispiele

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

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

Antwort

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

BEITRAG /relay-mail — Send 2FA Mail

PRO / Business Enterprise

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

Parameter

Name Typ Erforderlich Standard Beschreibung
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
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
php
$response = wp_remote_post(
    'https://reportedip.de/wp-json/reportedip/v2/relay-mail',
    array(
        'headers' => array( 'X-Key' => 'YOUR_API_KEY', 'Content-Type' => 'application/json' ),
        'body'    => wp_json_encode( array(
            'recipient' => '[email protected]',
            'subject'   => 'Your 2FA code',
            'body_html' => '<p>Code: 123456</p>',
            'body_text' => 'Code: 123456',
        ) ),
    )
);
Python
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',
    },
)
JavaScript
const response = await fetch(
    'https://reportedip.de/wp-json/reportedip/v2/relay-mail',
    {
        method: 'POST',
        headers: { 'X-Key': 'YOUR_API_KEY', 'Content-Type': 'application/json' },
        body: JSON.stringify({
            recipient: '[email protected]',
            subject: 'Your 2FA code',
            body_html: '<p>Code: 123456</p>',
            body_text: 'Code: 123456',
        }),
    }
);

Antwort

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

BEITRAG /relay-sms — Send 2FA SMS

PRO / Business Enterprise

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

Parameter

Name Typ Erforderlich Standard Beschreibung
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
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
php
$response = wp_remote_post(
    'https://reportedip.de/wp-json/reportedip/v2/relay-sms',
    array(
        'headers' => array( 'X-Key' => 'YOUR_API_KEY', 'Content-Type' => 'application/json' ),
        'body'    => wp_json_encode( array(
            'recipient_phone' => '+491701234567',
            'template_code'   => '2fa_login',
            'template_vars'   => array( 'code' => '123456', 'expiry_min' => 5, 'lang' => 'de' ),
        ) ),
    )
);
Python
import requests

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

Antwort

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

Fehlermeldungen für Relais-Endpunkte

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

Veraltete Endpunkte

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

HOLEN /blacklist-detailed — Detailed Blacklist (Deprecated)

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

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

HOLEN /blacklist-combined — Combined Blacklist (Deprecated)

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

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)

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

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

Zuletzt aktualisiert: · Betreut vom ReportedIP

Sicherheitsorientiert
DSGVO-konform
Hergestellt in Deutschland
Zurück zu Docs