API de endereço IP e endpoints de linha de comando

Obtenha o seu endereço IP público a partir de um script, de um shell ou de um cron job: texto puro para curl, JSON com os detalhes e hosts somente IPv4 e somente IPv6 quando você precisa de uma família específica. Sem chave, sem conta, 600 requisições por minuto por endereço.

Última atualização em 21 de outubro de 2026

Início rápido: obtenha o seu IP com curl

text
curl checkmyip.com/raw
203.0.113.42

Essa é a API inteira para a maioria dos usos: uma requisição, o endereço, uma quebra de linha. curl -4 e curl -6 forçam uma família; curl checkmyip.com/json retorna os detalhes abaixo. Qualquer cliente que envie Accept: text/plain ou um User-Agent de linha de comando recebe o endereço puro em /raw; os navegadores recebem a página para humanos.

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

Endpoints

EndpointRetornaObservações
GET https://checkmyip.com/rawseu IP em texto puro com uma quebra de linha no finaltambém GET / com um User-Agent de curl/wget/PowerShell
GET https://checkmyip.com/ip · /ip.txto mesmo endereço em texto puro (aliases para scripts que esperam esses caminhos)Cache-Control: no-store
GET https://checkmyip.com/jsonJSON: ip, version, geo, network, type, resumo de risk (campos abaixo)Cache-Control: private, no-store
GET https://checkmyip.com/json?ip=203.0.113.42o mesmo JSON para qualquer endereço públicomesmo limite de 600/min
GET https://ipv4.checkmyip.com/ip{ip, family: 4, …} somente por IPv4falha se você não tem caminho IPv4
GET https://ipv6.checkmyip.com/ip{ip, family: 6, …} somente por IPv6falha se você não tem caminho IPv6
GET https://ds.checkmyip.com/ipa família que o seu cliente prefere quando as duas funcionam?format=text para saída pura

Todos os endpoints respondem por HTTPS com CORS ativado para uso somente leitura, enviam Cache-Control: no-store e são marcados como noindex para os mecanismos de busca. Os resultados para outros endereços ficam em cache por dez 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; não precisa de chave de api.

Campos da resposta JSON

ip — o endereço como string. version — 4 ou 6. geo.consensus — country (ISO 3166-1 alpha-2), region, city, lat, lon, timezone, confidence (0–1), disagreement (booleano), anycast (booleano); geo.sources[] — a resposta de cada base com updated, licence e attribution. network — asn, as_name, as_org, prefix, rir, allocation_date, registry_country, abuse_contacts[]. hostname — o nome PTR ou null. type.type — residential, mobile, business, datacenter ou unknown, com confidence e reasons[]. risk — is_proxy, is_vpn, is_tor, is_datacenter, is_relay, score (0–100), level, reasons[], blacklists[] e score_version. Um valor ausente é null, com o motivo em status ou note; vereditos heurísticos dizem que são heurísticos. As strings de atribuição precisam ser exibidas se você mostrar os dados de geolocalização aos usuários (condições das licenças 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).

Exemplos de código

Cada exemplo imprime o endereço público da máquina em que roda.

curl

text
curl -s https://checkmyip.com/raw
curl -s -4 https://checkmyip.com/raw     # somente IPv4
curl -s -6 https://checkmyip.com/raw     # somente 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 em Bash e cron

text
#!/bin/sh
# avisa quando o IP público muda (rode pelo cron a 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"; }

Use --max-time, trate uma falha como desconhecido, e não como mudou, e não consulte mais do que uma vez por minuto.

Limites de requisições e uso justo

/raw, /ip, /ip.txt, /json, /json?ip= e os hosts /ip de família específica permitem 600 requisições por minuto por endereço; o teste de portas permite 20 por minuto e só testa o próprio endereço de quem chama. Exceder um limite retorna HTTP 429 com um corpo de erro em JSON. Os endpoints são gratuitos para uso pessoal, interno e comercial dentro desses limites; se você espera um volume sustentado acima deles, ou quer incorporar os nossos dados em um produto, avise antes pela página de contato. Por favor, não use as páginas para humanos a partir de scripts — elas são mais pesadas e mais lentas do que os endpoints acima.

Disponibilidade e status

Os endpoints rodam na mesma rede de borda do site e são monitorados continuamente; o endpoint /healthz do nosso servidor de teste informa a versão e o tempo de atividade dele. Uma página pública de status está planejada. Mudanças no formato da resposta são anunciadas nesta página com antecedência; campos existentes nunca são renomeados, apenas adicionados.

Perguntas frequentes

Existe uma API de IP gratuita?

Sim. Os endpoints desta página retornam o seu endereço público em texto puro ou JSON sem chave nem conta, dentro dos limites de requisições acima, e /json?ip= retorna o mesmo JSON para qualquer endereço público. A página de consulta de endereço IP mostra os mesmos dados para pessoas.

IP grabbers são ilegais?

Um "IP grabber" é um link ou uma imagem que registra o endereço de quem o abre. Registrar o endereço de um visitante do seu próprio site é legal e rotineiro; enganar alguém para que revele o endereço a fim de assediar, localizar ou atacar essa pessoa é onde a lei entra. Os nossos endpoints só retornam o endereço do cliente que os chama.

Uma API tem endereço IP?

Todo servidor que responde a uma API tem um endereço IP, incluindo o nosso. A pergunta que normalmente está por trás desta — "um programa consegue descobrir o próprio endereço público?" — é para isso que estes endpoints servem: o programa pergunta a nós, e respondemos com o endereço de onde vimos a requisição chegar.

O que é a API "qual é o meu IP"?

É um endpoint web que responde com o endereço de quem o chama. https://checkmyip.com/raw o retorna como texto e https://checkmyip.com/json com os detalhes de localização, rede e risco, documentados acima.

O que o curl ifconfig.me faz?

O ifconfig.me é outro site que retorna o endereço de quem o chama quando acessado com curl. curl checkmyip.com/raw faz o mesmo aqui; o endpoint JSON ainda dá os campos de rede e localização.

Como descubro o meu endereço IP usando curl?

Execute curl -s https://checkmyip.com/raw em qualquer terminal com acesso à internet. Adicione -4 ou -6 para forçar IPv4 ou IPv6. A saída é o endereço seguido de uma quebra de linha, o que o torna seguro para usar em scripts.

O ifconfig.me é seguro?

Não podemos responder por outros serviços. Pelo nosso: as requisições são respondidas sem armazenar o seu endereço, a resposta é servida por HTTPS e a política de privacidade vale para os endpoints exatamente como para as páginas.