API de proxy: gestiona tus IPs por código
REST sencilla en JSON para listar proxies, probar la conexión, cambiar un IP con falla técnica y pedir la renovación sin abrir el panel. Autenticación por token con alcance de lectura o escritura: lo mismo que mueve el botón “Probar” del panel, expuesto para tu script.
Para quién es esta API
No sustituye al panel: es para cuando quieres el mismo dato o la misma acción sin hacer clic.
Monitorización propia
Llevar el estado y la vigencia de los proxies a tu Zabbix, Grafana o script de cron, sin entrar al panel a cada rato.
Automatización con n8n
Lanzar la prueba de conexión antes de abrir una sesión de automatización y cortar el flujo si el IP no responde.
Agencias con muchos IPs
Listar todos los proxies de la cuenta y cruzarlos con tu propia hoja de cálculo o CRM, en lugar de exportarlos a mano.
Aviso de renovación
Revisar days_to_expire por código y abrir automáticamente el enlace de checkout cuando un IP esté cerca de vencer.
Autenticación
Cada llamada lleva un Bearer token en la cabecera Authorization.
Genera la clave en Mi cuenta → API Keys; el secreto aparece una sola vez y solo guardamos el hash.
- Solo guardamos el hash SHA-256: el secreto en texto plano no queda en ningún sitio aparte de la pantalla en la que lo copiaste.
- Hasta 10 claves activas por cuenta. Revoca cualquiera en cualquier momento sin afectar a las demás.
- Rate limit contado por clave: otra clave tuya, o de otra cuenta en el mismo IP, no comparte tu cuota.
Authorization: Bearer pb_a1b2c3_9f8e7d6c5b4a3f2e1d0c...
{
"error": "unauthenticated",
"message": "Envía la cabecera Authorization: Bearer <tu clave>."
}
Empieza en 1 minuto
Listar tus proxies: la llamada más sencilla, en el lenguaje que ya usas.
curl "https://proxybox.co/api/v1/proxies" \
-H "Authorization: Bearer pb_a1b2c3_..." \
-H "Accept: application/json"
import requests
r = requests.get(
"https://proxybox.co/api/v1/proxies",
headers={"Authorization": "Bearer pb_a1b2c3_..."},
)
print(r.json())
const res = await fetch("https://proxybox.co/api/v1/proxies", {
headers: { Authorization: "Bearer pb_a1b2c3_..." },
});
const { data } = await res.json();
console.log(data);
$ch = curl_init("https://proxybox.co/api/v1/proxies");
curl_setopt($ch, CURLOPT_HTTPHEADER, [
"Authorization: Bearer pb_a1b2c3_...",
]);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$data = json_decode(curl_exec($ch), true);
Endpoints
Cinco rutas para tus proxies. Sin credenciales expuestas por accidente en la paginación: la contraseña solo aparece al consultar 1 proxy concreto. Los campos message, error y hint de las respuestas llegan en portugués, como en los ejemplos: decide por el código HTTP y los campos, no por el texto.
Proxies
Lista los proxies de la cuenta, paginados. Los campos de credencial (contraseña, cadena de conexión) no vienen aquí:
solo en GET /proxies/{id}.
active)
{
"data": [
{
"id": 42,
"label": "IPv4 Ads",
"status": "active",
"type": "ipv4",
"country": "ES",
"host": "es1.proxybox.io",
"http_port": 8080,
"socks5_port": 1080,
"username": "pb_9f2a1c",
"plan": "IPv4 internacional",
"is_trial": false,
"expires_at": "2026-11-10T00:00:00+00:00",
"days_to_expire": 30,
"can_renew": true,
"can_replace": true
}
],
"meta": { "current_page": 1, "last_page": 1, "per_page": 25, "total": 1 }
}
Detalle de un proxy, incluidos password y
connection_string listos para pegar en tu herramienta.
Un proxy de otra cuenta o un ID inexistente devuelven la misma respuesta 404, a propósito, para no confirmar si un ID existe cuando no es tuyo.
{
"data": {
"id": 42,
"label": "IPv4 Ads",
"status": "active",
"...": "...",
"password": "S3nh4Gerada",
"connection_string": "http://pb_9f2a1c:[email protected]:8080"
}
}
Lanza una conexión HTTPS real a través del proxy y devuelve el IP de salida, el operador y la latencia: la misma prueba del botón “Probar” del panel. El resultado queda registrado en el historial del proxy.
Responde 200 cuando la prueba pasa y
422 cuando falla: cambia el formato del cuerpo, no es un error de llamada.
// 200 — éxito
{
"data": {
"ok": true,
"ip": "191.96.10.42",
"country": "Brazil",
"city": "São Paulo",
"asn": "AS262589",
"org": "Operadora XY",
"latency_ms": 148,
"checked_at": "10/09/2026 14:32"
}
}
// 422 — falla
{
"data": {
"ok": false,
"error": "Autenticación rechazada (407)",
"hint": "El usuario o la contraseña no coinciden con lo que espera el servidor."
}
}
El mismo flujo del botón No funciona del panel: prueba el túnel y solo vuelve a comprar el IP si la falla es técnica (timeout, host que no responde, 407 con la contraseña del panel). Un proxy en línea, el verificador caído o un plan por GB no generan cambio: la respuesta dice qué hacer.
200 cuando el diagnóstico concluye (incluidos “está en línea”
o “IP sustituido”). 422 cuando no se puede cambiar ahora.
Un bloqueo de plataforma sigue fuera de esta ruta.
// 200 — sustituido
{
"data": {
"ok": true,
"action": "replaced",
"message": "IP sustituida. Se mantiene la fecha de vencimiento original.",
"replaced_id": 42,
"proxy": { "id": 87, "host": "br2.proxybox.io", "...": "..." }
}
}
// 200 — está en línea (no cambia)
{
"data": {
"ok": true,
"action": "healthy",
"message": "El proxy está funcionando."
}
}
// 422 — verificador o cuota
{
"data": {
"ok": false,
"action": "retry",
"message": "El verificador no respondió"
}
}
No realiza ningún cobro. Devuelve el enlace de checkout del plan del proxy para que tú (o tu flujo de automatización) completes el pago. La API no guarda datos de pago en la v1.
Elegibilidad: el proxy debe estar activo, tener un plan vigente y no ser de prueba (trial).
// 200 — elegible
{
"data": {
"proxy_id": 42,
"sku": "ipv4-intl-30d",
"checkout_url": "https://proxybox.co/checkout/ipv4-intl-30d",
"message": "Abre el checkout para completar el pago. La API no cobra con tarjeta en la v1."
}
}
// 422 — no elegible
{
"error": "not_renewable",
"message": "Este proxy no se puede renovar (debe estar activo,
con un plan a la venta y no ser de prueba)."
}
Confirma que la IP no se renueva: sigue funcionando hasta expires_at y después vence. En proxybox.co no hay
renovación automática, así que la IP ya vence al final del periodo pagado; esta llamada deja constancia en tu sistema.
Sin penalización ni permanencia. Cancelar no corta la IP antes de tiempo. Si eres consumidor, puedes ejercer el derecho de desistimiento en 14 días.
// 200
{
"data": {
"id": 42,
"auto_renew": false,
"expires_at": "2026-11-06T20:36:30+00:00",
"canceled": true,
"message": "Renovación cancelada. La IP funciona hasta
2026-11-06T20:36:30+00:00 y después vence."
}
}
Catálogo y pedidos
En proxybox.co la compra se paga en el checkout (transferencia o pago local según tu país): la API consulta el catálogo y el estado de
los pedidos, pero no compra con saldo. POST /orders responde 503 en este sitio. Paso a paso en
cómo integrar la compra de IP.
Planes a la venta, con precio por IP en dólares (price_usd y, cuando el plan deja elegir el país,
country_prices_usd), descuentos por volumen, periodos disponibles y si hay entrega ahora (available).
Los campos price_brl y country_prices_brl son la base interna en reales: usa los de dólares,
que son los precios del sitio.
{
"data": [
{
"sku": "ipv4-intl-30d",
"name": "IPv4 internacional",
"type": "datacenter",
"country": "WW",
"duration_days": 30,
"price_usd": 3.49,
"countries": ["ES", "MX", "US", "..."],
"country_prices_usd": {},
"periods_months": [1, 3],
"available": true
}
]
}
Estado de un pedido: awaiting_payment (esperando el pago), processing (pagado, entrega en curso)
o delivered (IP lista, en proxies).
GET /orders lista los pedidos de la cuenta, paginados (filtro opcional status, per_page hasta 100).
{
"data": {
"number": "PB261007A1B2C",
"kind": "purchase",
"status": "processing",
"paid_at": "2026-10-07T20:36:30+00:00",
"proxies": []
}
}
Errores y límites
Todo error llega en JSON, con el mismo estado HTTP que generaría la llamada equivalente desde el panel.
| Estado | Cuándo ocurre | Cuerpo |
|---|---|---|
| 401 | Sin token, o token inválido/revocado | {"error":"unauthenticated","message":"..."} |
| 403 | Clave read intentando un endpoint write | {"error":"forbidden","message":"..."} |
| 404 | El proxy no existe o no es de tu cuenta | {"error":"not_found","message":"..."} |
| 422 | La prueba falló, el cambio fue rechazado o la renovación no es elegible | {"ok":false,...} o {"error":"not_renewable",...} |
| 429 | Se superó el rate limit de la clave | {"message":"Too Many Attempts."} |
La respuesta 429 también trae las cabeceras X-RateLimit-Limit,
X-RateLimit-Remaining y
Retry-After en segundos.
Preguntas sobre la API
¿La API tiene costo aparte del plan?
¿Se puede comprar un proxy nuevo por la API?
¿Cómo guardan mi clave?
¿El rate limit es por clave o por IP?
¿La API sustituye al panel?
¿Hay SDK o biblioteca oficial?
¿Puedo revocar al momento una clave comprometida?
¿Listo para automatizar?
La clave se genera en el panel en menos de un minuto. Alcance read para monitorizar, write cuando necesites actuar.