Ir al contenido principalIr al pie de página

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.

Cuotas diarias por nivel: Gratis 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.
URL base https://reportedip.de/wp-json/reportedip/v2/
Autenticación: Los puntos finales autenticados requieren una clave API enviada a través del X-Key Encabezado. Los puntos de acceso públicos no requieren autenticación, pero están sujetos a límites de velocidad.
Cómo se contabilizan las cuotas (desde la versión 2.5.1): Cada terminal cobra como mucho uno contador diario, nunca ambos.
  • Comprobar cuota: GET /check (+1) y POST /bulk-check (+N, uno por cada dirección IP válida).
  • Cuota de informes: POST /report (+1) y POST /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 un X-Key encabezado 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.

OBTENER /check-public
Público

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

Límite público: 100 solicitudes al día por dirección IP de origen, repartidas entre todos los puntos finales no autenticados. Envía un encabezado X-Key para pasar a la ruta de cuota de la clave API.

Parámetros

Nombre Tipo Obligatorio Por defecto Descripción
ip cadena 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

rizo
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();

Respuesta

200 De acuerdo
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"
  }
}
OBTENER /stats-public
Público

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.

Límite público: 100 solicitudes al día por dirección IP de origen, repartidas entre todos los puntos finales no autenticados.

Ejemplos

rizo
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();

Respuesta

200 De acuerdo
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}
    ]
  }
}
OBTENER /search-public
Público

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.

Límite público: 100 solicitudes al día por dirección IP de origen, repartidas entre todos los puntos finales no autenticados. Los resultados tienen un límite de 50 entradas por llamada.

Parámetros

Nombre Tipo Obligatorio Por defecto Descripción
q cadena 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

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

Respuesta

200 De acuerdo
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"}
    ]
  }
}
OBTENER /categories
Público

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.

Límite público: 100 solicitudes al día por dirección IP de origen, repartidas entre todos los puntos finales no autenticados. Envía un encabezado X-Key para eludir el límite público (no hay cuota por llamada cuando se está autenticado).

Ejemplos

rizo
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();

Respuesta

200 De acuerdo
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
    }
  ]
}
OBTENER /attack-map-data
Público

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.

Límite público: 100 solicitudes al día por dirección IP de origen, repartidas entre todos los puntos finales no autenticados. La respuesta se almacena en caché en el servidor durante 30 minutos, por lo que un cliente que realice consultas periódicas debe respetar ese intervalo.

Ejemplos

rizo
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();

Respuesta

200 De acuerdo
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
  }
}

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.

OBTENER /check
Clave API

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

rizo
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();

Respuesta

200 De acuerdo
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
    }
  }
}
PUBLICAR /report
Clave API

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 Dirección IPv4 o IPv6 que se debe comunicar
categorías matriz 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

rizo
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();

Respuesta

200 De acuerdo
json
{
  "meta": {
    "success": true,
    "code": 200,
    "message": "Report submitted successfully"
  },
  "data": {
    "reportId": 58234,
    "ip": "1.2.3.4",
    "categories": [18, 21],
    "abuseConfidencePercentage": 89
  }
}
OBTENER /verify-key
Clave API

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

rizo
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();

Respuesta

200 De acuerdo
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
    }
  }
}
OBTENER /statistics
Autenticado

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

rizo
curl -H "X-Key: YOUR_KEY" "https://reportedip.de/wp-json/reportedip/v2/statistics?period=today"

Respuesta

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

OBTENER /blacklist
Clave API

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

rizo
# 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"
php
$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);
Python
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()
JavaScript
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

200 De acuerdo
json
{
  "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]
      }
    ]
  }
}
OBTENER /blacklist-categories
Público

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

rizo
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();

Respuesta

200 De acuerdo
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"
    }
  ]
}
OBTENER /blacklist-stats
Público

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

rizo
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();

Respuesta

200 De acuerdo
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}
    ]
  }
}

Terminales avanzadas

Puntos de conexión avanzados para usuarios avanzados. Requieren claves de API de los planes Professional o Enterprise.

OBTENER /reports/{ip}
Profesional+

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

rizo
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();

Respuesta

200 De acuerdo
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
  }
}
PUBLICAR /bulk-check
Profesional+

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 Conjunto de direcciones IPv4/IPv6 (máximo 1.000)

Ejemplos

rizo
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();

Respuesta

200 De acuerdo
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
  }
}
PUBLICAR /bulk-report
Empresa

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 Datos en formato CSV con las columnas: IP, Categorías, Comentario (un informe por línea)

Ejemplos

rizo
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();

Respuesta

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

Cuota mensual incluida: Gratis / Colaborador 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).
Protección de reembolso — 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.
OBTENER /relay-quota
PRO / Business Empresa

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

rizo
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();

Respuesta

200 De acuerdo
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
}
PUBLICAR /relay-mail
PRO / Business Empresa

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 Dirección de correo electrónico del destinatario
tema cadena Asunto del correo electrónico
html_body cadena 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

rizo
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
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(
            'to'        => '[email protected]',
            'subject'   => 'Your 2FA code',
            'html_body' => '<p>Code: 123456</p>',
        ) ),
    )
);
Python
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>',
    },
)
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({
            to: '[email protected]',
            subject: 'Your 2FA code',
            html_body: '<p>Code: 123456</p>',
        }),
    }
);

Respuesta

200 De acuerdo
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"
  }
}
PUBLICAR /relay-sms
PRO / Business Empresa

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 Número de teléfono del destinatario en formato E.164 (p. ej., +49170...)
código de plantilla cadena Server-side template id, e.g. <code>2fa_login</code>
variables objeto 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

rizo
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
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(
            'to'            => '+491701234567',
            'template_code' => '2fa_login',
            '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={
        'to': '+491701234567',
        'template_code': '2fa_login',
        '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({
            to: '+491701234567',
            template_code: '2fa_login',
            vars: { code: '123456', expiry_min: 5, lang: 'de' },
        }),
    }
);

Respuesta

200 De acuerdo
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"
  }
}

Respuestas de error para los puntos finales de retransmisión

EstadoCódigoSignificado
401missing_api_key / invalid_api_keyEl X-Key Falta el encabezado, está mal formado o hace referencia a una clave desactivada.
403tier_forbiddenEl nivel de la persona que llama (Gratuito / Colaborador) no cumple los requisitos para el servicio de retransmisión.
402cap_reached_buy_bundleSe 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.
402monthly_cap_reachedSe ha alcanzado el límite mensual incluido en un nivel sin derecho a paquete.
429recipient_backoff / site_daily_capLimitador 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.

OBTENER /blacklist-detailed
Clave API
Obsoleto. Utiliza GET /blacklist en su lugar.

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

OBTENER /blacklist-combined
Clave API
Obsoleto. Utiliza en su lugar GET /blacklist?source=all.

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

OBTENER /blacklist-export/git
Clave API
Obsoleto. Utiliza en su lugar GET /blacklist?format=txt.

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

Centrado en la seguridad
Conforme al RGPD
Fabricado en Alemania
Volver a la documentación