コンテンツにスキップ
ログイン サインアップ

ISPプロキシAPI

ISP Proxiesプランのパネルページでできることはすべて、このAPI経由でも利用できます。IPを配置できるロケーションの検索、ユーザー名付きの全プロキシの一覧表示、未配置のIPの配置、IPの別の都市やISPへの移動などです。

すべてのエンドポイントは、api_token クエリパラメータで認証します。トークンはパネルのアカウント → APIトークンで生成してください。

?api_token=YOUR_API_TOKEN

すべてのパスは https://shifter.io/api/v1/isp/{membership} から始まります。{membership} パスパラメータには、プランIDのどちらの形式も指定できます。プランのパネルURL末尾の短いコード(例: Rxqk)、またはプランページに表示されるプラン番号(例: 68057)です。どちらも同じプランに解決されます。

このAPIがアクセスできるのは、トークンの所有者が保有するISP Proxiesプランのみです。それ以外のプランに対しては 404 が返されます。

  • 各IPは請求期間ごとに5回までロケーションを変更できます。この回数はプランの更新時にリセットされ、未使用の変更回数は次の期間に繰り越されません。これはトライアルにも適用されます。
  • 移動したIPには新しいユーザー名と新しい proxy_id が割り当てられます。古いユーザー名は即座に使用できなくなるため、ただちにクライアントを新しいユーザー名に切り替えてください。
  • プランのパスワードは変わりません。パスワードはプランごとに1つで、そのプラン上のすべてのユーザー名で共有されます。
  • ユーザー名は大文字・小文字を区別します。すべてのプロキシは isp.shifter.io:443 経由で、HTTP(S)またはSOCKS5で接続します。
  • 各IPは選択した都市とISPを維持します。その背後のアドレスは、家庭用回線がISPから新しいアドレスを割り当てられるのと同様に、時々更新されることがあります。
GET https://shifter.io/api/v1/isp/{membership}/locations

IPを配置できる都市とISPのペアを、それぞれで現在利用可能なIP数とともに返します。利用可能数がゼロのロケーションは、特に要求しない限り除外されます。

パラメータ場所必須説明
membershippath必須プランID(短いコードまたはプラン番号)
api_tokenquery必須アカウントのAPIトークン
countryquery任意ISO 3166-1 alpha-2の国コード、例: US
qquery任意検索テキスト: 都市名(現地名も可)、地域名、ISP名、または 7922 や AS7922 のようなASN
pagequery任意ページ番号。1 から開始
per_pagequery任意1ページあたりの件数。デフォルト 100、最大 500
include_sold_outquery任意1 を指定すると、利用可能なIPがないロケーションも含めます

例:

Terminal window
curl "https://shifter.io/api/v1/isp/YOUR_PLAN_ID/locations?country=US&q=Dallas&api_token=YOUR_API_TOKEN"

レスポンス:

{
"ok": true,
"page": 1,
"per_page": 100,
"total": 2,
"has_more": false,
"locations": [
{
"location_id": 1842,
"country": "US",
"region": "Texas",
"city": "Dallas",
"asn": 7922,
"isp": "COMCAST-7922",
"available": 7
}
]
}

location_id は不変なので、保存して後で再利用できます。available は現在そのロケーションに配置できるIPの数です。次のページをリクエストするタイミングを知るには has_more を使用してください。

GET https://shifter.io/api/v1/isp/{membership}/proxies

プランの接続情報と、配置済みの各IPのユーザー名、ロケーション、残りのロケーション変更回数を返します。

パラメータ場所必須説明
membershippath必須プランID(短いコードまたはプラン番号)
api_tokenquery必須アカウントのAPIトークン

例:

Terminal window
curl "https://shifter.io/api/v1/isp/YOUR_PLAN_ID/proxies?api_token=YOUR_API_TOKEN"

レスポンス:

{
"ok": true,
"host": "isp.shifter.io",
"port": 443,
"password": "YOUR_PLAN_PASSWORD",
"ips_total": 10,
"ips_placed": 3,
"ips_unplaced": 7,
"changes_per_ip": 5,
"period_ends_at": "2026-10-20T08:00:00+00:00",
"proxies": [
{
"proxy_id": 5531,
"username": "us-texas-dallas-as7922-Ksj25",
"location_id": 1842,
"country": "US",
"region": "Texas",
"city": "Dallas",
"asn": 7922,
"isp": "COMCAST-7922",
"changes_left": 5
}
]
}
フィールド説明
host / portプラン上のすべてのプロキシが接続する先
passwordプランのパスワード。すべてのユーザー名で共有されます
ips_totalプランに含まれるIP数
ips_placed / ips_unplaced既にロケーションに配置されたIP数と、まだ配置可能なIP数
changes_per_ip請求期間ごとに各IPが持つロケーション変更回数
period_ends_at現在の請求期間が終了し、変更回数がリセットされる日時
proxies[].username接続に使用するユーザー名。大文字・小文字を区別します
proxies[].ispASNに対応するISP名。名前が不明な場合は null になることがあります
proxies[].changes_leftこのIPが現在の期間内に残しているロケーション変更回数

接続するには、各フィールドを組み合わせてプロキシURLを作成します。

http://us-texas-dallas-as7922-Ksj25:YOUR_PLAN_PASSWORD@isp.shifter.io:443
socks5://us-texas-dallas-as7922-Ksj25:YOUR_PLAN_PASSWORD@isp.shifter.io:443
POST https://shifter.io/api/v1/isp/{membership}/proxies/{proxy_id}/location

1つのIPを別のロケーションに移動します。これにより、そのIPのロケーション変更回数を1回消費します。

パラメータ場所必須説明
membershippath必須プランID(短いコードまたはプラン番号)
proxy_idpath必須移動するIPの proxy_id
api_tokenquery必須アカウントのAPIトークン
location_idbody必須IPの移動先ロケーション

例:

Terminal window
curl -X POST "https://shifter.io/api/v1/isp/YOUR_PLAN_ID/proxies/5531/location?api_token=YOUR_API_TOKEN" \
-H "Content-Type: application/json" \
-d '{"location_id":1901}'

レスポンス:

{
"ok": true,
"message": "Location changed. Use the new username from now on.",
"old_proxy_id": 5531,
"proxy": {
"proxy_id": 5534,
"username": "us-texas-austin-as7018-Pq7rT",
"location_id": 1901,
"country": "US",
"region": "Texas",
"city": "Austin",
"asn": 7018,
"isp": "ATT-INTERNET4",
"changes_left": 4
}
}

このIPには新しい proxy_id と新しい username が割り当てられます。古いユーザー名(および old_proxy_id)は、レスポンスが届いた時点で使用できなくなります。

POST https://shifter.io/api/v1/isp/{membership}/proxies/location

1回のリクエストで複数のIPを、それぞれ指定したロケーションに移動します。

パラメータ場所必須説明
membershippath必須プランID(短いコードまたはプラン番号)
api_tokenquery必須アカウントのAPIトークン
movesbody必須{"proxy_id", "location_id"} のペアの配列。1リクエストあたり最大1,000件
dry_runbody任意true にすると、何も変更せずリクエストを検証します。デフォルトは false
  • このリクエストはオールオアナッシングです。いずれかの移動が実行できない場合、IPは一切移動されず、エラーが返されます。
  • すでに対象のロケーションにあるIPを指定したエントリはスキップされ、変更回数は消費されません。その proxy_id は skipped に列挙されます。
  • dry_run: true の場合、何も書き込まれません。レスポンスには実行された場合の結果が示されますが、moved 内の proxy_id と username は null になります。新しい値は実際に移動が行われた場合にのみ存在するためです。

例:

Terminal window
curl -X POST "https://shifter.io/api/v1/isp/YOUR_PLAN_ID/proxies/location?api_token=YOUR_API_TOKEN" \
-H "Content-Type: application/json" \
-d '{"moves":[{"proxy_id":5531,"location_id":1901},{"proxy_id":5532,"location_id":1842}],"dry_run":false}'

レスポンス:

{
"ok": true,
"dry_run": false,
"message": "1 IP moved. Use the new username from now on. 1 IP was already there and stays as it is.",
"moved": [
{
"old_proxy_id": 5531,
"proxy_id": 5535,
"username": "us-texas-austin-as7018-Zt3wQ",
"location_id": 1901,
"country": "US",
"region": "Texas",
"city": "Austin",
"asn": 7018,
"isp": "ATT-INTERNET4",
"changes_left": 4
}
],
"skipped": [5532]
}
POST https://shifter.io/api/v1/isp/{membership}/proxies/place

まだロケーションに配置されていないIP(プロキシ一覧の ips_unplaced)を配置します。IPの配置はロケーション変更回数を消費しません。

パラメータ場所必須説明
membershippath必須プランID(短いコードまたはプラン番号)
api_tokenquery必須アカウントのAPIトークン
placementsbody必須{"location_id", "count"} のペアの配列: 各ロケーションに配置するIP数

例:

Terminal window
curl -X POST "https://shifter.io/api/v1/isp/YOUR_PLAN_ID/proxies/place?api_token=YOUR_API_TOKEN" \
-H "Content-Type: application/json" \
-d '{"placements":[{"location_id":1901,"count":2}]}'

レスポンス:

{
"ok": true,
"message": "2 IPs are ready.",
"placed": 2,
"ips_unplaced": 5,
"proxies": [
{
"proxy_id": 5540,
"username": "us-texas-austin-as7018-Hh8aa",
"location_id": 1901,
"country": "US",
"region": "Texas",
"city": "Austin",
"asn": 7018,
"isp": "ATT-INTERNET4",
"changes_left": 5
}
]
}

Austinのロケーションを検索し、2つのIPをそこに移動し、今後使用するユーザー名を読み取ります。JSONの読み取りにはjqを使用します。

Terminal window
TOKEN="YOUR_API_TOKEN"
PLAN="YOUR_PLAN_ID"
BASE="https://shifter.io/api/v1/isp/$PLAN"
# 1. Find a location with IPs available
LOCATION=$(curl -s "$BASE/locations?country=US&q=Austin&api_token=$TOKEN" \
| jq '.locations[0].location_id')
# 2. Move two IPs there
curl -s -X POST "$BASE/proxies/location?api_token=$TOKEN" \
-H "Content-Type: application/json" \
-d "{\"moves\":[{\"proxy_id\":5531,\"location_id\":$LOCATION},{\"proxy_id\":5532,\"location_id\":$LOCATION}]}" \
| jq -r '.moved[].username'
# 3. Read every current username and build proxy URLs
curl -s "$BASE/proxies?api_token=$TOKEN" \
| jq -r '.password as $p | .proxies[] | "http://\(.username):\($p)@isp.shifter.io:443"'

ステップ2または3で得た新しいユーザー名に、すぐクライアントを更新してください。古いユーザー名は、移動が完了した時点で使用できなくなります。

リクエストが失敗した場合、"ok": false とともに機械可読な error コードと、読みやすい message が返されます。

{
"ok": false,
"error": "plan_inactive",
"message": "This plan is not active, so locations cannot be assigned."
}
ステータスerror意味
404not_foundプランまたはIPがアカウント内に存在しません。proxy_ids が含まれる場合があります
422validationパラメータが欠落しているか不正です
422no_changes_left1つ以上のIPが、今期のロケーション変更回数をすべて使い切っています。proxy_ids を含みます
409out_of_stockロケーションに十分なIPの空きがありません。location_id と available を含みます
409plan_inactiveプランがアクティブでないため、そのIPを配置または移動できません
リクエスト上限
読み取り(GET)アカウントごとに1分間に60回
書き込み(POST)アカウントごとに1分間に20回

上限を超えると、APIは 429 を返します。待機してからバックオフで再試行してください。多数のIPを移動する場合は、IPごとに1リクエストを送るのではなく、1回の複数のIPを移動リクエストにまとめて送信してください。