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.

Última actualización: 21 de octubre de 2026

Inicio rápido: tu IP con curl

text
curl checkmyip.com/raw
203.0.113.42

Para 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.

shell · live
$ curl checkmyip.com
216.73.216.52
$ curl -H "Accept: text/plain" https://checkmyip.com/
216.73.216.52

Endpoints

EndpointDevuelveNotas
GET https://checkmyip.com/rawtu IP en texto plano con un salto de línea finaltambién GET / con un User-Agent de curl/wget/PowerShell
GET https://checkmyip.com/ip · /ip.txtla misma dirección en texto plano (alias para scripts que esperan esas rutas)Cache-Control: no-store
GET https://checkmyip.com/jsonJSON: ip, version, geo, network, type, resumen de risk (campos abajo)Cache-Control: private, no-store
GET https://checkmyip.com/json?ip=203.0.113.42el mismo JSON para cualquier dirección públicamismo límite de 600/min
GET https://ipv4.checkmyip.com/ip{ip, family: 4, …} solo por IPv4falla si no tienes ruta IPv4
GET https://ipv6.checkmyip.com/ip{ip, family: 6, …} solo por IPv6falla si no tienes ruta IPv6
GET https://ds.checkmyip.com/ipla 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.

GEThttps://checkmyip.com/raw
Plain text: your address + newline.
GEThttps://checkmyip.com/ip
Alias of /raw.
GEThttps://checkmyip.com/ip.txt
Alias of /raw with a file extension, for tools that want one.
GEThttps://checkmyip.com/
Plain text when the User-Agent is curl, wget, PowerShell or another non-browser, or when Accept: text/plain is sent; the HTML page otherwise.
GEThttps://checkmyip.com/json
JSON for your own address: live Cloudflare edge data, enriched by the lookup service within an 800 ms budget.
GEThttps://checkmyip.com/json?ip=203.0.113.9
JSON for any public address (lookup service). 503 with an error body when the service is unreachable — never guessed data.

All 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

text
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.country

wget

text
wget -qO- https://checkmyip.com/raw

PowerShell

text
(Invoke-WebRequest -Uri https://checkmyip.com/raw -UseBasicParsing).Content.Trim()
(Invoke-RestMethod -Uri https://checkmyip.com/json).network.asn

Python

text
import urllib.request
ip = urllib.request.urlopen("https://checkmyip.com/raw", timeout=5).read().decode().strip()
print(ip)

JavaScript (fetch)

text
const r = await fetch("https://checkmyip.com/json", { cache: "no-store" });
const { ip, geo } = await r.json();
console.log(ip, geo.consensus.country);

Go

text
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

text
#!/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.