Referencia de la API
Referencia completa de todos los puntos finales de la API ReportedIP v2 ReportedIP , con ejemplos de código en cURL, PHP, Python y JavaScript.
1,000 checks · 50 reports ·
Colaborador 5,000 / 200 ·
Profesional 25,000 / 1,000 ·
Business 100,000 / 5,000 por licencia ·
Empresa unlimited.
Business varían en función del número de licencias (x2–x20); por ejemplo, x5 = 500,000 / 25,000.
Ver Precios para ver la comparación completa de los niveles.
https://reportedip.de/wp-json/reportedip/v2/
X-Key Encabezado. Los puntos de acceso públicos no requieren autenticación, pero están sujetos a límites de velocidad.
- Comprobar cuota:
GET /check(+1) yPOST /bulk-check(+N, uno por cada dirección IP válida). - Cuota de informes:
POST /report(+1) yPOST /bulk-report(+N, uno por cada informe presentado). - Ninguna de las dos cuotas:
GET /blacklist,/blacklist-categories,/blacklist-stats,/reports/{ip},/trends,/statistics,/verify-key— Se trata de funciones con restricciones por nivel, no de llamadas con límite de tiempo. - Límite de direcciones IP públicas: 100 solicitudes al día por dirección IP de origen, repartidas entre todas las llamadas sin autenticar (
/check-public,/stats-public,/search-public,/categories,/attack-map-data). Envía unX-Keyencabezado para cambiar a la ruta de cuota de la clave API.
Puntos de acceso públicos
Estos puntos de extremo están disponibles sin necesidad de autenticación. El número de solicitudes está limitado a 100 al día por dirección IP.
/check-public
Comprueba la reputación de una dirección IP sin necesidad de autenticación. Devuelve la puntuación de fiabilidad de los informes de abuso, el número total de informes, las categorías de amenazas y la fecha del último informe. Se contabiliza como +1 en el límite diario de la API pública por dirección IP (compartido con los demás puntos de acceso sin autenticación).
Parámetros
| Nombre | Tipo | Obligatorio | Por defecto | Descripción |
|---|---|---|---|---|
| ip | cadena | Sí | — | Dirección IPv4 o IPv6 que se va a comprobar |
| detallado | booleano | No | falso | Incluya en la respuesta un desglose detallado de los niveles de confianza |
Ejemplos
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();
Respuesta
{
"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
Obtén estadísticas públicas ampliadas con desgloses por categorías, los principales tipos de amenazas y datos históricos. Se contabiliza como +1 en el límite diario de la API pública por IP.
Ejemplos
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();
Respuesta
{
"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
Busca en la base de datos de reputación pública por parte de la dirección IP, código de país o ASN. Resulta útil para la barra de búsqueda pública de reportedip.de. Se cuenta como +1 dentro del límite diario de la API pública por dirección IP.
Parámetros
| Nombre | Tipo | Obligatorio | Por defecto | Descripción |
|---|---|---|---|---|
| q | cadena | Sí | — | Consulta de búsqueda: dirección IP completa o parcial, código de país (p. ej., «CN») o ASN. |
| límite | int | No | 20 | Número de resultados (máx. 50). |
Ejemplos
curl "https://reportedip.de/wp-json/reportedip/v2/search-public?q=1.2.3"
Respuesta
{
"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
Obtén la lista de las 30 categorías de amenazas predefinidas que se utilizan para clasificar los informes de IP. Cada categoría incluye su ID, nombre, descripción y nivel de gravedad. Si se invoca sin una clave API, cuenta como +1 para el límite diario de la API pública por IP; si se incluye el encabezado X-Key, no cuenta para ninguna cuota diaria.
Ejemplos
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();
Respuesta
{
"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
Conjunto de datos agregados que alimenta el mapa de ataques en tiempo real de reportedip.de. Proporciona el recuento de informes por país (los 50 principales), el conjunto de conexiones de ataque entre países en las últimas 24 horas (los 30 principales, excluidos los pares del mismo país) y un contador de registros de hoy. Almacenado en caché del lado del servidor durante 30 minutos: las llamadas repetidas dentro de ese intervalo acceden a la caché. Cuenta como +1 para el límite diario de la API pública por IP.
Ejemplos
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();
Respuesta
{
"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
}
}
Puntos finales autenticados
Estos puntos finales requieren una clave API válida enviada a través del X-Key encabezado. Obtén tu clave API desde el Panel de control.
/check
Realiza una comprobación completa de la reputación de la IP con datos detallados. Proporciona información exhaustiva sobre amenazas, incluyendo un desglose del nivel de confianza, el historial de informes e información sobre el proveedor de servicios de Internet (ISP). Se descuenta +1 de tu cupo diario de comprobaciones.
Parámetros
| Nombre | Tipo | Obligatorio | Por defecto | Descripción |
|---|---|---|---|---|
| ip | cadena | Sí | — | Dirección IPv4 o IPv6 que se va a comprobar |
| detallado | booleano | No | falso | Incluir un desglose detallado de la puntuación de confianza |
| incluir informes | booleano | No | falso | Incluir los detalles del informe individual en la respuesta |
Ejemplos
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();
Respuesta
{
"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
Denuncia una dirección IP maliciosa a la comunidad. La denuncia se sumará a los datos existentes para actualizar la puntuación de riesgo de abuso de la IP. Las denuncias realizadas por el mismo usuario sobre la misma IP en un plazo de 5 minutos se agrupan automáticamente. Solo se descontará 1 de tu cupo diario de denuncias, nunca del cupo de comprobaciones.
Parámetros
| Nombre | Tipo | Obligatorio | Por defecto | Descripción |
|---|---|---|---|---|
| ip | cadena | Sí | — | Dirección IPv4 o IPv6 que se debe comunicar |
| categorías | matriz | Sí | — | Matriz de identificadores de categorías de amenazas (p. ej., [18, 21]) |
| comentario | cadena | No | — | Comentario opcional en el que se describe la actividad maliciosa observada |
Ejemplos
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();
Respuesta
{
"meta": {
"success": true,
"code": 200,
"message": "Report submitted successfully"
},
"data": {
"reportId": 58234,
"ip": "1.2.3.4",
"categories": [18, 21],
"abuseConfidencePercentage": 89
}
}
/verify-key
Comprueba tu clave API y consulta los detalles de la cuenta, como el rol de usuario, los permisos, los límites de frecuencia y las estadísticas de uso actuales. No se descuenta de ningún límite diario.
Ejemplos
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();
Respuesta
{
"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
Estadísticas de uso autenticadas por usuario: llamadas a la API de hoy, informes de hoy, total de informes, informes verificados, puntuación de reputación actual, además del uso de cuotas específicas de cada nivel. No se descuenta de ninguna cuota diaria.
Parámetros
| Nombre | Tipo | Obligatorio | Por defecto | Descripción |
|---|---|---|---|---|
| período | cadena | No | hoy | One of <code>today</code>, <code>week</code>, <code>month</code>, <code>all</code>. |
Ejemplos
curl -H "X-Key: YOUR_KEY" "https://reportedip.de/wp-json/reportedip/v2/statistics?period=today"
Respuesta
{
"meta": {"success": true, "code": 200},
"data": {
"apiCallsToday": 1247,
"reportsToday": 38,
"totalReports": 4271,
"verifiedReports": 3892,
"reputationScore": 87,
"tier": "professional",
"limits": {"checks": 25000, "reports": 1000}
}
}
Puntos finales de la lista negra
Accede a la lista negra de direcciones IP gestionada por la comunidad, cuya puntuación se calcula automáticamente a partir de informes en tiempo real. Disponible en formatos JSON, texto sin formato y CSV para su integración en cortafuegos.
/blacklist
Obtén la lista negra de direcciones IP en diversos formatos. Permite filtrar por nivel de confianza, origen y categoría. Ideal para la integración con cortafuegos y el bloqueo automático. No cuenta para ninguna cuota diaria: función restringida por nivel (a partir del plan Contributor).
Parámetros
| Nombre | Tipo | Obligatorio | Por defecto | Descripción |
|---|---|---|---|---|
| formato | cadena | No | json | Formato de respuesta: json, txt o csv |
| fuente | cadena | No | comunidad | Fuente de la lista negra: comunidad (predeterminada) — solo hay una fuente disponible; el parámetro «source» está reservado para uso futuro |
| confianza_mínima | entero | No | 75 | Porcentaje mínimo de confianza en la detección de abusos (0-100) |
| categoría | entero | No | — | Filtrar por ID de categoría de amenaza |
| límite | entero | No | 10000 | Número máximo de entradas que se deben devolver |
Ejemplos
# 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();
Respuesta
{
"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
Recupera todas las categorías de listas negras disponibles que se utilizan para clasificar las entradas. No se descuenta de ningún límite diario.
Ejemplos
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();
Respuesta
{
"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
Obtiene estadísticas sobre la lista negra, incluyendo recuentos totales y distribución por nivel de confianza y categoría. No cuenta para ninguna cuota diaria.
Ejemplos
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();
Respuesta
{
"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}
]
}
}
Terminales avanzadas
Puntos de conexión avanzados para usuarios avanzados. Requieren claves de API de los planes Professional o Enterprise.
/reports/{ip}
Recupera todos los informes individuales correspondientes a una dirección IP específica. Devuelve los detalles de los informes paginados, incluyendo la información del autor, las categorías y las marcas de tiempo. No se contabiliza en ninguna cuota diaria: función sujeta a restricciones por nivel (Professional y superiores).
Parámetros
| Nombre | Tipo | Obligatorio | Por defecto | Descripción |
|---|---|---|---|---|
| ip | cadena | Sí | — | Dirección IPv4 o IPv6 (en la ruta de la URL) |
| página | entero | No | 1 | Número de página para la paginación |
| por página | entero | No | 25 | Informes por página |
Ejemplos
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();
Respuesta
{
"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
Obtén datos de tendencias y series temporales que muestran los patrones de ataque durante un periodo de tiempo determinado. Útil para paneles de control y análisis. No cuenta para ninguna cuota diaria: función sujeta a restricciones por nivel (Professional y superiores).
Parámetros
| Nombre | Tipo | Obligatorio | Por defecto | Descripción |
|---|---|---|---|---|
| período | cadena | No | 7d | Periodo de tiempo: 24 horas, 7 días o 30 días |
| categoría | entero | No | — | Filtrar por ID de categoría de amenaza |
Ejemplos
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();
Respuesta
{
"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
Comprueba la reputación de varias direcciones IP en una sola solicitud. Admite hasta 1.000 direcciones IP por solicitud. Se deducen +N de tu cuota diaria de comprobaciones, donde N es el número de direcciones IP válidas de la solicitud. Si la solicitud superara la cuota restante, el servidor devuelve un código HTTP 429 y el contador no se incrementa.
Parámetros
| Nombre | Tipo | Obligatorio | Por defecto | Descripción |
|---|---|---|---|---|
| ips | matriz | Sí | — | Conjunto de direcciones IPv4/IPv6 (máximo 1.000) |
Ejemplos
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();
Respuesta
{
"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
Envía varios informes de IP en una sola solicitud utilizando datos en formato CSV. Diseñado para sistemas automatizados y honeypots que necesitan notificar grandes volúmenes de actividad maliciosa. Se descontarán +N de tu cuota diaria de informes, donde N es el número de informes enviados. Nunca se descuenta de la cuota de comprobación.
Parámetros
| Nombre | Tipo | Obligatorio | Por defecto | Descripción |
|---|---|---|---|---|
| csv | cadena | Sí | — | Datos en formato CSV con las columnas: IP, Categorías, Comentario (un informe por línea) |
Ejemplos
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();
Respuesta
{
"meta": {
"success": true,
"code": 200,
"message": "Bulk report processed"
},
"data": {
"success_count": 3,
"error_count": 0,
"errors": []
}
}
Puntos finales de retransmisión de 2FA
Gestión de la entrega de la autenticación de dos factores (2FA) para el plugin de WordPress ReportedIP . Los planes PRO+ pueden poner en cola los correos electrónicos y SMS de autenticación a través de este servidor de retransmisión; el servicio consume primero la cuota mensual incluida y, una vez alcanzado el límite de la cuota, recurre al saldo del paquete de prepago.
not eligible ·
Profesional 500 mails · 25 SMS ·
Business 2,500 mails · 75 SMS ·
Empresa fair-use unlimited.
Los planes PRO y Business recargar mediante paquetes de prepago
(hive_mail_bundle_1000/5000/25000, hive_sms_bundle_50/200/500).
bundle_balance está firmado:
un reembolso de Stripe (charge.refunded) en un paquete ya consumido
reduce el saldo y puede hacer que este caiga por debajo de cero. Mientras el saldo sea
negativo y la cuota incluida se haya agotado, los envíos fallarán con un error HTTP
402 cap_reached_buy_bundle hasta que se adquiera un nuevo paquete.
/relay-quota
Devuelve la cuota mensual incluida más el saldo del paquete prepagado tanto para el reenvío de correo electrónico como de SMS. El panel de control del complemento Hive lo utiliza para mostrar las barras de uso y las indicaciones sobre el paquete.
Ejemplos
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();
Respuesta
{
"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
Envía un correo con autenticación de dos factores (2FA) transaccional a través del servidor de retransmisión verificado mediante SPF/DKIM/DMARC. Consume una ranura de la cuota mensual de correo incluida; una vez agotada, consume un crédito de `mail_bundle_balance`. Devuelve un código de estado HTTP 402 cuando ambos están vacíos.
Parámetros
| Nombre | Tipo | Obligatorio | Por defecto | Descripción |
|---|---|---|---|---|
| a | cadena | Sí | — | Dirección de correo electrónico del destinatario |
| tema | cadena | Sí | — | Asunto del correo electrónico |
| html_body | cadena | Sí | — | Cuerpo del correo en HTML |
| cuerpo_sin_formato | cadena | No | — | Cuerpo de reserva opcional en texto sin formato |
| url_del_sitio | cadena | No | — | URL del sitio de origen (utilizada para los límites diarios por sitio y los registros de auditoría) |
Ejemplos
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>',
}),
}
);
Respuesta
{
"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.
Parámetros
| Nombre | Tipo | Obligatorio | Por defecto | Descripción |
|---|---|---|---|---|
| a | cadena | Sí | — | Número de teléfono del destinatario en formato E.164 (p. ej., +49170...) |
| código de plantilla | cadena | Sí | — | Server-side template id, e.g. <code>2fa_login</code> |
| variables | objeto | Sí | — | Template variables: <code>{ code, expiry_min, lang? }</code> |
| url_del_sitio | cadena | No | — | URL del sitio de origen (utilizada para los límites diarios por sitio y los registros de auditoría) |
Ejemplos
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' },
}),
}
);
Respuesta
{
"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"
}
}
Respuestas de error para los puntos finales de retransmisión
| Estado | Código | Significado |
|---|---|---|
401 | missing_api_key / invalid_api_key | El X-Key Falta el encabezado, está mal formado o hace referencia a una clave desactivada. |
403 | tier_forbidden | El nivel de la persona que llama (Gratuito / Colaborador) no cumple los requisitos para el servicio de retransmisión. |
402 | cap_reached_buy_bundle | Se ha alcanzado el límite mensual incluido y el saldo del paquete de prepago está agotado o es negativo tras un reembolso. Compra un paquete en el panel de control para reanudar el servicio. |
402 | monthly_cap_reached | Se ha alcanzado el límite mensual incluido en un nivel sin derecho a paquete. |
429 | recipient_backoff / site_daily_cap | Limitador antifraude. El retry-after El encabezado indica cuánto tiempo hay que esperar. |
Puntos de conexión obsoletos
Estos puntos finales están obsoletos y se eliminarán en una versión futura. Le recomendamos que migre a las alternativas recomendadas.
/blacklist-detailed
Anteriormente devolvía una lista negra detallada. Se mantiene activa por motivos de compatibilidad con versiones anteriores de Hive. No cuenta para ninguna cuota diaria (desde la versión 2.5.1; antes se contabilizaba como una comprobación).
/blacklist-combined
Anteriormente devolvía una lista negra combinada de todas las fuentes. Se ha mantenido para garantizar la compatibilidad con versiones anteriores de Hive. No cuenta para ninguna cuota diaria (desde la versión 2.5.1).
/blacklist-export/git
Anteriormente, la lista negra se exportaba en formato de texto sin formato para su integración con el repositorio de Git. Se ha mantenido para garantizar la compatibilidad con versiones anteriores. No cuenta para ninguna cuota diaria (desde la versión 2.5.1).