Web and network - ipify

Free ipify Alternative

ipify is the address most scripts call when they need to know their own public IP: one GET, the address back as text or JSON, no account. The Client IP API endpoint answers the same question in the same shape, {"ip": "..."}, over HTTPS with a permissive CORS header, and sits next to the lookups that usually follow: which country and time zone the address is in, and what time it is there. This page sets the two side by side, including where ipify does more.

The translation

The ipify facts are from its own site and the README of its source repository as read on 4 November 2026.

Callipifyaisenseapi.com
Your address as JSONhttps://api.ipify.org?format=jsonhttps://aisenseapi.com/services/v1/client_ip
The answer{"ip":"98.207.254.136"}{"ip":"203.0.113.10"}
Plain texthttps://api.ipify.org with no parameterJSON only; jq -r .ip gives the bare address
JSONP?format=jsonp&callback=nameNot offered; the CORS header lets browser code call the JSON directly
IPv6api6.ipify.org for IPv6 requests only, api64.ipify.org for either familyThe host answers over IPv4, so the address returned is the IPv4 address of the last hop
LimitsStates no limit5,000 requests per address per day, shared across every endpoint
Account or keyNoneNone
HTTPSYes; some of its code samples use plain HTTPHTTPS only
CORSNot stated; its browser samples use JSONPPermissive CORS header on the answer
CachingNot statedcache-control: no-store, so every call is a fresh look
LoggingStates that no visitor information is loggedRequests are logged like every other call; see privacy for retention
SourceOpen source, hosted on a platform it namesA hosted service
What comes after the addressA separate geolocation product under the same nameIP reverse lookup and IP datetime, free, on the same host

What differs

  • One format. ipify answers in text, JSON or JSONP depending on a parameter. This endpoint answers JSON, always the same one field. A shell script takes the address with jq -r .ip, a browser reads it with fetch and the CORS header, and a device parses one short JSON document.
  • IPv4. ipify has hosts for IPv6 requests and for either family. This host is reached over IPv4, so a dual-stack client sees its IPv4 egress address and an IPv6-only client has no route to it. If what you need is your IPv6 address, use api6.ipify.org.
  • A quota. ipify states no limit. Here every endpoint shares 5,000 requests per address per day. A script that checks its address once a minute spends 1,440 of them; a status page that checks on every load should think about how often.
  • Logging. ipify states that it logs no visitor information. This service keeps ordinary request logs, which hold the address, for the period the privacy policy gives. For a one-off check that makes no difference; a privacy-sensitive caller should know it.
  • What the address means. On both services it is the public address of whatever the traffic last passed through: a home router, a corporate NAT, a VPN or a cloud egress gateway, not the address on your own interface.
  • The next question. Knowing the address, a script often asks where it is or what time it is there. Those answers are free on the same host: country, region and time zone from the IP reverse lookup, and the local time from IP datetime.

From a shell, a browser or a device

In a shell:

curl -s https://aisenseapi.com/services/v1/client_ip
# {"ip":"203.0.113.10"}

curl -s https://aisenseapi.com/services/v1/client_ip | jq -r .ip
# 203.0.113.10

In a browser, without JSONP, because the answer carries a permissive CORS header:

const answer = await fetch("https://aisenseapi.com/services/v1/client_ip");
const { ip } = await answer.json();

On an ESP32 with the Arduino core, the same call over TLS; setInsecure() skips certificate verification, which is fine for reading your own address and not fine for anything you must trust:

#include <WiFiClientSecure.h>
#include <HTTPClient.h>

WiFiClientSecure client;
client.setInsecure();

HTTPClient http;
http.begin(client, "https://aisenseapi.com/services/v1/client_ip");
int code = http.GET();
String body = http.getString();   // {"ip":"203.0.113.10"}
http.end();

To verify a VPN or an egress gateway, call once before connecting and once after; the two addresses should differ.

The field

FieldTypeMeaning
ipstringThe public address the request arrived from, as a dotted quad.

The answer is sent with cache-control: no-store, so neither the browser nor a proxy on the way answers from a copy.

Errors

CaseStatusWhat it means
The day's requests used up429The shared limit of 5,000 requests per address per day; wait for the reset.

Every refusal is JSON with error and fix.

Privacy and limits

The address you ask about is the address you call from, so it is in the request log of this service as it is in that of any web server; see our privacy policy for log retention. ipify states that it logs no visitor information; if that matters for your use, it is a reason to choose ipify.

Every path shares the service-wide ceiling of 5,000 requests per IP address per day. ipify, for comparison, states no limit and no account, offers text, JSON and JSONP, and runs separate hosts for IPv6; those are its statements as of November 2026 and may change.