Pular para o conteúdo
Entrar Cadastre-se

API de Proxies ISP

Tudo o que você pode fazer na página de um plano ISP Proxies no painel também está disponível por meio desta API: pesquisar as localizações onde você pode posicionar IPs, listar cada proxy com seu nome de usuário, posicionar os IPs que você ainda não posicionou e mover IPs para outra cidade ou ISP.

Todos os endpoints autenticam com um parâmetro de consulta api_token. Gere um token no painel em Account → API Tokens.

?api_token=YOUR_API_TOKEN

Todo caminho começa com https://shifter.io/api/v1/isp/{membership}. O parâmetro de caminho {membership} aceita qualquer uma das formas do identificador do plano: o código curto no final da URL do plano no painel (por exemplo, Rxqk) ou o número do plano exibido na página do plano (por exemplo, 68057). Ambos resolvem para o mesmo plano.

A API só acessa planos ISP Proxies pertencentes ao proprietário do token. Qualquer outro plano responde 404.

  • Cada IP pode mudar de localização 5 vezes por período de faturamento. A contagem é reiniciada quando o plano é renovado, e mudanças não utilizadas não são transferidas para o próximo período. Isso se aplica também a trials.
  • Um IP movido recebe um novo nome de usuário e um novo proxy_id. O nome de usuário antigo para de funcionar imediatamente, então mude seus clientes para o novo o quanto antes.
  • A senha do plano permanece a mesma. Há uma senha por plano, compartilhada por todos os nomes de usuário nele.
  • Os nomes de usuário diferenciam maiúsculas de minúsculas. Cada proxy se conecta por isp.shifter.io:443, via HTTP(S) ou SOCKS5.
  • Cada IP mantém a cidade e o ISP escolhidos. O endereço por trás dele pode ser atualizado de vez em quando, da mesma forma que uma conexão doméstica recebe um novo endereço do seu ISP.
GET https://shifter.io/api/v1/isp/{membership}/locations

Retorna os pares de cidade e ISP onde você pode posicionar IPs, com a quantidade de IPs disponíveis em cada um no momento. Localizações sem nada disponível são omitidas, a menos que você as solicite.

ParâmetroEmObrigatórioDescrição
membershippathsimO ID do plano (código curto ou número do plano)
api_tokenquerysimSeu token de API da conta
countryquerynãoCódigo de país ISO 3166-1 alpha-2, por exemplo, US
qquerynãoTexto de busca: uma cidade (nomes locais também funcionam), uma região, um nome de ISP ou um ASN como 7922 ou AS7922
pagequerynãoNúmero da página, começando em 1
per_pagequerynãoResultados por página, padrão 100, máximo 500
include_sold_outquerynãoDefina como 1 para incluir localizações sem IPs disponíveis

Exemplo:

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

Resposta:

{
"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ável, então você pode armazená-lo e reutilizá-lo depois. available é o número de IPs que você pode posicionar nessa localização no momento. Use has_more para saber quando solicitar a próxima página.

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

Retorna os detalhes de conexão do plano e de cada IP posicionado, com seu nome de usuário, localização e mudanças de localização restantes.

ParâmetroEmObrigatórioDescrição
membershippathsimO ID do plano (código curto ou número do plano)
api_tokenquerysimSeu token de API da conta

Exemplo:

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

Resposta:

{
"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
}
]
}
CampoDescrição
host / portOnde cada proxy do plano se conecta
passwordA senha do plano, compartilhada por todos os nomes de usuário
ips_totalIPs incluídos no plano
ips_placed / ips_unplacedIPs já posicionados em uma localização, e IPs que você ainda pode posicionar
changes_per_ipMudanças de localização que cada IP recebe por período de faturamento
period_ends_atQuando o período de faturamento atual termina e as mudanças são reiniciadas
proxies[].usernameO nome de usuário para conectar. Diferencia maiúsculas de minúsculas
proxies[].ispO nome do ISP para o ASN. Pode ser null quando nenhum nome é conhecido
proxies[].changes_leftMudanças de localização que este IP ainda tem disponíveis no período atual

Para conectar, combine os campos em uma 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

Move um IP para outra localização. Isso usa uma das mudanças de localização desse IP.

ParâmetroEmObrigatórioDescrição
membershippathsimO ID do plano (código curto ou número do plano)
proxy_idpathsimO proxy_id do IP a ser movido
api_tokenquerysimSeu token de API da conta
location_idbodysimA localização para onde mover o IP

Exemplo:

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}'

Resposta:

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

O IP agora tem um novo proxy_id e um novo username. O nome de usuário antigo (e old_proxy_id) param de funcionar assim que a resposta chega.

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

Move vários IPs em uma única requisição, cada um para a localização que você especificar para ele.

ParâmetroEmObrigatórioDescrição
membershippathsimO ID do plano (código curto ou número do plano)
api_tokenquerysimSeu token de API da conta
movesbodysimArray de pares {"proxy_id", "location_id"}, no máximo 1.000 por requisição
dry_runbodynãotrue para verificar a requisição sem alterar nada. Padrão false
  • A requisição é tudo ou nada: se alguma mudança não puder ser feita, nenhum IP é movido e você recebe um erro.
  • Uma entrada cujo IP já está na localização alvo é ignorada e não usa uma mudança. Seu proxy_id é listado em skipped.
  • Com dry_run: true nada é gravado. A resposta mostra o que aconteceria, com proxy_id e username definidos como null em moved, já que os novos só existem quando a mudança é real.

Exemplo:

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}'

Resposta:

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

Posiciona IPs que ainda não estão em uma localização (ips_unplaced na lista de proxies). Posicionar um IP não usa uma mudança de localização.

ParâmetroEmObrigatórioDescrição
membershippathsimO ID do plano (código curto ou número do plano)
api_tokenquerysimSeu token de API da conta
placementsbodysimArray de pares {"location_id", "count"}: quantos IPs posicionar em cada localização

Exemplo:

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}]}'

Resposta:

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

Encontre uma localização em Austin, mova dois IPs para lá e leia de volta os nomes de usuário a serem usados a partir de agora. Isso usa jq para ler o JSON.

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

Atualize seus clientes com os novos nomes de usuário da etapa 2 ou 3 imediatamente: os antigos param de funcionar assim que a mudança for concluída.

Uma requisição com falha retorna "ok": false com um código error legível por máquina e uma message legível:

{
"ok": false,
"error": "plan_inactive",
"message": "This plan is not active, so locations cannot be assigned."
}
StatuserrorSignificado
404not_foundO plano ou IP não existe na sua conta. Pode incluir proxy_ids
422validationUm parâmetro está ausente ou inválido
422no_changes_leftUm ou mais IPs já usaram todas as suas mudanças de localização para este período. Inclui proxy_ids
409out_of_stockUma localização não tem IPs suficientes disponíveis. Inclui location_id e available
409plan_inactiveO plano não está ativo, então seus IPs não podem ser posicionados ou movidos
RequisiçõesLimite
Leituras (GET)60 por minuto por conta
Escritas (POST)20 por minuto por conta

Acima do limite, a API responde 429. Aguarde e tente novamente com backoff. Para mover vários IPs, envie-os em uma única requisição Mover vários IPs em vez de uma requisição por IP.