Public IP API Comparison
Compare seven free public IP endpoints on JSON, IPv6, CORS, geo fields, stated rate limits and who runs them.
Measured now
One column of this comparison can be measured rather than claimed, and it is the only one we are entitled to fill in. The figures come from our own scheduled probe and move on their own.
| Service | Uptime, 24 h | Uptime, 30 d | p50 | p95 |
|---|---|---|---|---|
| ifconfig.me | No published figure. | |||
| icanhazip.com | No published figure. | |||
| api.ipify.org | No published figure. | |||
| ip.me | No published figure. | |||
| ident.me | No published figure. | |||
| checkip.amazonaws.com | No published figure. | |||
| whatsmyip.fyi | 99.22% | 99.22% | 589 ms | 867 ms |
The table
All endpoint behaviour below was checked against the live services on 4 September 2026. Anything we could not verify from a primary source is marked as unverified rather than guessed.
| ifconfig.me | icanhazip.com | api.ipify.org | ip.me | ident.me | checkip.amazonaws.com | whatsmyip.fyi | |
|---|---|---|---|---|---|---|---|
| Plaintext | yes | yes | yes | yes, to curl | yes | yes | yes |
| JSON | /all.json, headers only |
no | ?format=json |
no | /json |
no | /json, ?full=1 |
| IPv6 | dual-stack apex | ipv4. / ipv6. split |
api6., api64. |
dual-stack apex | 4. / 6. split |
dual-stack | v4. / v6. split |
| CORS | yes | yes | yes | no header at all | yes | yes | yes |
| HTTPS | yes, HTTP/2 | yes, HTTP/2 and /3 | yes, HTTP/2 | yes, HTTP/1.1 only | yes, HTTP/2 and /3 | yes, HTTP/2 | yes |
| Geo / ASN | none | none | none | none on the API path | yes, extensive | none | yes |
| Stated limit | none stated | none stated | none, explicitly | none stated | 500 req/s, then email | none stated | 1,000/day, 60/min |
| Operator | unverified | Cloudflare | Randall Degges, open source | Proton AG | Pierre Carrier | Amazon Web Services | this site |
Corrections to two widely repeated claims
ifconfig.me is not run by Cloudflare. Its responses carry via: 1.1 google and no cf-ray or Cloudflare server header, and its A record resolves into Google Cloud. Its whois is behind a privacy proxy, so the actual operator is unverified and we do not name one. The site serves an IPinfo advertisement tagged utm_campaign=upsell_sister_sites, which points somewhere without proving anything.
ipify is not owned by Kasada. We found no acquisition announcement from either party and no primary source. Primary sources still name Randall Degges as creator and maintainer, and the API is open source. Until something authoritative appears, the claim should not be repeated.
ip.me and ident.me are not the same service. They are often listed as aliases. ip.me is registered to and maintained by Proton AG in Geneva. ident.me is run independently by Pierre Carrier. They differ in CORS support, in JSON support, and in what they return.
Notes on individual services
ifconfig.me. The /all.json response is an echo of your request headers, not address metadata: ip_addr, user_agent, port, mime, via, forwarded. That is genuinely useful for debugging a proxy, and it is not a geolocation API. Paths for /ip, /ua, and /all make it pleasant interactively.
icanhazip.com. The most minimal of the set and the fastest to type. It has no JSON at all; ?format=json is ignored and you get the bare address anyway, which surprises people. The ipv4. and ipv6. split hostnames are the right design for family testing. Cloudflare has run it since 2021 and it serves HTTP/3.
api.ipify.org. JSON via ?format=json, and JSONP with a callback for the rare case that still needs it. The IPv6 story needs care: api.ipify.org has no AAAA record and is IPv4-only, api6.ipify.org is IPv6-only, and api64.ipify.org is the dual-stack one. Using the plain hostname and wondering why you never see an IPv6 address is a common mistake. It is the only service here that explicitly states no limit, and it serves around 30 billion requests a month.
ip.me. Run by Proton, which is a meaningful trust signal if their privacy policy matters to you. Two practical limits: no JSON, and no CORS header at all, so it cannot be called from a web page. It is also HTTP/1.1 only on nginx 1.18.
ident.me. The most feature-rich of the plain endpoints. The JSON response includes ASN, AS organisation, connection type, continent, country, city, coordinates, timezone, and even weather. It publishes an actual limit, which almost nobody does: use it freely, and email first above 500 requests per second. It also answers over DNS, SSH, telnet, and STUN, which is either delightful or unnecessary depending on your temperament.
checkip.amazonaws.com. Plain, dependable, and backed by AWS, which is the reason to choose it. No JSON, no geo. AWS documentation now points at https://checkip.global.api.aws/ as the current endpoint; both return identical plaintext, so the older hostname still works.
Where whatsmyip.fyi is weaker
This is the section that makes the rest of the page worth reading.
- We are new. icanhazip has run since 2010, ipify since 2016, and
checkip.amazonaws.comhas Amazon behind it. They have a track record measured in years. We do not. If your requirement is “this endpoint will answer in 2031”, pick one of them. - We publish a rate limit and they mostly do not. 1,000 per day and 60 per minute is a real ceiling that a busy client will hit. ipify explicitly states no limit and serves 30 billion requests a month. For high-volume use, ipify is the better choice and we would rather say so than pretend otherwise.
- ident.me returns more geolocation data than we do on the free plaintext path, and states a far higher limit.
- We are a single operator. So are ifconfig.me and ident.me, but Cloudflare and Amazon are not, and for infrastructure that matters.
- Our uptime record is short. We publish measured latency and uptime per region at
/statusrather than claiming a number. Check it before you depend on us, and compare it against a service that has been running for a decade before deciding.
Where we are stronger
- Split IPv4-only and IPv6-only hostnames plus geo and ASN in one response, which no other service in the table combines.
- A stated, documented rate limit with
Retry-Afteron 429, so a client can behave correctly instead of guessing. - A Markdown endpoint at
/ip.mdfor agents and language models. - A published status page with per-region latency, rather than an uptime claim in prose.
Verify any of this yourself
# CORS header present?
curl -sI https://ip.me | grep -i access-control
# does ipify's plain hostname have IPv6?
dig +short AAAA api.ipify.org # empty
dig +short AAAA api64.ipify.org # answers
# does icanhazip honour format=json?
curl -s 'https://icanhazip.com/?format=json' # bare IP, not JSON
# who serves ifconfig.me?
curl -sI https://ifconfig.me | grep -iE 'server|via|cf-ray'
If any row here is wrong, write to us and it gets corrected with the date changed. A comparison table that never changes is a table nobody rechecks.
About this tool
Seven free services return your public address to a script, and they differ in ways that matter once you build on them. This page compares them on plaintext and JSON support, IPv6, CORS headers, HTTPS, geolocation fields, the published rate limit, and who operates each one. Every behavioural claim was checked against the live endpoints on 4 September 2026, including the columns where this site is the weaker choice.
How to read the result
- Plaintext
- Returns the bare address with a trailing newline and a text/plain content type. Every service here does this, and the differences begin one column later.
- JSON
- Whether a structured response is available, and at what path. Three of the seven have none, and ifconfig.me returns a request-header echo rather than address metadata.
- IPv6
- Whether the service is dual-stack, and whether it offers family-specific hostnames so you can test one family on purpose. A dual-stack host alone cannot prove which family worked, because the client falls back, and split hostnames can.
- CORS
- Whether Access-Control-Allow-Origin is present, which decides whether a web page can read the response at all. Without it the service still works from curl and from your own server, which is why one that looked fine in a terminal can fail in a web application.
- Geo and ASN fields
- Whether the response includes location and network ownership, or only the address. Most of these return the address and nothing else, which is a legitimate design choice and keeps them fast.
- Stated rate limit
- A published number, not one we inferred. Most of these state no limit at all, which means the limit is undocumented rather than absent, and you find it by being blocked.
- Operator
- Who runs the service, which decides how long it will keep existing and whose privacy policy your requests fall under. Two widely repeated ownership claims about these services turned out to be wrong, and both are corrected below.
Questions people ask
- Which one should I use in a shell script?
- Any of them, and preferably two. Pick a primary and a fallback from different operators, because a single free endpoint is a single point of failure. If you need JSON, that narrows it to ipify, ident.me, or this service. If you need geo data in the same response, ident.me and this service.
- Which ones work from browser JavaScript?
- Those that send Access-Control-Allow-Origin, which is ifconfig.me, icanhazip, ipify (on api and api64), ident.me, checkip.amazonaws.com, and this service. ip.me sends no CORS header at all, so a browser cannot read its response no matter how the request is made.
- Is icanhazip really owned by Cloudflare?
- Yes. Major Hayden ran it from 2010 and sold it to Cloudflare in June 2021 for the price of the domain registration, 8.03 US dollars, and wrote publicly about it. Its responses carry Cloudflare server headers.
- Who owns ifconfig.me?
- We could not verify it, so we do not state it. Its whois is behind a privacy proxy, and it is served from Google Cloud with no Cloudflare headers, which rules out the frequently repeated claim that Cloudflare runs it. The site carries an IPinfo advertisement tagged as a sister-site promotion, which is suggestive and not proof.
- Why should I trust a comparison written by one of the services in it?
- Read the "where we are weaker" section, then check the table yourself. Every behavioural claim can be verified with one curl command, and the commands are given. The most important honest answer here is that this service is new and the others have a decade of uptime we cannot match.
Related
Last reviewed 2026-09-05.