API Reference
Référence complète de tous les Endpoints de la REST API v2 de ReportedIP, avec des exemples de code en cURL, PHP, Python et JavaScript.
1,000 checks · 50 reports ·
Contributor 5,000 / 200 ·
Professional 25,000 / 1,000 ·
Business 100,000 / 5,000 par licence ·
Enterprise unlimited.
Les quotas « Business » évoluent en fonction du nombre de licences (x2 à x20), par exemple x5 = 500,000 / 25,000.
Consultez la page Tarifs pour une comparaison complète des niveaux.
https://reportedip.com/wp-json/reportedip/v2/
X-Key en-tête. Les Endpoints publics ne nécessitent pas d’authentification mais sont soumis à des Rate Limits. Les clés, les niveaux de service, les Rate Limits et les codes d’erreur sont expliqués en détail sur la page Authentification et Rate Limits.
- Vérification du quota :
GET /check(+1) etPOST /bulk-check(+N, un par adresse IP valide). - Rapport de quota :
POST /report(+1) etPOST /bulk-report(+N, un par rapport soumis). - Aucun des deux quotas :
GET /blacklist,/blacklist-categories,/blacklist-stats,/reports/{ip},/trends,/statistics,/verify-key— il s’agit de fonctionnalités soumises à des paliers d’accès, et non d’appels facturés à l’unité. - Limite d’adresses IP publiques : 100 requêtes par jour par adresse IP source, réparties entre tous les appels non authentifiés (
/check-public,/stats-public,/search-public,/categories). Envoyez unX-Keyen-tête pour basculer vers le chemin de quota par API Key à la place.
Public Endpoints
Ces endpoints sont accessibles sans authentification. Limitation de débit à 100 requêtes par jour et par adresse IP.
Vérifie la réputation d'une adresse IP sans authentification. Renvoie le Confidence Score en matière d'abus, le nombre total de signalements, les Threat Categories et la date du dernier signalement. Compte pour +1 dans la limite quotidienne de la Public API par adresse IP (partagée avec les autres Endpoints non authentifiés).
Parameters
| Name | Type | Required | Default | Description |
|---|---|---|---|---|
| ip | string | Yes | — | Adresse IPv4 ou IPv6 à vérifier |
| verbose | boolean | No | false | Veuillez inclure dans votre réponse une ventilation détaillée des niveaux de confiance |
Examples
curl "https://reportedip.com/wp-json/reportedip/v2/check-public?ip=1.2.3.4"
$response = wp_remote_get(
'https://reportedip.com/wp-json/reportedip/v2/check-public?ip=1.2.3.4'
);
$data = json_decode(wp_remote_retrieve_body($response), true);
import requests
response = requests.get(
'https://reportedip.com/wp-json/reportedip/v2/check-public',
params={'ip': '1.2.3.4'}
)
data = response.json()
const response = await fetch(
'https://reportedip.com/wp-json/reportedip/v2/check-public?ip=1.2.3.4'
);
const data = await response.json();
Response
{
"meta": {
"success": true,
"code": 200,
"message": "OK"
},
"data": {
"ip": "1.2.3.4",
"abuseConfidencePercentage": 87,
"totalReports": 42,
"lastReportedAt": "2026-03-09T14:22:31Z",
"categories": [18, 21, 22],
"countryCode": "CN",
"isp": "China Telecom"
}
}
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 la Public API par adresse IP.
Examples
curl "https://reportedip.com/wp-json/reportedip/v2/stats-public"
$response = wp_remote_get(
'https://reportedip.com/wp-json/reportedip/v2/stats-public'
);
$data = json_decode(wp_remote_retrieve_body($response), true);
import requests
response = requests.get(
'https://reportedip.com/wp-json/reportedip/v2/stats-public'
)
data = response.json()
const response = await fetch(
'https://reportedip.com/wp-json/reportedip/v2/stats-public'
);
const data = await response.json();
Response
{
"meta": {
"success": true,
"code": 200,
"message": "OK"
},
"data": {
"totalIPs": 158432,
"totalReports": 892741,
"last24h": {
"newIPs": 342,
"newReports": 1847
},
"last7d": {
"newIPs": 2156,
"newReports": 12493
},
"categoryBreakdown": [
{"id": 18, "name": "Brute-Force", "count": 45231},
{"id": 21, "name": "Web App Attack", "count": 32198},
{"id": 22, "name": "SSH", "count": 28764},
{"id": 15, "name": "Port Scan", "count": 18432}
],
"topCountries": [
{"code": "CN", "count": 42156},
{"code": "US", "count": 18743},
{"code": "RU", "count": 15892}
]
}
}
Effectuez une recherche dans la base de données publique de 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.com. Elle compte pour +1 dans le cadre de la limite quotidienne de la Public API par adresse IP.
Parameters
| Name | Type | Required | Default | Description |
|---|---|---|---|---|
| q | string | Yes | — | Critères de recherche : adresse IP complète ou partielle, code de pays (par exemple « CN ») ou ASN. |
| limit | int | No | 20 | Nombre de résultats (50 au maximum). |
Examples
curl "https://reportedip.com/wp-json/reportedip/v2/search-public?q=1.2.3"
Response
{
"meta": {"success": true, "code": 200},
"data": {
"query": "1.2.3",
"results": [
{"ip": "1.2.3.4", "abuseConfidencePercentage": 87, "totalReports": 42, "countryCode": "CN"},
{"ip": "1.2.3.5", "abuseConfidencePercentage": 65, "totalReports": 12, "countryCode": "CN"}
]
}
}
Récupérer la liste des 58 Threat Categories 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é. L'appel de cette API compte pour +1 dans le quota quotidien de la Public API par adresse IP lorsqu'il est effectué sans API Key ; avec un en-tête X-Key, il n'est pas pris en compte dans aucun quota quotidien.
Examples
curl "https://reportedip.com/wp-json/reportedip/v2/categories"
$response = wp_remote_get(
'https://reportedip.com/wp-json/reportedip/v2/categories'
);
$data = json_decode(wp_remote_retrieve_body($response), true);
import requests
response = requests.get(
'https://reportedip.com/wp-json/reportedip/v2/categories'
)
data = response.json()
const response = await fetch(
'https://reportedip.com/wp-json/reportedip/v2/categories'
);
const data = await response.json();
Response
{
"meta": {
"success": true,
"code": 200,
"message": "OK"
},
"data": [
{
"id": 1,
"name": "DNS Compromise",
"description": "Compromised DNS server or DNS hijacking",
"severity_level": 8
},
{
"id": 18,
"name": "Brute-Force",
"description": "Login brute-force attempts",
"severity_level": 7
},
{
"id": 21,
"name": "Web App Attack",
"description": "Web application attacks (SQLi, XSS, etc.)",
"severity_level": 9
}
]
}
Endpoints authentifiés
Ces endpoints nécessitent une API Key valide envoyée via l’ X-Key en-tête. Récupérez votre API Key depuis le Dashboard.
Effectuez une vérification complète de la réputation IP avec des données détaillées. Cette opération fournit des informations complètes sur les menaces, notamment une ventilation par niveau de confiance, l'historique des rapports et des informations sur le FAI. Elle est facturée +1 sur votre quota quotidien de vérifications.
Parameters
| Name | Type | Required | Default | Description |
|---|---|---|---|---|
| ip | string | Yes | — | Adresse IPv4 ou IPv6 à vérifier |
| verbose | boolean | No | false | Inclure une ventilation détaillée des Confidence Scores |
| include_reports | boolean | No | false | Inclure les détails du rapport individuel dans la réponse |
Examples
curl -H "X-Key: YOUR_API_KEY" \
"https://reportedip.com/wp-json/reportedip/v2/check?ip=1.2.3.4&verbose=true"
$response = wp_remote_get(
'https://reportedip.com/wp-json/reportedip/v2/check?ip=1.2.3.4&verbose=true',
array(
'headers' => array(
'X-Key' => 'YOUR_API_KEY',
),
)
);
$data = json_decode(wp_remote_retrieve_body($response), true);
import requests
response = requests.get(
'https://reportedip.com/wp-json/reportedip/v2/check',
params={'ip': '1.2.3.4', 'verbose': 'true'},
headers={'X-Key': 'YOUR_API_KEY'}
)
data = response.json()
const response = await fetch(
'https://reportedip.com/wp-json/reportedip/v2/check?ip=1.2.3.4&verbose=true',
{
headers: { 'X-Key': 'YOUR_API_KEY' }
}
);
const data = await response.json();
Response
{
"meta": {
"success": true,
"code": 200,
"message": "OK"
},
"data": {
"ip": "1.2.3.4",
"abuseConfidencePercentage": 87,
"totalReports": 42,
"lastReportedAt": "2026-03-09T14:22:31Z",
"categories": [18, 21, 22],
"countryCode": "CN",
"isp": "China Telecom",
"isWhitelisted": false,
"confidenceBreakdown": {
"reportScore": 24.0,
"diversityScore": 12.0,
"recencyWeight": 13.5,
"severityWeight": 12.3,
"honeypotBonus": 25.0,
"maxConfidence": 100,
"constraintReasons": []
},
"debugInfo": {
"reportCount": 42,
"uniqueReporters": 8,
"honeypotReportsCount": 5,
"effectiveReportCount": 47,
"timeDampeningFactor": 0.92
}
}
}
Signalez une adresse IP malveillante à la communauté. Ce signalement sera ajouté aux données existantes afin de mettre à jour le Confidence Score d'abus de cette adresse IP. Les Reports émis par un même utilisateur pour la même adresse IP dans un délai de 5 minutes sont automatiquement regroupés. Cela impute uniquement +1 à votre quota quotidien de Reports — jamais à votre quota de vérifications.
Parameters
| Name | Type | Required | Default | Description |
|---|---|---|---|---|
| ip | string | Yes | — | Adresse IPv4 ou IPv6 à signaler |
| categories | array | Yes | — | Tableau d'identifiants de Threat Categories (par exemple : [18, 21]) |
| comment | string | No | — | Commentaire facultatif décrivant l'activité malveillante observée |
Examples
curl -X POST \
-H "X-Key: YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{"ip": "1.2.3.4", "categories": [18, 21], "comment": "SSH brute force"}' \
"https://reportedip.com/wp-json/reportedip/v2/report"
$response = wp_remote_post(
'https://reportedip.com/wp-json/reportedip/v2/report',
array(
'headers' => array(
'X-Key' => 'YOUR_API_KEY',
'Content-Type' => 'application/json',
),
'body' => wp_json_encode(array(
'ip' => '1.2.3.4',
'categories' => array(18, 21),
'comment' => 'SSH brute force',
)),
)
);
$data = json_decode(wp_remote_retrieve_body($response), true);
import requests
response = requests.post(
'https://reportedip.com/wp-json/reportedip/v2/report',
json={
'ip': '1.2.3.4',
'categories': [18, 21],
'comment': 'SSH brute force'
},
headers={'X-Key': 'YOUR_API_KEY'}
)
data = response.json()
const response = await fetch(
'https://reportedip.com/wp-json/reportedip/v2/report',
{
method: 'POST',
headers: {
'X-Key': 'YOUR_API_KEY',
'Content-Type': 'application/json'
},
body: JSON.stringify({
ip: '1.2.3.4',
categories: [18, 21],
comment: 'SSH brute force'
})
}
);
const data = await response.json();
Response
{
"meta": {
"success": true,
"code": 200,
"message": "Report submitted successfully"
},
"data": {
"reportId": 58234,
"ip": "1.2.3.4",
"categories": [18, 21],
"abuseConfidencePercentage": 89
}
}
Vérifiez votre API Key et récupérez les informations relatives à votre compte, notamment le rôle de l'utilisateur, les autorisations, les Rate Limits et les statistiques d'utilisation actuelles. Cette opération n'est pas prise en compte dans le quota quotidien.
Examples
curl -H "X-Key: YOUR_API_KEY" \
"https://reportedip.com/wp-json/reportedip/v2/verify-key"
$response = wp_remote_get(
'https://reportedip.com/wp-json/reportedip/v2/verify-key',
array(
'headers' => array(
'X-Key' => 'YOUR_API_KEY',
),
)
);
$data = json_decode(wp_remote_retrieve_body($response), true);
import requests
response = requests.get(
'https://reportedip.com/wp-json/reportedip/v2/verify-key',
headers={'X-Key': 'YOUR_API_KEY'}
)
data = response.json()
const response = await fetch(
'https://reportedip.com/wp-json/reportedip/v2/verify-key',
{
headers: { 'X-Key': 'YOUR_API_KEY' }
}
);
const data = await response.json();
Response
{
"meta": {
"success": true,
"code": 200,
"message": "OK"
},
"data": {
"valid": true,
"role": "reportedip_professional",
"permissions": {
"check": true,
"report": true,
"bulk_check": true,
"bulk_report": false,
"reports_detail": true,
"trends": true
},
"rateLimits": {
"checksPerDay": 25000,
"reportsPerDay": 1000
},
"usage": {
"checksToday": 1247,
"reportsToday": 38
}
}
}
Statistiques publiques, à l'échelle du service : nombre total d'adresses IP suivies, nombre total de Reports, Reports envoyés aujourd'hui et API Keys actives. Aucune API Key n'est requise — le débit est limité par adresse IP, comme pour les autres Endpoints publics. N'est pas pris en compte dans le quota quotidien. Vos chiffres d'utilisation et de quota personnels se trouvent dans le https://reportedip.com/dashboard/">Dashboard.
Examples
curl "https://reportedip.com/wp-json/reportedip/v2/statistics"
Response
{
"meta": {"success": true, "code": 200},
"data": {
"total_ips": 181402,
"total_reports": 2643918,
"reports_today": 10457,
"active_api_keys": 312
}
}
Endpoints de la Blacklist
Accédez à la Blacklist d’adresses IP alimentée par la communauté, dont la notation est calculée automatiquement à partir de Reports en temps réel. Disponible aux formats JSON, texte brut et CSV pour l’intégration à un pare-feu.
Récupérez la Blacklist d'adresses IP dans différents formats. Prend en charge le filtrage par niveau de confiance et par Threat Category — combinez les deux pour créer des Blacklists spécifiques à chaque service (SSH, messagerie, Web, FTP). Les listes sont régénérées côté serveur toutes les 15 minutes ; l'Endpoint renvoie un ETag et respecte l'entête If-None-Match, de sorte que les listes inchangées renvoient un code d'état 304 Not Modified. N'est pas pris en compte dans le quota quotidien — fonctionnalité accessible selon le niveau d'abonnement (Contributor et supérieur).
Parameters
| Name | Type | Required | Default | Description |
|---|---|---|---|---|
| format | string | No | json | Format de réponse : json, txt ou csv |
| source | string | No | dynamic | Source de la Blacklist : dynamique (par défaut) — Blacklist gérée par la communauté et notée automatiquement. Les autres valeurs sont réservées à un usage interne. |
| confidence | integer | No | 75 | Pourcentage minimal de confiance en cas d'abus (0-100). Alias : confidenceMinimum. Valeur recommandée pour le blocage automatique : 90 |
| category | string | No | — | Un ou plusieurs identifiants de Threat Category, séparés par des virgules (par exemple, 22,18 pour une liste de blocage SSH). Catalogue complet via GET /categories |
| limit | integer | No | 10000 | Nombre maximal d'entrées à renvoyer. Conservez la valeur par défaut — des valeurs inférieures entraîneront la troncature de la liste. |
Examples
# JSON format
curl -H "X-Key: YOUR_API_KEY" \
"https://reportedip.com/wp-json/reportedip/v2/blacklist?confidence=90"
# Plain text (one IP per line, for firewall rules)
curl -H "X-Key: YOUR_API_KEY" \
"https://reportedip.com/wp-json/reportedip/v2/blacklist?confidence=90&format=txt&limit=10000"
# Service-specific list: SSH attackers only (categories 22 + 18)
curl -H "X-Key: YOUR_API_KEY" \
"https://reportedip.com/wp-json/reportedip/v2/blacklist?confidence=90&format=txt&limit=10000&category=22,18"
# Conditional request: returns 304 Not Modified if the list is unchanged
curl -H "X-Key: YOUR_API_KEY" \
-H 'If-None-Match: W/"2438413-90-2f6c8ad881b6"' \
"https://reportedip.com/wp-json/reportedip/v2/blacklist?confidence=90&format=txt&limit=10000"
$response = wp_remote_get(
'https://reportedip.com/wp-json/reportedip/v2/blacklist?confidence=90',
array(
'headers' => array(
'X-Key' => 'YOUR_API_KEY',
),
)
);
$data = json_decode(wp_remote_retrieve_body($response), true);
import requests
response = requests.get(
'https://reportedip.com/wp-json/reportedip/v2/blacklist',
params={
'confidence': 90,
'format': 'txt',
'limit': 10000,
'category': '22,18'
},
headers={'X-Key': 'YOUR_API_KEY'}
)
ips = response.text.splitlines()
const response = await fetch(
'https://reportedip.com/wp-json/reportedip/v2/blacklist?confidence=90',
{
headers: { 'X-Key': 'YOUR_API_KEY' }
}
);
const data = await response.json();
Response
{
"meta": {
"generatedAt": "2026-07-21T17:43:13+00:00",
"confidence": "90",
"confidenceMinimum": "90",
"count": 4821,
"format": "reportapi_v2"
},
"data": [
{
"ip": "1.2.3.4",
"ipAddress": "1.2.3.4",
"abuseConfidencePercentage": 100,
"lastReportedAt": "2026-07-21T14:22:31+00:00"
},
{
"ip": "5.6.7.8",
"ipAddress": "5.6.7.8",
"abuseConfidencePercentage": 95,
"lastReportedAt": "2026-07-21T13:45:12+00:00"
}
]
}
Récupère toutes les catégories de Blacklist disponibles utilisées pour classer les entrées. N'est pas pris en compte dans le quota quotidien.
Examples
curl -H "X-Key: YOUR_API_KEY" \
"https://reportedip.com/wp-json/reportedip/v2/blacklist-categories"
$response = wp_remote_get(
'https://reportedip.com/wp-json/reportedip/v2/blacklist-categories',
array('headers' => array('X-Key' => 'YOUR_API_KEY'))
);
$data = json_decode(wp_remote_retrieve_body($response), true);
import requests
response = requests.get(
'https://reportedip.com/wp-json/reportedip/v2/blacklist-categories',
headers={'X-Key': 'YOUR_API_KEY'}
)
data = response.json()
const response = await fetch(
'https://reportedip.com/wp-json/reportedip/v2/blacklist-categories',
{ headers: { 'X-Key': 'YOUR_API_KEY' } }
);
const data = await response.json();
Response
{
"meta": {
"success": true,
"code": 200,
"message": "OK"
},
"data": [
{
"id": 1,
"name": "Botnet",
"slug": "botnet",
"description": "Known botnet command and control or participant"
},
{
"id": 2,
"name": "Brute-Force",
"slug": "brute-force",
"description": "Credential brute-force attacks"
},
{
"id": 3,
"name": "Spam",
"slug": "spam",
"description": "Spam sources"
}
]
}
Récupérer des statistiques sur la Blacklist, 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.
Examples
curl -H "X-Key: YOUR_API_KEY" \
"https://reportedip.com/wp-json/reportedip/v2/blacklist-stats"
$response = wp_remote_get(
'https://reportedip.com/wp-json/reportedip/v2/blacklist-stats',
array('headers' => array('X-Key' => 'YOUR_API_KEY'))
);
$data = json_decode(wp_remote_retrieve_body($response), true);
import requests
response = requests.get(
'https://reportedip.com/wp-json/reportedip/v2/blacklist-stats',
headers={'X-Key': 'YOUR_API_KEY'}
)
data = response.json()
const response = await fetch(
'https://reportedip.com/wp-json/reportedip/v2/blacklist-stats',
{ headers: { 'X-Key': 'YOUR_API_KEY' } }
);
const data = await response.json();
Response
{
"meta": {
"success": true,
"code": 200,
"message": "OK"
},
"data": {
"total": 12483,
"community": 12483,
"byConfidence": {
"90-100": 4821,
"75-89": 3247,
"50-74": 2891,
"25-49": 1524
},
"byCategory": [
{"name": "Brute-Force", "count": 5432},
{"name": "Web App Attack", "count": 3218},
{"name": "SSH", "count": 2847},
{"name": "Port Scan", "count": 986}
]
}
}
Endpoints avancés
Points de terminaison avancés destinés aux utilisateurs expérimentés. Nécessitent des API Keys des niveaux « Professional » ou « Enterprise ».
Récupère 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é soumise à des restrictions par niveau (à partir de la formule Professional).
Parameters
| Name | Type | Required | Default | Description |
|---|---|---|---|---|
| ip | string | Yes | — | Adresse IPv4 ou IPv6 (dans le chemin d'accès de l'URL) |
| page | integer | No | 1 | Numéro de page pour la pagination |
| per_page | integer | No | 25 | Reports par page |
Examples
curl -H "X-Key: YOUR_API_KEY" \
"https://reportedip.com/wp-json/reportedip/v2/reports/1.2.3.4?page=1&per_page=25"
$ip = '1.2.3.4';
$response = wp_remote_get(
'https://reportedip.com/wp-json/reportedip/v2/reports/' . $ip . '?page=1',
array(
'headers' => array(
'X-Key' => 'YOUR_API_KEY',
),
)
);
$data = json_decode(wp_remote_retrieve_body($response), true);
import requests
ip = '1.2.3.4'
response = requests.get(
f'https://reportedip.com/wp-json/reportedip/v2/reports/{ip}',
params={'page': 1, 'per_page': 25},
headers={'X-Key': 'YOUR_API_KEY'}
)
data = response.json()
const ip = '1.2.3.4';
const response = await fetch(
`https://reportedip.com/wp-json/reportedip/v2/reports/${ip}?page=1&per_page=25`,
{
headers: { 'X-Key': 'YOUR_API_KEY' }
}
);
const data = await response.json();
Response
{
"meta": {
"success": true,
"code": 200,
"message": "OK"
},
"data": {
"ip": "1.2.3.4",
"reports": [
{
"id": 58234,
"categories": [18, 21],
"comment": "SSH brute force with 500+ attempts",
"reportedAt": "2026-03-09T14:22:31Z",
"reporterRole": "honeypot",
"aggregationCount": 12
},
{
"id": 58102,
"categories": [22],
"comment": "Port scanning on TCP 22, 80, 443, 8080",
"reportedAt": "2026-03-09T10:15:00Z",
"reporterRole": "contributor",
"aggregationCount": 0
}
],
"total": 42,
"page": 1,
"per_page": 25,
"total_pages": 2
}
}
Récupère 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 Dashboards et les analyses. N'est pas comptabilisé dans le quota quotidien — fonctionnalité soumise à des restrictions selon le niveau d'abonnement (Professional et supérieurs).
Parameters
| Name | Type | Required | Default | Description |
|---|---|---|---|---|
| period | string | No | 7d | Période : 24 h, 7 j ou 30 j |
| category | integer | No | — | Filtrer par identifiant de Threat Category |
Examples
curl -H "X-Key: YOUR_API_KEY" \
"https://reportedip.com/wp-json/reportedip/v2/trends?period=7d"
$response = wp_remote_get(
'https://reportedip.com/wp-json/reportedip/v2/trends?period=7d',
array(
'headers' => array(
'X-Key' => 'YOUR_API_KEY',
),
)
);
$data = json_decode(wp_remote_retrieve_body($response), true);
import requests
response = requests.get(
'https://reportedip.com/wp-json/reportedip/v2/trends',
params={'period': '7d'},
headers={'X-Key': 'YOUR_API_KEY'}
)
data = response.json()
const response = await fetch(
'https://reportedip.com/wp-json/reportedip/v2/trends?period=7d',
{
headers: { 'X-Key': 'YOUR_API_KEY' }
}
);
const data = await response.json();
Response
{
"meta": {
"success": true,
"code": 200,
"message": "OK"
},
"data": {
"period": "7d",
"timeSeries": [
{"date": "2026-03-03", "reports": 1842, "newIPs": 312},
{"date": "2026-03-04", "reports": 2104, "newIPs": 356},
{"date": "2026-03-05", "reports": 1956, "newIPs": 298},
{"date": "2026-03-06", "reports": 2347, "newIPs": 401},
{"date": "2026-03-07", "reports": 1893, "newIPs": 287},
{"date": "2026-03-08", "reports": 2156, "newIPs": 342},
{"date": "2026-03-09", "reports": 1847, "newIPs": 318}
],
"topCategories": [
{"id": 18, "name": "Brute-Force", "count": 5432},
{"id": 21, "name": "Web App Attack", "count": 3218},
{"id": 22, "name": "SSH", "count": 2847}
]
}
}
Vérifiez la réputation de plusieurs adresses IP en une seule requête. Accepte jusqu’à 1 000 adresses IP par requête. Décompte +N de votre quota quotidien de vérifications, où N correspond au nombre d’adresses IP valides dans la requête. Si la requête venait à dépasser le quota restant, le serveur renvoie un code HTTP 429 et le compteur n’est pas incrémenté.
Parameters
| Name | Type | Required | Default | Description |
|---|---|---|---|---|
| ips | array | Yes | — | Tableau d'adresses IPv4/IPv6 (1 000 au maximum) |
Examples
curl -X POST \
-H "X-Key: YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{"ips": ["1.2.3.4", "5.6.7.8", "9.10.11.12"]}' \
"https://reportedip.com/wp-json/reportedip/v2/bulk-check"
$response = wp_remote_post(
'https://reportedip.com/wp-json/reportedip/v2/bulk-check',
array(
'headers' => array(
'X-Key' => 'YOUR_API_KEY',
'Content-Type' => 'application/json',
),
'body' => wp_json_encode(array(
'ips' => array('1.2.3.4', '5.6.7.8', '9.10.11.12'),
)),
)
);
$data = json_decode(wp_remote_retrieve_body($response), true);
import requests
response = requests.post(
'https://reportedip.com/wp-json/reportedip/v2/bulk-check',
json={
'ips': ['1.2.3.4', '5.6.7.8', '9.10.11.12']
},
headers={'X-Key': 'YOUR_API_KEY'}
)
data = response.json()
const response = await fetch(
'https://reportedip.com/wp-json/reportedip/v2/bulk-check',
{
method: 'POST',
headers: {
'X-Key': 'YOUR_API_KEY',
'Content-Type': 'application/json'
},
body: JSON.stringify({
ips: ['1.2.3.4', '5.6.7.8', '9.10.11.12']
})
}
);
const data = await response.json();
Response
{
"meta": {
"success": true,
"code": 200,
"message": "OK"
},
"data": {
"results": [
{
"ip": "1.2.3.4",
"abuseConfidencePercentage": 87,
"totalReports": 42,
"lastReportedAt": "2026-03-09T14:22:31Z",
"categories": [18, 21, 22]
},
{
"ip": "5.6.7.8",
"abuseConfidencePercentage": 0,
"totalReports": 0,
"lastReportedAt": null,
"categories": []
},
{
"ip": "9.10.11.12",
"abuseConfidencePercentage": 45,
"totalReports": 3,
"lastReportedAt": "2026-03-07T09:30:00Z",
"categories": [15]
}
],
"checked": 3
}
}
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 d'importants volumes d'activités malveillantes. Ce service est facturé à raison de +N par rapport à votre quota quotidien de rapports, où N correspond au nombre de rapports envoyés. Il n'est jamais pris en compte dans le quota de vérification.
Parameters
| Name | Type | Required | Default | Description |
|---|---|---|---|---|
| csv | string | Yes | — | Données au format CSV comportant les colonnes suivantes : IP, Catégories, Commentaire (un rapport par ligne) |
Examples
curl -X POST \
-H "X-Key: YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{"csv": "1.2.3.4,18|21,SSH brute force\n5.6.7.8,22,Port scanning\n9.10.11.12,15|18,Distributed attack"}' \
"https://reportedip.com/wp-json/reportedip/v2/bulk-report"
$csv = "1.2.3.4,18|21,SSH brute force\n";
$csv .= "5.6.7.8,22,Port scanning\n";
$csv .= "9.10.11.12,15|18,Distributed attack";
$response = wp_remote_post(
'https://reportedip.com/wp-json/reportedip/v2/bulk-report',
array(
'headers' => array(
'X-Key' => 'YOUR_API_KEY',
'Content-Type' => 'application/json',
),
'body' => wp_json_encode(array(
'csv' => $csv,
)),
)
);
$data = json_decode(wp_remote_retrieve_body($response), true);
import requests
csv_data = """1.2.3.4,18|21,SSH brute force
5.6.7.8,22,Port scanning
9.10.11.12,15|18,Distributed attack"""
response = requests.post(
'https://reportedip.com/wp-json/reportedip/v2/bulk-report',
json={'csv': csv_data},
headers={'X-Key': 'YOUR_API_KEY'}
)
data = response.json()
const csvData = [
'1.2.3.4,18|21,SSH brute force',
'5.6.7.8,22,Port scanning',
'9.10.11.12,15|18,Distributed attack'
].join('\n');
const response = await fetch(
'https://reportedip.com/wp-json/reportedip/v2/bulk-report',
{
method: 'POST',
headers: {
'X-Key': 'YOUR_API_KEY',
'Content-Type': 'application/json'
},
body: JSON.stringify({ csv: csvData })
}
);
const data = await response.json();
Response
{
"meta": {
"success": true,
"code": 200,
"message": "Bulk report processed"
},
"data": {
"success_count": 3,
"error_count": 0,
"errors": []
}
}
Endpoints de relais 2FA
Distribution gérée de l'authentification à deux facteurs (2FA) pour le plugin WordPress ReportedIP Hive. Les abonnements 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, puis recourt au solde du forfait prépayé une fois ce plafond atteint.
not eligible ·
Professional 500 mails · 25 SMS ·
Business 2,500 mails · 75 SMS ·
Enterprise fair-use unlimited.
Les abonnements PRO et Business peuvent être rechargés 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 précédemment utilisé
réduit le solde et peut le faire passer en dessous de zéro. Tant que le solde est
négatif et que le quota inclus est épuisé, les envois échouent avec le statut HTTP
402 cap_reached_buy_bundle jusqu’à ce qu’un nouveau forfait soit acheté.
Renvoie le quota mensuel inclus ainsi que le solde du forfait prépayé pour le relais de messagerie et de SMS Relay. Utilisé par le Dashboard du plugin Hive pour afficher les barres d'utilisation et les informations sur les forfaits.
Examples
curl -H 'X-Key: YOUR_API_KEY' \
https://reportedip.com/wp-json/reportedip/v2/relay-quota
$response = wp_remote_get(
'https://reportedip.com/wp-json/reportedip/v2/relay-quota',
array( 'headers' => array( 'X-Key' => 'YOUR_API_KEY' ) )
);
$data = json_decode( wp_remote_retrieve_body( $response ), true );
import requests
response = requests.get(
'https://reportedip.com/wp-json/reportedip/v2/relay-quota',
headers={'X-Key': 'YOUR_API_KEY'}
)
data = response.json()
const response = await fetch(
'https://reportedip.com/wp-json/reportedip/v2/relay-quota',
{ headers: { 'X-Key': 'YOUR_API_KEY' } }
);
const data = await response.json();
Response
{
"tier": "professional",
"role": "reportedip_professional",
"mail": {
"sent": 18,
"queued": 0,
"queued_total": 18,
"failed": 0,
"limit": 500,
"inclusive_limit": 500,
"inclusive_used": 18,
"inclusive_available": 482,
"bundle_balance": 1000,
"bundle_eligible": true,
"period_start": "2026-05-01T00:00:00Z",
"period_end": "2026-05-31T23:59:59Z"
},
"sms": {
"sent": 3,
"queued": 0,
"queued_total": 3,
"failed": 0,
"limit": 25,
"inclusive_limit": 25,
"inclusive_used": 3,
"inclusive_available": 22,
"bundle_balance": 50,
"bundle_eligible": true,
"period_start": "2026-05-01T00:00:00Z",
"period_end": "2026-05-31T23:59:59Z"
},
"mail_bundle_balance": 1000,
"sms_bundle_balance": 50
}
Met en file d'attente un e-mail à authentification à deux facteurs (2FA) transactionnel via le relais vérifié par SPF/DKIM/DMARC. Consomme 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.
Parameters
| Name | Type | Required | Default | Description |
|---|---|---|---|---|
| recipient | string | Yes | — | Adresse e-mail du destinataire |
| subject | string | Yes | — | Objet de l'e-mail |
| body_html | string | No | '' | Corps du message au format HTML |
| body_text | string | No | '' | Corps en texte brut / solution de secours |
| reply_to | string | No | '' | Adresse de réponse — e-mail au format brut ou RFC 5322 Display Name <email@host> |
| headers | array | No | [] | En-têtes de courrier supplémentaires |
| site_url | string | No | '' | URL du site d'origine (utilisée pour les plafonds quotidiens par site et les journaux d'audit) |
Examples
curl -X POST \
-H 'X-Key: YOUR_API_KEY' \
-H 'Content-Type: application/json' \
-d '{"recipient":"user@example.com","subject":"Your 2FA code","body_html":"<p>Code: 123456</p>","body_text":"Code: 123456"}' \
https://reportedip.com/wp-json/reportedip/v2/relay-mail
$response = wp_remote_post(
'https://reportedip.com/wp-json/reportedip/v2/relay-mail',
array(
'headers' => array( 'X-Key' => 'YOUR_API_KEY', 'Content-Type' => 'application/json' ),
'body' => wp_json_encode( array(
'recipient' => 'user@example.com',
'subject' => 'Your 2FA code',
'body_html' => '<p>Code: 123456</p>',
'body_text' => 'Code: 123456',
) ),
)
);
import requests
response = requests.post(
'https://reportedip.com/wp-json/reportedip/v2/relay-mail',
headers={'X-Key': 'YOUR_API_KEY'},
json={
'recipient': 'user@example.com',
'subject': 'Your 2FA code',
'body_html': '<p>Code: 123456</p>',
'body_text': 'Code: 123456',
},
)
const response = await fetch(
'https://reportedip.com/wp-json/reportedip/v2/relay-mail',
{
method: 'POST',
headers: { 'X-Key': 'YOUR_API_KEY', 'Content-Type': 'application/json' },
body: JSON.stringify({
recipient: 'user@example.com',
subject: 'Your 2FA code',
body_html: '<p>Code: 123456</p>',
body_text: 'Code: 123456',
}),
}
);
Response
{
"ok": true,
"queue_id": 48217,
"remaining_quota": {
"sent": 18,
"queued": 1,
"queued_total": 19,
"failed": 0,
"limit": 500,
"inclusive_limit": 500,
"inclusive_used": 19,
"inclusive_available": 481,
"bundle_balance": 1000,
"bundle_eligible": true,
"period_start": "2026-05-01T00:00:00Z",
"period_end": "2026-05-31T23:59:59Z"
}
}
Envoie un SMS d'authentification 2FA via le relais mondial géré. Le corps du message est généré côté serveur à partir d'un modèle enregistré (par exemple 2fa_login), de sorte que le code proprement dit n’apparaît jamais dans les journaux du client. Code HTTP 402 lorsque le quota inclusif et le forfait prépayé sont tous deux épuisés ; code HTTP 422 country_not_supported lorsque le pays de destination n’est pas disponible pour des raisons de coût ou d’exploitation ; une réponse HTTP 429 lorsque la limite anti-fraude par destinataire ou par site et par jour est atteinte.
Parameters
| Name | Type | Required | Default | Description |
|---|---|---|---|---|
| recipient_phone | string | Yes | — | Numéro de téléphone du destinataire au format E.164 (par exemple : +49170...) |
| template_code | string | No | '' | Identifiant du modèle côté serveur, par exemple 2fa_login. Lorsqu’il est défini, le message est généré côté serveur et message est ignoré |
| template_vars | object | No | {} | Variables du modèle : { code, expiry_min, lang? } |
| message | string | No | '' | Texte brut du message — utilisé uniquement lorsqu’aucun template_code n'est pas fourni. L'une des valeurs suivantes : message ou template_code est obligatoire (HTTP 422 dans le cas contraire) |
| site_url | string | No | '' | URL du site d'origine (utilisée pour les plafonds quotidiens par site et les journaux d'audit) |
Examples
curl -X POST \
-H 'X-Key: YOUR_API_KEY' \
-H 'Content-Type: application/json' \
-d '{"recipient_phone":"+491701234567","template_code":"2fa_login","template_vars":{"code":"123456","expiry_min":5,"lang":"de"}}' \
https://reportedip.com/wp-json/reportedip/v2/relay-sms
$response = wp_remote_post(
'https://reportedip.com/wp-json/reportedip/v2/relay-sms',
array(
'headers' => array( 'X-Key' => 'YOUR_API_KEY', 'Content-Type' => 'application/json' ),
'body' => wp_json_encode( array(
'recipient_phone' => '+491701234567',
'template_code' => '2fa_login',
'template_vars' => array( 'code' => '123456', 'expiry_min' => 5, 'lang' => 'de' ),
) ),
)
);
import requests
response = requests.post(
'https://reportedip.com/wp-json/reportedip/v2/relay-sms',
headers={'X-Key': 'YOUR_API_KEY'},
json={
'recipient_phone': '+491701234567',
'template_code': '2fa_login',
'template_vars': {'code': '123456', 'expiry_min': 5, 'lang': 'de'},
},
)
const response = await fetch(
'https://reportedip.com/wp-json/reportedip/v2/relay-sms',
{
method: 'POST',
headers: { 'X-Key': 'YOUR_API_KEY', 'Content-Type': 'application/json' },
body: JSON.stringify({
recipient_phone: '+491701234567',
template_code: '2fa_login',
template_vars: { code: '123456', expiry_min: 5, lang: 'de' },
}),
}
);
Response
{
"ok": true,
"queue_id": 901,
"remaining_quota": {
"sent": 3,
"queued": 1,
"queued_total": 4,
"failed": 0,
"limit": 25,
"inclusive_limit": 25,
"inclusive_used": 4,
"inclusive_available": 21,
"bundle_balance": 50,
"bundle_eligible": true,
"period_start": "2026-05-01T00:00:00Z",
"period_end": "2026-05-31T23:59:59Z"
}
}
Réponses d’erreur pour les endpoints de relais
| Statut | Code | Signification |
|---|---|---|
401 | missing_api_key / invalid_api_key | L' X-Key en-tête est manquant, mal formé ou fait référence à une clé désactivée. |
403 | tier_forbidden | Le niveau d'accès de l'appelant (Free tier / Contributor) ne lui permet pas de bénéficier de la livraison par relais. |
402 | cap_reached_buy_bundle | Le plafond mensuel inclus a été atteint et le solde du forfait prépayé est nul ou négatif suite à un remboursement. Achetez un forfait dans le Dashboard pour reprendre l'envoi. |
402 | monthly_cap_reached | Le plafond mensuel inclus a été atteint pour un niveau ne donnant pas droit à un forfait. |
429 | recipient_backoff / site_daily_cap | Limitation anti-fraude. L’ retry-after en-tête indique le délai d'attente. |
Dernière mise à jour: · Maintenu par l’équipe ReportedIP