APIリファレンス

単一IP検索のエンドポイント、レスポンス形式、HTTPエラーを説明します。

エンドポイント

ベースURLhttps://api.ipquery.ioAPIキー不要

呼び出し元のIP

GET/既定値: text/plain

リクエストを送信した接続のアドレスを返します。ブラウザーでfetchを実行するとブラウザーの接続、サーバー側で実行するとサーバーの接続のアドレスが返されます。

リクエスト
curl --fail --silent --show-error --max-time 5 \
  "https://api.ipquery.io/?format=json"

単一IP

GET/: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 404
HTTP/1.1 404 Not Found
Content-Type: application/json

{"error":"IP address not-an-ip not found"}

未対応の形式

HTTP 400

json、xml、yaml、textのいずれかを使用してください。APIのレスポンス形式にCSVはありません。

リクエスト
curl -i "https://api.ipquery.io/1.1.1.1?format=csv"
HTTP 400
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 400
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 を確認してください。

HTTPステータスの確認
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の実際のレスポンス
{
  "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
  }
}

リスト全体へのアクセス

料金やリスト全体へのアクセスについては、次のメールアドレスにお問い合わせください: contact@ipquery.io。

選択したリスト
選択したレコード
このリストのレコード数