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.
Autenticación
Sección titulada «Autenticación»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_TOKENCada 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.
Reglas para los cambios de ubicación
Sección titulada «Reglas para los cambios de ubicación»- 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.
Listar ubicaciones
Sección titulada «Listar ubicaciones»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ámetro | In | Obligatorio | Descripción |
|---|---|---|---|
membership | path | sí | El ID del plan (código corto o número de plan) |
api_token | query | sí | El token de API de tu cuenta |
country | query | no | Código de país ISO 3166-1 alpha-2, p. ej. US |
q | query | no | Texto 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 |
page | query | no | Número de página, empezando en 1 |
per_page | query | no | Resultados por página, por defecto 100, máximo 500 |
include_sold_out | query | no | Establece 1 para incluir ubicaciones sin IPs disponibles |
Ejemplo:
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.
Listar proxies
Sección titulada «Listar 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ámetro | In | Obligatorio | Descripción |
|---|---|---|---|
membership | path | sí | El ID del plan (código corto o número de plan) |
api_token | query | sí | El token de API de tu cuenta |
Ejemplo:
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 } ]}| Campo | Descripción |
|---|---|
host / port | Dónde se conecta cada proxy del plan |
password | La contraseña del plan, compartida por todos los nombres de usuario |
ips_total | IPs incluidas en el plan |
ips_placed / ips_unplaced | IPs ya colocadas en una ubicación, e IPs que aún puedes colocar |
changes_per_ip | Cambios de ubicación que recibe cada IP por periodo de facturación |
period_ends_at | Cuándo termina el periodo de facturación actual y se reinician los cambios |
proxies[].username | El nombre de usuario con el que conectarse. Distingue mayúsculas de minúsculas |
proxies[].isp | El nombre del ISP para el ASN. Puede ser null cuando no se conoce ningún nombre |
proxies[].changes_left | Cambios 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:443socks5://us-texas-dallas-as7922-Ksj25:YOUR_PLAN_PASSWORD@isp.shifter.io:443Mover una IP
Sección titulada «Mover una IP»Mueve una IP a otra ubicación. Esto consume uno de los cambios de ubicación de esa IP.
| Parámetro | In | Obligatorio | Descripción |
|---|---|---|---|
membership | path | sí | El ID del plan (código corto o número de plan) |
proxy_id | path | sí | El proxy_id de la IP que se va a mover |
api_token | query | sí | El token de API de tu cuenta |
location_id | body | sí | La ubicación a la que mover la IP |
Ejemplo:
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.
Mover varias IPs
Sección titulada «Mover varias IPs»Mueve varias IPs en una sola solicitud, cada una a la ubicación que indiques para ella.
| Parámetro | In | Obligatorio | Descripción |
|---|---|---|---|
membership | path | sí | El ID del plan (código corto o número de plan) |
api_token | query | sí | El token de API de tu cuenta |
moves | body | sí | Array de pares {"proxy_id", "location_id"}, como máximo 1.000 por solicitud |
dry_run | body | no | true 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_idaparece listado enskipped. - Con
dry_run: trueno se escribe nada. La respuesta muestra lo que ocurriría, conproxy_idyusernameestablecidos ennulldentro demoved, ya que los nuevos valores solo existen cuando el movimiento es real.
Ejemplo:
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]}Colocar IPs sin ubicar
Sección titulada «Colocar IPs sin ubicar»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ámetro | In | Obligatorio | Descripción |
|---|---|---|---|
membership | path | sí | El ID del plan (código corto o número de plan) |
api_token | query | sí | El token de API de tu cuenta |
placements | body | sí | Array de pares {"location_id", "count"}: cuántas IPs colocar en cada ubicación |
Ejemplo:
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 } ]}Ejemplo completo
Sección titulada «Ejemplo completo»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.
TOKEN="YOUR_API_TOKEN"PLAN="YOUR_PLAN_ID"BASE="https://shifter.io/api/v1/isp/$PLAN"
# 1. Find a location with IPs availableLOCATION=$(curl -s "$BASE/locations?country=US&q=Austin&api_token=$TOKEN" \ | jq '.locations[0].location_id')
# 2. Move two IPs therecurl -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 URLscurl -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.
Errores
Sección titulada «Errores»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."}| Estado | error | Significado |
|---|---|---|
404 | not_found | El plan o la IP no existen en tu cuenta. Puede incluir proxy_ids |
422 | validation | Falta un parámetro o no es válido |
422 | no_changes_left | Una o más IPs han agotado todos sus cambios de ubicación para este periodo. Incluye proxy_ids |
409 | out_of_stock | Una ubicación no tiene suficientes IPs disponibles. Incluye location_id y available |
409 | plan_inactive | El plan no está activo, así que sus IPs no se pueden colocar ni mover |
Límites de solicitudes
Sección titulada «Límites de solicitudes»| Solicitudes | Lí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.
Ver también
Sección titulada «Ver también»- Resumen de ISP Proxies
- Gestión de IPs, las mismas acciones en el panel
- API de uso y cuota