Começo rápido
A saída de exemplo abaixo usa 192.0.2.1, um endereço reservado para documentação que nunca pertence a um aparelho real. Quando você rodar esses comandos, verá o seu próprio IP.
$ curl iseeu.cc
192.0.2.1
$ curl -s iseeu.cc/json | jq '{ip, country: .location.country, asn: .network.asn, tls: .tls.version}'
{
"ip": "192.0.2.1",
"country": "US",
"asn": 7922,
"tls": "TLSv1.3"
}
A URL inicial decide o que devolver pelo seu cabeçalho Accept: os navegadores pedem text/html e recebem a página; curl, wget, HTTPie, PowerShell e bibliotecas HTTP não pedem, e recebem uma única linha com o seu endereço IP e uma quebra de linha.
Endpoints
| Caminho | O que devolve |
|---|---|
| / | Seu IP em texto puro (clientes que não são navegadores) ou a página web (navegadores) |
| /ip | Seu IP em texto puro, sempre |
| /json | Tudo: IP, localização, rede, TLS, HTTP, User-Agent analisado, cabeçalhos da requisição e hora do servidor |
| /geo | IP, localização, ASN, organização e data center da Cloudflare |
| /tls | Versão do TLS, cifra, tamanho do ClientHello, hashes das cifras e das extensões e versão do HTTP |
| /ua | Seu User-Agent, dividido em navegador, motor, sistema operacional, dispositivo e tipo de cliente |
| /headers | Os cabeçalhos da requisição que você enviou e os que a Cloudflare adicionou |
| /api/rdap?q= | Dados de registro RDAP de um domínio, endereço IP ou CIDR, ou número AS, vindos do registro que a IANA indica para ele: um resumo e o JSON RDAP bruto |
| /api/headers-check?url= | Cabeçalhos de resposta de uma URL pública (segue os redirecionamentos e nunca lê o corpo) com uma nota de segurança |
| /mcp | Servidor MCP (Streamable HTTP, sem estado) — veja abaixo |
Para ver o endereço de um protocolo específico, force o protocolo no curl: curl -4 iseeu.cc mostra o seu endereço IPv4 e curl -6 iseeu.cc o seu endereço IPv6 (o comando falha na hora se a sua máquina não tiver rota IPv6); o mesmo vale para o JSON, com curl -4 iseeu.cc/json e curl -6 iseeu.cc/json.
Acrescente ?format=text (ou envie Accept: text/plain) a qualquer endpoint JSON para receber linhas simples key: value, práticas de usar com grep. format aceita só json ou text; qualquer outro valor recebe um 400 com "error": "invalid_format", em vez de cair calado no formato padrão. curl "iseeu.cc/ua?format=text" mostra só a string do User-Agent. A descrição legível por máquina está em /openapi.json (OpenAPI 3.1).
O objeto /json
Um exemplo de resposta (de novo com o endereço de exemplo reservado 192.0.2.1):
{
"ip": "192.0.2.1",
"ipVersion": 4,
"location": {
"country": "US", "countryName": "United States",
"region": "Texas", "regionCode": "TX", "city": "Austin",
"postalCode": "78701", "metroCode": "635", "continent": "NA",
"isEU": false, "latitude": 30.27, "longitude": -97.74,
"timezone": "America/Chicago"
},
"network": { "asn": 7922, "asOrganization": "Comcast Cable", "colo": "DFW",
"clientTcpRttMs": 22, "clientQuicRttMs": null, "deliveryRateBps": null },
"tls": { "version": "TLSv1.3", "cipher": "AEAD-AES128-GCM-SHA256", "clientHelloLength": 508,
"clientCiphersSha1": "…", "clientExtensionsSha1": "…" },
"http": { "protocol": "HTTP/2", "method": "GET", "priority": null, "acceptEncoding": "gzip, br" },
"userAgent": { "raw": "curl/8.9.1", "browser": {…}, "engine": {…}, "os": {…},
"device": {…}, "cpu": {…}, "kind": "cli", "bot": { "name": "curl", "kind": "cli", "operator": null } },
"headers": { "accept": "*/*", "host": "iseeu.cc", "user-agent": "curl/8.9.1" },
"edgeHeaders": { "cf-ray": "…", "cf-ipcountry": "US", … },
"time": { "server": "2026-10-08T12:00:00.000Z", "serverMs": 1791460800000 },
"meta": { "docs": "https://iseeu.cc/api/", "privacy": "https://iseeu.cc/privacy/", "simulated": false }
}
Valores ausentes vêm como null e nunca são omitidos, então a estrutura é estável. Isso inclui medições que não se aplicam ou que não foram feitas: clientTcpRttMs só existe em conexões TCP (HTTP/1.1 e HTTP/2), clientQuicRttMs só em HTTP/3, e a Cloudflare informa um valor não medido como 0, que repassamos como null, e não como uma ida e volta de zero milissegundo. Os dados de localização e de rede vêm da inteligência de IP da Cloudflare para o endereço de onde você se conectou; eles descrevem a rede do seu provedor, não um endereço de rua. tls.clientCiphersSha1 e clientExtensionsSha1 são hashes que a Cloudflare calcula do seu ClientHello, não JA3 nem JA4. O Chrome embaralha a ordem das extensões TLS, então o hash das extensões dele costuma mudar de uma conexão para outra; o hash das cifras é o mais estável dos dois. userAgent.kind é um destes valores: browser, search-crawler, ai-crawler, ai-assistant, social-preview, http-library, cli, headless-browser, monitoring, bot ou unknown.
Usos comuns
Confirmar que uma VPN ou um proxy está ativo antes de rodar uma tarefa. Compare o país de saída com o esperado e interrompa se estiver errado:
country=$(curl -s "iseeu.cc/geo?format=text" | awk -F': ' '$1=="country"{print $2}')
[ "$country" = "DE" ] || { echo "VPN not in Germany (got $country)"; exit 1; }
Descobrir o endereço público de um servidor de dentro de um contêiner, de um runner de CI ou de uma função na nuvem, onde a interface de rede só mostra um endereço privado. curl -s iseeu.cc basta, e a quebra de linha no final permite usar o resultado com segurança numa substituição de comando do shell.
Ver o que o seu cliente HTTP realmente envia. As bibliotecas adicionam, renomeiam e reordenam cabeçalhos. Chame /headers a partir do seu código para ver o conjunto exato, ou /tls para confirmar qual versão de TLS e qual cifra o seu runtime negocia.
Em outras linguagens:
// JavaScript (browser or Node 18+)
const me = await (await fetch("https://iseeu.cc/json")).json();
# Python
import requests; me = requests.get("https://iseeu.cc/json", timeout=5).json()
// Go
resp, _ := http.Get("https://iseeu.cc/ip")
# PowerShell
(Invoke-RestMethod https://iseeu.cc/json).location.country
Consultas que saem do iseeu.cc
/api/rdap e /api/headers-check fazem uma requisição externa cada um, por isso têm um limite próprio e menor: 10 chamadas por minuto por endereço IP; acima disso, a resposta é 429 com Retry-After: 60. As consultas RDAP só vão para servidores listados no registro de bootstrap da IANA. A verificação de cabeçalhos aceita URLs públicas http/https nas portas 80 e 443, recusa endereços privados e reservados e o próprio iseeu.cc (também como destino de redirecionamento; nesse caso a resposta é 400 invalid_target), segue até cinco redirecionamentos e desiste depois de cinco segundos. Nenhum dos dois endpoints armazena a consulta.
curl -s "iseeu.cc/api/rdap?q=AS64496" | jq .summary
curl -s "iseeu.cc/api/headers-check?url=https://example.com/" | jq '.grade | {grade, score}'
Limites e uso justo
- 60 requisições por minuto por endereço IP. Acima disso, você recebe
429comRetry-After: 60. O limite é contado por local da Cloudflare, por isso é aproximado. - As respostas, inclusive as do MCP, nunca vão para cache (
Cache-Control: no-store). Os endpoints REST enviamAccess-Control-Allow-Origin: *, então JavaScript de navegador em qualquer site pode chamá-los. - O uso comercial é permitido. Só não coloque o
/jsonnuma página que todos os seus visitantes carregam; nessa escala, fale com a gente antes. - Se 60 requisições por minuto realmente não bastam para o que você está construindo, conte para a gente pela página de contato.
Servidor MCP para agentes de IA
https://iseeu.cc/mcp é um servidor Model Context Protocol remoto via Streamable HTTP. Ele não guarda estado, não exige autenticação e oferece cinco ferramentas, todas somente leitura; dns_lookup e rdap_lookup compartilham o limite de 10 por minuto das consultas externas.
| Ferramenta | Entrada | O que faz |
|---|---|---|
| whoami | include_headers? | IP público, localização, ASN e organização, data center da Cloudflare, versão do TLS e do HTTP e tipo de cliente da máquina que chama o servidor |
| check_headers | headers? | Aponta traços que a detecção de bots costuma pesar: falta de User-Agent ou Accept-Language, Chrome sem Client Hints, versões ou plataformas que não batem, cabeçalhos de proxy com outro IP, DNT e GPC. São indícios possíveis, não provas, porque qualquer cliente pode omitir ou forjar cabeçalhos. Sem entrada, verifica os cabeçalhos da própria chamada. |
| parse_ua | user_agent? | Divide um User-Agent em navegador, motor, sistema operacional, dispositivo e CPU, e classifica rastreadores, agentes de IA, ferramentas de linha de comando e bibliotecas |
| dns_lookup | name, type? | Registros A, AAAA, MX, TXT, NS, CNAME, CAA ou SOA pelo resolvedor da Cloudflare via DNS sobre HTTPS, com TTL, o indicador DNSSEC e uma nota que distingue um nome inexistente (NXDOMAIN) de um tipo de registro inexistente |
| rdap_lookup | query, include_raw? | Resumo do registro de um domínio, endereço IP ou número AS a partir do servidor RDAP autoritativo |
Clientes MCP que rodam no navegador podem chamá-lo de qualquer origem. O CORS permite POST, GET e DELETE com os cabeçalhos de requisição Content-Type, Mcp-Session-Id, Mcp-Protocol-Version e Last-Event-ID e expõe Mcp-Session-Id. Toda resposta MCP é enviada com Cache-Control: no-store, e o servidor não guarda nada entre uma chamada e outra. O corpo da requisição pode ter até 64 KB e um lote JSON-RPC até 10 mensagens; os maiores são recusados com o erro -32600 antes que qualquer ferramenta rode.
Conectar
# Claude Code
claude mcp add --transport http iseeu https://iseeu.cc/mcp
# Cursor, Windsurf, VS Code and other JSON configs
{ "mcpServers": { "iseeu": { "url": "https://iseeu.cc/mcp" } } }
Uma observação honesta sobre o whoami: ele informa a máquina que envia a requisição HTTP para /mcp, seja ela qual for. Para agentes de desktop e de linha de comando, essa é a sua própria rede, o que ajuda a verificar se um proxy ou uma VPN está funcionando. Para assistentes que rodam na nuvem, é o servidor do provedor.
Arquivos de descoberta
- /llms.txt — um guia curto em texto puro para modelos de linguagem
- /.well-known/mcp/server-card.json — cartão do servidor MCP
- /openapi.json — descrição OpenAPI 3.1 dos endpoints HTTP
Privacidade
A API nunca registra endereços IP, cabeçalhos nem consultas, e não tem banco de dados. As respostas são montadas na memória a partir da requisição e descartadas; contamos as chamadas por endpoint, sem endereços IP. Os detalhes estão na página de privacidade.
A API é disponibilizada tal como está, sem garantia de que esteja sempre no ar. Os dados de localização e de rede podem estar errados. Não use a API como único sinal para decisões de segurança ou de prevenção a fraudes.