¿Por dónde empiezo?
- 1Regístrate con un nombre de usuario e inicia sesión en el panel.
- 2Crea una clave de API en la pestaña Conectar. La clave completa se muestra una sola vez, al crearla, así que guárdala de inmediato en un lugar seguro.
- 3Envía la clave en el encabezado Authorization en cada solicitud que la necesite.
- 4Llama primero a /account para comprobar que la clave funciona y luego haz pedidos con /orders.
Autenticación
Las solicitudes sobre tu propia cuenta (account, orders, proxy-user) requieren una clave de API, enviada en el encabezado como Authorization: Bearer spk_... Los precios, países y cotizaciones son públicos y funcionan sin clave.
StarProxy solo guarda un hash de cada clave, no la clave. Si pierdes una clave, crea una nueva en el panel. La clave anterior deja de funcionar en ese momento. Guarda las claves solo en código de servidor. Nunca las pongas en código que se ejecuta en un navegador ni en un repositorio público.
Authorization: Bearer spk_your_api_key
URL base y formato de datos
- URL base
- https://starproxy.shop/api/v1
- Cuerpo de solicitud y respuesta
- application/json
- Importes
- USD como número, p. ej. 1047.70
- Marcas de tiempo
- ISO 8601 (UTC)
¿Hay un límite de llamadas?
Una clave de API puede hacer hasta 60 llamadas por minuto. Los endpoints públicos sin clave permiten 60 llamadas por minuto por IP. Si superas el límite recibes HTTP 429, así que espera un minuto y vuelve a enviar.
¿Cómo son los errores?
Un código de estado HTTP, más un cuerpo JSON con un código de error corto y un mensaje.
{
"error": {
"code": "insufficient_balance",
"message": "Your balance is too low for this order. Top up in the dashboard."
}
}| HTTP | code | Significado |
|---|---|---|
| bad_requestHTTP 400Falta un valor obligatorio, o el valor no es válido para este producto. | Falta un valor obligatorio, o el valor no es válido para este producto. | |
| unauthorizedHTTP 401Falta la clave de API o no coincide. | Falta la clave de API o no coincide. | |
| insufficient_balanceHTTP 402Tu saldo es menor que el total del pedido. No se descontó nada. | Tu saldo es menor que el total del pedido. No se descontó nada. | |
| not_foundHTTP 404No hay ningún pedido con este id en tu cuenta. | No hay ningún pedido con este id en tu cuenta. | |
| rate_limitedHTTP 429Demasiadas solicitudes en un minuto. | Demasiadas solicitudes en un minuto. | |
| server_errorHTTP 500El servidor no pudo completar la solicitud. No se descontó nada. | El servidor no pudo completar la solicitud. No se descontó nada. |
Endpoints
Obtener cuenta
GET/api/v1/accountRequiere clave de API
Devuelve tu saldo, host y puertos del proxy, usuario y contraseña del proxy, y tus IP autorizadas.
curl https://starproxy.shop/api/v1/account \ -H "Authorization: Bearer spk_your_api_key"
{
"username": "star_user01",
"balance_usd": 1300,
"proxy": {
"host": "gate.starproxy.shop",
"http_port": 6100,
"socks5_port": 6200,
"username": "spexample1",
"password": "your_password"
},
"allowed_ips": [
"203.0.113.10"
]
}Obtener productos y precios
GET/api/v1/productsNo necesita clave
Devuelve el rango de pedido de cada producto, el precio por escalón de cantidad y los descuentos por periodo, de la misma tabla de precios que la página de precios.
curl https://starproxy.shop/api/v1/products
{
"currency": "USD",
"prices_as_of": "2026-10-31",
"products": [
{
"id": "unlimited",
"unit": "day",
"quantity": {
"meaning": "days",
"min": 1,
"max": 365
},
"...": "..."
},
{
"id": "residential",
"unit": "gb",
"...": "..."
}
]
}Listar países y ciudades
GET/api/v1/countriesNo necesita clave
Devuelve los países que admite cada producto, además de los valores de ciudad para la opción -city- del usuario.
| Campo | Tipo | Significado |
|---|---|---|
productOpcional | string | Uno de unlimited, residential, isp, datacenter. Por defecto, residential. |
curl "https://starproxy.shop/api/v1/countries?product=datacenter"
{
"product": "datacenter",
"countries": [
{
"code": "us",
"name": "United States",
"region": "americas",
"datacenter": true,
"cities": [
{
"name": "New York",
"value": "new_york"
},
{
"name": "Los Angeles",
"value": "los_angeles"
}
]
}
]
}Obtener una cotización
POST/api/v1/quoteNo necesita clave
Calcula el total del pedido sin tocar tu saldo. Envía el mismo cuerpo que usarías para el pedido.
| Campo | Tipo | Significado |
|---|---|---|
productObligatorio | string | Uno de unlimited, residential, isp, datacenter. |
quantityObligatorio | integer | Días para unlimited (1~365), GB para residential (5~5,000), cantidad de IP para isp (1~1,000) o datacenter (5~5,000). |
concurrencyOpcional | integer | Solo unlimited. Uno de 200, 500, 1000, 2000. |
bandwidthOpcional | integer | Solo unlimited, en Mbps. Uno de 100, 200, 500, 1000. |
monthsOpcional | integer | Solo isp y datacenter. Uno de 1, 3, 6, 12. |
countryOpcional | string | Solo isp y datacenter. Un código de país de dos letras, como jp. Consulta /countries para ver los valores válidos. |
curl -X POST https://starproxy.shop/api/v1/quote \
-H "Content-Type: application/json" \
-d '{"product":"unlimited","quantity":30,"concurrency":1000,"bandwidth":200}'{
"product": "unlimited",
"quantity": 30,
"unit_price_usd": 8.41,
"unit": "day",
"total_usd": 252.3
}Crear un pedido
POST/api/v1/ordersRequiere clave de API
Descuenta el total de tu saldo y crea el pedido. El estado empieza como pending (activando) y cambia a active cuando el pedido está listo. Si no se puede activar, pasa a refunded y el importe completo vuelve a tu saldo. Un saldo insuficiente devuelve 402.
| Campo | Tipo | Significado |
|---|---|---|
productObligatorio | string | Uno de unlimited, residential, isp, datacenter. |
quantityObligatorio | integer | Días para unlimited (1~365), GB para residential (5~5,000), cantidad de IP para isp (1~1,000) o datacenter (5~5,000). |
concurrencyOpcional | integer | Solo unlimited. Uno de 200, 500, 1000, 2000. |
bandwidthOpcional | integer | Solo unlimited, en Mbps. Uno de 100, 200, 500, 1000. |
monthsOpcional | integer | Solo isp y datacenter. Uno de 1, 3, 6, 12. |
countryOpcional | string | Solo isp y datacenter. Un código de país de dos letras, como jp. Consulta /countries para ver los valores válidos. |
curl -X POST https://starproxy.shop/api/v1/orders \
-H "Authorization: Bearer spk_your_api_key" \
-H "Content-Type: application/json" \
-d '{"product":"unlimited","quantity":30,"concurrency":1000,"bandwidth":200}'{
"order": {
"id": "SP-7KQ2M-X4HTD",
"product": "unlimited",
"quantity": 30,
"months": null,
"concurrency": 1000,
"bandwidth_mbps": 200,
"country": null,
"unit_price_usd": 8.41,
"total_usd": 252.3,
"status": "pending",
"created_at": "2026-10-31T09:12:44.120Z",
"updated_at": "2026-10-31T09:12:44.120Z"
},
"balance_usd": 1047.7
}Listar pedidos
GET/api/v1/ordersRequiere clave de API
Devuelve hasta 100 pedidos, los más nuevos primero.
| Campo | Tipo | Significado |
|---|---|---|
statusOpcional | string | Uno de pending, active, refunded. Déjalo vacío para todos los estados. |
curl "https://starproxy.shop/api/v1/orders?status=pending" \ -H "Authorization: Bearer spk_your_api_key"
{
"orders": [
{
"id": "SP-7KQ2M-X4HTD",
"product": "unlimited",
"quantity": 30,
"months": null,
"concurrency": 1000,
"bandwidth_mbps": 200,
"country": null,
"unit_price_usd": 8.41,
"total_usd": 252.3,
"status": "pending",
"created_at": "2026-10-31T09:12:44.120Z",
"updated_at": "2026-10-31T09:12:44.120Z"
}
]
}Obtener un pedido
GET/api/v1/orders/{id}Requiere clave de API
Devuelve un pedido por id. Úsalo para ver si la activación terminó.
| Campo | Tipo | Significado |
|---|---|---|
idObligatorio | string | El id del pedido, por ejemplo SP-7KQ2M-X4HTD. |
curl https://starproxy.shop/api/v1/orders/SP-7KQ2M-X4HTD \ -H "Authorization: Bearer spk_your_api_key"
{
"order": {
"id": "SP-7KQ2M-X4HTD",
"product": "unlimited",
"quantity": 30,
"months": null,
"concurrency": 1000,
"bandwidth_mbps": 200,
"country": null,
"unit_price_usd": 8.41,
"total_usd": 252.3,
"status": "active",
"created_at": "2026-10-31T09:12:44.120Z",
"updated_at": "2026-10-31T09:40:02.511Z"
}
}Generar un usuario de proxy
GET/api/v1/proxy-userRequiere clave de API
Devuelve un usuario de proxy con tus opciones incluidas, además de URL HTTP y SOCKS5 listas para pegar. Sin session, cada solicitud recibe una IP nueva.
| Campo | Tipo | Significado |
|---|---|---|
productOpcional | string | Uno de unlimited, residential, isp, datacenter. Por defecto, unlimited. |
countryOpcional | string | Un código de país de dos letras, como jp. |
cityOpcional | string | Un valor de ciudad de /countries, como tokyo. Requiere country. |
sessionOpcional | string | De 1~32 letras o dígitos. Las solicitudes con la misma session comparten una IP. |
ttlOpcional | integer | Minutos que se mantiene la IP de la sesión, de 1~60. Por defecto, 30. |
curl "https://starproxy.shop/api/v1/proxy-user?product=residential&country=jp&city=tokyo&session=job42&ttl=30" \ -H "Authorization: Bearer spk_your_api_key"
{
"username": "spexample1-zone-res-cc-jp-city-tokyo-sid-job42-ttl-30",
"password": "your_password",
"http": "http://spexample1-zone-res-cc-jp-city-tokyo-sid-job42-ttl-30:your_password@gate.starproxy.shop:6100",
"socks5": "socks5h://spexample1-zone-res-cc-jp-city-tokyo-sid-job42-ttl-30:your_password@gate.starproxy.shop:6200"
}Ejemplo completo
Un script que obtiene una cotización, pide con tu saldo y se conecta con una IP de Japón.
import requests
API = "https://starproxy.shop/api/v1"
HEAD = {"Authorization": "Bearer spk_your_api_key"}
# 1) Check the price first
plan = {"product": "residential", "quantity": 100}
print(requests.post(f"{API}/quote", json=plan).json())
# 2) Order from your balance
r = requests.post(f"{API}/orders", json=plan, headers=HEAD)
order = r.json()["order"]
print(order["id"], order["status"])
# 3) Get a username for Japanese IPs
u = requests.get(f"{API}/proxy-user", headers=HEAD,
params={"product": "residential", "country": "jp"}).json()
proxies = {"http": u["http"], "https": u["http"]}
print(requests.get("https://ipinfo.io/json", proxies=proxies, timeout=30).json())const API = "https://starproxy.shop/api/v1";
const HEAD = { Authorization: "Bearer spk_your_api_key", "Content-Type": "application/json" };
// Check the balance
const acc = await fetch(`${API}/account`, { headers: HEAD }).then((r) => r.json());
console.log(acc.balance_usd);
// Order 7 days of unlimited
const res = await fetch(`${API}/orders`, {
method: "POST",
headers: HEAD,
body: JSON.stringify({ product: "unlimited", quantity: 7, concurrency: 500, bandwidth: 100 }),
});
if (res.status === 402) console.log("Top up first");
else console.log((await res.json()).order.id);Los pedidos por API se procesan igual que los del panel y aparecen en la pestaña Historial. Cambia spk_your_api_key en los ejemplos por tu propia clave.