Cómo realizar solicitudes

Clasificar una dirección IP concreta como VPN, proxy, punto de salida de Tor, alojamiento/CDN o proxy residencial/móvil.

Punto final de la API

OBTENER https://vpn-proxy-detection.whoisxmlapi.com/api/v1/ip/185.220.101.1?apiKey=YOUR_API_KEY
La activación de tu cuenta tarda hasta un minuto tras el registro.

Colección Postman

Postman es una aplicación de escritorio y web que te permite realizar solicitudes a una API desde una interfaz gráfica de usuario . Recomendamos utilizar Postman con los puntos de conexión de las API de WhoisXML tanto a la hora de explorar las funcionalidades de las API, como a la hora de resolver problemas con tu aplicación.

La colección de Postman de la API WhoisXML está disponible en los siguientes enlaces:

La colección incluye un entorno preconfigurado. Tendrás que configurar la variable «api_key» para enviar cada solicitud. Obtén tu clave API personal en la página «Mis productos ». Si tienes alguna duda relacionada con la API, ponte en contacto con nosotros.

Parámetros de entrada

apiKey

Obligatorio. Obtén tu clave API personal en la página «Mis productos ».

ipAddress

Obligatorio. La dirección IPv4 que se va a clasificar. Se especifica como un segmento de la ruta de la URL de la solicitud; por ejemplo, /api/v1/ip/185.220.101.1.

Ejemplo de resultado

{
    "ip": "185.220.101.1",
    "network": "185.220.101.0\/24",
    "classification": "tor",
    "provider": null,
    "confidence": 1.0,
    "source": "port_scan",
    "detection_method": "port_scan",
    "first_seen": "2024-01-15T08:30:00Z",
    "last_seen": "2026-06-08T08:59:09Z",
    "observation_count": 127,
    "hits_days_pct": 47.78,
    "providers_num": 0,
    "confidence_decay": 0.6650,
    "freshness_class": "current",
    "is_vpn": false,
    "is_proxy": false,
    "is_tor": true,
    "is_relay": false,
    "is_hosting": false,
    "is_cdn": false,
    "is_residential_proxy": false,
    "is_residential_proxy_high_confidence": false,
    "is_residential_proxy_mobile": false,
    "is_open_proxy": false,
    "is_corporate_vpn": false,
    "risk_score": 100,
    "asn": 60729,
    "asn_org": "TORSERVERS-NET - Stiftung Erneuerbare Freiheit, DE",
    "cdn_operator": null,
    "asn_abuse": {
        "abuse_score": 88,
        "abuse_level": "high",
        "flagged_ratio": 0.62,
        "flagged_ip_count": 1240,
        "total_announced_ips": 2000
    },
    "metadata": {
        "raw_score": 100,
        "signals": { "open_ports": [9001, 9030] },
        "dns_enrichment": null,
        "tls_enrichment": null
    },
    "observed_location": null
}

Code: 200 OK.

Parámetros de salida

ip

La dirección IPv4 consultada, devuelta.

red

Cadena o nulo. El rango CIDR al que pertenece la dirección IP, si se conoce.

clasificación

Cadena. El tipo de detección de la IP.

Valores permitidos: vpn, corporate_vpn, proxy, hosting, cdn, tor, relay, residential_proxy, residential_proxy_likely, residential_proxy_mobile, datacenter_proxy, mobile_proxy, suspected_vpn, suspected_proxy, unknown.

proveedor

Cadena de caracteres o nulo. Proveedor asociado a la dirección IP (por ejemplo, una marca de VPN, una red de proxies residenciales o una empresa de alojamiento web). Nulo cuando no hay información disponible.

confianza

Número real comprendido entre [0, 1]. Nivel de confianza calibrado en la clasificación. Los valores más altos indican una evidencia más sólida.

fuente

Cadena. El método de detección que generó el registro (por ejemplo, mslm, port_scan, proxy_enum, netflow_analysis, asn_classification).

método_de_detección

Cadena. Igual que en el código fuente (campo heredado, que se mantiene por motivos de compatibilidad con versiones anteriores).

vista_por_primera_vez

Cadena (ISO-8601) o nulo. Fecha en la que se detectó por primera vez la dirección IP.

última_vez_que_se_le_vio

Cadena (ISO-8601) o nulo. Fecha y hora de la última vez que se detectó la dirección IP.

número_de_observaciones

Número entero. Número total de veces que se ha detectado la dirección IP (accesos).

porcentaje_de_días_con_visitas

Valor flotante o nulo. Persistencia: el porcentaje de días dentro del periodo de observación móvil de 90 días en los que se observó que la IP era un proxy activo o una salida de VPN (días de observación distintos ÷ 90 × 100).

High (>50) indicates a consistently active exit; low (<5) indicates sporadic or one-shot activity. Null when the result comes from a network-range detection with no per-IP observation history.

número_de_proveedores

Número entero. Número de redes proxy o VPN distintas a través de las cuales se ha observado que la dirección IP actúa como punto de salida. Un valor igual o superior a 2 indica que la dirección IP se comparte o se revende a través de varias redes comerciales, lo que constituye una señal clara de que se trata de un proxy. El valor 0 significa que no hay historial de enumeración por dirección IP (solo detección a nivel de rango).

confianza_declive

Valor entre [0, 1,5]. Puntuación compuesta de solidez de la evidencia: factor de actualidad × consistencia × refuerzo por múltiples proveedores. Los valores superiores a 1,0 indican IP activos a diario y con múltiples proveedores; 0,0 significa que nunca se ha observado a nivel de punto. Para obtener una puntuación normalizada entre 0 y 1, utilice min(decaimiento_de_confianza, 1,0).

clase_de_frescura

Cadena. El grupo de antigüedad de las observaciones se calcula a partir de «last_seen», por lo que puedes filtrar sin tener que hacer cálculos con fechas.

Valores permitidos: actual (observado en el último día), reciente (la última semana), obsoleto (los últimos 90 días), congelado (hace más de 90 días o nunca se ha observado).

is_vpn

Boolean. True if the classification is in {vpn, vpn_concentrator, corporate_vpn, commercial_vpn, vpn_hosting} (confirmed VPN endpoints). Does not include tor, relay, suspected_vpn, or vpn_suspecttor/relay have dedicated booleans; suspected_vpn/vpn_suspect are corroboration-only signals that do not set is_vpn. This asymmetry with is_proxy is deliberate: suspected_proxy does set is_proxy, but suspected_vpn/vpn_suspect never set is_vpn.

is_proxy

Booleano. Es verdadero si la clasificación está en {proxy, datacenter_proxy, mobile_proxy, suspected_proxy}. No incluye los proxies residenciales (véase is_residential_proxy). Para buscar cualquier tipo de proxy, combina is_proxy O is_residential_proxy.

is_tor

Booleano. Es «True» si la dirección IP es un nodo de salida de Tor (clasificación «tor»).

is_relay

Booleano. Verdadero si la clasificación es «relay »: un servicio de retransmisión que preserva la privacidad (por ejemplo, Apple Private Relay). Se diferencia de «is_vpn»: los servicios de retransmisión dirigen el tráfico de los usuarios a través de una salida gestionada por el proveedor, sin que el usuario pueda seleccionar el punto final.

is_hosting

Booleano. Verdadero si la dirección IP pertenece a un centro de datos o a un proveedor de alojamiento web.

is_cdn

Booleano. Es «True» si la dirección IP pertenece a una red de distribución de contenidos.

is_residential_proxy

Boolean. True if the classification is in {residential_proxy, residential_proxy_likely, residential_proxy_mobile}. Mutually exclusive with is_proxy; use the more specific booleans below to filter further.

is_proxy_residencial_alta_fiabilidad

Booleano. Es verdadero si la clasificación es «residential_proxy» (el nivel de precisión ≥85 %). Subconjunto de «is_residential_proxy».

is_proxy_residencial_móvil

Booleano. Verdadero si «classification» == «residential_proxy_mobile »: se han detectado direcciones IP de operadores de telefonía móvil como proxies. Subconjunto de «is_residential_proxy».

is_open_proxy

Booleano. Es «True» cuando la dirección IP aparece en una lista pública de proxies abiertos. Se diferencia de «is_proxy»: todo proxy abierto es también un proxy, pero la mayoría de los proxies no figuran en las listas públicas.

is_corporate_vpn

Booleano. Es «True» si la IP corresponde a una VPN de tipo dispositivo (Fortinet, Pulse Secure, Cisco AnyConnect, etc.). Subindicador de «is_vpn».

puntuación_de_riesgo

Número entero comprendido entre [0, 100]. Se calcula como «confianza × 100», con un aumento de +10 para los tipos de clasificación de alto riesgo.

asn

Número entero o nulo. Número del sistema autónomo que anuncia la dirección IP.

asn_org

Cadena de caracteres o valor nulo. Nombre de la organización registrada para el ASN.

cdn_operator

Cadena o nulo. Marca normalizada del operador de CDN (en minúsculas), p. ej., akamai, fastly, cloudflare, aws_cloudfront. Solo puede ser distinto de nulo cuando classification == cdn.

asn_abuse

Objeto o nulo. Puntuación de abusos a nivel de ASN. Disponible en todos los planes; los planes premium (Growth+) incluyen el desglose completo:

abuse_score — número entero de 0 a 100, nivel de abuso para este ASN (todos los niveles).

abuse_level — cadena: bajo, moderado, alto, crítico (todos los niveles).

flagged_ratio — número real entre 0,0 y 1,0; proporción de direcciones IP marcadas en el ASN (crecimiento+).

flagged_ip_count — entero, número de direcciones IP marcadas (crecimiento positivo).

total_announced_ips — entero; total de direcciones IP anunciadas por este ASN (crecimiento+).

metadatos

Objeto. Señales de detección adicionales y datos de enriquecimiento (todas las claves son opcionales):

raw_score — número, el índice de confianza numérico interno (0–100).

señales — objeto, señales de detección (patrones de puertos, protocolos, etc.).

dns_enrichment — objeto, registros PTR de DNS e historial de RDNS.

tls_enrichment — objeto, análisis de certificados TLS.

ubicación_observada

Objeto o nulo. Datos geográficos, solo en los niveles premium (Growth+); nulo cuando no hay datos de ubicación observados disponibles. Claves:

exit_country — cadena o nulo; código de país ISO 3166-1 alfa-2 de la IP de salida.

user_countries — matriz de cadenas o valor nulo; países en los que se han detectado usuarios con esta dirección IP.

user_country_count — número entero o nulo; número de países distintos de los usuarios.

latitud_observada / longitud_observada — número o nulo, coordenadas del punto de salida observado.

observed_countries — matriz de cadenas de caracteres; países en los que se ha observado este concentrador.

observation_readings — cadena o nulo, metadatos sobre las observaciones.

Acceso gratuito

Tras registrarte, obtienes automáticamente un plan de suscripción gratuito limitado a 10 consultas.

Límites de frecuencia

Las solicitudes a la API están sujetas a un límite de frecuencia por clave de API en una ventana móvil de 60 segundos. El límite depende de tu plan de suscripción:

Gratis

2 solicitudes por minuto

Entrante

30 solicitudes por minuto

A favor

100 solicitudes/min

Escala

250 solicitudes/min

Business

500 solicitudes/min

Enterprise

Los créditos mensuales para consultas son independientes y se indican en la página de tarifas.

Si superas tu límite, la API devuelve un código de estado HTTP 429 con la información de error estándar y los encabezados «Retry-After» y «X-RateLimit-Reset»; espera «Retry-After» segundos antes de volver a intentarlo.

{"error": {"code": "rate_limited", ...}}

Esta API también está disponible con un equilibrador de carga específico y un punto final premium para permitir consultas más rápidas como parte de nuestros servicios de API Premium y paquetes de API Enterprise.