Référence de l'API
Référence complète de tous les points de terminaison de l'API ReportedIP v2, avec des exemples de code en cURL, PHP, Python et JavaScript.
1,000 checks · 50 reports ·
Contributeur 5,000 / 200 ·
Professionnel 25,000 / 1,000 ·
Business 100,000 / 5,000 par licence ·
Entreprise unlimited.
Business varient en fonction du nombre de licences (x2 à x20) ; par exemple, x5 = 500,000 / 25,000.
Voir Tarifs pour consulter la comparaison complète des niveaux.
https://reportedip.de/wp-json/reportedip/v2/
X-Key En-tête. Les points de terminaison publics ne nécessitent pas d'authentification, mais leur utilisation est soumise à une limitation de débit.
- Vérifier le quota :
GET /check(+1) etPOST /bulk-check(+N, un par adresse IP valide). - Quota de rapports :
POST /report(+1) etPOST /bulk-report(+N, un par rapport soumis). - Ni l'un ni l'autre :
GET /blacklist,/blacklist-categories,/blacklist-stats,/reports/{ip},/trends,/statistics,/verify-key— il s'agit de fonctionnalités soumises à des paliers tarifaires, et non d'appels facturés à la minute. - Limite d'adresses IP publiques : 100 requêtes par jour et par adresse IP source, réparties entre tous les appels non authentifiés (
/check-public,/stats-public,/search-public,/categories,/attack-map-data). Envoyer unX-Keyen-tête pour basculer vers le chemin du quota de clés API à la place.
Points d'accès publics
Ces points de terminaison sont accessibles sans authentification. Le débit est limité à 100 requêtes par jour et par adresse IP.
/check-public
Vérifie la réputation d'une adresse IP sans authentification. Renvoie le score de fiabilité des signalements, le nombre total de signalements, les catégories de menaces et la date du dernier signalement. Compte pour +1 dans la limite quotidienne de l'API publique par adresse IP (partagée avec les autres points de terminaison non authentifiés).
Paramètres
| Nom | Type | Obligatoire | Par défaut | Description |
|---|---|---|---|---|
| ip | chaîne | Oui | — | Adresse IPv4 ou IPv6 à vérifier |
| détaillé | booléen | Non | faux | Veuillez inclure dans votre réponse une ventilation détaillée des niveaux de confiance |
Exemples
curl "https://reportedip.de/wp-json/reportedip/v2/check-public?ip=1.2.3.4"
$response = wp_remote_get(
'https://reportedip.de/wp-json/reportedip/v2/check-public?ip=1.2.3.4'
);
$data = json_decode(wp_remote_retrieve_body($response), true);
import requests
response = requests.get(
'https://reportedip.de/wp-json/reportedip/v2/check-public',
params={'ip': '1.2.3.4'}
)
data = response.json()
const response = await fetch(
'https://reportedip.de/wp-json/reportedip/v2/check-public?ip=1.2.3.4'
);
const data = await response.json();
Réponse
{
"meta": {
"success": true,
"code": 200,
"message": "OK"
},
"data": {
"ip": "1.2.3.4",
"abuseConfidencePercentage": 87,
"totalReports": 42,
"lastReportedAt": "2026-03-09T14:22:31Z",
"categories": [18, 21, 22],
"countryCode": "CN",
"isp": "China Telecom"
}
}
/stats-public
Consultez des statistiques publiques détaillées, avec une ventilation par catégorie, les principaux types de menaces et des données historiques. Cela compte pour +1 dans le cadre de la limite quotidienne de l'API publique par adresse IP.
Exemples
curl "https://reportedip.de/wp-json/reportedip/v2/stats-public"
$response = wp_remote_get(
'https://reportedip.de/wp-json/reportedip/v2/stats-public'
);
$data = json_decode(wp_remote_retrieve_body($response), true);
import requests
response = requests.get(
'https://reportedip.de/wp-json/reportedip/v2/stats-public'
)
data = response.json()
const response = await fetch(
'https://reportedip.de/wp-json/reportedip/v2/stats-public'
);
const data = await response.json();
Réponse
{
"meta": {
"success": true,
"code": 200,
"message": "OK"
},
"data": {
"totalIPs": 158432,
"totalReports": 892741,
"last24h": {
"newIPs": 342,
"newReports": 1847
},
"last7d": {
"newIPs": 2156,
"newReports": 12493
},
"categoryBreakdown": [
{"id": 18, "name": "Brute-Force", "count": 45231},
{"id": 21, "name": "Web App Attack", "count": 32198},
{"id": 22, "name": "SSH", "count": 28764},
{"id": 15, "name": "Port Scan", "count": 18432}
],
"topCountries": [
{"code": "CN", "count": 42156},
{"code": "US", "count": 18743},
{"code": "RU", "count": 15892}
]
}
}
/search-public
Effectuez une recherche dans la base de données publique sur la réputation à l'aide d'une adresse IP partielle, d'un code pays ou d'un ASN. Cette fonctionnalité est utile pour la barre de recherche accessible au public sur reportedip.de. Elle compte pour +1 dans le cadre de la limite quotidienne de l'API publique par adresse IP.
Paramètres
| Nom | Type | Obligatoire | Par défaut | Description |
|---|---|---|---|---|
| q | chaîne | Oui | — | Critères de recherche : adresse IP complète ou partielle, code de pays (par exemple « CN ») ou ASN. |
| limite | int | Non | 20 | Nombre de résultats (max. 50). |
Exemples
curl "https://reportedip.de/wp-json/reportedip/v2/search-public?q=1.2.3"
Réponse
{
"meta": {"success": true, "code": 200},
"data": {
"query": "1.2.3",
"results": [
{"ip": "1.2.3.4", "abuseConfidencePercentage": 87, "totalReports": 42, "countryCode": "CN"},
{"ip": "1.2.3.5", "abuseConfidencePercentage": 65, "totalReports": 12, "countryCode": "CN"}
]
}
}
/categories
Récupère la liste des 30 catégories de menaces prédéfinies utilisées pour classer les rapports IP. Chaque catégorie comprend son identifiant, son nom, sa description et son niveau de gravité. Si l'appel est effectué sans clé API, il est comptabilisé dans la limite quotidienne de l'API publique par adresse IP ; s'il est accompagné d'un en-tête X-Key, il n'est comptabilisé dans aucun quota quotidien.
Exemples
curl "https://reportedip.de/wp-json/reportedip/v2/categories"
$response = wp_remote_get(
'https://reportedip.de/wp-json/reportedip/v2/categories'
);
$data = json_decode(wp_remote_retrieve_body($response), true);
import requests
response = requests.get(
'https://reportedip.de/wp-json/reportedip/v2/categories'
)
data = response.json()
const response = await fetch(
'https://reportedip.de/wp-json/reportedip/v2/categories'
);
const data = await response.json();
Réponse
{
"meta": {
"success": true,
"code": 200,
"message": "OK"
},
"data": [
{
"id": 1,
"name": "DNS Compromise",
"description": "Compromised DNS server or DNS hijacking",
"severity_level": 8
},
{
"id": 18,
"name": "Brute-Force",
"description": "Login brute-force attempts",
"severity_level": 7
},
{
"id": 21,
"name": "Web App Attack",
"description": "Web application attacks (SQLi, XSS, etc.)",
"severity_level": 9
}
]
}
/attack-map-data
Ensemble de données agrégées alimentant la carte des attaques en temps réel sur reportedip.de. Fournit le nombre de signalements par pays (top 50), l'ensemble glissant sur 24 heures des connexions d'attaques transfrontalières (top 30, paires au sein d'un même pays exclues) et un compteur des journaux du jour. Mise en cache côté serveur pendant 30 minutes — les appels répétés pendant cette période sont tous traités à partir du cache. Compte pour +1 dans la limite quotidienne de l'API publique par adresse IP.
Exemples
curl "https://reportedip.de/wp-json/reportedip/v2/attack-map-data"
$response = wp_remote_get(
'https://reportedip.de/wp-json/reportedip/v2/attack-map-data'
);
$data = json_decode( wp_remote_retrieve_body( $response ), true );
import requests
response = requests.get(
'https://reportedip.de/wp-json/reportedip/v2/attack-map-data'
)
data = response.json()
const response = await fetch(
'https://reportedip.de/wp-json/reportedip/v2/attack-map-data'
);
const data = await response.json();
Réponse
{
"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
}
}
Points de terminaison authentifiés
Ces points de terminaison nécessitent une clé API valide envoyée via le X-Key en-tête. Récupérez votre clé API à partir du Tableau de bord.
/check
Effectuez une vérification complète de la réputation IP avec des données détaillées. Obtenez des informations complètes sur les menaces, notamment la répartition par niveau de confiance, l'historique des rapports et les informations sur le FAI. Cela décompte +1 de votre quota quotidien de vérifications.
Paramètres
| Nom | Type | Obligatoire | Par défaut | Description |
|---|---|---|---|---|
| ip | chaîne | Oui | — | Adresse IPv4 ou IPv6 à vérifier |
| détaillé | booléen | Non | faux | Inclure une ventilation détaillée des scores de confiance |
| inclure les rapports | booléen | Non | faux | Inclure les détails du rapport individuel dans la réponse |
Exemples
curl -H "X-Key: YOUR_API_KEY" \
"https://reportedip.de/wp-json/reportedip/v2/check?ip=1.2.3.4&verbose=true"
$response = wp_remote_get(
'https://reportedip.de/wp-json/reportedip/v2/check?ip=1.2.3.4&verbose=true',
array(
'headers' => array(
'X-Key' => 'YOUR_API_KEY',
),
)
);
$data = json_decode(wp_remote_retrieve_body($response), true);
import requests
response = requests.get(
'https://reportedip.de/wp-json/reportedip/v2/check',
params={'ip': '1.2.3.4', 'verbose': 'true'},
headers={'X-Key': 'YOUR_API_KEY'}
)
data = response.json()
const response = await fetch(
'https://reportedip.de/wp-json/reportedip/v2/check?ip=1.2.3.4&verbose=true',
{
headers: { 'X-Key': 'YOUR_API_KEY' }
}
);
const data = await response.json();
Réponse
{
"meta": {
"success": true,
"code": 200,
"message": "OK"
},
"data": {
"ip": "1.2.3.4",
"abuseConfidencePercentage": 87,
"totalReports": 42,
"lastReportedAt": "2026-03-09T14:22:31Z",
"categories": [18, 21, 22],
"countryCode": "CN",
"isp": "China Telecom",
"isWhitelisted": false,
"confidenceBreakdown": {
"reportScore": 24.0,
"diversityScore": 12.0,
"recencyWeight": 13.5,
"severityWeight": 12.3,
"honeypotBonus": 25.0,
"maxConfidence": 100,
"constraintReasons": []
},
"debugInfo": {
"reportCount": 42,
"uniqueReporters": 8,
"honeypotReportsCount": 5,
"effectiveReportCount": 47,
"timeDampeningFactor": 0.92
}
}
}
/report
Signalez une adresse IP malveillante à la communauté. Ce signalement sera ajouté aux données existantes afin de mettre à jour le score de fiabilité d'abus de cette adresse IP. Les signalements émis par un même utilisateur pour la même adresse IP dans un délai de 5 minutes sont automatiquement regroupés. Cela ne sera décompté que de votre quota quotidien de signalements — jamais de votre quota de vérifications.
Paramètres
| Nom | Type | Obligatoire | Par défaut | Description |
|---|---|---|---|---|
| ip | chaîne | Oui | — | Adresse IPv4 ou IPv6 à signaler |
| catégories | tableau | Oui | — | Tableau d'identifiants de catégories de menaces (par exemple [18, 21]) |
| commentaire | chaîne | Non | — | Commentaire facultatif décrivant l'activité malveillante observée |
Exemples
curl -X POST \
-H "X-Key: YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{"ip": "1.2.3.4", "categories": [18, 21], "comment": "SSH brute force"}' \
"https://reportedip.de/wp-json/reportedip/v2/report"
$response = wp_remote_post(
'https://reportedip.de/wp-json/reportedip/v2/report',
array(
'headers' => array(
'X-Key' => 'YOUR_API_KEY',
'Content-Type' => 'application/json',
),
'body' => wp_json_encode(array(
'ip' => '1.2.3.4',
'categories' => array(18, 21),
'comment' => 'SSH brute force',
)),
)
);
$data = json_decode(wp_remote_retrieve_body($response), true);
import requests
response = requests.post(
'https://reportedip.de/wp-json/reportedip/v2/report',
json={
'ip': '1.2.3.4',
'categories': [18, 21],
'comment': 'SSH brute force'
},
headers={'X-Key': 'YOUR_API_KEY'}
)
data = response.json()
const response = await fetch(
'https://reportedip.de/wp-json/reportedip/v2/report',
{
method: 'POST',
headers: {
'X-Key': 'YOUR_API_KEY',
'Content-Type': 'application/json'
},
body: JSON.stringify({
ip: '1.2.3.4',
categories: [18, 21],
comment: 'SSH brute force'
})
}
);
const data = await response.json();
Réponse
{
"meta": {
"success": true,
"code": 200,
"message": "Report submitted successfully"
},
"data": {
"reportId": 58234,
"ip": "1.2.3.4",
"categories": [18, 21],
"abuseConfidencePercentage": 89
}
}
/verify-key
Vérifiez votre clé API et récupérez les informations relatives à votre compte, notamment le rôle de l'utilisateur, les autorisations, les limites de débit et les statistiques d'utilisation actuelles. Cette opération n'est pas comptabilisée dans le quota quotidien.
Exemples
curl -H "X-Key: YOUR_API_KEY" \
"https://reportedip.de/wp-json/reportedip/v2/verify-key"
$response = wp_remote_get(
'https://reportedip.de/wp-json/reportedip/v2/verify-key',
array(
'headers' => array(
'X-Key' => 'YOUR_API_KEY',
),
)
);
$data = json_decode(wp_remote_retrieve_body($response), true);
import requests
response = requests.get(
'https://reportedip.de/wp-json/reportedip/v2/verify-key',
headers={'X-Key': 'YOUR_API_KEY'}
)
data = response.json()
const response = await fetch(
'https://reportedip.de/wp-json/reportedip/v2/verify-key',
{
headers: { 'X-Key': 'YOUR_API_KEY' }
}
);
const data = await response.json();
Réponse
{
"meta": {
"success": true,
"code": 200,
"message": "OK"
},
"data": {
"valid": true,
"role": "reportedip_professional",
"permissions": {
"check": true,
"report": true,
"bulk_check": true,
"bulk_report": false,
"reports_detail": true,
"trends": true
},
"rateLimits": {
"checksPerDay": 25000,
"reportsPerDay": 1000
},
"usage": {
"checksToday": 1247,
"reportsToday": 38
}
}
}
/statistics
Statistiques d'utilisation authentifiées par utilisateur : appels API du jour, rapports du jour, nombre total de rapports, rapports vérifiés, score de réputation actuel, ainsi que l'utilisation des quotas propres à chaque niveau. N'est pas décompté du quota quotidien.
Paramètres
| Nom | Type | Obligatoire | Par défaut | Description |
|---|---|---|---|---|
| période | chaîne | Non | aujourd'hui | One of <code>today</code>, <code>week</code>, <code>month</code>, <code>all</code>. |
Exemples
curl -H "X-Key: YOUR_KEY" "https://reportedip.de/wp-json/reportedip/v2/statistics?period=today"
Réponse
{
"meta": {"success": true, "code": 200},
"data": {
"apiCallsToday": 1247,
"reportsToday": 38,
"totalReports": 4271,
"verifiedReports": 3892,
"reputationScore": 87,
"tier": "professional",
"limits": {"checks": 25000, "reports": 1000}
}
}
Terminaux sur liste noire
Accédez à la liste noire d'adresses IP alimentée par la communauté, dont la notation est calculée automatiquement à partir de rapports en temps réel. Disponible aux formats JSON, texte brut et CSV pour l'intégration dans un pare-feu.
/blacklist
Récupérez la liste noire d'adresses IP dans différents formats. Permet de filtrer par niveau de confiance, source et catégorie. Idéal pour l'intégration à un pare-feu et le blocage automatisé. N'est pas pris en compte dans le quota quotidien — fonctionnalité réservée aux abonnés des niveaux Contributor et supérieurs.
Paramètres
| Nom | Type | Obligatoire | Par défaut | Description |
|---|---|---|---|---|
| format | chaîne | Non | json | Format de réponse : json, txt ou csv |
| source | chaîne | Non | communauté | Source de la liste noire : communauté (par défaut) — une seule source disponible ; le paramètre « source » est réservé à un usage futur |
| confiance_minimum | entier | Non | 75 | Pourcentage minimal de confiance en matière d'abus (0-100) |
| catégorie | entier | Non | — | Filtrer par ID de catégorie de menace |
| limite | entier | Non | 10000 | Nombre maximal d'entrées à renvoyer |
Exemples
# JSON format
curl -H "X-Key: YOUR_API_KEY" \
"https://reportedip.de/wp-json/reportedip/v2/blacklist?confidence_minimum=90"
# Plain text (one IP per line, for firewall rules)
curl -H "X-Key: YOUR_API_KEY" \
"https://reportedip.de/wp-json/reportedip/v2/blacklist?format=txt&source=all"
$response = wp_remote_get(
'https://reportedip.de/wp-json/reportedip/v2/blacklist?confidence_minimum=90',
array(
'headers' => array(
'X-Key' => 'YOUR_API_KEY',
),
)
);
$data = json_decode(wp_remote_retrieve_body($response), true);
import requests
response = requests.get(
'https://reportedip.de/wp-json/reportedip/v2/blacklist',
params={
'confidence_minimum': 90,
'source': 'all'
},
headers={'X-Key': 'YOUR_API_KEY'}
)
data = response.json()
const response = await fetch(
'https://reportedip.de/wp-json/reportedip/v2/blacklist?confidence_minimum=90',
{
headers: { 'X-Key': 'YOUR_API_KEY' }
}
);
const data = await response.json();
Réponse
{
"meta": {
"success": true,
"code": 200,
"message": "OK"
},
"data": {
"generatedAt": "2026-03-09T15:00:00Z",
"count": 4821,
"confidenceMinimum": 90,
"entries": [
{
"ip": "1.2.3.4",
"abuseConfidencePercentage": 100,
"totalReports": 156,
"lastReportedAt": "2026-03-09T14:22:31Z",
"categories": [18, 21, 22]
},
{
"ip": "5.6.7.8",
"abuseConfidencePercentage": 95,
"totalReports": 87,
"lastReportedAt": "2026-03-09T13:45:12Z",
"categories": [15, 18]
}
]
}
}
/blacklist-categories
Récupérer toutes les catégories de liste noire disponibles utilisées pour classer les entrées. N'est pas pris en compte dans le quota quotidien.
Exemples
curl "https://reportedip.de/wp-json/reportedip/v2/blacklist-categories"
$response = wp_remote_get(
'https://reportedip.de/wp-json/reportedip/v2/blacklist-categories'
);
$data = json_decode(wp_remote_retrieve_body($response), true);
import requests
response = requests.get(
'https://reportedip.de/wp-json/reportedip/v2/blacklist-categories'
)
data = response.json()
const response = await fetch(
'https://reportedip.de/wp-json/reportedip/v2/blacklist-categories'
);
const data = await response.json();
Réponse
{
"meta": {
"success": true,
"code": 200,
"message": "OK"
},
"data": [
{
"id": 1,
"name": "Botnet",
"slug": "botnet",
"description": "Known botnet command and control or participant"
},
{
"id": 2,
"name": "Brute-Force",
"slug": "brute-force",
"description": "Credential brute-force attacks"
},
{
"id": 3,
"name": "Spam",
"slug": "spam",
"description": "Spam sources"
}
]
}
/blacklist-stats
Récupérer des statistiques sur la liste noire, notamment le nombre total d'entrées et leur répartition par niveau de confiance et par catégorie. Cette opération n'est pas comptabilisée dans le quota quotidien.
Exemples
curl "https://reportedip.de/wp-json/reportedip/v2/blacklist-stats"
$response = wp_remote_get(
'https://reportedip.de/wp-json/reportedip/v2/blacklist-stats'
);
$data = json_decode(wp_remote_retrieve_body($response), true);
import requests
response = requests.get(
'https://reportedip.de/wp-json/reportedip/v2/blacklist-stats'
)
data = response.json()
const response = await fetch(
'https://reportedip.de/wp-json/reportedip/v2/blacklist-stats'
);
const data = await response.json();
Réponse
{
"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}
]
}
}
Terminaux avancés
Points de terminaison avancés pour les utilisateurs expérimentés. Nécessite des clés API de niveau Professionnel ou Entreprise.
/reports/{ip}
Récupérer tous les rapports individuels associés à une adresse IP spécifique. Renvoie les détails des rapports sous forme paginée, notamment les informations sur l'auteur, les catégories et les horodatages. N'est pas pris en compte dans le quota quotidien — fonctionnalité réservée aux abonnements de niveau supérieur (Professional et au-delà).
Paramètres
| Nom | Type | Obligatoire | Par défaut | Description |
|---|---|---|---|---|
| ip | chaîne | Oui | — | Adresse IPv4 ou IPv6 (dans le chemin d'accès de l'URL) |
| page | entier | Non | 1 | Numéro de page pour la pagination |
| par page | entier | Non | 25 | Nombre de rapports par page |
Exemples
curl -H "X-Key: YOUR_API_KEY" \
"https://reportedip.de/wp-json/reportedip/v2/reports/1.2.3.4?page=1&per_page=25"
$ip = '1.2.3.4';
$response = wp_remote_get(
'https://reportedip.de/wp-json/reportedip/v2/reports/' . $ip . '?page=1',
array(
'headers' => array(
'X-Key' => 'YOUR_API_KEY',
),
)
);
$data = json_decode(wp_remote_retrieve_body($response), true);
import requests
ip = '1.2.3.4'
response = requests.get(
f'https://reportedip.de/wp-json/reportedip/v2/reports/{ip}',
params={'page': 1, 'per_page': 25},
headers={'X-Key': 'YOUR_API_KEY'}
)
data = response.json()
const ip = '1.2.3.4';
const response = await fetch(
`https://reportedip.de/wp-json/reportedip/v2/reports/${ip}?page=1&per_page=25`,
{
headers: { 'X-Key': 'YOUR_API_KEY' }
}
);
const data = await response.json();
Réponse
{
"meta": {
"success": true,
"code": 200,
"message": "OK"
},
"data": {
"ip": "1.2.3.4",
"reports": [
{
"id": 58234,
"categories": [18, 21],
"comment": "SSH brute force with 500+ attempts",
"reportedAt": "2026-03-09T14:22:31Z",
"reporterRole": "honeypot",
"aggregationCount": 12
},
{
"id": 58102,
"categories": [22],
"comment": "Port scanning on TCP 22, 80, 443, 8080",
"reportedAt": "2026-03-09T10:15:00Z",
"reporterRole": "contributor",
"aggregationCount": 0
}
],
"total": 42,
"page": 1,
"per_page": 25,
"total_pages": 2
}
}
/trends
Récupérez des données de tendance et des séries chronologiques illustrant les schémas d'attaques sur une période donnée. Utile pour les tableaux de bord et les analyses. N'est pas comptabilisé dans le quota quotidien — fonctionnalité réservée aux abonnements de niveau supérieur (Professional et au-delà).
Paramètres
| Nom | Type | Obligatoire | Par défaut | Description |
|---|---|---|---|---|
| période | chaîne | Non | 7d | Période : 24 h, 7 jours ou 30 jours |
| catégorie | entier | Non | — | Filtrer par ID de catégorie de menace |
Exemples
curl -H "X-Key: YOUR_API_KEY" \
"https://reportedip.de/wp-json/reportedip/v2/trends?period=7d"
$response = wp_remote_get(
'https://reportedip.de/wp-json/reportedip/v2/trends?period=7d',
array(
'headers' => array(
'X-Key' => 'YOUR_API_KEY',
),
)
);
$data = json_decode(wp_remote_retrieve_body($response), true);
import requests
response = requests.get(
'https://reportedip.de/wp-json/reportedip/v2/trends',
params={'period': '7d'},
headers={'X-Key': 'YOUR_API_KEY'}
)
data = response.json()
const response = await fetch(
'https://reportedip.de/wp-json/reportedip/v2/trends?period=7d',
{
headers: { 'X-Key': 'YOUR_API_KEY' }
}
);
const data = await response.json();
Réponse
{
"meta": {
"success": true,
"code": 200,
"message": "OK"
},
"data": {
"period": "7d",
"timeSeries": [
{"date": "2026-03-03", "reports": 1842, "newIPs": 312},
{"date": "2026-03-04", "reports": 2104, "newIPs": 356},
{"date": "2026-03-05", "reports": 1956, "newIPs": 298},
{"date": "2026-03-06", "reports": 2347, "newIPs": 401},
{"date": "2026-03-07", "reports": 1893, "newIPs": 287},
{"date": "2026-03-08", "reports": 2156, "newIPs": 342},
{"date": "2026-03-09", "reports": 1847, "newIPs": 318}
],
"topCategories": [
{"id": 18, "name": "Brute-Force", "count": 5432},
{"id": 21, "name": "Web App Attack", "count": 3218},
{"id": 22, "name": "SSH", "count": 2847}
]
}
}
/bulk-check
Vérifiez la réputation de plusieurs adresses IP en une seule requête. Le service accepte jusqu'à 1 000 adresses IP par requête. Le nombre d'adresses IP valides dans la requête est décompté de votre quota quotidien de vérifications (N = nombre d'adresses IP valides). Si la requête dépasse le quota restant, le serveur renvoie un code d'erreur HTTP 429 et le compteur n'est pas incrémenté.
Paramètres
| Nom | Type | Obligatoire | Par défaut | Description |
|---|---|---|---|---|
| ips | tableau | Oui | — | Tableau d'adresses IPv4/IPv6 (1 000 au maximum) |
Exemples
curl -X POST \
-H "X-Key: YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{"ips": ["1.2.3.4", "5.6.7.8", "9.10.11.12"]}' \
"https://reportedip.de/wp-json/reportedip/v2/bulk-check"
$response = wp_remote_post(
'https://reportedip.de/wp-json/reportedip/v2/bulk-check',
array(
'headers' => array(
'X-Key' => 'YOUR_API_KEY',
'Content-Type' => 'application/json',
),
'body' => wp_json_encode(array(
'ips' => array('1.2.3.4', '5.6.7.8', '9.10.11.12'),
)),
)
);
$data = json_decode(wp_remote_retrieve_body($response), true);
import requests
response = requests.post(
'https://reportedip.de/wp-json/reportedip/v2/bulk-check',
json={
'ips': ['1.2.3.4', '5.6.7.8', '9.10.11.12']
},
headers={'X-Key': 'YOUR_API_KEY'}
)
data = response.json()
const response = await fetch(
'https://reportedip.de/wp-json/reportedip/v2/bulk-check',
{
method: 'POST',
headers: {
'X-Key': 'YOUR_API_KEY',
'Content-Type': 'application/json'
},
body: JSON.stringify({
ips: ['1.2.3.4', '5.6.7.8', '9.10.11.12']
})
}
);
const data = await response.json();
Réponse
{
"meta": {
"success": true,
"code": 200,
"message": "OK"
},
"data": {
"results": [
{
"ip": "1.2.3.4",
"abuseConfidencePercentage": 87,
"totalReports": 42,
"lastReportedAt": "2026-03-09T14:22:31Z",
"categories": [18, 21, 22]
},
{
"ip": "5.6.7.8",
"abuseConfidencePercentage": 0,
"totalReports": 0,
"lastReportedAt": null,
"categories": []
},
{
"ip": "9.10.11.12",
"abuseConfidencePercentage": 45,
"totalReports": 3,
"lastReportedAt": "2026-03-07T09:30:00Z",
"categories": [15]
}
],
"checked": 3
}
}
/bulk-report
Envoyez plusieurs rapports IP en une seule requête à l'aide de données au format CSV. Conçu pour les systèmes automatisés et les honeypots qui doivent signaler de grands volumes d'activités malveillantes. Implique un prélèvement de +N sur votre quota quotidien de rapports, où N correspond au nombre de rapports envoyés. N'est jamais décompté du quota de vérification.
Paramètres
| Nom | Type | Obligatoire | Par défaut | Description |
|---|---|---|---|---|
| csv | chaîne | Oui | — | Fichier CSV contenant les colonnes suivantes : IP, Catégories, Commentaire (une entrée par ligne) |
Exemples
curl -X POST \
-H "X-Key: YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{"csv": "1.2.3.4,18|21,SSH brute force\n5.6.7.8,22,Port scanning\n9.10.11.12,15|18,Distributed attack"}' \
"https://reportedip.de/wp-json/reportedip/v2/bulk-report"
$csv = "1.2.3.4,18|21,SSH brute force\n";
$csv .= "5.6.7.8,22,Port scanning\n";
$csv .= "9.10.11.12,15|18,Distributed attack";
$response = wp_remote_post(
'https://reportedip.de/wp-json/reportedip/v2/bulk-report',
array(
'headers' => array(
'X-Key' => 'YOUR_API_KEY',
'Content-Type' => 'application/json',
),
'body' => wp_json_encode(array(
'csv' => $csv,
)),
)
);
$data = json_decode(wp_remote_retrieve_body($response), true);
import requests
csv_data = """1.2.3.4,18|21,SSH brute force
5.6.7.8,22,Port scanning
9.10.11.12,15|18,Distributed attack"""
response = requests.post(
'https://reportedip.de/wp-json/reportedip/v2/bulk-report',
json={'csv': csv_data},
headers={'X-Key': 'YOUR_API_KEY'}
)
data = response.json()
const csvData = [
'1.2.3.4,18|21,SSH brute force',
'5.6.7.8,22,Port scanning',
'9.10.11.12,15|18,Distributed attack'
].join('\n');
const response = await fetch(
'https://reportedip.de/wp-json/reportedip/v2/bulk-report',
{
method: 'POST',
headers: {
'X-Key': 'YOUR_API_KEY',
'Content-Type': 'application/json'
},
body: JSON.stringify({ csv: csvData })
}
);
const data = await response.json();
Réponse
{
"meta": {
"success": true,
"code": 200,
"message": "Bulk report processed"
},
"data": {
"success_count": 3,
"error_count": 0,
"errors": []
}
}
Points de terminaison de relais 2FA
Gestion de la mise en place de l'authentification à deux facteurs (2FA) pour le plugin WordPress ReportedIP . Les abonnés au niveau PRO+ peuvent mettre en file d'attente les e-mails et SMS d'authentification via ce relais ; le service utilise d'abord le quota mensuel inclus et passe au solde du forfait prépayé une fois ce quota atteint.
not eligible ·
Professionnel 500 mails · 25 SMS ·
Business 2,500 mails · 75 SMS ·
Entreprise fair-use unlimited.
Les abonnés PRO et Business recharger leur crédit via des forfaits prépayés
(hive_mail_bundle_1000/5000/25000, hive_sms_bundle_50/200/500).
bundle_balance est signé :
un remboursement Stripe (charge.refunded) sur un forfait déjà utilisé
réduit le solde et peut le faire passer en dessous de zéro. Tant que le solde est
non positif et que le quota inclus est épuisé, les envois échouent avec un code HTTP
402 cap_reached_buy_bundle jusqu'à l'achat d'un nouveau forfait.
/relay-quota
Renvoie le quota mensuel inclus ainsi que le solde du forfait prépayé pour la messagerie et la transmission de SMS. Cette valeur est utilisée par le tableau de bord du plugin Hive pour afficher les barres d'utilisation et les informations sur le forfait.
Exemples
curl -H 'X-Key: YOUR_API_KEY' \
https://reportedip.de/wp-json/reportedip/v2/relay-quota
$response = wp_remote_get(
'https://reportedip.de/wp-json/reportedip/v2/relay-quota',
array( 'headers' => array( 'X-Key' => 'YOUR_API_KEY' ) )
);
$data = json_decode( wp_remote_retrieve_body( $response ), true );
import requests
response = requests.get(
'https://reportedip.de/wp-json/reportedip/v2/relay-quota',
headers={'X-Key': 'YOUR_API_KEY'}
)
data = response.json()
const response = await fetch(
'https://reportedip.de/wp-json/reportedip/v2/relay-quota',
{ headers: { 'X-Key': 'YOUR_API_KEY' } }
);
const data = await response.json();
Réponse
{
"tier": "professional",
"role": "reportedip_professional",
"mail": {
"sent": 18,
"queued": 0,
"queued_total": 18,
"failed": 0,
"limit": 500,
"inclusive_limit": 500,
"inclusive_used": 18,
"inclusive_available": 482,
"bundle_balance": 1000,
"bundle_eligible": true,
"period_start": "2026-05-01T00:00:00Z",
"period_end": "2026-05-31T23:59:59Z"
},
"sms": {
"sent": 3,
"queued": 0,
"queued_total": 3,
"failed": 0,
"limit": 25,
"inclusive_limit": 25,
"inclusive_used": 3,
"inclusive_available": 22,
"bundle_balance": 50,
"bundle_eligible": true,
"period_start": "2026-05-01T00:00:00Z",
"period_end": "2026-05-31T23:59:59Z"
},
"mail_bundle_balance": 1000,
"sms_bundle_balance": 50
}
/relay-mail
Envoie un e-mail de validation à deux facteurs (2FA) via le relais vérifié par SPF/DKIM/DMARC. Utilise un emplacement du quota mensuel d'e-mails inclus ; une fois celui-ci épuisé, un crédit est prélevé sur `mail_bundle_balance`. Renvoie un code HTTP 402 lorsque les deux sont vides.
Paramètres
| Nom | Type | Obligatoire | Par défaut | Description |
|---|---|---|---|---|
| à | chaîne | Oui | — | Adresse e-mail du destinataire |
| sujet | chaîne | Oui | — | Objet de l'e-mail |
| html_body | chaîne | Oui | — | Corps HTML du message |
| corps_simple | chaîne | Non | — | Corps de secours en texte brut (facultatif) |
| url_du_site | chaîne | Non | — | URL du site d'origine (utilisée pour les limites quotidiennes par site et les journaux d'audit) |
Exemples
curl -X POST \
-H 'X-Key: YOUR_API_KEY' \
-H 'Content-Type: application/json' \
-d '{"to":"[email protected]","subject":"Your 2FA code","html_body":"<p>Code: 123456</p>"}' \
https://reportedip.de/wp-json/reportedip/v2/relay-mail
$response = wp_remote_post(
'https://reportedip.de/wp-json/reportedip/v2/relay-mail',
array(
'headers' => array( 'X-Key' => 'YOUR_API_KEY', 'Content-Type' => 'application/json' ),
'body' => wp_json_encode( array(
'to' => '[email protected]',
'subject' => 'Your 2FA code',
'html_body' => '<p>Code: 123456</p>',
) ),
)
);
import requests
response = requests.post(
'https://reportedip.de/wp-json/reportedip/v2/relay-mail',
headers={'X-Key': 'YOUR_API_KEY'},
json={
'to': '[email protected]',
'subject': 'Your 2FA code',
'html_body': '<p>Code: 123456</p>',
},
)
const response = await fetch(
'https://reportedip.de/wp-json/reportedip/v2/relay-mail',
{
method: 'POST',
headers: { 'X-Key': 'YOUR_API_KEY', 'Content-Type': 'application/json' },
body: JSON.stringify({
to: '[email protected]',
subject: 'Your 2FA code',
html_body: '<p>Code: 123456</p>',
}),
}
);
Réponse
{
"ok": true,
"queue_id": 48217,
"remaining_quota": {
"sent": 18,
"queued": 1,
"queued_total": 19,
"failed": 0,
"limit": 500,
"inclusive_limit": 500,
"inclusive_used": 19,
"inclusive_available": 481,
"bundle_balance": 1000,
"bundle_eligible": true,
"period_start": "2026-05-01T00:00:00Z",
"period_end": "2026-05-31T23:59:59Z"
}
}
/relay-sms
Queues a 2FA SMS via the managed worldwide relay. The body is server-side rendered from a registered template (e.g. <code>2fa_login</code>) so the actual code never appears in client logs. HTTP 402 when both the inclusive quota and the prepaid bundle are exhausted; HTTP 422 with code <code>country_not_supported</code> when the destination country is unavailable for cost or operational reasons; HTTP 429 when the recipient or per-site daily anti-fraud cap is hit.
Paramètres
| Nom | Type | Obligatoire | Par défaut | Description |
|---|---|---|---|---|
| à | chaîne | Oui | — | Numéro de téléphone du destinataire au format E.164 (par exemple : +49170...) |
| code du modèle | chaîne | Oui | — | Server-side template id, e.g. <code>2fa_login</code> |
| variables | objet | Oui | — | Template variables: <code>{ code, expiry_min, lang? }</code> |
| url_du_site | chaîne | Non | — | URL du site d'origine (utilisée pour les limites quotidiennes par site et les journaux d'audit) |
Exemples
curl -X POST \
-H 'X-Key: YOUR_API_KEY' \
-H 'Content-Type: application/json' \
-d '{"to":"+491701234567","template_code":"2fa_login","vars":{"code":"123456","expiry_min":5,"lang":"de"}}' \
https://reportedip.de/wp-json/reportedip/v2/relay-sms
$response = wp_remote_post(
'https://reportedip.de/wp-json/reportedip/v2/relay-sms',
array(
'headers' => array( 'X-Key' => 'YOUR_API_KEY', 'Content-Type' => 'application/json' ),
'body' => wp_json_encode( array(
'to' => '+491701234567',
'template_code' => '2fa_login',
'vars' => array( 'code' => '123456', 'expiry_min' => 5, 'lang' => 'de' ),
) ),
)
);
import requests
response = requests.post(
'https://reportedip.de/wp-json/reportedip/v2/relay-sms',
headers={'X-Key': 'YOUR_API_KEY'},
json={
'to': '+491701234567',
'template_code': '2fa_login',
'vars': {'code': '123456', 'expiry_min': 5, 'lang': 'de'},
},
)
const response = await fetch(
'https://reportedip.de/wp-json/reportedip/v2/relay-sms',
{
method: 'POST',
headers: { 'X-Key': 'YOUR_API_KEY', 'Content-Type': 'application/json' },
body: JSON.stringify({
to: '+491701234567',
template_code: '2fa_login',
vars: { code: '123456', expiry_min: 5, lang: 'de' },
}),
}
);
Réponse
{
"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"
}
}
Réponses d'erreur pour les points de terminaison de relais
| Statut | Code | Signification |
|---|---|---|
401 | missing_api_key / invalid_api_key | Le X-Key L'en-tête est manquant, mal formé ou fait référence à une clé désactivée. |
403 | tier_forbidden | Le niveau d'abonnement de l'appelant (Gratuit / Contributeur) ne permet pas la livraison par relais. |
402 | cap_reached_buy_bundle | Le plafond mensuel inclus a été atteint et le solde du forfait prépayé est épuisé ou négatif après un remboursement. Achetez un forfait dans le tableau de bord pour reprendre l'accès. |
402 | monthly_cap_reached | Le plafond mensuel inclus a été atteint pour un niveau ne donnant pas droit à une offre groupée. |
429 | recipient_backoff / site_daily_cap | Limiteur anti-fraude. Le retry-after L'en-tête indique le temps d'attente. |
Points de terminaison obsolètes
Ces points de terminaison sont obsolètes et seront supprimés dans une prochaine version. Veuillez migrer vers les alternatives recommandées.
/blacklist-detailed
Renvoyait auparavant une liste noire détaillée. Maintenue pour des raisons de compatibilité ascendante avec les anciennes installations de Hive. N'est pas prise en compte dans le quota quotidien (depuis la version 2.5.1 — elle était auparavant comptabilisée comme une vérification).
/blacklist-combined
Auparavant, renvoyait une liste noire regroupant toutes les sources. Conservée pour des raisons de compatibilité ascendante avec les anciennes installations de Hive. N'est pas prise en compte dans le quota quotidien (depuis la version 2.5.1).
/blacklist-export/git
La liste noire était auparavant exportée au format texte brut pour permettre l'intégration dans un dépôt Git. Cette fonctionnalité a été conservée à des fins de compatibilité ascendante. Elle n'est pas prise en compte dans le quota quotidien (depuis la version 2.5.1).