無料 IP 検索 API

完全無料、登録なしで利用できます(匿名利用には回数制限あり)。API キーで上限を拡張できます。JSON を返し、CORS に対応しています。

1. 自分の IP を調べる

GET /api/myip

呼び出し元のグローバル IP と所在地を返します。

2. 指定した IP を調べる

GET /api/ip?ip=8.8.8.8

任意パラメータ &key=あなたのAPIキー で上限を拡張できます。

3. ドメインを調べる(名前解決して IP ごとに所在地)

GET /api/ip?domain=baidu.com

ドメインが解決するすべての IP と、それぞれの所在地を返します。

4. コマンドライン向けプレーンテキスト

GET /ip

curl やシェルスクリプト向けに、JSON ではなく 1 行のテキストを返します。

$ curl https://www.i5p.com/ip
103.118.252.70 | 中国 香港 港島 | Alibaba Cloud
$ curl "https://www.i5p.com/ip?ip=8.8.8.8"
8.8.8.8 | 美国 加利福尼亚州 山景城 | Google Cloud/DNS/DoH/DoT

パラメータなしで自分の IP、?ip= で指定した IP、?lang=en / ja で言語切替。

# プロキシ経由(認証なし)— プロキシの出口 IP が返ります
curl -x http://127.0.0.1:8080 https://www.i5p.com/ip

# プロキシに認証が必要な場合
curl -x http://user:password@127.0.0.1:8080 https://www.i5p.com/ip

SOCKS5 の場合は http:// を socks5:// に変えるだけです。プロキシが効いているか、出口がどこかを確認する最短の方法です。

レスポンス例

{
  "code": 0,
  "msg": "ok",
  "data": {
    "ip": "8.8.8.8",
    "country": "アメリカ",
    "province": "加利福尼亚州",
    "city": "山景城",
    "zip": "",
    "isp": "Google Cloud/DNS/DoH/DoT"
  }
}

5. QR コード生成

GET /qr/?data=テキスト

GET リクエストで image/png を直接返します。<img> タグにそのまま使えます。

基本パラメータ

th_paramth_descth_req
dataQR コードの内容。必須、URL エンコードが必要、上限 1200 バイト。req_yes
size画像の一辺(ピクセル)、80–1200、既定 320。実際の出力はモジュールサイズの整数倍に切り下げるため、指定値より数ピクセル小さくなることがあります。こうすると各モジュールが整数ピクセルになり、読み取りが安定します。req_no
level誤り訂正レベル L(7%) / M(15%) / Q(25%) / H(30%)、既定 H。ロゴを入れる場合は必ず H を使ってください。中央が隠れて読めなくなることがあります。req_no
pスタイル番号。プリセット番号(1–120)か、ログイン後に発行した専用番号(u7 など)。未指定なら白黒。req_no
formatpng(既定、画像を返す)または base64(data URI を含む JSON を返す。フロントで src にそのまま入れられます)。req_no

スタイルパラメータ(URL に直接書けます)

th_paramth_desc
fg前景色(モジュールの色)、16 進数。例:%23e11d48(# は %23 にエスケープ)。
bg背景色、同じ形式。
fg2グラデーションの副色。grad が none 以外のときだけ有効。
gradグラデーション方向:none なし / h 水平 / v 垂直 / d 対角。
shapeモジュール形状:square 四角 / dot 丸 / rounded 角丸。
eye位置検出パターン 3 個の形状:square / rounded / circle。
marginクワイエットゾーン(モジュール数)、0–10、既定 2。余白が少なすぎると認識率が落ちます。
text下部テキスト、最大 30 文字。空で渡す(&text=)と番号に設定されたテキストを明示的に消せます。
text_color下部テキストの色、16 進数。

優先順位:URL が番号を上書き

p が指すスタイルをベースとし、URL に明示したパラメータが項目ごとに上書きします。指定しなかった項目は番号の設定がそのまま残ります。つまり p=u7&size=600 は「u7 のスタイルでサイズだけ 600」であり、u7 の色・モジュール形状・下部テキストはそのままです。p なしの場合のベースは白黒です。

唯一の例外がロゴです。サーバー上のファイルなので番号経由でしか付けられず、URL パラメータでは渡せません。ロゴ入りの QR が必要なら専用番号を発行してください。

3 つの使い方

  1. 直接呼び出し — p なしで、スタイルを全部 URL に書く方法。登録せずその場で作りたいときに。
  2. プリセットテンプレート — p=1〜p=120、120 種類の配色とモジュール形状。ログイン不要。テンプレートは配色と形状のみで、サイズ・ロゴ・下部テキストは含みません。
  3. 専用番号 — ログインしてQR コード生成ページでロゴや下部テキストまで調整し、「API スタイル番号を発行」で u7 のような番号を取得します。以後は ?data=内容&p=u7 だけで済み、スタイルの変更はマイ QR スタイルで一度直せば、その番号を使っている全ての場所に即反映されます。コードの修正は不要です。

ドメイン紐付け:p すら不要に

マイ QR スタイルでドメインを番号に紐付けると、そのドメインのページから来たリクエスト(Referer で判定)は data だけで紐付けたスタイルが自動適用されます。example.com を登録すれば www.example.com も対象になります。

例

<!-- 既定の白黒 -->
<img src="https://www.i5p.com/qr/?data=https%3A%2F%2Fwww.i5p.com">

<!-- スタイルを直接指定:赤い丸モジュール+対角グラデーション -->
<img src="https://www.i5p.com/qr/?data=https%3A%2F%2Fwww.i5p.com&fg=%23e11d48&fg2=%23f59e0b&grad=d&shape=dot&eye=circle">

<!-- プリセット 82 番、サイズ 300 -->
<img src="https://www.i5p.com/qr/?data=https%3A%2F%2Fwww.i5p.com&size=300&p=82">

<!-- 専用番号(サイズ・色・ロゴ・下部テキストは番号側に保存済み) -->
<img src="https://www.i5p.com/qr/?data=https%3A%2F%2Fwww.i5p.com&p=u7">

<!-- 同じ番号で、今回だけサイズを 600 に -->
<img src="https://www.i5p.com/qr/?data=https%3A%2F%2Fwww.i5p.com&p=u7&size=600">

<!-- base64 で返す(フロントでそのまま利用) -->
curl "https://www.i5p.com/qr/?data=https%3A%2F%2Fwww.i5p.com&p=82&format=base64"

QR QR

注意事項

  • 返るのは画像なので JSON のエラーコードには従いません。パラメータが不正な場合は JSON の説明を返すため、<img> 内では画像切れとして表示されます。原因を見るにはその URL をブラウザで直接開いてください。
  • 同じパラメータなら生成される画像は常に同一で、ETag と Cache-Control: max-age=86400 が付きます。CDN やブラウザにキャッシュさせて問題ありません。
  • 匿名利用には毎分の回数制限があります(管理画面で変更可、現在 1200 回/分)。超過すると 429 を返します。
  • 内容が長いほど、また誤り訂正レベルが高いほどモジュールは密になります。長い URL は短縮するか、レベルを M に下げてください。

全パラメータと動作確認はこちら: QRコード

6. バーコード生成

GET /bar/?data=テキスト&type=ean13

GET リクエストで image/png を直接返します。7 種類の一次元バーコードに対応。

data 内容(必須)、type は code128 / ean13 / ean8 / upca / code39 / itf / codabar(既定 code128)、w モジュール幅 1–8、h 高さ 20–400、fg/bg 色、text=0 で文字非表示。

<img src="https://www.i5p.com/bar/?data=6901234567892&type=ean13&w=3&h=140">

Barcode

全パラメータと動作確認はこちら: バーコード

リクエスト署名

key を付けるリクエストには署名が必要です。api_secret は URL に一切現れません。ログや履歴からリンクが漏れても、次のリクエストを偽造できません。

key API キー、ts Unix タイムスタンプ(秒、許容 300 秒)、nonce 6–64 文字のランダム文字列(300 秒以内は再利用不可)、sign 署名値。X-Api-Key / X-Api-Ts / X-Api-Nonce / X-Api-Sign ヘッダーでも送れます。

アルゴリズム:sign と callback を除く全パラメータを名前の昇順に並べ、k1=v1&k2=v2 と連結(値は生のまま、URL エンコードなし)、api_secret で HMAC-SHA256、小文字 16 進で出力。

// PHP
$key    = 'a1b2c3d4e5';
$secret = '你的secret';
$p = ['ip' => '8.8.8.8', 'key' => $key, 'ts' => time(), 'nonce' => bin2hex(random_bytes(6))];
ksort($p);
$base = [];
foreach ($p as $k => $v) { $base[] = "$k=$v"; }
$p['sign'] = hash_hmac('sha256', implode('&', $base), $secret);
echo file_get_contents('https://www.i5p.com/api/ip?' . http_build_query($p));
// Node.js
const crypto = require('crypto');
const key = 'a1b2c3d4e5', secret = '你的secret';
const p = { ip: '8.8.8.8', key, ts: Math.floor(Date.now() / 1000),
            nonce: crypto.randomBytes(6).toString('hex') };
const base = Object.keys(p).sort().map(k => `${k}=${p[k]}`).join('&');
p.sign = crypto.createHmac('sha256', secret).update(base).digest('hex');
const url = 'https://www.i5p.com/api/ip?' + new URLSearchParams(p);
fetch(url).then(r => r.json()).then(console.log);
#!/bin/bash
KEY="a1b2c3d4e5"; SECRET="你的api_secret"
IP="8.8.8.8"; TS=$(date +%s); NONCE=$(head -c6 /dev/urandom | xxd -p)
BASE="ip=$IP&key=$KEY&nonce=$NONCE&ts=$TS"   # キー名の昇順に並べ済み
SIGN=$(printf '%s' "$BASE" | openssl dgst -sha256 -hmac "$SECRET" -r | cut -d' ' -f1)
curl "https://www.i5p.com/api/ip?$BASE&sign=$SIGN"

キーはマイページで作成します。管理側で「署名必須」を無効にした場合は key のみでも利用できます(非推奨)。

CORS と JSONP

すべての JSON エンドポイントは Access-Control-Allow-Origin: * を返すため、fetch/XHR でクロスオリジン利用できます。?callback=関数名(または jsonp=)で JSONP としても取得できます。

<script src="https://www.i5p.com/api/myip?callback=showIp"></script>
<script>function showIp(r) { console.log(r.data.ip); }</script>

補足