API de dirección IP y endpoints para la línea de comandos
Obtén tu dirección IP pública desde un script, una terminal o una tarea de cron: texto plano para curl, JSON con los detalles y hosts solo IPv4 o solo IPv6 cuando necesitas una familia concreta. Sin clave, sin cuenta y 600 peticiones por minuto por dirección.
Inicio rápido: tu IP con curl
curl checkmyip.com/raw
203.0.113.42Para la mayoría de los usos, esa es toda la API: una petición, la dirección, un salto de línea. curl -4 y curl -6 fuerzan una familia; curl checkmyip.com/json devuelve los detalles de abajo. Cualquier cliente que envíe Accept: text/plain o un User-Agent de línea de comandos recibe la dirección a secas en /raw; los navegadores reciben la página normal.
$ curl checkmyip.com
216.73.216.52
$ curl -H "Accept: text/plain" https://checkmyip.com/
216.73.216.52 Endpoints
| Endpoint | Devuelve | Notas |
|---|---|---|
GET https://checkmyip.com/raw | tu IP en texto plano con un salto de línea final | también GET / con un User-Agent de curl/wget/PowerShell |
GET https://checkmyip.com/ip · /ip.txt | la misma dirección en texto plano (alias para scripts que esperan esas rutas) | Cache-Control: no-store |
GET https://checkmyip.com/json | JSON: ip, version, geo, network, type, resumen de risk (campos abajo) | Cache-Control: private, no-store |
GET https://checkmyip.com/json?ip=203.0.113.42 | el mismo JSON para cualquier dirección pública | mismo límite de 600/min |
GET https://ipv4.checkmyip.com/ip | {ip, family: 4, …} solo por IPv4 | falla si no tienes ruta IPv4 |
GET https://ipv6.checkmyip.com/ip | {ip, family: 6, …} solo por IPv6 | falla si no tienes ruta IPv6 |
GET https://ds.checkmyip.com/ip | la familia que prefiere tu cliente cuando funcionan las dos | ?format=text para la salida a secas |
Todos los endpoints responden por HTTPS con CORS habilitado para uso de solo lectura, envían Cache-Control: no-store y están marcados noindex para los buscadores. Los resultados de otras direcciones se guardan en caché diez minutos.
https://checkmyip.com/rawhttps://checkmyip.com/iphttps://checkmyip.com/ip.txthttps://checkmyip.com/https://checkmyip.com/jsonhttps://checkmyip.com/json?ip=203.0.113.9All of them send Cache-Control: private, no-store, Access-Control-Allow-Origin: * and X-Robots-Tag: noindex; no hace falta clave de api.
Campos de la respuesta JSON
ip: la dirección como cadena. version: 4 o 6. geo.consensus: country (ISO 3166-1 alfa-2), region, city, lat, lon, timezone, confidence (0–1), disagreement (booleano), anycast (booleano); geo.sources[]: la respuesta de cada base de datos con updated, licence y attribution. network: asn, as_name, as_org, prefix, rir, allocation_date, registry_country, abuse_contacts[]. hostname: el nombre PTR o null. type.type: residential, mobile, business, datacenter o unknown, con confidence y reasons[]. risk: is_proxy, is_vpn, is_tor, is_datacenter, is_relay, score (0–100), level, reasons[], blacklists[] y score_version. Un valor ausente es null con el motivo en status o note; los veredictos heurísticos lo indican. Las cadenas de atribución deben mostrarse si enseñas los datos de geolocalización a tus usuarios (condiciones de CC BY 4.0 / CC BY-SA 4.0).
Two fields are additive on top of the list above: schema_version (the lookup service's response schema, 1.1 today; fields are only ever added) and geo.agreement — the per-field tally behind the consensus (country_sources, country_source_ids, city_sources, city_source_ids, the disagreeing ids and a one-line summary such as “country confirmed by 3 sources, city from 2”). network.origins[] lists every ASN that originates the address (asn, as_name, as_org, named_by[], primary; network.multi_origin is true when there is more than one and network.note says which was chosen as primary). risk.factors[] carries the score arithmetic (id, label, points, source; sum = score before the cap at 100) and risk.reasons[] the same signals as full sentences. A tied city vote sets geo.consensus.city to null and lists the options in geo.consensus.city_candidates[]; geo.consensus.tie_break says what rule applied. hosted_domains (full lookups only) is the IP2WHOIS hosted-domain block: status (ok, cached, budget_exhausted with retry_after, no-data, skipped on fast answers), total_domains, domains[] (a sample — the free plan returns one name per page), page/total_pages and the attribution string, which must be shown with the names. Own-address answers also carry colo (the Cloudflare data centre that served you) and cache (live or edge ≤10 min).
Ejemplos de código
Cada ejemplo imprime la dirección pública de la máquina en la que se ejecuta.
curl
curl -s https://checkmyip.com/raw
curl -s -4 https://checkmyip.com/raw # solo IPv4
curl -s -6 https://checkmyip.com/raw # solo IPv6
curl -s https://checkmyip.com/json | jq .geo.consensus.countrywget
wget -qO- https://checkmyip.com/rawPowerShell
(Invoke-WebRequest -Uri https://checkmyip.com/raw -UseBasicParsing).Content.Trim()
(Invoke-RestMethod -Uri https://checkmyip.com/json).network.asnPython
import urllib.request
ip = urllib.request.urlopen("https://checkmyip.com/raw", timeout=5).read().decode().strip()
print(ip)JavaScript (fetch)
const r = await fetch("https://checkmyip.com/json", { cache: "no-store" });
const { ip, geo } = await r.json();
console.log(ip, geo.consensus.country);Go
resp, err := http.Get("https://checkmyip.com/raw")
if err != nil { log.Fatal(err) }
defer resp.Body.Close()
b, _ := io.ReadAll(resp.Body)
fmt.Println(strings.TrimSpace(string(b)))Scripts Bash y cron
#!/bin/sh
# avisar cuando cambie la IP pública (ejecutar desde cron cada 5 minutos)
new=$(curl -fsS --max-time 5 https://checkmyip.com/raw) || exit 0
old=$(cat /var/tmp/public-ip 2>/dev/null)
[ "$new" != "$old" ] && { echo "$new" > /var/tmp/public-ip; logger "public IP changed: $old -> $new"; }Usa --max-time, trata un fallo como desconocido y no como cambio, y no consultes más de una vez por minuto.
Límites y uso razonable
/raw, /ip, /ip.txt, /json, /json?ip= y los hosts /ip de cada familia admiten 600 peticiones por minuto por dirección; el comprobador de puertos admite 20 por minuto y solo prueba la dirección de quien lo llama. Superar un límite devuelve HTTP 429 con un cuerpo de error en JSON. Los endpoints son gratuitos para uso personal, interno y comercial dentro de esos límites; si esperas un volumen sostenido por encima, o quieres incorporar nuestros datos en un producto, avísanos antes por la página de contacto. Por favor, no uses las páginas para personas desde scripts: son más pesadas y lentas que los endpoints de arriba.
Disponibilidad y estado
Los endpoints corren en la misma red perimetral que el sitio y se monitorizan de forma continua; el endpoint /healthz de nuestro servidor de pruebas informa de su versión y su tiempo en marcha. Hay una página de estado pública en preparación. Los cambios en el formato de respuesta se anuncian en esta página con antelación; los campos existentes nunca se renombran, solo se añaden.
Preguntas frecuentes
¿Hay alguna API de IP gratuita?
Sí. Los endpoints de esta página devuelven tu dirección pública en texto plano o JSON sin clave ni cuenta, dentro de los límites de arriba, y /json?ip= devuelve el mismo JSON para cualquier dirección pública. La página localizar IP muestra los mismos datos para personas.
¿Son ilegales los «IP grabbers»?
Un «IP grabber» es un enlace o una imagen que registra la dirección de quien lo abre. Guardar la dirección de un visitante de tu propio sitio es legal y rutinario; engañar a alguien para que la revele con el fin de acosarlo, localizarlo o atacarlo es donde entra la ley. Nuestros endpoints solo devuelven la dirección del cliente que los llama.
¿Una API tiene dirección IP?
Todo servidor que responde a una API tiene dirección IP, el nuestro incluido. La pregunta que suele haber detrás —«¿puede un programa saber su propia dirección pública?»— es para lo que sirven estos endpoints: el programa nos pregunta y respondemos con la dirección desde la que vimos llegar la petición.
¿Qué es una API «cuál es mi IP»?
Un endpoint web que responde con la dirección de quien lo llama. https://checkmyip.com/raw la devuelve como texto y https://checkmyip.com/json con los detalles de ubicación, red y riesgo documentados arriba.
¿Qué hace curl ifconfig.me?
ifconfig.me es otro sitio que devuelve la dirección de quien lo consulta con curl. curl checkmyip.com/raw hace lo mismo aquí; el endpoint JSON te da además los campos de red y ubicación.
¿Cómo saber mi dirección IP con curl?
Ejecuta curl -s https://checkmyip.com/raw en cualquier terminal con acceso a internet. Añade -4 o -6 para forzar IPv4 o IPv6. La salida es la dirección seguida de un salto de línea, lo que la hace segura para scripts.
¿Es seguro ifconfig.me?
No podemos responder por otros servicios. Del nuestro: las peticiones se atienden sin guardar tu dirección, la respuesta se sirve por HTTPS y la política de privacidad se aplica a los endpoints exactamente igual que a las páginas.