Ir al contenido
Iniciar sesión Registrarse

API de Proxies ISP

Todo lo que puedes hacer en la página de un plan ISP Proxies en el panel también está disponible a través de esta API: buscar las ubicaciones en las que puedes colocar IPs, listar cada proxy con su nombre de usuario, colocar las IPs que aún no has colocado y mover IPs a otra ciudad o ISP.

Todos los endpoints se autentican con un parámetro de consulta api_token. Genera un token en el panel, en Account → API Tokens.

?api_token=YOUR_API_TOKEN

Cada ruta empieza por https://shifter.io/api/v1/isp/{membership}. El parámetro de ruta {membership} acepta cualquiera de las dos formas del identificador del plan: el código corto al final de la URL del plan en el panel (por ejemplo Rxqk) o el número de plan que se muestra en la página del plan (por ejemplo 68057). Ambos apuntan al mismo plan.

La API solo accede a los planes ISP Proxies que pertenecen al propietario del token. Cualquier otro plan responde 404.

  • Cada IP puede cambiar de ubicación 5 veces por periodo de facturación. El contador se reinicia cuando el plan se renueva, y los cambios no usados no se trasladan al siguiente periodo. Esto también se aplica a las pruebas (trials).
  • Una IP movida obtiene un nombre de usuario nuevo y un nuevo proxy_id. El nombre de usuario antiguo deja de funcionar inmediatamente, así que cambia tus clientes al nuevo de inmediato.
  • La contraseña del plan no cambia. Hay una sola contraseña por plan, compartida por todos los nombres de usuario de ese plan.
  • Los nombres de usuario distinguen mayúsculas de minúsculas. Cada proxy se conecta a través de isp.shifter.io:443, mediante HTTP(S) o SOCKS5.
  • Cada IP conserva la ciudad y el ISP que elegiste. La dirección que hay detrás puede renovarse de vez en cuando, del mismo modo que una conexión doméstica recibe una nueva dirección de su ISP.
GET https://shifter.io/api/v1/isp/{membership}/locations

Devuelve los pares de ciudad e ISP en los que puedes colocar IPs, con el número de IPs disponibles en cada uno en este momento. Las ubicaciones sin disponibilidad se omiten a menos que las solicites.

ParámetroInObligatorioDescripción
membershippathsíEl ID del plan (código corto o número de plan)
api_tokenquerysíEl token de API de tu cuenta
countryquerynoCódigo de país ISO 3166-1 alpha-2, p. ej. US
qquerynoTexto de búsqueda: una ciudad (también funcionan los nombres locales), una región, un nombre de ISP o un ASN como 7922 o AS7922
pagequerynoNúmero de página, empezando en 1
per_pagequerynoResultados por página, por defecto 100, máximo 500
include_sold_outquerynoEstablece 1 para incluir ubicaciones sin IPs disponibles

Ejemplo:

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

Respuesta:

{
"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 es estable, así que puedes guardarlo y reutilizarlo más adelante. available es el número de IPs que puedes colocar en esa ubicación ahora mismo. Usa has_more para saber cuándo solicitar la siguiente página.

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

Devuelve los datos de conexión del plan y de cada IP colocada, con su nombre de usuario, ubicación y cambios de ubicación restantes.

ParámetroInObligatorioDescripción
membershippathsíEl ID del plan (código corto o número de plan)
api_tokenquerysíEl token de API de tu cuenta

Ejemplo:

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

Respuesta:

{
"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
}
]
}
CampoDescripción
host / portDónde se conecta cada proxy del plan
passwordLa contraseña del plan, compartida por todos los nombres de usuario
ips_totalIPs incluidas en el plan
ips_placed / ips_unplacedIPs ya colocadas en una ubicación, e IPs que aún puedes colocar
changes_per_ipCambios de ubicación que recibe cada IP por periodo de facturación
period_ends_atCuándo termina el periodo de facturación actual y se reinician los cambios
proxies[].usernameEl nombre de usuario con el que conectarse. Distingue mayúsculas de minúsculas
proxies[].ispEl nombre del ISP para el ASN. Puede ser null cuando no se conoce ningún nombre
proxies[].changes_leftCambios de ubicación que le quedan a esta IP en el periodo actual

Para conectarte, combina los campos en una 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

Mueve una IP a otra ubicación. Esto consume uno de los cambios de ubicación de esa IP.

ParámetroInObligatorioDescripción
membershippathsíEl ID del plan (código corto o número de plan)
proxy_idpathsíEl proxy_id de la IP que se va a mover
api_tokenquerysíEl token de API de tu cuenta
location_idbodysíLa ubicación a la que mover la IP

Ejemplo:

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

Respuesta:

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

La IP tiene ahora un nuevo proxy_id y un nuevo username. El nombre de usuario antiguo (y el old_proxy_id) dejan de funcionar en cuanto llega la respuesta.

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

Mueve varias IPs en una sola solicitud, cada una a la ubicación que indiques para ella.

ParámetroInObligatorioDescripción
membershippathsíEl ID del plan (código corto o número de plan)
api_tokenquerysíEl token de API de tu cuenta
movesbodysíArray de pares {"proxy_id", "location_id"}, como máximo 1.000 por solicitud
dry_runbodynotrue para comprobar la solicitud sin cambiar nada. Por defecto false
  • La solicitud es todo o nada: si no se puede realizar algún movimiento, no se mueve ninguna IP y recibes un error.
  • Una entrada cuya IP ya está en la ubicación de destino se omite y no consume un cambio. Su proxy_id aparece listado en skipped.
  • Con dry_run: true no se escribe nada. La respuesta muestra lo que ocurriría, con proxy_id y username establecidos en null dentro de moved, ya que los nuevos valores solo existen cuando el movimiento es real.

Ejemplo:

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

Respuesta:

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

Coloca IPs que todavía no están en ninguna ubicación (ips_unplaced en el listado de proxies). Colocar una IP no consume un cambio de ubicación.

ParámetroInObligatorioDescripción
membershippathsíEl ID del plan (código corto o número de plan)
api_tokenquerysíEl token de API de tu cuenta
placementsbodysíArray de pares {"location_id", "count"}: cuántas IPs colocar en cada ubicación

Ejemplo:

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

Respuesta:

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

Busca una ubicación en Austin, mueve dos IPs allí y lee los nombres de usuario que debes usar a partir de ahora. Se usa jq para leer el JSON.

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

Actualiza tus clientes con los nuevos nombres de usuario del paso 2 o 3 de inmediato: los antiguos dejan de funcionar en cuanto se completa el movimiento.

Una solicitud fallida devuelve "ok": false con un código error interpretable por máquinas y un message legible:

{
"ok": false,
"error": "plan_inactive",
"message": "This plan is not active, so locations cannot be assigned."
}
EstadoerrorSignificado
404not_foundEl plan o la IP no existen en tu cuenta. Puede incluir proxy_ids
422validationFalta un parámetro o no es válido
422no_changes_leftUna o más IPs han agotado todos sus cambios de ubicación para este periodo. Incluye proxy_ids
409out_of_stockUna ubicación no tiene suficientes IPs disponibles. Incluye location_id y available
409plan_inactiveEl plan no está activo, así que sus IPs no se pueden colocar ni mover
SolicitudesLímite
Lecturas (GET)60 por minuto y cuenta
Escrituras (POST)20 por minuto y cuenta

Superado el límite, la API responde 429. Espera y reintenta con backoff. Para mover muchas IPs, envíalas en una sola solicitud de Mover varias IPs en lugar de una solicitud por IP.