Skip to main contentSkip to footer

API Reference

Vollständige Referenz für alle Endpoints der ReportedIP REST API v2 mit Code-Beispielen in cURL, PHP, Python und JavaScript.

Tägliche Kontingente pro Stufe: Kostenlos 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“.
Base URL https://reportedip.com/wp-json/reportedip/v2/
Authentifizierung: Authentifizierte Endpoints erfordern einen API Key, der über den 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.
So werden Kontingente gezählt (ab Version 2.5.1): Jeder Endpoint belastet höchstens einen Tageszähler, niemals beide.
  • Kontingent prüfen: GET /check (+1) und POST /bulk-check (+N, jeweils einer pro gültiger IP-Adresse).
  • Kontingent melden: POST /report (+1) und POST /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 einen X-Key Header, 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.

GET /check-public — Überprüfung der öffentlichen IP-Adresse

Public

Ü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).

Public limit: 100 requests/day per source IP, shared across all unauthenticated endpoints. Send an X-Key header to switch to the API-key quota path.

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
curl "https://reportedip.com/wp-json/reportedip/v2/check-public?ip=1.2.3.4"
php
$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);
python
import requests

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

Response

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"
  }
}

GET /stats-public — Detaillierte öffentliche Statistiken

Public

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.

Public limit: 100 requests/day per source IP, shared across all unauthenticated endpoints.

Examples

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

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

Response

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}
    ]
  }
}

GET /search-public — Suche nach öffentlichen IP-Adressen

Public

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.

Public limit: 100 requests/day per source IP, shared across all unauthenticated endpoints. Results are capped at 50 entries per call.

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
curl "https://reportedip.com/wp-json/reportedip/v2/search-public?q=1.2.3"

Response

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"}
    ]
  }
}

GET /categories — Threat Categories

Public

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.

Public limit: 100 requests/day per source IP, shared across all unauthenticated endpoints. Send an X-Key header to bypass the public limit (no per-call quota when authenticated).

Examples

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

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

Response

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
    }
  ]
}

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.

GET /check — Umfassende IP-Prüfung

API Key

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
curl -H "X-Key: YOUR_API_KEY" \
     "https://reportedip.com/wp-json/reportedip/v2/check?ip=1.2.3.4&verbose=true"
php
$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);
python
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()
javascript
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

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
    }
  }
}

POST /report — IP-Adresse melden

API Key

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
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"
php
$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);
python
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()
javascript
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

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
  }
}

GET /verify-key — API Key überprüfen

API Key

Ü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
curl -H "X-Key: YOUR_API_KEY" \
     "https://reportedip.com/wp-json/reportedip/v2/verify-key"
php
$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);
python
import requests

response = requests.get(
    'https://reportedip.com/wp-json/reportedip/v2/verify-key',
    headers={'X-Key': 'YOUR_API_KEY'}
)
data = response.json()
javascript
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

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
    }
  }
}

GET /statistics — Dienstleistungsstatistiken

Public

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

Response

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

GET /blacklist — „Blacklist“ herunterladen

API Key

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

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

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"
    }
  ]
}

GET /blacklist-categories — Kategorien der Blacklist

API Key

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
curl -H "X-Key: YOUR_API_KEY" \
     "https://reportedip.com/wp-json/reportedip/v2/blacklist-categories"
php
$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);
python
import requests

response = requests.get(
    'https://reportedip.com/wp-json/reportedip/v2/blacklist-categories',
    headers={'X-Key': 'YOUR_API_KEY'}
)
data = response.json()
javascript
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

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"
    }
  ]
}

GET /blacklist-stats — Statistiken zur Blacklist

API Key

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
curl -H "X-Key: YOUR_API_KEY" \
     "https://reportedip.com/wp-json/reportedip/v2/blacklist-stats"
php
$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);
python
import requests

response = requests.get(
    'https://reportedip.com/wp-json/reportedip/v2/blacklist-stats',
    headers={'X-Key': 'YOUR_API_KEY'}
)
data = response.json()
javascript
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

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 Endpoints

Erweiterte Endpoints für fortgeschrittene Benutzer. Erfordern API Keys der Stufen „Professional“ oder „Enterprise“.

GET /reports/{ip} — Reports for IP

Professional+

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
curl -H "X-Key: YOUR_API_KEY" \
     "https://reportedip.com/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.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);
python
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()
javascript
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

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
  }
}
Professional+

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
curl -H "X-Key: YOUR_API_KEY" \
     "https://reportedip.com/wp-json/reportedip/v2/trends?period=7d"
php
$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);
python
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()
javascript
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

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

POST /bulk-check — Massen-IP-Prüfung

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 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
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"
php
$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);
python
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()
javascript
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

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
  }
}

POST /bulk-report — Bulk Report

Enterprise

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
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"
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.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);
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.com/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.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

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

Monatliches Inklusivkontingent: Free / Contributor 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).
Rückerstattungsschutz – „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.

GET /relay-quota — Status der Staffel-Quoten

API Key

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
curl -H 'X-Key: YOUR_API_KEY' \
     https://reportedip.com/wp-json/reportedip/v2/relay-quota
php
$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 );
python
import requests

response = requests.get(
    'https://reportedip.com/wp-json/reportedip/v2/relay-quota',
    headers={'X-Key': 'YOUR_API_KEY'}
)
data = response.json()
javascript
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

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
}

POST /relay-mail — 2FA-E-Mail senden

PRO / Business / Enterprise

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
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
php
$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',
        ) ),
    )
);
python
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',
    },
)
javascript
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

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"
  }
}

POST /relay-sms — 2FA-SMS senden

PRO / Business / Enterprise

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
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
php
$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' ),
        ) ),
    )
);
python
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'},
    },
)
javascript
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

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"
  }
}

Fehlerantworten für Relay-Endpoints

StatusCodeBedeutung
401missing_api_key / invalid_api_keyDer X-Key Header fehlt, ist fehlerhaft oder bezieht sich auf einen deaktivierten Schlüssel.
403tier_forbiddenDie Stufe des Aufrufers (Free / Contributor) ist nicht für die Relay-Zustellung berechtigt.
402cap_reached_buy_bundleDas 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.
402monthly_cap_reachedDas monatliche Inklusivlimit wurde in einer Stufe erreicht, in der keine Berechtigung für ein Paket besteht.
429recipient_backoff / site_daily_capBetrugsschutz-Drosselung. Der retry-after Header gibt an, wie lange gewartet werden muss.

Zuletzt aktualisiert: · Betreut vom ReportedIP-Team

Security Focused
DSGVO-konform
Made in Germany
Zurück zur Doku