Aller directement au contenu principalAller directement au pied de page

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.

Quotas quotidiens par niveau : Gratuit 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.
URL de base https://reportedip.de/wp-json/reportedip/v2/
Authentification : Les points de terminaison authentifiés nécessitent une clé API envoyée via le X-Key header. Public endpoints do not require authentication but are rate-limited. Keys, tiers, rate limits and error codes are explained in detail on the Authentication & Rate Limits page.
Comment les quotas sont calculés (depuis la version 2.5.1) : Chaque terminal facture au maximum un un compteur journalier, jamais les deux.
  • Vérifier le quota : GET /check (+1) et POST /bulk-check (+N, un par adresse IP valide).
  • Quota de rapports : POST /report (+1) et POST /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 un X-Key en-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.

OBTENIR /check-public — Public 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).

Limite publique : 100 requêtes par jour et par adresse IP source, réparties entre tous les terminaux non authentifiés. Envoyez un en-tête X-Key pour passer au mode de quota par clé API.

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

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

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

Réponse

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

OBTENIR /stats-public — Detailed Public Statistics

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.

Limite publique : 100 requêtes par jour et par adresse IP source, réparties entre tous les terminaux non authentifiés.

Exemples

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

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

Réponse

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

OBTENIR /search-public — Public IP 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.

Limite publique : 100 requêtes par jour et par adresse IP source, réparties entre tous les points de terminaison non authentifiés. Le nombre de résultats est plafonné à 50 entrées par appel.

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

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

Réponse

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

OBTENIR /categories — Threat Categories

Public

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.

Limite publique : 100 requêtes par jour par adresse IP source, réparties entre tous les points de terminaison non authentifiés. Envoyez un en-tête X-Key pour contourner la limite publique (aucun quota par appel lorsque l'authentification est effectuée).

Exemples

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

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

Réponse

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

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

Public

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.

Limite publique : 100 requêtes par jour et par adresse IP source, réparties entre tous les terminaux non authentifiés. La réponse est mise en cache côté serveur pendant 30 minutes ; un client effectuant des requêtes répétées doit donc respecter cet intervalle.

Exemples

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

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

Réponse

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

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.

OBTENIR /check — Full IP Check

Clé API

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

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

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

Réponse

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

PUBLICATION /report — Report IP Address

Clé API

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

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

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

Réponse

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

OBTENIR /verify-key — Verify API Key

Clé API

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

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

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

Réponse

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

OBTENIR /statistics — Service Statistics

Public

Public, service-wide statistics: total tracked IPs, total reports, reports submitted today and active API keys. No API key required — rate-limited per IP like the other public endpoints. Does not count against any daily quota. Your personal usage and quota figures live in the <a href="https://reportedip.de/dashboard/">Dashboard</a>.

Exemples

boucle
curl "https://reportedip.de/wp-json/reportedip/v2/statistics"

Réponse

200 OK
json
{
  "meta": {"success": true, "code": 200},
  "data": {
    "total_ips": 181402,
    "total_reports": 2643918,
    "reports_today": 10457,
    "active_api_keys": 312
  }
}

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.

OBTENIR /blacklist — Get Blacklist

Clé API

Retrieve the IP blacklist in various formats. Supports filtering by confidence level and threat category — combine both to build service-specific block lists (SSH, mail, web, FTP). Lists are regenerated server-side every 15 minutes; the endpoint returns an ETag and honors If-None-Match, so unchanged lists answer with 304 Not Modified. Does not count against any daily quota — tier-gated feature (Contributor and up).

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 dynamic Blacklist source: dynamic (default) — the community-driven, automatically scored blacklist. Other values are reserved for internal use
confidence entier Non 75 Minimum abuse confidence percentage (0-100). Alias: confidenceMinimum. Recommended for automated blocking: 90
catégorie chaîne Non One or more threat category IDs, comma-separated (e.g. 22,18 for an SSH block list). Full catalogue via GET /categories
limite entier Non 10000 Maximum number of entries to return. Keep the default — smaller values truncate the list

Exemples

boucle
# JSON format
curl -H "X-Key: YOUR_API_KEY" \
     "https://reportedip.de/wp-json/reportedip/v2/blacklist?confidence=90"

# Plain text (one IP per line, for firewall rules)
curl -H "X-Key: YOUR_API_KEY" \
     "https://reportedip.de/wp-json/reportedip/v2/blacklist?confidence=90&format=txt&limit=10000"

# Service-specific list: SSH attackers only (categories 22 + 18)
curl -H "X-Key: YOUR_API_KEY" \
     "https://reportedip.de/wp-json/reportedip/v2/blacklist?confidence=90&format=txt&limit=10000&category=22,18"

# Conditional request: returns 304 Not Modified if the list is unchanged
curl -H "X-Key: YOUR_API_KEY" \
     -H 'If-None-Match: W/"2438413-90-2f6c8ad881b6"' \
     "https://reportedip.de/wp-json/reportedip/v2/blacklist?confidence=90&format=txt&limit=10000"
php
$response = wp_remote_get(
    'https://reportedip.de/wp-json/reportedip/v2/blacklist?confidence=90',
    array(
        'headers' => array(
            'X-Key' => 'YOUR_API_KEY',
        ),
    )
);
$data = json_decode(wp_remote_retrieve_body($response), true);
Python
import requests

response = requests.get(
    'https://reportedip.de/wp-json/reportedip/v2/blacklist',
    params={
        'confidence': 90,
        'format': 'txt',
        'limit': 10000,
        'category': '22,18'
    },
    headers={'X-Key': 'YOUR_API_KEY'}
)
ips = response.text.splitlines()
JavaScript
const response = await fetch(
    'https://reportedip.de/wp-json/reportedip/v2/blacklist?confidence=90',
    {
        headers: { 'X-Key': 'YOUR_API_KEY' }
    }
);
const data = await response.json();

Réponse

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

OBTENIR /blacklist-categories — Blacklist Categories

Public

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

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

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

Réponse

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

OBTENIR /blacklist-stats — Blacklist Statistics

Public

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

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

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

Réponse

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

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.

OBTENIR /reports/{ip} — Reports for IP

Professionnel+

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

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

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

Réponse

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

PUBLICATION /bulk-check — Bulk IP Check

Professionnel+

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

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

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

Réponse

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

PUBLICATION /bulk-report — Bulk Report

Entreprise

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

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

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

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

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

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

Réponse

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

Forfait mensuel tout compris : Gratuit / Contributeur 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).
Garantie de remboursement — 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.

OBTENIR /relay-quota — Relay Quota Status

PRO / Business Entreprise

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

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

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

Réponse

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
}

PUBLICATION /relay-mail — Send 2FA Mail

PRO / Business Entreprise

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
recipient chaîne Oui Adresse e-mail du destinataire
sujet chaîne Oui Objet de l'e-mail
body_html chaîne Non '' Corps HTML du message
body_text chaîne Non '' Plain-text body / fallback
reply_to chaîne Non '' Reply-To address — plain email or RFC 5322 <code>Display Name <email@host></code>
headers tableau Non [] Additional mail headers
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

boucle
curl -X POST \
     -H 'X-Key: YOUR_API_KEY' \
     -H 'Content-Type: application/json' \
     -d '{"recipient":"[email protected]","subject":"Your 2FA code","body_html":"<p>Code: 123456</p>","body_text":"Code: 123456"}' \
     https://reportedip.de/wp-json/reportedip/v2/relay-mail
php
$response = wp_remote_post(
    'https://reportedip.de/wp-json/reportedip/v2/relay-mail',
    array(
        'headers' => array( 'X-Key' => 'YOUR_API_KEY', 'Content-Type' => 'application/json' ),
        'body'    => wp_json_encode( array(
            'recipient' => '[email protected]',
            'subject'   => 'Your 2FA code',
            'body_html' => '<p>Code: 123456</p>',
            'body_text' => 'Code: 123456',
        ) ),
    )
);
Python
import requests

response = requests.post(
    'https://reportedip.de/wp-json/reportedip/v2/relay-mail',
    headers={'X-Key': 'YOUR_API_KEY'},
    json={
        'recipient': '[email protected]',
        'subject': 'Your 2FA code',
        'body_html': '<p>Code: 123456</p>',
        'body_text': 'Code: 123456',
    },
)
JavaScript
const response = await fetch(
    'https://reportedip.de/wp-json/reportedip/v2/relay-mail',
    {
        method: 'POST',
        headers: { 'X-Key': 'YOUR_API_KEY', 'Content-Type': 'application/json' },
        body: JSON.stringify({
            recipient: '[email protected]',
            subject: 'Your 2FA code',
            body_html: '<p>Code: 123456</p>',
            body_text: 'Code: 123456',
        }),
    }
);

Réponse

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

PUBLICATION /relay-sms — Send 2FA SMS

PRO / Business Entreprise

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
recipient_phone chaîne Oui Numéro de téléphone du destinataire au format E.164 (par exemple : +49170...)
code du modèle chaîne Non '' Server-side template id, e.g. <code>2fa_login</code>. When set, the message is rendered server-side and <code>message</code> is ignored
template_vars objet Non {} Template variables: <code>{ code, expiry_min, lang? }</code>
message chaîne Non '' Raw message text — used only when no <code>template_code</code> is given. One of <code>message</code> or <code>template_code</code> is required (HTTP 422 otherwise)
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

boucle
curl -X POST \
     -H 'X-Key: YOUR_API_KEY' \
     -H 'Content-Type: application/json' \
     -d '{"recipient_phone":"+491701234567","template_code":"2fa_login","template_vars":{"code":"123456","expiry_min":5,"lang":"de"}}' \
     https://reportedip.de/wp-json/reportedip/v2/relay-sms
php
$response = wp_remote_post(
    'https://reportedip.de/wp-json/reportedip/v2/relay-sms',
    array(
        'headers' => array( 'X-Key' => 'YOUR_API_KEY', 'Content-Type' => 'application/json' ),
        'body'    => wp_json_encode( array(
            'recipient_phone' => '+491701234567',
            'template_code'   => '2fa_login',
            'template_vars'   => array( 'code' => '123456', 'expiry_min' => 5, 'lang' => 'de' ),
        ) ),
    )
);
Python
import requests

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

Réponse

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

Réponses d'erreur pour les points de terminaison de relais

StatutCodeSignification
401missing_api_key / invalid_api_keyLe X-Key L'en-tête est manquant, mal formé ou fait référence à une clé désactivée.
403tier_forbiddenLe niveau d'abonnement de l'appelant (Gratuit / Contributeur) ne permet pas la livraison par relais.
402cap_reached_buy_bundleLe 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.
402monthly_cap_reachedLe plafond mensuel inclus a été atteint pour un niveau ne donnant pas droit à une offre groupée.
429recipient_backoff / site_daily_capLimiteur 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.

OBTENIR /blacklist-detailed — Detailed Blacklist (Deprecated)

Clé API
Obsolète. Utilisez plutôt GET /blacklist.

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

OBTENIR /blacklist-combined — Combined Blacklist (Deprecated)

Clé API
Obsolète. Utilisez plutôt GET /blacklist.

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

OBTENIR /blacklist-export/git — Git Export (Deprecated)

Clé API
Obsolète. Utilisez plutôt GET /blacklist?format=txt.

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

Dernière mise à jour : · Géré par ReportedIP

Axé sur la sécurité
Conforme au RGPD
Fabriqué en Allemagne
Retour à Docs