API de geolocalización IP
Consulta direcciones públicas IPv4 e IPv6 con datos locales de geolocalización y ASN. Empieza con 10.000 consultas IP gratis al mes.
Inicio rápido
- Crea una cuenta independiente de ip.uk.app y verifica tu correo electrónico.
- Abre Claves en tu panel de control y crea una clave. Cópiala de inmediato: solo se muestra una vez.
- Envía la clave desde tu servidor en la cabecera Authorization.
curl 'https://ip.uk.app/api/v1/lookup?ip=1.1.1.1' \
-H 'Authorization: Bearer YOUR_API_KEY'
Nunca incluyas tu clave API en una URL, código público del navegador, capturas de pantalla o registros compartidos. Guárdala en una variable de entorno de tu servidor.
Endpoints
| Método HTTP | Endpoint | Función |
|---|---|---|
| GET | /api/v1/lookup?ip=1.1.1.1 | Consultar una dirección IPv4 o IPv6 pública. |
| GET | /api/v1/me | Consultar la IP pública desde la que se realiza la solicitud. |
| POST | /api/v1/bulk | Consultar entre 1 y 50 direcciones IP por solicitud. |
Añade el parámetro opcional lang para el idioma de los nombres: en, uk, es, pt, de o fr. Si falta una traducción, se usa el nombre en inglés.
curl 'https://ip.uk.app/api/v1/bulk?lang=uk' \
-H 'Authorization: Bearer YOUR_API_KEY' \
-H 'Content-Type: application/json' \
--data '{"ips":["1.1.1.1","2001:4860:4860::8888"]}'Formato de respuesta
El campo data contiene un objeto para lookup y me, y un array para bulk. Los valores no disponibles son null. Los valores del ejemplo ilustran la estructura y no garantizan una ubicación real.
{
"data": {
"ip": "1.1.1.1",
"version": 4,
"country": {"code": "AU", "name": "Australia"},
"region": "New South Wales",
"city": "Sydney",
"location": {"latitude": -33.8688, "longitude": 151.209, "accuracy": "approximate"},
"asn": {"number": 13335, "organization": "Cloudflare, Inc.", "prefix_length": 24},
"source": {"name": "DB-IP Lite", "url": "https://db-ip.com/", "license": "CC BY 4.0", "updated": "2026-10"}
}
}Cuota gratuita y límites
- 10.000 consultas IP correctas por cuenta y mes natural. La cuota se renueva a las 00:00 UTC del primer día del mes.
- 60 consultas IP por minuto, compartidas entre todas tus claves.
- Hasta cinco claves activas, con una validez de 30, 90 o 365 días.
- Cada dirección consultada correctamente consume un crédito, incluidas las direcciones repetidas en un lote. Un lote de 50 consume 50 créditos.
- Los datos no válidos y las consultas fallidas no consumen créditos mensuales. Los fallos temporales pueden contar para el límite por minuto.
- Antes de procesar el lote completo, se validan los datos y se comprueba la cuota disponible. No se cobran créditos por un lote parcialmente procesado.
- Otros límites de red protegen la disponibilidad del servicio.
Las respuestas incluyen X-Quota-Limit, X-Quota-Remaining y X-Quota-Reset. La fecha de renovación es una marca de tiempo Unix. X-Request-ID identifica una solicitud autenticada. Las respuestas 429 incluyen Retry-After con la espera en segundos.
Los planes mensuales de pago están disponibles en tu panel. Las cuotas siguen el periodo de suscripción. Sin cargos automáticos por exceso.
Gestión de errores
{"error":{"code":"invalid_ip","message":"Provide a public IPv4 or IPv6 address."}}| Estado | Significado |
|---|---|
| 400 | IP, idioma o cuerpo de la solicitud no válidos. No se admiten IP privadas ni reservadas. |
| 401 | Clave API ausente, no válida, caducada o revocada, o cuenta inactiva. |
| 404 | Ruta de API desconocida. |
| 405 / 415 | Método HTTP o tipo de contenido incorrectos. |
| 429 | Se ha alcanzado el límite por minuto, el límite de red o la cuota mensual. Respeta Retry-After. |
| 503 | Servicio temporalmente no disponible. Reintenta con esperas que aumenten exponencialmente hasta un máximo definido. |
JavaScript · en el servidor
const response = await fetch(
'https://ip.uk.app/api/v1/lookup?ip=1.1.1.1',
{ headers: { Authorization: `Bearer ${process.env.IP_API_KEY}` } }
);
const result = await response.json();
if (!response.ok) throw new Error(result.error.message);
console.log(result.data);Python
import json, os
from urllib.request import Request, urlopen
from urllib.error import HTTPError
request = Request('https://ip.uk.app/api/v1/lookup?ip=1.1.1.1',
headers={'Authorization': 'Bearer ' + os.environ['IP_API_KEY']})
try:
with urlopen(request, timeout=15) as response:
print(json.load(response)['data'])
except HTTPError as error:
print(error.code, json.load(error))PHP
$ch = curl_init('https://ip.uk.app/api/v1/lookup?ip=1.1.1.1');
curl_setopt_array($ch, [
CURLOPT_RETURNTRANSFER => true,
CURLOPT_TIMEOUT => 15,
CURLOPT_HTTPHEADER => ['Authorization: Bearer '.getenv('IP_API_KEY')],
]);
$body = curl_exec($ch);
if ($body === false) { throw new RuntimeException(curl_error($ch)); }
$status = curl_getinfo($ch, CURLINFO_RESPONSE_CODE);
curl_close($ch);
$result = json_decode($body, true, 512, JSON_THROW_ON_ERROR);
if ($status !== 200) { throw new RuntimeException($result['error']['message']); }Calidad de datos y atribución
La geolocalización es aproximada. Una IP puede corresponder a una puerta de enlace o un centro de datos, especialmente en redes móviles, anycast, VPN y proxies. Las coordenadas no indican la ubicación exacta de una persona. La organización del ASN identifica al operador de red y no certifica que sea un proveedor residencial.
Los datos proceden de la base mensual DB-IP Lite con licencia CC BY 4.0. Conserva la atribución correspondiente en las aplicaciones que usen estos datos. La versión v1 no clasifica VPN, proxies ni fraude.
Privacidad y seguridad de claves
Las claves API completas solo se muestran una vez y se almacenan únicamente como hashes con secreto del servidor. Las estadísticas guardan la ruta de API, el estado, la duración, los créditos y el identificador enmascarado de la clave durante 30 días. Este historial no almacena las IP consultadas ni las claves completas. Los contadores mensuales agregados se conservan 12 meses. Los registros de infraestructura separados se rigen por nuestra Política de privacidad.
Revoca de inmediato las claves expuestas desde tu panel de control. Bloquear o eliminar una cuenta desactiva sus claves. Tu cuenta es independiente de otros proyectos de uk.app.