APIリファレンス
単一IP検索のエンドポイント、レスポンス形式、HTTPエラーを説明します。
エンドポイント
https://api.ipquery.ioAPIキー不要呼び出し元のIP
/既定値: text/plainリクエストを送信した接続のアドレスを返します。ブラウザーでfetchを実行するとブラウザーの接続、サーバー側で実行するとサーバーの接続のアドレスが返されます。
curl --fail --silent --show-error --max-time 5 \
"https://api.ipquery.io/?format=json"単一IP
/:ip既定値: application/jsonパスにIPv4またはIPv6を1つ指定します。結果は指定したアドレスについての情報であり、呼び出し元の接続には依存しません。
curl --fail --silent --show-error --max-time 5 \
"https://api.ipquery.io/1.1.1.1"
curl --fail --silent --show-error --max-time 5 \
"https://api.ipquery.io/2606:4700:4700::1111"HTTPSを使用してください。構造化された自分のIP検索結果が必要な場合は、 ?format=json を追加します。
レスポンス形式
レスポンス形式を選択するには、クエリパラメーター format の値を指定します。
- JSON
?format=jsonapplication/json- XML
?format=xmlapplication/xml- YAML
?format=yamlapplication/x-yaml- テキスト
?format=texttext/plain
テキスト形式ではアドレスのみを返します。JSON、XML、YAMLでは構造化された検索結果を返します。
エラーと一括検索
成功した検索結果として処理する前にHTTPステータスを確認してください。エラー本文の形式は、クエリパラメーター format の値が対応形式であればそれに従います。形式が省略されている場合や未対応の場合は、プレーンテキストを返します。
無効なアドレス
HTTP 404アドレスの構文を確認してください。パスに指定できるのは、IPv4またはIPv6を1つだけです。
curl -i "https://api.ipquery.io/not-an-ip?format=json"HTTP/1.1 404 Not Found
Content-Type: application/json
{"error":"IP address not-an-ip not found"}未対応の形式
HTTP 400json、xml、yaml、textのいずれかを使用してください。APIのレスポンス形式にCSVはありません。
curl -i "https://api.ipquery.io/1.1.1.1?format=csv"HTTP/1.1 400 Bad Request
Content-Type: text/plain
Invalid format一括検索は無効
HTTP 400訪問者のIPには呼び出し元IPのエンドポイントを使うか、1つのアドレスを指定して検索してください。同じ一括リクエストを再試行しても、有効にはなりません。
curl -i "https://api.ipquery.io/1.1.1.1,8.8.8.8?format=json"HTTP/1.1 400 Bad Request
Content-Type: application/json
{"error":"Bulk lookups are disabled due to abuse. For your own IP, embed fetch(\"https://api.ipquery.io/?format=json\") in your app, or use a single-IP lookup at https://api.ipquery.io/<ip>."}リクエスト失敗時の処理
ブラウザーからのGETリクエストはクロスオリジンアクセスに対応しています。ネットワーク障害が発生すると、 fetchのPromiseは拒否されます。HTTPエラーでもレスポンス自体は取得されます。JSONを解析する前に response.ok を確認してください。
const response = await fetch(
"https://api.ipquery.io/1.1.1.1?format=json",
{ signal: AbortSignal.timeout(5000) }
);
if (!response.ok) {
const message = await response.text();
throw new Error("IPQuery " + response.status + ": " + message);
}
const data = await response.json();
console.log(data.ip);タイムアウトや 5xx レスポンスはIPレコードではありません。取得不能な状態を明示的に保持し、再試行回数を制限してください。上流のエラー本文はテキストやHTMLの場合があるため、すべてのレスポンスがJSONとは限りません。
ソースに値がない文字列は空になることがあります。フラグのfalseは不一致を意味し、安全性を示すものではありません。 フィールド定義を読む
実際のレスポンス
1.1.1.1{
"ip": "1.1.1.1",
"isp": {
"asn": "AS13335",
"org": "Cloudflare, Inc.",
"isp": "Cloudflare, Inc."
},
"location": {
"country": "Australia",
"country_code": "AU",
"city": "Brisbane",
"state": "Queensland",
"zipcode": "",
"latitude": -27.474848400186662,
"longitude": 153.00996200912815,
"timezone": "Australia/Brisbane",
"localtime": "2026-11-02T23:07:35"
},
"risk": {
"is_mobile": false,
"is_vpn": false,
"is_tor": false,
"is_proxy": false,
"is_datacenter": true,
"risk_score": 20
}
}