Todo listo para conectar.
Una API JSON para consultar la ubicación aproximada y el sistema autónomo de direcciones IPv4 e IPv6.
Primeros pasos
- Crea tu cuenta y verifica tu correo electrónico.
- Genera una clave en tu panel. Se muestra completa una sola vez.
- Envía la clave en la cabecera de cada petición.
curl 'https://iplumo.com/api/v1/lookup?ip=8.8.8.8' \
-H 'Authorization: Bearer YOUR_API_KEY'URL base: https://iplumo.com/api/v1. Todas las fechas de consumo del panel utilizan UTC.
Autenticación
Authorization: Bearer YOUR_API_KEYLa clave es obligatoria en Free, Pro y Business. Guárdala como variable de entorno en tu servidor. No se admiten claves en la URL. Una clave revocada deja de autorizar nuevas peticiones.
La prueba pública de la página de inicio permite consultas individuales sin cuenta y comparte el límite gratuito de la IP de origen. No sustituye a los endpoints autenticados.
Consultar una IP o dominio
ip es obligatorio. Acepta una IP pública o un dominio sin protocolo ni ruta. Para un dominio se consulta una de sus direcciones públicas; no todas sus direcciones ni su contenido web.
curl 'https://iplumo.com/api/v1/lookup?ip=example.com&fields=countryCode,city,as,security' -H 'Authorization: Bearer YOUR_API_KEY'{
"status": "success",
"query": "8.8.8.8",
"country": "Estados Unidos",
"countryCode": "US",
"as": "AS15169 GOOGLE",
"asname": "GOOGLE"
}Los campos sin información se devuelven como null. Los datos pueden cambiar y no constituyen una ubicación exacta.
Hasta 100 IP en un lote
curl -X POST 'https://iplumo.com/api/v1/batch' \
-H 'Authorization: Bearer YOUR_API_KEY' \
-H 'Content-Type: application/json' \
-d '["8.8.8.8", "1.1.1.1", "2606:4700:4700::1111"]'El cuerpo debe ser un array de entre 1 y 100 IP. También admite objetos con opciones por elemento:
[
"8.8.8.8",
{
"query": "1.1.1.1",
"fields": "country,as",
"lang": "en"
}
]Los resultados mantienen el orden de entrada. Los lotes aceptan IP, no dominios. Una IP inválida o privada produce un resultado con status: "fail", sin impedir las demás consultas. Un lote con formato incorrecto o más de 100 elementos devuelve HTTP 422.
[
{
"status": "success",
"query": "8.8.8.8",
"country": "Estados Unidos"
},
{
"status": "fail",
"query": "192.168.1.1",
"message": "La IP pertenece a un rango privado o reservado."
}
]Campos e idiomas
Usa ?fields=country,city,as&lang=es para reducir la respuesta. Idiomas disponibles: es y en; el predeterminado es inglés. Las opciones de cada elemento del lote tienen prioridad sobre las de la URL.
status y query siempre se incluyen. En las respuestas con datos también se conservan source, dataUpdatedAt, fetchedAt y attribution, incluso al seleccionar campos. En los errores se conserva también message.
| Campos | Descripción |
|---|---|
status, message, query | Estado, motivo del error e IP normalizada. |
continent, continentCode | Nombre y código del continente. |
country, countryCode | País y código ISO de dos letras. |
region, regionName, city, zip | Región, ciudad y código postal, cuando estén disponibles. |
lat, lon, accuracyRadius | Centro aproximado de la ubicación y radio de precisión en kilómetros. |
timezone | Zona horaria IANA. |
source, dataUpdatedAt, fetchedAt, attribution | Metadatos del registro. dataUpdatedAt indica la edición local; fetchedAt, la obtención del resultado. Las fechas desconocidas son null. |
district, offset, currency, isp, org | Distrito, desfase UTC en segundos, moneda, ISP y organización cuando están disponibles. null si falta información. |
security | proxy y hosting reflejan sus indicadores actuales. tor es true cuando aparece en la lista oficial de salidas Tor, comprobada cada hora; si no aparece o la lista tiene más de 24 horas, es null. vpn, datacenter y residential_proxy siguen en null sin evidencia específica. fieldSources identifica campos completados desde bases locales; torEvidence indica la fecha y fuente de la detección Tor. |
mobile, proxy, hosting | Indicadores de red. proxy agrupa proxy, VPN o Tor; no distingue entre ellos. null significa desconocido, no false. |
as, asname | Número de sistema autónomo y organización. No equivale necesariamente al ISP del usuario. |
La base de datos de IPLumo utiliza registros almacenados y actualizaciones periódicas, sin mezclar ubicaciones en una respuesta. Los resultados caducados se actualizan mediante una cola. Consulta fuentes y frecuencia. Esta API no incluye detección del DNS del visitante.
Límites y reintentos
| Plan | Requests/min | Batch/min | IPs/min | Keys |
|---|---|---|---|---|
| Free | 50 | 10 | 1000 | 1 |
| Pro | 1000 | 200 | 20000 | 5 |
| Business | 5000 | 1000 | 100000 | 15 |
Sin cuota mensual. Ventana móvil de 60 segundos. Las claves comparten el límite de la cuenta; también se aplica por clave e IP de origen dentro del plan. Un lote de N IP consume una petición, un turno batch y N IP. Los rechazos 429 no consumen capacidad adicional. Las peticiones admitidas pueden consumir capacidad aunque la consulta posterior falle.
| Cabecera | Significado |
|---|---|
X-RateLimit-Batch-Limit / -Remaining | Máximo y capacidad batch restante (solo POST batch). |
X-RateLimit-IP-Limit / -Remaining | Máximo y capacidad de IP procesadas restante. |
X-RateLimit-Reason | En 429: requests, batch o ips identifica el límite alcanzado. |
X-RateLimit-Limit | Máximo de peticiones en 60 segundos. |
X-RateLimit-Remaining / X-Rl | Peticiones restantes tras esta llamada. |
X-Ttl | Espera indicada en 429; en respuestas admitidas, 60 segundos hasta la caducidad de esta nueva petición. |
X-RateLimit-Reset | Instante Unix en segundos correspondiente a ese plazo. |
Retry-After | En HTTP 429, segundos que debes esperar antes de reintentar. |
El panel combina consumo histórico de consultas completadas con métricas nuevas por minuto y clave, incluyendo errores y rechazos 429 después de autenticar la clave. No vincula intentos sin clave válida a un usuario. Las métricas por minuto son aproximadas; usa las cabeceras de la API para el margen exacto de la ventana móvil.
Errores predecibles
| HTTP | Motivo |
|---|---|
200 | Petición procesada. En batch, revisa status por elemento: puede ser fail. |
404 | Ruta o recurso no encontrado; una IP sin datos utiliza status: fail. |
500 | Error interno inesperado de la aplicación o infraestructura. |
400 | JSON, campos, idioma o IP de origen incorrectos. |
401 | Clave ausente, inválida o revocada. |
403 | Clave pausada por plan, permiso u origen/IP no autorizado; o cuenta sin verificar. |
413 | Cuerpo demasiado grande (máximo 32 KiB en batch). |
415 | El cuerpo requiere Content-Type: application/json. |
422 | Parámetros o lote no válidos; IP privada en consulta individual. |
429 | Límite temporal alcanzado. Respeta Retry-After. |
503 | Servicio o datos temporalmente no disponibles. |
Ejemplo en JavaScript
// Run this code on your server, never in the browser.
const response = await fetch(
'https://iplumo.com/api/v1/batch?lang=es',
{
method: 'POST',
headers: {
Authorization: `Bearer ${process.env.IP_API_KEY}`,
'Content-Type': 'application/json',
},
body: JSON.stringify(['8.8.8.8', '1.1.1.1']),
}
);
if (!response.ok) {
const error = await response.json();
throw new Error(error.message);
}
const results = await response.json();Python
import os
import requests
r = requests.get(
"https://iplumo.com/api/v1/lookup",
params={"ip": "8.8.8.8", "fields": "countryCode,city,as,security"},
headers={"Authorization": "Bearer " + os.environ["IP_API_KEY"]},
timeout=15,
)
r.raise_for_status()
print(r.json())PHP
<?php
$ch = curl_init('https://iplumo.com/api/v1/batch');
curl_setopt_array($ch, [
CURLOPT_POST => true,
CURLOPT_RETURNTRANSFER => true,
CURLOPT_TIMEOUT => 15,
CURLOPT_HTTPHEADER => [
'Authorization: Bearer ' . getenv('IP_API_KEY'),
'Content-Type: application/json',
],
CURLOPT_POSTFIELDS => json_encode(['8.8.8.8', '1.1.1.1']),
]);
$body = curl_exec($ch);
$status = curl_getinfo($ch, CURLINFO_HTTP_CODE);
if ($body === false || $status !== 200) {
throw new RuntimeException('IPLumo request failed: ' . $status);
}
print_r(json_decode($body, true, 512, JSON_THROW_ON_ERROR));
curl_close($ch);Seguridad de las claves
Guarda las claves en el servidor. Puedes renombrarlas, regenerarlas, revocarlas y limitar sus permisos en tu panel. Todas las claves admiten hasta 30 IP o rangos CIDR de origen; Business añade orígenes web exactos (por ejemplo https://example.com). Una lista vacía no restringe. IPLumo obtiene la IP de la cabecera sobrescrita por su proxy de confianza y rechaza la petición antes de ejecutar la consulta si no coincide. Si defines orígenes, una petición sin Origin se rechaza. Origin puede falsificarse fuera de un navegador y no sustituye a la autenticación; esta opción no habilita CORS.
Para respuestas 429, espera el tiempo indicado en Retry-After. Ante errores 503, utiliza reintentos limitados con espera progresiva.