Aller au contenu
Se connecter S'inscrire

API des proxies ISP

Tout ce que vous pouvez faire sur une page de plan ISP Proxies dans le panel est également disponible via cette API : rechercher les emplacements où vous pouvez placer des IPs, lister chaque proxy avec son nom d’utilisateur, placer les IPs que vous n’avez pas encore placées, et déplacer des IPs vers une autre ville ou un autre ISP.

Tous les endpoints s’authentifient avec un paramètre de requête api_token. Générez un token dans le panel sous Account → API Tokens.

?api_token=YOUR_API_TOKEN

Chaque chemin commence par https://shifter.io/api/v1/isp/{membership}. Le paramètre de chemin {membership} accepte l’une ou l’autre forme de l’identifiant du plan : le code court à la fin de l’URL du plan dans le panel (par exemple Rxqk) ou le numéro de plan affiché sur la page du plan (par exemple 68057). Les deux renvoient au même plan.

L’API n’accède qu’aux plans ISP Proxies appartenant au propriétaire du token. Tout autre plan répond 404.

  • Chaque IP peut changer d’emplacement 5 fois par période de facturation. Le compteur se réinitialise au renouvellement du plan, et les changements inutilisés ne sont pas reportés à la période suivante. Cela s’applique aussi aux essais.
  • Une IP déplacée obtient un nouveau nom d’utilisateur et un nouveau proxy_id. L’ancien nom d’utilisateur cesse de fonctionner immédiatement, donc basculez vos clients vers le nouveau sans délai.
  • Le mot de passe du plan reste le même. Il y a un seul mot de passe par plan, partagé par tous les noms d’utilisateur qu’il contient.
  • Les noms d’utilisateur sont sensibles à la casse. Chaque proxy se connecte via isp.shifter.io:443, en HTTP(S) ou SOCKS5.
  • Chaque IP conserve la ville et l’ISP que vous avez choisis. L’adresse derrière elle peut être renouvelée de temps à autre, de la même manière qu’une connexion domestique reçoit une nouvelle adresse de son ISP.
GET https://shifter.io/api/v1/isp/{membership}/locations

Renvoie les paires ville/ISP sur lesquelles vous pouvez placer des IPs, avec le nombre d’IPs disponibles sur chacune en ce moment. Les emplacements sans disponibilité sont exclus sauf si vous les demandez explicitement.

ParamètreInRequisDescription
membershippathouiL’ID du plan (code court ou numéro de plan)
api_tokenqueryouiVotre token API de compte
countryquerynoCode pays ISO 3166-1 alpha-2, par exemple US
qquerynoTexte de recherche : une ville (les noms locaux fonctionnent aussi), une région, un nom d’ISP, ou un ASN tel que 7922 ou AS7922
pagequerynoNuméro de page, à partir de 1
per_pagequerynoRésultats par page, par défaut 100, maximum 500
include_sold_outquerynoMettre à 1 pour inclure les emplacements sans IP disponible

Exemple :

Fenêtre de terminal
curl "https://shifter.io/api/v1/isp/YOUR_PLAN_ID/locations?country=US&q=Dallas&api_token=YOUR_API_TOKEN"

Réponse :

{
"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 est stable, vous pouvez donc le stocker et le réutiliser plus tard. available est le nombre d’IPs que vous pouvez placer sur cet emplacement en ce moment. Utilisez has_more pour savoir quand demander la page suivante.

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

Renvoie les détails de connexion du plan et de chaque IP placée, avec son nom d’utilisateur, son emplacement et le nombre de changements d’emplacement restants.

ParamètreInRequisDescription
membershippathouiL’ID du plan (code court ou numéro de plan)
api_tokenqueryouiVotre token API de compte

Exemple :

Fenêtre de terminal
curl "https://shifter.io/api/v1/isp/YOUR_PLAN_ID/proxies?api_token=YOUR_API_TOKEN"

Réponse :

{
"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
}
]
}
ChampDescription
host / portOù se connecte chaque proxy du plan
passwordLe mot de passe du plan, partagé par tous les noms d’utilisateur
ips_totalIPs incluses dans le plan
ips_placed / ips_unplacedIPs déjà sur un emplacement, et IPs que vous pouvez encore placer
changes_per_ipChangements d’emplacement que chaque IP obtient par période de facturation
period_ends_atQuand la période de facturation en cours se termine et que les changements se réinitialisent
proxies[].usernameLe nom d’utilisateur avec lequel se connecter. Sensible à la casse
proxies[].ispLe nom de l’ISP pour l’ASN. Peut être null quand aucun nom n’est connu
proxies[].changes_leftChangements d’emplacement restants pour cette IP dans la période en cours

Pour vous connecter, combinez les champs dans une URL de proxy :

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

Déplace une IP vers un autre emplacement. Cela utilise l’un des changements d’emplacement de cette IP.

ParamètreInRequisDescription
membershippathouiL’ID du plan (code court ou numéro de plan)
proxy_idpathouiLe proxy_id de l’IP à déplacer
api_tokenqueryouiVotre token API de compte
location_idbodyouiL’emplacement vers lequel déplacer l’IP

Exemple :

Fenêtre de terminal
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}'

Réponse :

{
"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
}
}

L’IP a maintenant un nouveau proxy_id et un nouveau username. L’ancien nom d’utilisateur (et old_proxy_id) cesse de fonctionner dès que la réponse arrive.

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

Déplace plusieurs IPs en une seule requête, chacune vers l’emplacement que vous indiquez pour elle.

ParamètreInRequisDescription
membershippathouiL’ID du plan (code court ou numéro de plan)
api_tokenqueryouiVotre token API de compte
movesbodyouiTableau de paires {"proxy_id", "location_id"}, 1 000 au maximum par requête
dry_runbodynotrue pour vérifier la requête sans rien changer. Par défaut false
  • La requête est tout ou rien : si un déplacement ne peut pas être effectué, aucune IP ne se déplace et vous recevez une erreur.
  • Une entrée dont l’IP est déjà sur l’emplacement cible est ignorée et n’utilise pas de changement. Son proxy_id est listé dans skipped.
  • Avec dry_run: true, rien n’est écrit. La réponse montre ce qui se passerait, avec proxy_id et username définis à null dans moved, puisque les nouveaux n’existent que lorsque le déplacement est réel.

Exemple :

Fenêtre de terminal
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}'

Réponse :

{
"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

Place les IPs qui ne sont pas encore sur un emplacement (ips_unplaced dans la liste des proxies). Placer une IP n’utilise pas de changement d’emplacement.

ParamètreInRequisDescription
membershippathouiL’ID du plan (code court ou numéro de plan)
api_tokenqueryouiVotre token API de compte
placementsbodyouiTableau de paires {"location_id", "count"} : combien d’IPs placer sur chaque emplacement

Exemple :

Fenêtre de terminal
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}]}'

Réponse :

{
"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
}
]
}

Trouvez un emplacement à Austin, déplacez-y deux IPs, et récupérez les noms d’utilisateur à utiliser dorénavant. Ceci utilise jq pour lire le JSON.

Fenêtre de terminal
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"'

Mettez à jour vos clients avec les nouveaux noms d’utilisateur de l’étape 2 ou 3 immédiatement : les anciens cessent de fonctionner dès que le déplacement est terminé.

Une requête échouée renvoie "ok": false avec un code error exploitable par une machine et un message lisible :

{
"ok": false,
"error": "plan_inactive",
"message": "This plan is not active, so locations cannot be assigned."
}
StatuterrorSignification
404not_foundLe plan ou l’IP n’existe pas sur votre compte. Peut inclure proxy_ids
422validationUn paramètre est manquant ou invalide
422no_changes_leftUne ou plusieurs IPs ont utilisé tous leurs changements d’emplacement pour cette période. Inclut proxy_ids
409out_of_stockUn emplacement n’a pas assez d’IPs disponibles. Inclut location_id et available
409plan_inactiveLe plan n’est pas actif, donc ses IPs ne peuvent pas être placées ou déplacées
RequêtesLimite
Lectures (GET)60 par minute et par compte
Écritures (POST)20 par minute et par compte

Au-delà de la limite, l’API répond 429. Attendez et réessayez avec un backoff. Pour déplacer de nombreuses IPs, envoyez-les en une seule requête Déplacer plusieurs IPs plutôt qu’une requête par IP.