API Referencia
Automatiza la compra y renovación de proxies.
Introducción
Interfaz programática para listar planes, consultar suscripciones, comprar nuevos proxies, renovar suscripciones activas y configurar la rotación automática de IP.
La API usa un único endpoint: /api/proxy. En operaciones GET, pasa op en la query string; en operaciones POST, pasa op en el JSON body.
Inicio rápido
Crea una API key en Dashboard -> API Keys y envíala en el encabezado de cada solicitud.
BASE="https://makeadsafe.com"
API_KEY="rk_your_long_lived_api_key" Todos los ID son valores alfanuméricos en minúsculas.
La emisión de pruebas mediante
POST /api/proxycon{"op":"trial","planId":"..."}solo está disponible para determinadas API keys. Contacta con soporte para habilitar esta capacidad en tu clave. El uso de pruebas se supervisa y puede limitarse o deshabilitarse en caso de abuso.
Planes disponibles
Devuelve los planes de proxy activos disponibles para el propietario de la API key.
curl -sS
-H "x-api-key: $API_KEY"
"$BASE/api/proxy?op=plans" {
"ok": true,
"plans": [
{
"id": "k17m3q5v7n9p1r2t4w6y8z0a",
"connectionType": "private",
"durationMs": 2592000000,
"priceAmountCents": 1200,
"popular": true,
"remainingProxies": 20,
"network": {
"name": "NL-AMS",
"city": "Amsterdam",
"country": "NL",
"networkType": "mobile"
}
}
]
} Suscripciones activas
Devuelve tus suscripciones, incluidas credenciales, URL de protocolos y datos de rotación de IP.
curl -sS
-H "x-api-key: $API_KEY"
"$BASE/api/proxy?op=subscriptions" {
"ok": true,
"subscriptions": [
{
"subscriptionId": "j97b2f6m1k4n8p3r5t7v9x0z",
"status": "active",
"activeUntil": 1762592000000,
"userNote": "Client A",
"rotationPolicy": 10,
"label": "12001 - NL - Private",
"networkLabel": "NL-AMS Amsterdam",
"credentials": {
"username": "u_6k8s9d",
"password": "p_2n4m6q"
},
"protocols": {
"http": "http://u_6k8s9d:[email protected]:12001",
"socks5": "socks5://u_6k8s9d:[email protected]:12001",
"vless": "vless://...",
"shadowsocks": "ss://..."
},
"rotate": {
"rotatePath": "/r/abcd1234",
"available": true
}
}
]
} Planes de renovación
Devuelve los planes elegibles para renovar una suscripcion especifica.
SUB_ID="j97b2f6m1k4n8p3r5t7v9x0z"
curl -sS
-H "x-api-key: $API_KEY"
"$BASE/api/proxy?op=renewal-plans&subscriptionId=$SUB_ID" {
"ok": true,
"renewalPlans": [
{
"id": "k17m3q5v7n9p1r2t4w6y8z0a",
"connectionType": "private",
"durationMs": 2592000000,
"priceAmountCents": 1200
}
]
} Redes disponibles
Devuelve las redes disponibles para cambiar una suscripción específica.
SUB_ID="j97b2f6m1k4n8p3r5t7v9x0z"
curl -sS
-H "x-api-key: $API_KEY"
"$BASE/api/proxy?op=available-networks&subscriptionId=$SUB_ID" {
"ok": true,
"networks": [
{
"id": "b1c2d3e4f5g6h7j8k9m0n1p2",
"networkLabel": "DE-BER Berlin",
"country": "DE"
}
]
} Usa networks[].id como targetNetwork en la solicitud switch-network.
Compra de suscripción
Crea una o varias suscripciones nuevas usando tu saldo con el plan seleccionado.
Campos opcionales:
couponCode: aplica un cupón válido a la compra.repeatCount: entero positivo, valor por defecto1; multiplica la duración y el precio de cada suscripción creada.quantity: entero positivo, valor por defecto1; crea varias suscripciones en una sola solicitud.os: huella pasiva del sistema operativo aplicada a todos los proxies creados;ios,macos,android,win10owin11. No disponible para planesmulti.
{
"op": "purchase",
"planId": "k17m3q5v7n9p1r2t4w6y8z0a",
"couponCode": "MYCODE",
"repeatCount": 3,
"os": "ios",
"quantity": 2
} curl -sS -X POST
-H "x-api-key: $API_KEY"
-H "Content-Type: application/json"
-d '{"op":"purchase","planId":"k17m3q5v7n9p1r2t4w6y8z0a","repeatCount":3,"os":"ios","quantity":2}'
"$BASE/api/proxy" {
"ok": true,
"subscriptionId": "j97b2f6m1k4n8p3r5t7v9x0z",
"subscriptionIds": [
"j97b2f6m1k4n8p3r5t7v9x0z",
"n38k2f6m1k4n8p3r5t7v9x0z"
],
"subscriptions": [
{
"subscriptionId": "j97b2f6m1k4n8p3r5t7v9x0z",
"status": "active",
"activeUntil": 1767776000000,
"label": "12001 - NL - Private",
"networkLabel": "NL-AMS Amsterdam"
},
{
"subscriptionId": "n38k2f6m1k4n8p3r5t7v9x0z",
"status": "active",
"activeUntil": 1767776000000,
"label": "12002 - NL - Private",
"networkLabel": "NL-AMS Amsterdam"
}
]
} Si se crea una sola suscripción, el gateway puede devolver subscription en lugar de subscriptions. Los elementos de subscription/subscriptions usan la misma estructura que GET /api/proxy?op=subscriptions.
Renovación de suscripción
Renueva una suscripción existente con un plan de renovación elegible.
Campos opcionales:
couponCode: aplica un cupón válido a la renovación.repeatCount: entero positivo, valor por defecto1; multiplica tanto la duración como el precio de la renovación.
{
"op": "renew",
"subscriptionId": "j97b2f6m1k4n8p3r5t7v9x0z",
"planId": "q2w4e6r8t0y2u4i6o8p0a2s4",
"couponCode": "MYCODE",
"repeatCount": 3
} curl -sS -X POST
-H "x-api-key: $API_KEY"
-H "Content-Type: application/json"
-d '{"op":"renew","subscriptionId":"j97b2f6m1k4n8p3r5t7v9x0z","planId":"q2w4e6r8t0y2u4i6o8p0a2s4","repeatCount":3}'
"$BASE/api/proxy" {
"ok": true,
"subscriptionId": "j97b2f6m1k4n8p3r5t7v9x0z",
"endAt": 1770368000000
} Cambiar credenciales de conexión
Regenera las credenciales de conexión para una suscripción activa del propietario autenticado (JWT) o del propietario de la API key.
{
"op": "change-credentials",
"subscriptionId": "j97b2f6m1k4n8p3r5t7v9x0z"
} curl -sS -X POST
-H "x-api-key: $API_KEY"
-H "Content-Type: application/json"
-d '{"op":"change-credentials","subscriptionId":"j97b2f6m1k4n8p3r5t7v9x0z"}'
"$BASE/api/proxy" {
"ok": true,
"password": "q7N3x9Lp",
"vpn": "7f3d9d4a-8b9f-4a93-9f55-2d5e3b7f1c24"
} Configurar política de auto-rotación
Configura la rotación automática de IP para una suscripción activa. Disponible solo para conexiones con "rotate": { "available": true }.
Valores permitidos para rotationPolicy: 0, 5, 10, 15, 30, 60 minutos. Usa 0 para desactivar la auto-rotación.
{
"op": "set-rotation-policy",
"subscriptionId": "j97b2f6m1k4n8p3r5t7v9x0z",
"rotationPolicy": 10
} curl -sS -X POST
-H "x-api-key: $API_KEY"
-H "Content-Type: application/json"
-d '{"op":"set-rotation-policy","subscriptionId":"j97b2f6m1k4n8p3r5t7v9x0z","rotationPolicy":10}'
"$BASE/api/proxy" {
"ok": true
} Cambiar red de conexión
Mueve una suscripción activa a otra red disponible.
{
"op": "switch-network",
"subscriptionId": "j97b2f6m1k4n8p3r5t7v9x0z",
"targetNetwork": "b1c2d3e4f5g6h7j8k9m0n1p2"
} curl -sS -X POST
-H "x-api-key: $API_KEY"
-H "Content-Type: application/json"
-d '{"op":"switch-network","subscriptionId":"j97b2f6m1k4n8p3r5t7v9x0z","targetNetwork":"b1c2d3e4f5g6h7j8k9m0n1p2"}'
"$BASE/api/proxy" {
"ok": true,
"subscription": {
"subscriptionId": "j97b2f6m1k4n8p3r5t7v9x0z",
"status": "active",
"activeUntil": 1762592000000,
"userNote": "Client A",
"rotationPolicy": 10,
"label": "12001 - DE - Private",
"networkLabel": "DE-BER Berlin",
"credentials": {
"username": "u_6k8s9d",
"password": "p_2n4m6q"
},
"protocols": {
"http": "http://u_6k8s9d:[email protected]:12001",
"socks5": "socks5://u_6k8s9d:[email protected]:12001",
"vless": "vless://...",
"shadowsocks": "ss://..."
},
"rotate": {
"rotatePath": "/r/abcd1234",
"available": true
}
}
} Errores de gateway
400JSON body inválido400El body debe ser un objeto400opfaltante o desconocido400planId/subscriptionId/targetNetwork/rotationPolicyfaltante o inválido400repeatCountoquantityinválido400osinválido401Unauthorized402Saldo insuficiente403Forbidden404Suscripción no encontrada409La política de rotación no está disponible para esta suscripción409Sin stock, plan/red inactivos o estado de suscripción no válido409La selección de sistema operativo no está disponible para planesmulti429Rate limited500Internal error