¿Eres nuevo? Sigue estos pasos
- 1Regístrate con email y contraseña, o con un token, y abre el panel.
- 2Genera una clave de API en la pestaña Conectar. La clave completa aparece una sola vez, en el momento de generarla, así que guárdala ahí mismo.
- 3Pon la clave en el encabezado Authorization de cada solicitud que la necesite.
- 4Llama primero a /account para comprobar que la clave se acepta y luego haz pedidos con /orders.
¿Cómo funciona la autenticación?
Las solicitudes que acceden a tu propia cuenta (account, orders, proxy-user) necesitan una clave de API. Envíala en el encabezado como Authorization: Bearer pwk_... Los precios, países y cotizaciones son públicos y se pueden consultar sin clave.
Los servidores de ProxyWorld nunca guardan la clave, solo un hash de ella. Si pierdes una clave, crea una nueva en el panel y la anterior queda bloqueada al instante. Pon las claves solo en código del lado del servidor. Si una clave termina en código que se ejecuta en un navegador o en un repositorio público, otra persona puede usarla.
Authorization: Bearer pwk_your_api_key
URL base y formato de datos
- URL base
- https://proxyworld.shop/api/v1
- Cuerpo de solicitudes y respuestas
- application/json
- Importes
- USD como número, por ejemplo 1058.50
- Marcas de tiempo
- ISO 8601 (UTC)
¿Cuántas llamadas puedo hacer?
Cada clave de API puede hacer 60 llamadas por minuto. Los endpoints públicos llamados sin clave permiten 60 llamadas por minuto por IP. Si superas ese límite, recibes HTTP 429. Espera alrededor de un minuto y vuelve a intentarlo.
¿Qué se devuelve cuando algo falla?
Recibes un código de estado HTTP y un cuerpo JSON con un código de error corto y una explicación.
{
"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 se envió un valor que este producto no acepta. | Falta un valor obligatorio, o se envió un valor que este producto no acepta. | |
| unauthorizedHTTP 401Falta la clave de API o no es una clave válida. | Falta la clave de API o no es una clave válida. | |
| insufficient_balanceHTTP 402Tu saldo es menor que el total del pedido. No se descontó dinero de tu saldo. | Tu saldo es menor que el total del pedido. No se descontó dinero de tu saldo. | |
| not_foundHTTP 404Tu cuenta no tiene ningún pedido con este número. | Tu cuenta no tiene ningún pedido con este número. | |
| rate_limitedHTTP 429Superaste la cantidad de llamadas permitidas por minuto. | Superaste la cantidad de llamadas permitidas por minuto. | |
| server_errorHTTP 500El servidor no pudo completar la solicitud. No se descontó dinero de tu saldo. | El servidor no pudo completar la solicitud. No se descontó dinero de tu saldo. |
Endpoints
Ver tu cuenta
GET/api/v1/accountRequiere clave de API
Devuelve cómo inicias sesión (login: email o token), tu email, saldo, host y puertos del proxy, usuario y contraseña del proxy, e IP autorizadas. En las cuentas creadas con token, email es null.
curl https://proxyworld.shop/api/v1/account \ -H "Authorization: Bearer pwk_your_api_key"
{
"login": "email",
"email": "you@example.com",
"balance_usd": 1300,
"proxy": {
"host": "gate.proxyworld.shop",
"http_port": 6100,
"socks5_port": 6200,
"username": "pwexample1",
"password": "your_password"
},
"allowed_ips": [
"203.0.113.10"
]
}Ver productos y precios
GET/api/v1/productsFunciona sin clave
Devuelve el rango de pedido de cada producto, el precio por unidad de cada escalón de cantidad y los descuentos por periodo. Usa la misma tabla de precios que la página de precios.
curl https://proxyworld.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",
"...": "..."
}
]
}Países y ciudades
GET/api/v1/countriesFunciona sin clave
Devuelve los países que puedes elegir para cada producto, junto con los valores de ciudad que se usan en la opción -city- del usuario.
| Nombre | Tipo | Significado |
|---|---|---|
productOpcional | string | Uno de unlimited, residential, isp, datacenter. Si se omite, se usa residential. |
curl "https://proxyworld.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/quoteFunciona sin clave
Calcula el total del pedido sin tocar tu saldo. Envía el mismo cuerpo que enviarías para hacer el pedido.
| Nombre | Tipo | Significado |
|---|---|---|
productObligatorio | string | Uno de unlimited, residential, isp, datacenter. |
quantityObligatorio | integer | Cuánto pedir: 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. Elige 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. Los valores aceptados aparecen en /countries. |
curl -X POST https://proxyworld.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.05,
"unit": "day",
"total_usd": 241.5
}Hacer un pedido
POST/api/v1/ordersRequiere clave de API
Descuenta el total de tu saldo y crea el pedido. Empieza como pending (activando) y pasa a active cuando está listo. Un pedido que no se puede activar pasa a refunded, y todo lo que pagaste vuelve a tu saldo. Si tu saldo no alcanza, recibes 402.
| Nombre | Tipo | Significado |
|---|---|---|
productObligatorio | string | Uno de unlimited, residential, isp, datacenter. |
quantityObligatorio | integer | Cuánto pedir: 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. Elige 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. Los valores aceptados aparecen en /countries. |
curl -X POST https://proxyworld.shop/api/v1/orders \
-H "Authorization: Bearer pwk_your_api_key" \
-H "Content-Type: application/json" \
-d '{"product":"unlimited","quantity":30,"concurrency":1000,"bandwidth":200}'{
"order": {
"id": "PW-7KQ2M-X4HTD",
"product": "unlimited",
"quantity": 30,
"months": null,
"concurrency": 1000,
"bandwidth_mbps": 200,
"country": null,
"unit_price_usd": 8.05,
"total_usd": 241.5,
"status": "pending",
"created_at": "2026-10-31T09:12:44.120Z",
"updated_at": "2026-10-31T09:12:44.120Z"
},
"balance_usd": 1058.5
}Ver tus pedidos
GET/api/v1/ordersRequiere clave de API
Muestra hasta 100 pedidos, empezando por el más reciente.
| Nombre | Tipo | Significado |
|---|---|---|
statusOpcional | string | Uno de pending, active, refunded. Omítelo para obtener pedidos en cualquier estado. |
curl "https://proxyworld.shop/api/v1/orders?status=pending" \ -H "Authorization: Bearer pwk_your_api_key"
{
"orders": [
{
"id": "PW-7KQ2M-X4HTD",
"product": "unlimited",
"quantity": 30,
"months": null,
"concurrency": 1000,
"bandwidth_mbps": 200,
"country": null,
"unit_price_usd": 8.05,
"total_usd": 241.5,
"status": "pending",
"created_at": "2026-10-31T09:12:44.120Z",
"updated_at": "2026-10-31T09:12:44.120Z"
}
]
}Ver un pedido
GET/api/v1/orders/{id}Requiere clave de API
Devuelve el pedido que coincide con un número de pedido. Útil para comprobar si la activación terminó.
| Nombre | Tipo | Significado |
|---|---|---|
idObligatorio | string | El número de pedido, por ejemplo PW-7KQ2M-X4HTD. |
curl https://proxyworld.shop/api/v1/orders/PW-7KQ2M-X4HTD \ -H "Authorization: Bearer pwk_your_api_key"
{
"order": {
"id": "PW-7KQ2M-X4HTD",
"product": "unlimited",
"quantity": 30,
"months": null,
"concurrency": 1000,
"bandwidth_mbps": 200,
"country": null,
"unit_price_usd": 8.05,
"total_usd": 241.5,
"status": "active",
"created_at": "2026-10-31T09:12:44.120Z",
"updated_at": "2026-10-31T09:40:02.511Z"
}
}Armar un usuario de proxy
GET/api/v1/proxy-userRequiere clave de API
Devuelve un usuario de proxy con tus opciones añadidas, además de URL HTTP y SOCKS5 que puedes pegar tal cual. Si no envías session, la IP cambia en cada solicitud.
| Nombre | Tipo | Significado |
|---|---|---|
productOpcional | string | Uno de unlimited, residential, isp, datacenter. Si se omite, se usa unlimited. |
countryOpcional | string | Un código de país de dos letras, por ejemplo jp. |
cityOpcional | string | Un valor de ciudad de /countries, por ejemplo tokyo. Envía también country. |
sessionOpcional | string | De 1~32 letras y dígitos. Las solicitudes con la misma session usan la misma IP. |
ttlOpcional | integer | Cuánto tiempo mantiene la sesión su IP, de 1~60 minutos. Si se omite, 30 minutos. |
curl "https://proxyworld.shop/api/v1/proxy-user?product=residential&country=jp&city=tokyo&session=job42&ttl=30" \ -H "Authorization: Bearer pwk_your_api_key"
{
"username": "pwexample1-zone-res-cc-jp-city-tokyo-sid-job42-ttl-30",
"password": "your_password",
"http": "http://pwexample1-zone-res-cc-jp-city-tokyo-sid-job42-ttl-30:your_password@gate.proxyworld.shop:6100",
"socks5": "socks5h://pwexample1-zone-res-cc-jp-city-tokyo-sid-job42-ttl-30:your_password@gate.proxyworld.shop:6200"
}Ejemplo completo
Un solo script que obtiene una cotización, pide con tu saldo y luego se conecta con una IP de Japón.
import requests
API = "https://proxyworld.shop/api/v1"
HEAD = {"Authorization": "Bearer pwk_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://proxyworld.shop/api/v1";
const HEAD = { Authorization: "Bearer pwk_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 hechos por la API se tratan igual que los del panel y aparecen en la pestaña Historial con los demás. Cambia pwk_your_api_key en los ejemplos por tu propia clave de API.