API de IP pública gratuita, sin autenticación. Cuatro endpoints que devuelven IPv4, IPv6, ISP, ASN, geolocalización y zona horaria — en JSON o texto.
# Full data (JSON) https://ippubblico.org/?api=1 # IPv4 + IPv6 (plain text, 2 lines) https://ippubblico.org/?text=1 # IPv4 only https://ipv4.ippubblico.org/ # IPv6 only https://ipv6.ippubblico.org/
Devuelve un objeto JSON completo con todos los datos disponibles sobre la IP del llamante.
curl https://ippubblico.org/?api=1
{
"status": "ok",
"ip": "93.45.12.88",
"ipv4": "93.45.12.88",
"ipv6": null,
"isp": "Telecom Italia S.p.A.",
"asn": "AS3269",
"timezone": "Europe/Rome",
"datetime": "2026-05-05T12:00:00+02:00",
"geo": {
"city": "Rome",
"region": "Lazio",
"country": "Italy",
"lat": 41.9028,
"lon": 12.4964
},
"headers": { /* HTTP request headers */ },
"cached": false,
"lang": "en"
}
| Campo | Tipo | Descripción |
|---|---|---|
| status | string | "ok" o "partial" si la geolocalización falló |
| ip | string | IP detectada (puede ser IPv4 o IPv6) |
| ipv4 | string | null | Dirección IPv4 si está disponible |
| ipv6 | string | null | Dirección IPv6 si está disponible |
| isp | string | null | Nombre del proveedor de servicios de Internet |
| asn | string | null | Número de Sistema Autónomo (ej. "AS3269") |
| timezone | string | null | Zona horaria IANA (ej. "Europe/Rome") |
| datetime | string | Fecha/hora ISO 8601 en la zona horaria del llamante |
| geo.city | string | null | Nombre de ciudad aproximado |
| geo.region | string | null | Región / estado |
| geo.country | string | null | Nombre del país |
| geo.lat / geo.lon | float | null | Coordenadas aproximadas |
| cached | boolean | true si el resultado se sirve desde caché de 1h |
Devuelve IPv4 e IPv6 en dos líneas separadas. Devuelve NONE si un protocolo no está disponible.
curl https://ippubblico.org/?text=1
IPv4: 93.45.12.88 IPv6: NONE
Devuelve solo la dirección IPv4 como texto plano, o NONE si no está disponible.
curl https://ipv4.ippubblico.org/
93.45.12.88
Devuelve solo la dirección IPv6 como texto plano, o NONE si no está disponible.
curl https://ipv6.ippubblico.org/
2001:db8::1
# JSON completo curl https://ippubblico.org/?api=1 # Solo IPv4 MY_IP=$(curl -s https://ipv4.ippubblico.org/) echo "My IPv4: $MY_IP" # Solo IPv6 MY_IPV6=$(curl -s https://ipv6.ippubblico.org/) echo "My IPv6: $MY_IPV6"
// Full JSON const res = await fetch('https://ippubblico.org/?api=1'); const data = await res.json(); console.log(data.ipv4, data.ipv6, data.geo.country); // IPv4 only const ipv4 = await fetch('https://ipv4.ippubblico.org/').then(r => r.text()); console.log('IPv4:', ipv4);
import requests # Full JSON data = requests.get('https://ippubblico.org/?api=1').json() print(data['ipv4'], data['geo']['country']) # IPv4 only ipv4 = requests.get('https://ipv4.ippubblico.org/').text.strip() print(f'IPv4: {ipv4}')
// Full JSON $data = json_decode(file_get_contents('https://ippubblico.org/?api=1'), true); echo $data['ipv4']; // IPv4 only $ipv4 = trim(file_get_contents('https://ipv4.ippubblico.org/'));
resp, _ := http.Get("https://ipv4.ippubblico.org/") body, _ := io.ReadAll(resp.Body) fmt.Println("IPv4:", strings.TrimSpace(string(body)))
$ip = (Invoke-WebRequest 'https://ipv4.ippubblico.org/').Content.Trim() Write-Host "IPv4: $ip"
require 'open-uri' ipv4 = URI.open('https://ipv4.ippubblico.org/').read.strip puts "IPv4: #{ipv4}"
var client = new HttpClient(); var ipv4 = (await client.GetStringAsync("https://ipv4.ippubblico.org/")).Trim(); Console.WriteLine($"IPv4: {ipv4}");
ipv4.ippubblico.org fuerza conexión IPv4 solo mediante registro DNS Aipv6.ippubblico.org fuerza conexión IPv6 solo mediante registro DNS AAAAEl sitio completo está disponible en 43 idiomas. La API en sí es independiente del idioma.