API リファレンス

シンプルで一貫性のあるエンドポイント。CORS対応。認証は不要です。完全な多言語対応 —— すべてのフィールドのキーと値が10以上の言語に翻訳されて返されます。

ベースURL

https://ipto.to

クイックスタート

# Detect your own IP curl https://ipto.to/v1/ip # Look up any IP curl https://ipto.to/v1/ip/8.8.8.8 # Bulk lookup (up to 100 IPs, Pro/Enterprise only) curl -X POST https://ipto.to/v1/ip/bulk \ -H "Content-Type: application/json" \ --data '["1.1.1.1","8.8.8.8","9.9.9.9"]'

ターミナルショートカット: リクエストがcurl、Wget、HTTPieから送信された場合(User-Agentで検出)、curl ipto.to や curl ipto.to/8.8.8.8(https:// や /v1/ip/ は不要)も使用できます。これはipinfo.ioスタイルの簡略化されたフィールドセット(ip, country, city, asn, org, ...)を返すもので、下記の完全なスキーマではありません — このページで説明されている完全なレスポンスを取得するには、/v1/ip のパスを直接使用してください。

IPアドレスのみ: curl ipto.to/ip(またはブラウザで開く)を実行すると、プレーンテキストで自分のIPアドレスだけが返されます — 73.9.114.155 のように、JSONもページ装飾もありません。ipinfo.io/ip の直接的な代替です。下記の GET /ip を参照してください。

デフォルトで多言語対応: ?lang= をサポートされているコードに設定すると、レスポンスのすべての JSON キーと値が翻訳されて返ってきます — 国名/大陸名だけではありません。完全な言語リストと &localize=0 オプトアウトについては、下記の ローカライゼーション を参照してください。

curl "https://ipto.to/v1/ip/8.8.8.8?lang=de" # "landesname":"Vereinigte Staaten","ist_vpn":false, ... # every key & value comes back translated -- add &localize=0 for the legacy English-keys shape

Lookup Lab

ipto のリクエストを自由に組み立て、お使いの言語ですぐ実行できるコードとしてコピーするか、ここで送信してライブのレスポンスを確認できます。無料プランではキーは不要です。

MCPサーバー

iptoはMCP(Model Context Protocol)ツールサーバーとしても利用できます — Claude Desktop、Cursor、またはMCP対応の任意のクライアントを下記のエンドポイントに接続すると、14個の呼び出し可能なツールが公開されます: ip_lookup、bulk_ip_lookup(Pro/Enterprise)、asn_lookup、country_lookup、reverse_dns_lookup、user_agent_parse、phone_lookup、email_lookup、fraud_score、language_detect、currency_convert、weather_lookup、trademark_lookup、patent_lookup。Streamable HTTP上のJSON-RPC 2.0 — POSTのみに対応し、セッションやSSEは不要です。認証方法はREST APIと同じです: 無料プラン(IPごとに1日1,000リクエスト)の場合は省略するか、エンドポイントURLに ?api_key= を付加してください。

{ "mcpServers": { "ipto": { "url": "https://ipto.to/mcp" } } }

stdioのみに対応するクライアントの場合は、次のコマンドでブリッジしてください: npx mcp-remote https://ipto.to/mcp

curl -X POST https://ipto.to/mcp \ -H "Content-Type: application/json" \ --data '{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"ip_lookup","arguments":{"ip":"8.8.8.8"}}}'

エンドポイント

GET/ip

リクエスト元クライアントの公開IPアドレスのみを、プレーンテキスト(Content-Type: text/plain)で返します — 例: 73.9.114.155。ipinfo.io/ip の直接的な代替であり、curl、Wget、HTTPie、または通常のブラウザアクセスのいずれからでも同じように動作します(上記の curl ipto.to ショートカットとは異なり、User-Agentによる検出は行いません)。ブラウザで開いた場合も、ページ装飾なしでIPアドレスそのものだけが表示されます。

パラメータ・クエリ文字列は不要です。完全なジオロケーション/脅威インテリジェンスオブジェクトが必要な場合は、下記の GET /v1/ip を使用してください。このルートは接続元IPを直接読み取るため(D1/KVの検索は行いません)、1日あたりのリクエスト予算にはカウントされません — 詳細はレート制限を参照してください。

curl https://ipto.to/ip # 203.0.113.7
GET/v1/ip

リクエスト元IPのジオロケーションおよび脅威インテリジェンスを返します。CFエッジオブジェクトによる都市レベルのデータも含まれます。

必須パラメータはありません。?lang=、?fields=、?format= を指定できます — 詳細は下記のローカライゼーションおよび出力フォーマットを参照してください。

curl https://ipto.to/v1/ip # the lookup for the calling IP: same shape as /v1/ip/:ip below
GET/v1/ip/:ip

任意のIPv4アドレスを検索します。都市レベルのフィールド(city、state、postal_code、latitude、longitude、timezone)は、そのIPが統合された2つのジオデータセット(IP2LocationまたはMaxMind)のいずれかに該当する場合に入力されます — レスポンス内の geo_precision を確認することで、都市レベルか国レベルのデータかを判別できます。timezone のフォーマットはどちらのソースが一致したかによって異なります(IP2Locationの場合はUTCオフセット文字列、MaxMindの場合はIANA名)。IPv6の検索は現時点では国レベルのデータのみを返します。

ParameterInDescription
ippath必須。有効なIPv4またはIPv6アドレス。
langqueryオプション。country_name と continent をローカライズします: en(デフォルト)、pt, fr, de, zh-TW, ko, zh-CN, ja-JP, es-ES, ar-SA, hi-IN。
fieldsqueryオプション。含めるフィールドをカンマ区切りで指定します。例: ?fields=ip,country_code,is_vpn
formatqueryオプション。レスポンスのフォーマット: json(デフォルト)、csv、text、xml、yaml。
curl https://ipto.to/v1/ip/8.8.8.8 # only the fields you want: curl "https://ipto.to/v1/ip/8.8.8.8?fields=ip,asn,country_code,city" # {"ip":"8.8.8.8","asn":15169,"country_code":"US","city":"Mountain View"}
GET/v1/search/:query

ホームページの検索バーの背後にある統合検索エンドポイントです。:query がIP、ASN(AS15169 または 15169)、2文字の国コード、メールアドレス、電話番号のいずれであるかを検出し、関連するすべてのチェックを1つのレスポンスに集約します。IPクエリの場合、サーバー側で並行して、主要なIP検索に加えてRPKI、IP-to-company、モバイルキャリア、ホストされているドメイン、周辺情報の検索にファンアウトします。そのため、1回の検索で消費されるのは機能ごとに1件ずつではなく、1日のレート制限予算に対する1リクエスト分のみです。

ParameterInDescription
querypath必須。IP、ASN、国コード、メールアドレス、または電話番号。
FieldTypeDescription
querystringデコードされた入力値(受信したまま)。
detected_typestring"ip"、"asn"、"country"、"email"、または "phone" のいずれか。
ipobject|nulldetected_type が "ip" の場合に含まれます — GET /v1/ip/:ip と同じ形式です。
rpkiobject|nullIPクエリの場合に含まれます — GET /v1/ip/:ip/rpki と同じ形式です。
companyobject|nullIPクエリの場合に含まれます — GET /v1/ip/:ip/company と同じ形式です。
whoisobject|nullIPクエリの場合に含まれます — GET /v1/ip/:ip/whois と同じ形式です。
carrierobject|nullIPクエリの場合に含まれます — GET /v1/ip/:ip/carrier と同じ形式です。
asn / country / email / phoneobject|nulldetected_type に該当する場合、上記の6つのフィールドの代わりに含まれます — その種別専用のエンドポイントと同じ形式です。

各サブフィールドは個別に劣化します — アップストリーム(RIPEstat、RDAPサーバー、crt.sh)が遅延または失敗した場合、そのフィールドのみが null になり、検索全体が失敗することはありません。プライマリクエリ自体が無効な場合(例: 不正な形式のIP)にのみ、リクエスト全体としてエラーステータスが返されます。

curl https://ipto.to/v1/search/8.8.8.8
GET/v1/ip/:ip/hostname

逆引きDNS — DNS-over-HTTPSによる単発のライブPTR検索であり、ドメイン列挙データベースではありません。IPにPTRレコードがない場合は null を返します。

ParameterInDescription
ippath必須。有効なIPv4またはIPv6アドレス。
curl https://ipto.to/v1/ip/8.8.8.8/hostname # {"ip":"8.8.8.8","hostname":"dns.google"}
GET/v1/ip/:ip/rpki

IPが現在アナウンスしているルートに対するRPKIルートオリジン検証で、RIPEstat経由でライブに解決されます(ROAデータベースの取り込みやローカルでの同期は行いません)。status は "valid"、"invalid"、"unknown" のいずれかのみであり、他のシグナルから合成されることはありません。RIPEstatの失敗やタイムアウトが発生した場合は、エラーではなく理由の文字列とともに "unknown" が返されます。

ParameterInDescription
ippath必須。有効なIPv4またはIPv6アドレス。
FieldTypeDescription
asninteger|null現在アナウンスしているASNで、ライブに解決されます — 本サイト独自のASNデータセットから導出されたものではありません。
prefixstring|null現在アナウンスされているCIDRプレフィックス。
statusstring"valid"、"invalid"、または "unknown"。
validating_roasarrayRIPEstatが一致させた個別のROA(複数可)で、それぞれ origin/prefix/max_length/validity を含みます。
validatorstring|nullRIPEstatが使用したRPKIバリデータ(例: "routinator")。
reasonstring|null"unknown" という結果の理由を説明します — 例えば、該当するROAが存在しない、またはRIPEstatに到達できなかった場合など。
curl https://ipto.to/v1/ip/8.8.8.8/rpki # {"ip":"8.8.8.8","asn":15169,"prefix":"8.8.8.0/24","status":"valid",...}
GET/v1/rpki

明示的な(ASN、プレフィックス)によるRPKI検証です — 上記のIPベースの簡易チェックとは異なり、確認したい正確なルートをすでに把握している場合に使用します。

ParameterInDescription
asnquery必須。ASN番号(ASプレフィックスの有無は問いません)。例: 15169 または AS15169。
prefixquery必須。CIDRプレフィックス。例: 8.8.8.0/24。
curl "https://ipto.to/v1/rpki?asn=15169&prefix=8.8.8.0/24"
GET/v1/ip/:ip/company

RDAP(構造化WHOIS)の登録者データとASN自体の組織名を組み合わせることで、IPが登録されている組織を特定します。信頼度はカテゴリ形式で示され、数値スコアではありません。

ParameterInDescription
ippath必須。有効なIPv4またはIPv6アドレス。
FieldTypeDescription
company_namestring|null解決された会社名 — confidence が "low"(2つのソースが一致せず、どちらも正しいとは判断できない場合)または "none" の場合は null になります。
rdap_org_namestring|nullRDAPの登録者名で、company_name とは独立した値です。
asn_org_namestring|nullASN自体の組織名で、company_name とは独立した値です。
confidencestring"high"(両ソースが一致)、"medium"(一方のソースのみ利用可能)、"low"(ソース間で不一致 — 両方を表示)、または "none"。
reasonstringconfidence の階層について、平易な言葉で説明します。
curl https://ipto.to/v1/ip/1.1.1.1/company # {"ip":"1.1.1.1","company_name":null,"rdap_org_name":"APNIC Research and Development","asn_org_name":"Cloudflare, Inc.","confidence":"low",...}
GET/v1/ip/:ip/whois

RDAP登録レコードそのものです — ネットワークブロック、登録日/最終変更日、RDAPに記録されているすべての連絡先を含みます。上記の /company は同じ登録者データをASNの組織名と照合して信頼度付きの単一の回答にまとめますが、このエンドポイントは生のレコードをそのまま返すもので、従来のWHOIS出力に近い形式です。IPv6アドレスにも対応しています。

ParameterInDescription
ippath必須。有効なIPv4またはIPv6アドレス。
FieldTypeDescription
availablebooleanRDAPレコードを解決できなかった場合は false になります — reason を参照してください。
reasonstring|nullavailable: false という結果の理由を説明します。
startAddress / endAddress / cidrstring|null登録されているネットワークブロック。
netName / netHandle / parentHandlestring|nullネットワークオブジェクトに割り当てられたRIR識別子。
countrystring|nullRDAPによる登録者の国。
allocationTypestring|null例: "direct allocation"、"reassigned"。
registeredDate / lastChangedDatestring|nullRDAPレコードのISO形式のタイムスタンプ。
rirstring|nullこのレコードを提供した地域レジストリ(ARIN、RIPE、APNIC、LACNIC、AFRINIC)。
contactsarrayRDAPに記録されているすべての連絡先(最初に一致したものだけではありません)で、それぞれ roles、name、email、handle を含みます。
curl https://ipto.to/v1/ip/8.8.8.8/whois # {"ip":"8.8.8.8","available":true,"cidr":"8.8.8.0/24","netName":"LVLT-GOGL-8-8-8","rir":"ARIN","contacts":[...],...}
GET/v1/ip/:ip/carrier

モバイルネットワークに分類されたIPに対するベストエフォートのモバイルキャリア識別で、MCC/MNCオペレーターディレクトリと照合されます。単一の carrier フィールドは意図的に設けていません — 下記の matched_carrier_entries と note を参照してください — 単純なキャリア名を返すと、加入者単位のライブな判定であるかのように読めてしまいますが、このデータではそこまで正直に保証できないためです。

ParameterInDescription
ippath必須。有効なIPv4またはIPv6アドレス。
FieldTypeDescription
is_mobile_networkbooleanfalse の場合はここで処理が終わり、ディレクトリは空になります — モバイル以外のASNに対して推測は行いません。
asn_organizationstring|nullASN自体の組織名。
matched_carrier_entriesarrayキャリア名が asn_organization とあいまい一致するMCC/MNCディレクトリの行で、IPの所属国に限定されます。
notestringこのフィールドが保証できる内容とできない内容を説明します。
curl https://ipto.to/v1/ip/8.8.8.8/carrier # {"ip":"8.8.8.8","is_mobile_network":false,"asn_organization":null,"matched_carrier_entries":[],...}
GET/v1/ip/:ip/hosted-domains

IPの逆引きDNS(PTR)ホスト名と証明書透明性ログ(crt.sh)を通じて、そのIPに関連するドメインを検出します — 一般的な逆引きIP検索ではありません。レスポンス内の limitations フィールドで、検出できる内容とできない内容が具体的に説明されています。

ParameterInDescription
ippath必須。有効なIPv4またはIPv6アドレス。
FieldTypeDescription
ptr_hostnamestring|nullIPの逆引きDNSホスト名。PTRレコードがない場合は null。
root_domainstring|nullptr_hostname から導出された登録可能ドメイン。
subdomains_seenarray|null証明書透明性を通じて検出されたサブドメイン。null は crt.sh の検索自体が完了できなかったことを意味し、検索は実行されたが何も見つからなかったことを意味する空配列とは区別されます。
limitationsstringこの機能が構造的に検出できない内容を説明します(PTRなし、共有ホスティング、証明書未取得のドメインなど)。
curl https://ipto.to/v1/ip/8.8.8.8/hosted-domains # {"ip":"8.8.8.8","ptr_hostname":"dns.google","root_domain":"dns.google","subdomains_seen":["dns.google","dns.google.com",...],...}
POST/v1/ip/bulk

一括検索 — リクエストあたり最大100件のIPまで対応、Pro/Enterprise限定です。各IPをキーとしたオブジェクトを返します。キャッシュとデータベースの読み取りを並行して行うため、逐次呼び出しよりも高速です。バッチ内の各IPは、個別に検索した場合と同様に1日のリクエスト予算にカウントされます。無料プランでのリクエストは403になります — 詳細は料金ページを参照してください。

ParameterInDescription
bodybody (JSON)IP文字列のJSON配列。例: ["1.1.1.1","8.8.8.8"]
curl -X POST https://ipto.to/v1/ip/bulk \ -H "Content-Type: application/json" \ --data '["1.1.1.1","8.8.8.8"]'
GET/v1/asn/:asn

自律システム番号(ASN)で検索します。組織名、国、大陸、IP範囲数、分類種別、為替レート、およびロケール参照データ(言語、TLD、首都、国境)を返します。

ParameterInDescription
asnpathASプレフィックスを除いたASN番号。例: Googleの場合は 15169。
langqueryオプション。country_name と continent をローカライズします: en(デフォルト)、pt, fr, de, zh-TW, ko, zh-CN, ja-JP, es-ES, ar-SA, hi-IN。
formatqueryオプション。レスポンスのフォーマット: json(デフォルト)、csv、text、xml、yaml。
curl https://ipto.to/v1/asn/15169
GET/v1/places/:ip

IPの都市レベルの位置情報を逆ジオコーディングし、周辺の関心地点(レストラン、公園、学校、交通機関、著名なランドマーク)、データソースが存在する地域の犯罪データ(英国・米国のみ)、およびオプションのオンデマンド通勤時間(車)の見積もりを返します。

ParameterInDescription
ippath必須。有効なIPv4アドレス。IPv6は現時点では未対応です。
dest_latqueryオプション。通勤時間見積もりのための目的地の緯度 — dest_lon と組み合わせて指定します。
dest_lonqueryオプション。通勤時間見積もりのための目的地の経度 — dest_lat と組み合わせて指定します。
dest_addressqueryオプション。通勤時間見積もりのための自由形式の目的地住所で、自動的に順ジオコーディングされます。dest_lat/dest_lon も同時に指定された場合は無視されます。
FieldTypeDescription
geocodeobject|nullcountry、countryCode、region、city、neighbourhood、displayName — IPにジオコーディング元となる都市レベルの位置情報がない場合は null。
locality.restaurants / .parks / .schools / .transitarrayカテゴリごとに最大4件の最寄りエントリで、それぞれ name と distanceMeters を含みます。
locality.notablearrayWikidata経由で取得した、簡単な説明付きの近隣の著名なランドマーク。
locality.usCrimeobject|null最寄りの機関による暴力犯罪/財産犯罪の合計件数 — 米国のみで、デプロイに FBI_CRIME_API_KEY が必要です。それ以外の地域では null になります。
locality.ukCrimeobject|null半径1マイル以内のストリートレベルの事件概要 — 英国のみ。
locality.caCrimenull常に null — カナダ全土の犯罪データソースは組み込まれていません(docs/places.md を参照)。
commuteobject|nulldurationMinutes と distanceKm。目的地が指定され、OpenRouteServiceがルートを返した場合にのみ含まれます。それ以外の場合は null で、推測による計算は行いません。
curl https://ipto.to/v1/places/8.8.8.8 curl "https://ipto.to/v1/places/8.8.8.8?dest_address=Space+Needle,+Seattle"
GET/v1/country/:code

国レベルの集計統計に加え、ロケール参照データ(通貨、為替レート、言語、TLD、首都、国境)を返します。

ParameterInDescription
codepathISO 3166-1 alpha-2形式の国コード。例: US、DE、JP。
langqueryオプション。country_name と continent をローカライズします: en(デフォルト)、pt, fr, de, zh-TW, ko, zh-CN, ja-JP, es-ES, ar-SA, hi-IN。
formatqueryオプション。レスポンスのフォーマット: json(デフォルト)、csv、text、xml、yaml。
curl https://ipto.to/v1/country/US # {"country_code":"US","country_name":"United States","continent":"North America","currency_code":"USD", # "calling_code":"+1","languages":["English"],"tld":[".us"],"capital":"Washington D.C.","borders":["CA","MX"], # "is_eu":false,"ip_range_count":151633,"ip_range_count_v6":30329,"asn_count":18243, ...}
GET/v1/ua

User-Agent文字列を解析します。ブラウザ、OS、デバイス種別、ボット検出結果を返します。デフォルトでは呼び出し元の User-Agent ヘッダーを読み取りますが、?ua= で任意の文字列を渡すこともできます。

ParameterInDescription
uaqueryオプション。解析対象のURLエンコードされたUser-Agent文字列。デフォルトはリクエストの User-Agent ヘッダーです。
curl "https://ipto.to/v1/ua?ua=Mozilla%2F5.0+%28iPhone%3B+CPU+iPhone+OS+17_0%29"
GET/v1/phone/:number

電話番号の検証とフォーマットを常に無料で行います: 地域、回線種別、E.164/国内/国際形式でのフォーマットを、自社ホストのパーサーで処理し、ベンダー呼び出しはありません。IP/キーごとの月間プレミアム予算が利用可能な場合(Freeで月100件、有料プランではさらに多く — 料金を参照)、同じリクエストがリアルタイムキャリア照会サービスから、ライブのキャリア名、ポータビリティステータス、プロバイダーによって分類された電話タイプも追加で返します — sourceと以下のフィールドを参照してください。ローカライズされたcountry_nameとlang/lang_sourceは、階層に関係なく常に含まれます — ローカライゼーションを参照してください。この予算を使い切った場合や、アップストリームで問題が発生した場合は、上記の無料フィールドにシームレスにフォールバックします。そのためにリクエストが失敗することはありません。番号ごとの照会ではなく、国レベルのネットワークオペレーター参照データについては、代わりにGET /v1/carriersを参照してください。

ParameterInDescription
numberpath必須。任意の電話番号(できればE.164形式、例: +14155552671)。先頭の + はURLエンコードしてください。
countryqueryオプション。国内形式であいまいな番号を解析するためのヒントとなる2文字の国コード。例: ?country=US。
modequeryオプション。?mode=currentは、プレミアム階層が利用可能な場合に、番号の(SIM発行時点ではなく)リアルタイムのキャリアを要求します。リクエストが無料プランにフォールバックする場合は無視されます。
FieldTypeDescription
validbooleanその地域の有効な番号計画パターンに一致する場合は true。
country_codestring|nullその番号が属するISO 3166-1 alpha-2形式の地域。
national_formatstring|nullその地域独自の国内表記でフォーマットされた形式。
international_formatstring|null国コードとスペースを含む形式。例: "+1 415 555 2671"。
e164string|null標準的なE.164形式。例: "+14155552671"。
line_typestring|nullFIXED_LINE、MOBILE、FIXED_LINE_OR_MOBILE、VOIP、TOLL_FREE、PREMIUM_RATE、またはそれに準ずる値。多くの番号計画(北米のものを含む)では、番号だけから固定回線とモバイルを区別できません。
sourcestringこのリクエストにライブキャリア照会予算が利用可能だった場合は"premium"、上記の無料パーサーにフォールバックした場合は"local"です。以下のcarrier、phone_type、original_carrier、is_ported、phone_region、country_prefixは、sourceが"premium"の場合のみ値が入ります — さらに下にあるcountry_nameとlang/lang_sourceは、階層に関係なく常に値が入ります。
phone_typestring|nullリアルタイムキャリア照会プロバイダー独自のカテゴリーのいずれかです: mobile、fixed_line、voip、toll_free、premium_rate、shared_cost、personal_number、pager、uan、voicemail、またはunknown — 最初の4つは代表的な例にすぎません。sourceが"local"の場合はnullです — 上記のline_type(ローカルパーサーから得られ、異なるカテゴリーセットを使用)とは別物です。
carrierstring|null番号の現在のネットワークオペレーター名。sourceが"local"の場合はnullです。
original_carrierstring|null番号がその後ポータビリティされている場合、元々発行されていたネットワークオペレーター。sourceが"local"の場合、または番号がポータビリティされていない場合はnullです。
is_portedboolean|null番号が元のキャリアからポータビリティされている場合はtrueです。sourceが"local"の場合はnullです。
phone_regionstring|null番号の市区町村・州レベルの詳細情報(例: "California")で、上記のcountry_codeよりも詳細です。sourceが"local"の場合はnullです。
country_prefixstring|null先頭の"+"を除いた番号の国番号(例: ドイツの場合は"49")。sourceが"local"の場合はnullです。
country_namestring|null完全な国名の表示名(例: "Germany")— 上記のcountry_codeはISO alpha-2形式("DE")のみで、表示用の名称ではありません。上記のプレミアム限定フィールドとは異なり、こちらはcountry_codeがある場合は常に値が入り、他のすべてのエンドポイントのcountry_nameフィールドと同様に?lang=/Accept-Languageによってローカライズされます — 下記のlang/lang_sourceを参照してください。
langstring上記のcountry_nameに実際に適用された言語です — 解決された?lang=の値、またはリクエストがなかった場合やサポートされていない値だった場合は"en"になります。
lang_sourcestringリクエストに?lang=が指定されていた場合は"param"、代わりにAccept-Languageが使用された場合は"header"、どちらもなく英語が使用された場合は"default"です。GET /v1/asn/:asnおよびGET /v1/country/:codeにある同名のフィールドと同じ意味です。
curl "https://ipto.to/v1/phone/+14155552671"
POST/v1/phone/bulk

一括検証です。/v1/ip/bulk とは異なり、すべてのプランで一括アクセスが利用できます — 無料プランを制限しているのは403ではなく、プランごとのバッチ上限です。Free: 10件/リクエスト、100件/日。Pro: 100件/リクエスト、1,000件/日。Enterprise: 1,000件/リクエスト、10,000件/日。この予算は通常の1日あたりのリクエスト上限とは別枠です — 詳細はレート制限を参照してください。

ParameterInDescription
bodybody (JSON)電話番号文字列のJSON配列。
curl -X POST https://ipto.to/v1/phone/bulk \ -H "Content-Type: application/json" \ --data '["+14155552671","+442071838750"]'
GET/v1/carriers

参照用の検索です: 特定の国について既知のモバイルネットワークオペレーター(MCC/MNC)を返します — 特定の電話番号には紐づいていません。コミュニティが管理するMCC/MNCの一覧(MITライセンス、2026年に最終同期 — 詳細はdocsリポジトリを参照)を情報源としています。番号計画の割り当ては頻繁には変わらないため、ライブフィードではなく静的な参照テーブルとしています。

ParameterInDescription
countryquery必須。2文字の国コード。例: ?country=US。
curl "https://ipto.to/v1/carriers?country=US"
GET/v1/email/:email

メールアドレスの構文検証、DNS-over-HTTPSによるライブのMXレコードチェック、およびコミュニティが管理するブロックリスト(CC0ライセンス、毎日同期)による使い捨て/一時ドメインの検出を行います。メールボックス自体の存在は検証しません — それにはこのAPIが行わないSMTPハンドシェイクが必要です(has_mx が証明する内容としない内容の詳細は、下記のフィールドリファレンスを参照してください)。

ParameterInDescription
emailpath必須。任意のメールアドレス(URLエンコード済み。@ は %40 としてエンコードする必要があります)。
FieldTypeDescription
valid_syntaxboolean標準的なメールアドレスの構文パターンに一致する場合は true。メールボックスの存在は検証しません。
domainstring|nullドメイン部分(小文字化済み)。valid_syntax が false の場合は null。
has_mxboolean|null現時点でドメインに1つ以上のMXレコードがある場合は true。構文が無効だった場合、またはDNSクエリ自体が失敗・タイムアウトした場合は null になります — null は false ではなく「不明」として扱ってください。
disposableboolean|nullドメインが既知の使い捨て/一時メールプロバイダーに一致する場合は true。has_mx と同じ条件下では null になります。
source"premium"|"local"このリクエストでライブチェックが実行された場合は "premium"、実行されなかった場合は "local" です(上限到達、または機能が有効化されていない) — 上記のフィールド(valid_syntax から disposable まで)はどちらの場合も常に入力されます。
is_reachablestring|nullオプションのライブチェックによる総合判定: "safe"(配達可能)、"invalid"(拒否)、"risky"(不確実)、"unknown"(判定不能 — 再試行してください)。このリクエストでライブチェックが実行されなかった場合は null です(下記の source を参照)。
is_catch_allboolean|nullドメインがどのアドレス宛てのメールも受け入れる場合に true となり、この特定のメールボックスの存在は確認できません。ライブチェックが実行されなかった場合は null です。
mailbox_fullboolean|nullライブチェックでメールボックスが満杯と判明した場合に true です。ライブチェックが実行されなかった場合は null です。
is_role_accountboolean|nullアドレスが個人のメールボックスではなく役割アカウント(例: support@、admin@)のように見える場合に true です。ライブチェックが実行されなかった場合は null です。
is_disabledboolean|nullライブチェックでメールボックスが明示的に無効化されていると判明した場合に true です。ライブチェックが実行されなかった場合は null です。
curl "https://ipto.to/v1/email/user%40example.com" # When the live-verification budget allows, the same response also includes the # source/is_reachable/is_catch_all/mailbox_full/is_role_account/is_disabled fields above: # {"email":"user@example.com","valid_syntax":true,"domain":"example.com","has_mx":true, # "disposable":false,"source":"premium","is_reachable":"safe","is_catch_all":false, # "mailbox_full":false,"is_role_account":false,"is_disabled":false}
GET/v1/fraud-score

提供されたIP、メールアドレス、電話番号、User-Agentのうち、渡された項目を組み合わせて0〜100の単一スコアを算出します — これはip-api.com、ipapi.co、ipgeolocation.io、ipify.org、ipregistry.co、ip2location.io、AbstractAPI、IPLocate.io、BigDataCloudのいずれも(直接確認した限り)単一の統合シグナルとしては提供していない機能です。4つの入力はすべてオプションかつ独立しており、任意の組み合わせで渡すことができます。ip を省略した場合は自分自身のIP、ua を省略した場合は自分自身のUser-Agentヘッダーがデフォルトとして使用されます。これは GET /v1/ip および GET /v1/ua と同じ規則です。渡さなかったシグナルはレスポンスから単に除外されるだけで、クリーンとして採点されることはありません — その重みは実際に提供されたシグナルに再配分されます。

ParameterInDescription
ipqueryオプション。デフォルトは自分自身のIPです。IPv6は現時点ではスコア対象外です(脅威データAPIの他の部分と同じ制限)。
emailqueryオプション。任意のメールアドレス。
phonequeryオプション。任意の電話番号。
uaqueryオプション。デフォルトは自分自身のUser-Agentヘッダーです。
FieldTypeDescription
scoreinteger提供されたシグナルにわたる0〜100の加重合成スコア。
risk_tierstring"low"(20未満)、"medium"(20-44)、"high"(45-69)、または "critical"(70以上)。
signalsobject入力ごとの内訳です — 実際に提供した入力に対応するキー(ip、email、phone、user_agent)のみが含まれます。それぞれに個別のコンポーネントスコアと、GET /v1/ip/:ip、/v1/email/:email、/v1/phone/:number、/v1/ua がその入力に対してすでに返しているものと同じフィールドが含まれます。
curl "https://ipto.to/v1/fraud-score?ip=1.2.3.4&email=test%40mailinator.com"
GET/v1/screenshot

実際のヘッドレスChromeインスタンス(Cloudflare Browser Renderingを使用しており、サードパーティのスクリーンショットベンダーではありません)でURLをレンダリングし、PNGを返します。内部/プライベートな対象(localhost、RFC 1918の範囲、リンクローカル/クラウドメタデータアドレス)は、ブラウザが起動する前に拒否されます。Browser Rendering自体のプラットフォームレベルの制限を受け、これは本APIの他の部分よりもはるかに厳しいものです — 下位のCloudflareプランでは、通常の1日あたりのリクエスト予算に達するよりも先にスロットリングされることを想定してください。

ParameterInDescription
urlquery必須。http または https である必要があります。
curl "https://ipto.to/v1/screenshot?url=https://example.com" --output screenshot.png
GET/v1/language

ローカルのトライグラム頻度解析によってテキストの言語を識別します — 外部ベンダーの呼び出し、AIモデルによる推論、ログ記録は一切行いません。10文字未満の入力では language が null になります。約30文字未満でも推測結果は返されますが、reliable は false になります。

ParameterInDescription
textquery必須。最大5,000文字まで — それより長い入力は拒否されず、切り詰められます。
FieldTypeDescription
languageobject|null最も一致した言語の code(ISO 639-1)、iso639_3、name、local_name。テキストが短すぎる場合や認識できない場合("und")は null。
reliableboolean短い入力の場合は false になります — この結果は確信度の高い一致ではなく、あくまで推測として扱ってください。
candidatesarray近縁の言語ペア向けに、相対スコア付きで最大5件の次点候補言語を返します。
curl "https://ipto.to/v1/language?text=Bonjour%2C+comment+allez-vous%3F"
GET/v1/currency/convert

2つの通貨(154通貨に対応)間で金額を変換します。すべてのIP、ASN、国検索における currency_code/exchange_rate_usd を支えているのと同じ日次の基準レートフィードを使用しており — ジオロケーションレスポンスにネストする形ではなく、独立した変換エンドポイントとしてここに公開しています。

ParameterInDescription
fromquery必須。3文字のISO 4217通貨コード。
toquery必須。3文字のISO 4217通貨コード。
amountqueryオプション。デフォルトは1です。
FieldTypeDescription
resultnumber変換後の金額。
ratenumberfrom の1単位あたりの to の単位数。
updatedstringこの変換で使用された基準レート同期のISO形式タイムスタンプ。
curl "https://ipto.to/v1/currency/convert?from=USD&to=EUR&amount=100"
GET/v1/currency/rates

対応するあらゆる通貨(USDに限りません)を基準に再計算した、全通貨(154通貨)分の為替レート表。

ParameterInDescription
basequeryオプション。デフォルトはUSDです。
FieldTypeDescription
ratesobject通貨コード → base に対するレートのマップ。
curl "https://ipto.to/v1/currency/rates?base=EUR"
GET/v1/currency/history

1つの通貨ペアについて、過去最大90日分の日次基準レート履歴です — 通貨コンバーターツールのレート推移チャートの背後にあるデータです。一度バックフィルされた後、GET /v1/currency/convert を更新するのと同じcronによって毎日追記されます。これは時系列の単一の日次基準レートであり、売買スプレッドではありません。

ParameterInDescription
targetquery必須。チャート表示する3文字のISO 4217通貨コード。
basequeryオプション。デフォルトはUSDです。
daysqueryオプション。30、60、90のいずれか。デフォルトは30です。
FieldTypeDescription
seriesarray{ date, rate } のペアを日付の昇順で並べた配列。
statsobject返されたシリーズ全体の min、avg、max、current。
curl "https://ipto.to/v1/currency/history?base=USD&target=EUR&days=90"
GET/v1/weather

地名、郵便番号、"lat,lon" のペア、または lat + lon、ip に対する現在の気象状況を返します — detail=1 を指定すると、時間ごとの見通しと複数日の予報も追加されます。米国の地点は米国立気象局(National Weather Service)、それ以外はMET Norwayが提供します。include= を付けると、単位指定、最大9日間、太陽と月、公式警報などを含む完全なドキュメントが返ります — 下の include カードを参照してください。weather-lookup ツールは、このエンドポイントを明示的に呼び出す前に、ブラウザ側で呼び出し元自身の位置も自動検出します。

ParameterInDescription
qquery都市名、郵便番号、または "lat,lon"(最大100文字)。代わりに lat と lon、または ip を渡すこともできます。3つのうち1つが必須です。
detailqueryオプション。"1" を指定すると、weather に pressure_mb/visibility_km/dewpoint_c/sunrise/sunset などが追加され、さらに forecast オブジェクト(hourly + daily)も含まれます。デフォルトでは省略されます。
FieldTypeDescription
conditionstring|null短いテキストによる説明。
temp_c / temp_fnumber|null現在の気温。
feels_like_cnumber|null摂氏で表した体感温度。
humidity_pctnumber|null相対湿度。
wind_kmph / wind_dirnumber|null / string|null風速と16方位の風向。
uv_indexnumber|nullUV指数。
locationobject|null問い合わせた場所について解決された name、region、country、lat/lon — 生の入力値そのものではありません。
forecast.hourly[]arraydetail=1 の場合のみ。今後24時間を3時間刻みで示します: hour_label、temp_c/temp_f、weather_code、chance_of_rain_pct。
forecast.daily[]arraydetail=1 の場合のみ。3日間の見通し: date、day_label、weather_code、condition、chance_of_rain_pct、max/min の temp_c/temp_f。
curl "https://ipto.to/v1/weather?q=Tokyo"
curl "https://ipto.to/v1/weather?q=Tokyo&detail=1"
GET/v1/trademark/:serial

8桁のシリアル番号による出願状況を取得するため、USPTOのTrademark Status & Document Retrieval(TSDR)システムへライブでプロキシします — キャッシュや再販されたコピーではなく、リクエストごとの直接呼び出しです。出願状況データは米国政府の著作物であり、USPTO自身の利用規約によりパブリックドメインとされているため、無断でキャッシュ・再販するのではなく、すべてのレスポンスに source/attribution フィールドが付与されます。商標のロゴ/画像データは意図的に対象外です — USPTOの規約では、画像のライセンスはこのエンドポイントが返す出願状況のテキストデータとは別に扱われています。登録番号による検索はまだ対応していません。現時点でUSPTOが文書化しているのはシリアル番号によるパスのみです。商標検索ツールで試すことができます。

ParameterInDescription
serialpath必須。ちょうど8桁の数字。例: 98267877。
FieldTypeDescription
sourcestring常に "USPTO TSDR"。
attributionstringUSPTOの利用規約で義務付けられているアトリビューション表記。
dataobjectUSPTOから返される出願状況の生データをそのまま(再構成せずに)渡します — 2026-08-12に稼働確認済みです。data.trademarks[0] 配下: status(出願日/登録日、markElement、descOfMark、tm5StatusDesc)、parties.ownerGroups(役割ごとの所有者名/住所)、gsList[](商品/サービスの説明と区分)、prosecutionHistory[](出願手続きの全履歴)。フィールドの有無は出願状況によって異なります — 例えば、審査継続中の出願にはまだ usRegistrationNumber がありません。
curl "https://ipto.to/v1/trademark/98267877" # ANTHROPIC, Reg. No. 8296420
GET/v1/patent/:number

7〜8桁の実用特許番号による付与状況を取得するため、USPTOのPatent File Wrapper API(Open Data Portal)へライブでプロキシします — キャッシュや再販されたコピーではなく、リクエストごとの直接呼び出しです。当初想定していたソース(PatentsViewのSearch API)は2026-03-20に停止したことが確認されたため、代わりにそのライブの後継サービスへプロキシしています。Patent File Wrapperのデータは米国政府の著作物であり、USPTO自身の利用規約によりパブリックドメインとされているため、すべてのレスポンスに source/attribution フィールドが付与されます。対象範囲は出願/審査手続き中心です — Lens.org、Espacenet、Google Patentsのような引用グラフ、パテントファミリー、法的ステータスフィールド、画像は含まれません。対象範囲は2001年以降に出願されたものからです。意匠特許、植物特許、再発行特許は現時点では未対応です。対応するのは付与済みの特許番号による実用特許のみです。特許検索ツールで試すことができます。

ParameterInDescription
numberpath必須。7〜8桁の数字。例: 12393227。付与済みの実用特許番号のみで、出願番号ではありません。
FieldTypeDescription
sourcestring常に "USPTO Patent File Wrapper"。
attributionstringUSPTOの利用規約で義務付けられているアトリビューション表記。
dataobjectUSPTOから返される審査手続き記録の生データをそのまま(再構成せずに)渡します — 実在する特許(12393227、9935534)に対して2026-08-12に稼働確認済みです。主なフィールド: applicationMetaData(inventionTitle、filingDate、applicationStatusDescriptionText、applicationStatusDate、patentNumber、inventorBag[])、recordAttorney.attorneyBag[]、applicationNumberText、および eventDataBag[](審査手続きの全履歴)。番号が存在しない場合、意匠/植物/再発行特許である場合、または2001年以前の対象範囲外である場合は 404 を返します。
curl "https://ipto.to/v1/patent/12393227" # WEARABLE COMPUTING DEVICE, granted 2025
GET/v1/feeds

ページネーション対応のVPN、Tor、脅威インテリジェンスフィードです。1ページあたり200件のエントリを含みます。各エントリには IP/CIDR、プロバイダーのアトリビューション、ISP、国、分類種別が含まれます。

ParameterInDescription
pagequery0始まりのページ番号。デフォルト: 0。
typequery種別でフィルタリングします: VPN、Tor Exit Node、Tor Node、High-Risk Threat Intel。
qqueryIPまたはCIDRの部分文字列でフィルタリングします。
curl "https://ipto.to/v1/feeds?page=0&type=VPN" # {"metadata":{...},"pagination":{"page":0,"page_size":200,"total":11200,"total_pages":56,"has_next":true}, # "ranges":[{"ip":"2.26.157.0/24","type":"VPN","provider":"Datacamp Limited","isp":"Datacamp Limited","country":"GB"}, ...]}
GET/v1/feeds/stats

メタデータのみを返します — 総エントリ数、ソースごとの件数、最終同期時刻。IPデータは返しません。

curl https://ipto.to/v1/feeds/stats # {"total_tracked_ranges":34561,"last_updated":"2026-10-06T18:00:44.321Z", # "sources":[{"name":"X4BNet VPN Ranges","type":"VPN","count":11200}, ...]}
GET/v1/abuse

ページネーション対応の不正利用ネットワーク範囲です。複数フィード間の裏付けにより1〜10でスコア化されます。リスク階層: critical(8-10)、high(5-7)、medium(3-4)。

ParameterInDescription
pagequery0始まりのページ番号。デフォルト: 0。
tierqueryリスク階層でフィルタリングします: critical、high、medium。
qqueryネットワーク範囲の部分文字列でフィルタリングします。
sourcequery任意。source_feed で返される名前そのままのソースフィード名で絞り込みます。例: 'Spamhaus DROP' や 'IPsum Threat Intel'。
curl "https://ipto.to/v1/abuse?page=0&tier=critical&source=Spamhaus%20DROP" # {"metadata":{...},"pagination":{"page":0,"page_size":200,"total":1640,"total_pages":9,"has_next":true}, # "networks":[{"network_range":"1.10.16.0/20","abuse_score":10,"risk_tier":"critical","source_feed":"Spamhaus DROP"}, ...]}
GET/v1/abuse/stats

メタデータのみを返します — 総ネットワーク数、ソースごとの件数、リスク階層の内訳、最終同期時刻。

curl https://ipto.to/v1/abuse/stats # {"total_networks_tracked":18300,"last_updated":"2026-10-06T18:00:15.762Z", # "classification":{"ipsum_threat_intel":16660,"spamhaus_drop":1641,"spamhaus_edrop":0}, # "sources":[{"name":"IPsum Threat Intel","count":16660}, ...]}
GET/v1/datasets/:kind

このAPIがすでに基盤としているオープンデータセットのダウンロード可能なCSVエクスポートです — 同一のデータであり、新たなライセンスは発生しません。asn と ranges は常に利用可能です。geo-city は、そのソースのデータセットが該当デプロイで有効になるまで503を返します。geo-city は統合ビューではなく、一度に1つのジオソースの生データ行をエクスポートします — ?source=primary(デフォルト)または ?source=secondary を指定してください。

ParameterInDescription
kindpathasn、ranges、geo-city のいずれか。
sourcequerygeo-city の場合のみ。primary(デフォルト)または secondary。
curl -OJ https://ipto.to/v1/datasets/asn curl -OJ https://ipto.to/v1/datasets/ranges curl -OJ "https://ipto.to/v1/datasets/geo-city?source=secondary"
POST/v1/keys

APIキーを即座に発行します — メールアドレスも登録も不要です。すべてのキーはFreeプラン(1日1,000リクエスト、一括検索は含まれません)から開始します。ProおよびEnterpriseキーでは、より高い1日あたりの上限と一括検索(リクエストあたり最大100件のIP)が利用可能になります — 詳細は料金ページを参照してください。キーは保存しておいてください — 後から取得することはできません。

curl -X POST https://ipto.to/v1/keys
GET/v1/keys/usage

あるキーがこれまでに行ったリクエスト数を確認します。任意の /v1/* リクエストで X-API-Key ヘッダーまたは ?api_key= を通じてキーを渡すと、そのリクエストがカウントされます。

ParameterInDescription
keyquery必須。POST /v1/keys から返されたキー。
curl "https://ipto.to/v1/keys/usage?key=ipto_xxxxxxxx"
GET/v1/ip/:ip/abuse

IPを所有するネットワークの不正利用報告先を RDAP から取得します。RIR、ネットワークハンドル、該当するCIDR、abuse用メールボックスを返します。報告の送信先を知るために使います。

ParameterInDescription
ippathIPv4またはIPv6アドレス。
curl https://ipto.to/v1/ip/8.8.8.8/abuse # {"available":true,"failure":null,"ip":"8.8.8.8","rir":"arin","network":"GOGL","cidr":"8.8.8.0/24", # "contacts":[{"name":"Abuse","email":"network-abuse@google.com","handle":"ABUSE5250-ARIN"}]}

レジストリに接続できなかった場合、available は false になります(理由は failure に入ります)。

GET/v1/asn/:asn/ranges

ASNが実際にアナウンスしているIP範囲をページ分割で返します。各範囲に国と、ホスティング / モバイル / 住宅 / ボット / ブラックリストのフラグが付きます。

ParameterInDescription
asnpathASプレフィックスを除いたASN番号。例: 15169。
limitquery1ページあたりの範囲数。デフォルト50、最大200。
offsetqueryスキップする範囲の数。デフォルト0。
curl "https://ipto.to/v1/asn/15169/ranges?limit=1&offset=0" # {"asn":15169,"total":153,"limit":1,"offset":0,"ranges":[{"start_ip":"8.8.4.0","end_ip":"8.8.4.255", # "country_code":"US","is_hosting":false,"is_mobile":false,"is_residential":false,"is_bot":false,"is_blacklisted":false}]}
GET/v1/asn/:asn/whois

ASNのレジストリ(RDAP)情報: ハンドル、名前、国、割り当て種別、登録日、RIRと連絡先。

ParameterInDescription
asnpathASプレフィックスを除いたASN番号。例: 15169。
curl https://ipto.to/v1/asn/15169/whois # {"asn":15169,"available":true,"reason":null,"handle":"AS15169","name":"GOOGLE","country":"US", # "allocationType":"...","registeredDate":"...","lastChangedDate":"...","rir":"arin","contacts":[...]}

レジストリに接続できない場合、available は false になり、reason が付きます。

GET/v1/asn/:asn/geo-sample

ASNが実際にどこにあるか: 最大クラスの範囲をサンプリングして市区町村レベルで位置を割り出した点と、最も多い都市。ASNページの分布マップに使われます。

ParameterInDescription
asnpathASプレフィックスを除いたASN番号。例: 15169。
curl https://ipto.to/v1/asn/15169/geo-sample # {"asn":15169,"sampled":true,"sample_size":30,"points":[{"city":"Council Bluffs","state":"Iowa", # "country_code":"US","latitude":41.2591,"longitude":-95.8517}, ...],"top_cities":[...]}

サンプルであり、範囲の全リストではありません。すべての範囲は /v1/asn/:asn/ranges を使ってください。

GET/v1/asn/:asn/hosted-domains

ASN内でホストされているドメイン。アドレスのサンプルに対する逆引きDNS(PTR)で検出します。各エントリにはルートドメイン、PTRホスト名、サンプルしたIPが含まれます。

ParameterInDescription
asnpathASプレフィックスを除いたASN番号。例: 15169。
curl https://ipto.to/v1/asn/15169/hosted-domains # {"asn":15169,"sampled":true,"sample_size":5,"domains":[{"root_domain":"googleusercontent.com", # "ptr_hostname":"0.0.214.35.bc.googleusercontent.com","sample_ip":"35.214.0.0"}, ...]}

サンプリングのため、ASNが何をホストしているかの目安であり、完全な一覧ではありません。単一のIPには /v1/ip/:ip/hosted-domains を使ってください。

GET/v1/asn/:asn/relationships

ASNのBGP関係: ピア、アップストリームプロバイダー、ダウンストリームの顧客と、それぞれの件数。

ParameterInDescription
asnpathASプレフィックスを除いたASN番号。例: 15169。
curl https://ipto.to/v1/asn/15169/relationships # {"asn":15169,"available":true,"peers":[],"upstreams":[],"downstreams":[], # "peer_count":0,"upstream_count":0,"downstream_count":0}

BGPデータソースに接続できなかった場合、available は false になります。available: true で配列が空なら、そのASNについて報告がなかったことを意味します。

GET/v1/ip-ranges

IPv4空間のディレクトリ: /8ブロックごとに1エントリで、含まれる範囲・国・ASNの数と最多の国を返します。ここから始めて /v1/ip-ranges/:a と /v1/ip-ranges/:a/:b で掘り下げます。

curl https://ipto.to/v1/ip-ranges # {"blocks":[{"octet":1,"range_count":814,"country_count":15,"asn_count":182,"top_country":"KR", # "top_country_share":35,"top_country_name":"South Korea"}, ...],"data_version":"2026-10-06"}
GET/v1/ip-ranges/:a

1つの/8(例: 8.0.0.0/8)の中にある/16ブロック。ブロックごとの範囲・国・ASNの数も同様に返します。

ParameterInDescription
apath第1オクテット、0〜255。
curl https://ipto.to/v1/ip-ranges/8 # {"octet1":8,"cidr":"8.0.0.0/8","blocks":[{"octet":8,"range_count":...,"country_count":...,"asn_count":..., # "top_country":"US", ...}, ...]}
GET/v1/ip-ranges/:a/:b

1つの/16(例: 8.8.0.0/16)の中の割り当て済み範囲。それぞれが属するASNと、ブロックごとの件数も返します。

ParameterInDescription
apath第1オクテット、0〜255。
bpath第2オクテット、0〜255。
curl https://ipto.to/v1/ip-ranges/8/8 # {"octet1":8,"octet2":8,"cidr":"8.8.0.0/16","blocks":[{"octet":1,"range_count":1,"country_count":1,"asn_count":1, # "top_country":"US", ...}, ...],"ranges_total":30,"ranges":[...]}
GET/v1/nearby

座標に対する Nearby ペイロードの一部分。クライアントが届いた部分から順に描画できます: 逆ジオコーディング、周辺の関心地点、地域の犯罪統計。

ParameterInDescription
latquery緯度。必須。
lonquery経度。必須。
partquery取得する部分: geocode、poi、crime のいずれか。未知の値は400を返します。
countryquerypart=crime のみ: ISOの国コード。犯罪データがあるのは US と GB です。
regionquerypart=crime のみ: 州または地域名。例: Utah。
cityquerypart=crime のみ: 都市名。例: Orem。
langquery任意。地名ラベルをローカライズします(上のローカライズ表と同じコード)。
curl "https://ipto.to/v1/nearby?lat=40.2969&lon=-111.6948&part=geocode" # {"geocode":{...reverse-geocoded place...}} curl "https://ipto.to/v1/nearby?lat=40.2969&lon=-111.6948&part=poi" # {"locality":{...nearby points of interest...}} curl "https://ipto.to/v1/nearby?lat=40.2969&lon=-111.6948&part=crime&country=US&region=Utah&city=Orem" # {"locality":{"ukCrime":null,"usCrime":{"agencyName":"Orem Police Department","agencyType":"City", # "distanceKm":4.4,"year":2025,"categories":[{"category":"violent-crime","label":"Violent crime","totalOffenses":129}, ...]}}}
GET/v1/commute

2地点間の車での所要時間と距離。高速パス: /v1/places/:ip が行う逆ジオコーディングと周辺施設の検索を省略します。

ParameterInDescription
from_latquery出発地の緯度。必須。
from_lonquery出発地の経度。必須。
dest_latquery目的地の緯度。dest_lon と併用するか、代わりに dest_address を指定します。
dest_lonquery目的地の経度。
dest_addressquery自由入力の目的地。ジオコーディングされます。dest_lat/dest_lon がない場合に使われます。
curl "https://ipto.to/v1/commute?from_lat=40.2969&from_lon=-111.6948&dest_lat=40.7608&dest_lon=-111.8910" # {"from":{"lat":40.2969,"lon":-111.6948},"to":{"lat":40.7608,"lon":-111.891}, # "commute":{"durationMinutes":44,"distanceKm":63.5}}

目的地を解決できない場合、レスポンスは to: null、commute: null、reason 文字列になります。

GET/v1/address-lookup

IPではなく入力した住所を起点にした /v1/places/:ip のペイロード: ジオコード、ローカリティ、任意の通勤時間の推定。

ParameterInDescription
qquery自由入力の住所。必須。
dest_latquery任意の目的地の緯度。通勤時間の推定を含めるときに指定します(dest_lon と併用)。
dest_lonquery任意の目的地の経度。
dest_addressquerydest_lat/dest_lon の代わりに指定できる、自由入力の任意の目的地。
partquerypart=geo はラベルと座標のみを返し、最初の描画を速くします。
langquery任意。地名ラベルをローカライズします(上のローカライズ表と同じコード)。
curl "https://ipto.to/v1/address-lookup?q=1600+Pennsylvania+Ave+NW+Washington+DC" # {"query":"1600 Pennsylvania Ave NW Washington DC","found":true,"label":"...","latitude":38.89, # "longitude":-77.03,"geocode":{...},"commute":null,"locality":{...}} curl "https://ipto.to/v1/address-lookup?q=1600+Pennsylvania+Ave+NW+Washington+DC&part=geo" # {"query":"...","found":true,"label":"...","latitude":38.89,"longitude":-77.03}

住所をジオコーディングできなかった場合、found は false になります。

GET/v1/address-suggest

住所のオートコンプリート: 入力途中の住所に一致する場所をいくつか返します。特定の地点を優先することもできます。

ParameterInDescription
qquery入力途中の住所テキスト。必須。
near_latquery結果を寄せたい地点の緯度(任意)。
near_lonquery結果を寄せたい地点の経度(任意)。
curl "https://ipto.to/v1/address-suggest?q=1600+Penn&near_lat=38.9&near_lon=-77.0" # {"suggestions":[{"label":"Penn Quarter, Ward 2, Washington, District of Columbia, United States", # "lat":38.8949563,"lon":-77.0224592}, ...]}
GET/v1/weather?include=

地名、郵便番号、座標、またはIPに対する完全な気象ドキュメントです。include で必要なブロックを選びます: current、hourly、daily、astro(太陽と月)、solar、indicators、alerts、marine、air_quality、nowcast、またはall。米国の地点は米国立気象局(National Weather Service)、それ以外はMET Norwayのデータで、どちらかは meta.source でわかります。include を省略すると、上記の簡易形式 { query, weather } が返ります。

ParameterInDescription
q / lat+lon / ipquery場所の指定: q(都市名、郵便番号、または "lat,lon")、lat と lon、または ip のいずれか。3つのうち1つが必須です。
countryquery任意。あいまいな q を特定するための ISO コードまたは国名。例: 郵便番号 75001 に country=FR。
includequeryこの形式では必須。カンマ区切り: current、hourly、daily、astro、solar、indicators、alerts、marine、air_quality、nowcast、またはall。
unitsquerymetric(既定)または imperial。フィールド名も単位に従います: temp_c は temp_f、wind_kmph は wind_mph、precip_mm は precip_in になります。
wind_unitquerykmh、ms、mph、kn。風速の単位だけを変更します。
hoursquery返す1時間ごとのエントリ数(1〜240)。既定は48。直近は1時間ごと、その先は6時間ごとで、step_hours で区別できます。
daysquery返す日次エントリ数(1〜9)。既定は7。米国のデータは7日間をカバーします。
curl "https://ipto.to/v1/weather?lat=38.8977&lon=-77.0365&include=current,daily,alerts&days=1" # {"query":"38.8977,-77.0365","place":{"name":"Washington","region":"DC","country":"United States","country_code":"US", # "lat":38.8977,"lon":-77.0365,"timezone":"America/New_York"}, # "current":{"time":"2026-10-07T12:00-04:00","observed":false,"temp_c":18.9,"feels_like_c":18.9,"humidity_pct":52,"wind_kmph":12.9, # "wind_gust_kmph":24.1,"wind_dir":"S","uv_index":5.4,"condition":"Sunny","weather_code":113,"is_day":true, ...}, # "daily":[{"date":"2026-10-07","tmax_c":22.2,"tmin_c":12.8,"precip_mm":0,"precip_prob_pct":1,"gust_max_kmph":25.9,"uv_index_max":5.4, ...}], # "alerts":{"available":true,"source":"NWS","official":true,"items":[]}, # "meta":{"source":"NOAA National Weather Service","fallback_used":false,"coverage":{"precip_prob":true,"wind_gusts":true, ...}, # "derived":["current.uv_index","current.wet_bulb", ...],"timezone":"America/New_York", ...}} curl "https://ipto.to/v1/weather?q=Oslo&include=marine,air_quality,nowcast&units=imperial" # Norway-only blocks come back with available: true there and available: false everywhere else

meta.coverage は、その地点で利用できるフィールドを示します。降水確率、突風、雷の確率は米国と北欧のみで、それ以外では null(0ではありません)になります。alerts は米国とノルウェーの公式警報です。marine、air_quality、nowcast はノルウェーと近海のみが対象で、それ以外は available: false になります。meta.derived にあるものはipto.toによる推定値で、indicators は導出されたフラグであり公式の警報ではありません。データを表示する場合は meta.attribution を残してください(MET Norwayのデータは CC BY 4.0 です)。

GET/v1/weather/history

すでに照会された地点について、ipto.to が独自に記録した日次データです。その日の予報スナップショットの中での最高気温の最大値、最低気温の最小値、降水量の最大値を保持します。データがあるのは過去に照会された地点のみで、時間とともに蓄積されます。

ParameterInDescription
q / lat+lon / ipquery場所の指定: q(都市名、郵便番号、または "lat,lon")、lat と lon、または ip のいずれか。3つのうち1つが必須です。
daysquery返す直近の日数(1〜400)。既定は30。
curl "https://ipto.to/v1/weather/history?q=Tokyo&days=7" # {"query":"Tokyo","place":{"name":"Tokyo","cc":"JP", ...}, # "days":[{"date":"2026-10-06","tmax_c":24.1,"tmin_c":17.8,"precip_mm":1.2,"condition_code":296,"source":"metno","snapshots":4}, ...], # "note":"Daily envelope of day-0 forecast snapshots (highest high, lowest low, largest precipitation seen), not station observations."}

これらは予報のスナップショットであり、観測所の観測値や再解析ではないため、観測された履歴として使わないでください。404 は、その地点のスナップショットがまだ記録されていないことを意味します。

GET/v1/weather/radar/frames

利用可能なレーダーアニメーションのフレームを古い順に返します。各フレームにUnixタイムスタンプと、レーダータイルURLで使うフレームIDが付きます。

curl https://ipto.to/v1/weather/radar/frames # {"frames":[{"time":1791316200,"id":"fdc753dba723"},{"time":1791316800,"id":"2314000028f2"}, ...]}
GET/v1/weather/radar/:frame/:z/:x/:y.png

標準的なウェブマップの z/x/y 位置における、1フレーム分のレーダーマップタイル(PNG)。同一オリジンで配信されるため、マップはサードパーティへのリクエストなしで読み込めます。

ParameterInDescription
framepath/v1/weather/radar/frames で得たフレームID(小文字の16進数)。
zpathズームレベル。
xpathタイルの列。
ypathタイルの行。
# 1. pick the latest frame id FRAME=$(curl -s https://ipto.to/v1/weather/radar/frames | python3 -c "import sys,json;print(json.load(sys.stdin)['frames'][-1]['id'])") # 2. fetch a tile (image/png) curl -o radar.png "https://ipto.to/v1/weather/radar/$FRAME/5/6/12.png"
GET/v1/weather/satellite/:z/:x/:y.png

標準的なウェブマップの z/x/y 位置の衛星画像マップタイル。同一オリジンで配信されます。

ParameterInDescription
zpathズームレベル。
xpathタイルの列。
ypathタイルの行。
curl -o satellite.jpg "https://ipto.to/v1/weather/satellite/5/6/12.png" # the response body is the tile image (served as image/jpeg despite the .png path)
GET/v1/openapi/email.json

/v1/email/:email 向けの機械可読なOpenAPI 3.1仕様。LLMやMCPエージェントがこのドキュメントを読まずにメールエンドポイントを呼び出せるように書かれています。

curl https://ipto.to/v1/openapi/email.json # {"openapi":"3.1.0","info":{...},"servers":[{"url":"https://ipto.to"}],"paths":{"/v1/email/{email}":{...}}}

IP検索フィールドリファレンス

FieldTypeDescription
ipstring検索対象のIPアドレス。
versionstring"v4" または "v6"。
bogonbooleanプライベート、予約済み、またはルーティング不可のアドレスの場合は true。
bogon_typestring|nullbogon の場合の理由コード: "loopback"、"private"、"link-local"、"multicast"、"reserved"、"documentation"、"unspecified"。
asninteger|nullこのIPをアナウンスしている自律システム番号(ASN)。
asn_namestring|nullASNの短縮名(例: "GOOGLE")。
asn_orgstring|nullASNに登録されている組織(例: "Google LLC")。
asn_typestring|nullASNのカテゴリ: "hosting"、"isp"、"business"、"education"、"government"、"mobile"、"residential"。
continentstring|null大陸の正式名称(例: "North America")。
continent_codestring|null2文字の大陸コード: AF AS EU NA SA OC AN。
country_codestring|nullIP が所在する国の ISO 3166-1 alpha-2 国コード(例: "US")。都市や緯度経度と同じジオロケーションデータに基づきます。ジオロケーションの一致がない場合は ASN の登録国(asn_country_code)が使われ、国名・国旗・通貨なども同じ値から導出されます。
country_namestring|null英語表記の正式な国名(例: "United States")。
country_flagstring|null国の絵文字の旗(例: "🇺🇸")。
is_eubooleanその国がEU加盟国(27か国)の場合は true。
citystring|null都市名。自己IP検索、および統合されたジオソース(IP2LocationまたはMaxMind)のいずれかが一致する明示的な検索で入力されます — geo_precision を確認してください。
statestring|null行政区画/地域区分。city と同じ条件で利用可能です。
postal_codestring|null郵便番号。自己IP検索、およびIP2Location(優先)またはMaxMindが一致する明示的な検索で入力されます — city と同じ条件で利用可能です。
latitudenumber|null10進法の緯度。city と同じ条件で利用可能です。
longitudenumber|null10進法の経度。city と同じ条件で利用可能です。
timezonestring|nullタイムゾーン — city と同じ条件で利用可能です。自己IP検索ではIANA識別子(例: "America/New_York")が使用されます。明示的な検索では、どちらのソースが一致したかによって形式が異なります: IP2Locationの場合は "-08:00" のようなUTCオフセット文字列、MaxMindの場合はIANA名です。
geo_precisionstring位置情報データの精度: "city"、"country"(都市レベルの検索で一致がなかった場合)、または "none"。
geo_country_codestring|nullIP が所在する国(ジオロケーションデータに基づく、ISO 3166-1 alpha-2)。設定されている場合は country_code と同じ値です。ジオロケーションの一致がない場合は null です。
asn_country_codestring|nullASN 保有者の登録国(ISO 3166-1 alpha-2)。保有者の登録国とは別の国からアナウンスされる CDN・VPN・ホスティング・エニーキャストのネットワークでは country_code と異なる場合があります。IP に ASN エントリがない場合は null です。
currency_codestring|nullその国のISO 4217通貨コード(例: "USD")。
exchange_rate_usdnumber|null1USDあたりの現地通貨の単位数。154通貨をカバーする日次同期の基準レートフィードから取得します。対象外の通貨の場合は null。
calling_codestring|null+ を含む国際電話番号の国コード(例: "+1")。
languagesstring[]その国の公用語/公認言語(英語表記)。
tldstring[]国コードトップレベルドメイン。例: [".us"]。
capitalstring|null首都名。
bordersstring[]国境を接する国のISO alpha-2コード。
is_datacenterbooleanIPがホスティングまたはクラウドプロバイダーに属する場合は true。
is_mobilebooleanIPがモバイルキャリアに登録されている場合は true。
is_residentialbooleanIPが住宅用ブロードバンドとして分類されている場合は true。
connection_typestring"mobile"、"datacenter"、または "unknown" — is_mobile/is_datacenter と同じ分類から導出されます。住宅用と法人用の区別は意図的に行いません。ASNの組織名テキストだけからは確実に判別できないためで、mobile または datacenter として確信を持って分類できないASNは、推測するのではなく "unknown" のままとなります。
is_botbooleanIPが既知のボットインフラに関連付けられている場合は true。
is_proxybooleanIPが既知のプロキシ出口である場合は true。
is_vpnbooleanIPが脅威フィード上の既知のVPNサーバー範囲に含まれる場合は true。
is_torbooleanIPが確認済みのTor出口ノードである場合は true。
is_abuserbooleanIPが複数の不正利用インテリジェンスフィードでフラグが立てられたネットワーク範囲に含まれる場合は true。
abuse_scoreinteger|nullis_abuser が true の場合の、複数フィード間の裏付けによる1〜10の深刻度スコア。それ以外の場合は null。
risk_tierstring|null"critical"(8-10)、"high"(5-7)、または "medium"(3-4)— abuse_score から導出されます。フラグが立っていない場合は null。
threat_typestring|nullis_tor/is_vpn/is_abuser が重複する場合に、最も対応の優先度が高い一致カテゴリ: "tor_exit" > "abuser" > "vpn" の順です。いずれにも一致しない場合は null。
flagsobjectis_* フィールドを反映した後方互換のオブジェクトです。キー: hosting、mobile、residential、bot、blacklisted、vpn、tor、abuser。
meta.data_versionstring検索に使用されたデータセットの日付(YYYY-MM-DD)。自己IP検索の場合は "cf-edge"。プライベート範囲の場合は "bogon"。
meta.cachedbooleanレスポンスがキャッシュ層から提供された場合は true。
meta.langstringこのレスポンスで実際に使用された言語 — ?lang= が指定されていればその値と一致し、そうでなければ Accept-Language から解決された値、または "en" になります。
meta.lang_source"param"|"header"|"default"lang がどのように決定されたか: "param"(?lang= が渡された)、"header"(Accept-Language から解決された)、"default"(どちらも指定されなかった)のいずれかです。

出力フォーマット

IP、ASN、国の検索はすべて ?format= に対応しています。

FormatContent-TypeUsage
jsonapplication/jsonデフォルト。完全な構造化レスポンス。
csvtext/csvフラットな key,value のペア。ネストされたオブジェクトは省略されます。
texttext/plainkey: value 形式の行。1行につき1フィールド。
xmlapplication/xml完全なネスト構造。配列はタグを繰り返します。
yamlapplication/x-yaml完全なネスト構造。
curl "https://ipto.to/v1/ip/8.8.8.8?format=csv" curl "https://ipto.to/v1/ip/8.8.8.8?format=xml" curl "https://ipto.to/v1/ip/8.8.8.8?format=yaml" curl "https://ipto.to/v1/ip/8.8.8.8?fields=ip,country_code,is_vpn,is_tor"

ローカライゼーション

/v1/ip、/v1/asn/:asn、/v1/country/:code に ?lang= を渡すと、country_name と continent がローカライズされます。それ以外(ASNの組織名、都市名、通貨コードなど)は元の形式のまま維持されます — これらは識別子や固有名詞であり、UIテキストではないためです。対応していないコードが指定された場合は、エラーにはならず英語にフォールバックします。

CodeLanguage
enEnglish (default)
ptPortuguês
frFrançais
deDeutsch
zh-TW繁體中文
ko한국어
zh-CN简体中文
ja-JP日本語
es-ESEspañol
ar-SAالعربية
hi-INहिन्दी
curl "https://ipto.to/v1/ip/8.8.8.8?lang=de" # "landesname":"Vereinigte Staaten","kontinent":"Nordamerika","ist_vpn":false, ... # every key is renamed and every enum value translated -- this is the default for any non-English lang

?lang= がない場合は、代わりに Accept-Language ヘッダーを送信してください — 同じエンドポイントがこのヘッダーも読み取るため、クエリ文字列なしで curl -H "Accept-Language: es" https://ipto.to/v1/ip/8.8.8.8 だけでレスポンスがローカライズされます。両方が指定された場合は、明示的な ?lang= が常に優先されます。注意: シェルの LANG/LC_ALL 環境変数(例: LANG=es_ES.UTF-8 curl ...)は curl 自身のロケールを設定するだけです — curl はこれを読み取ったり、ヘッダーに変換したりすることはないため、レスポンスの言語には一切影響しません。実際に機能するのは Accept-Language と ?lang= の2つだけです。

curl -H "Accept-Language: es" https://ipto.to/v1/ip/8.8.8.8 # "nombre_país":"Estados Unidos","continente":"Norteamérica" -- full key+value localization, same as ?lang=es # equivalent, explicit form: curl "https://ipto.to/v1/ip/8.8.8.8?lang=es" # does NOT work -- LANG only sets curl's own locale, never a header: LANG=es_ES.UTF-8 curl https://ipto.to/v1/ip/8.8.8.8

すべての /v1/ip、/v1/asn/:asn、/v1/country/:code のレスポンスには lang と lang_source が含まれており(/v1/ip では meta の下にネスト、他の2つではトップレベルのフィールド)、送信したリクエストから推測しなくても、実際にどの言語が適用され、それが "param"、"header"、"default" のどれによって決定されたかを常に正確に確認できます。

curl -s -H "Accept-Language: es" https://ipto.to/v1/ip/8.8.8.8 | python3 -m json.tool # "meta": { "data_version": "...", "cached": true, "lang": "es-ES", "lang_source": "header" }

英語以外の lang を設定すると、すべてのキーと値のローカライズが既定の動作になります — ネストされた flags と meta のキーを含むすべてのフィールド名が対象言語にリネームされて返され、固定された列挙値(risk_tier、threat_type、connection_type、geo_precision、bogon_type、asn_type)も翻訳されます。以前のように英語キーの形式が必要な場合は? /v1/ip に &localize=0 を追加すると元に戻せます。

curl -s "https://ipto.to/v1/ip/8.8.8.8?lang=de&localize=0" | python3 -m json.tool # opts back out to the legacy English-keys shape: # "country_name": "Vereinigte Staaten", "geo_precision": "country", "is_vpn": false, # "flags": { "hosting": false, "mobile": false, ... }, # "meta": { "lang": "de", "lang_source": "param", ... }

コード例

JavaScript

const res = await fetch("https://ipto.to/v1/ip/8.8.8.8"); const data = await res.json(); console.log(data.country_name, data.asn_org, data.is_vpn);

Python

import requests r = requests.get("https://ipto.to/v1/ip/8.8.8.8") print(r.json()["country_name"], r.json()["is_vpn"])

PHP

$data = json_decode(file_get_contents("https://ipto.to/v1/ip/8.8.8.8"), true); echo $data["country_name"] . " " . $data["asn_org"];

Go

resp, _ := http.Get("https://ipto.to/v1/ip/8.8.8.8") var data map[string]interface{} json.NewDecoder(resp.Body).Decode(&data)

レート制限

上限は日単位(UTC)で適用され、無料プランではIPアドレスごと、Pro/EnterpriseプランではAPIキーごとにカウントされます。上限を超えると、Retry-After ヘッダー付きのHTTP 429が返されます。本番環境でのご利用については料金ページを参照してください。

すべての /v1/* エンドポイント、/mcp サーバー、および curl ipto.to / curl ipto.to/:ip のショートカットに適用されます。唯一の例外は GET /ip です — 検索コストのかからない単純なヘッダーのエコーであるため、予算を一切消費しません。

TierRequests / dayAuth
Free1,000なし
Pro100,000APIキー(ヘッダー)
EnterpriseUnlimitedAPIキー + 専用エンドポイント

エラーコード

StatusMeaning
200OK。レスポンスにデータが含まれます。
202フィードデータを同期中です。45秒後に再試行してください。
400不正なリクエストです。無効なIP、ASN、または国コードです。
404データセット内にASNまたは国が見つかりません。
503データセットがまだ利用できません。初回取り込みが実行中である可能性があります。