API Referência
Automatize compras e renovações de proxies.
Introdução
Interface programática para listar planos, ver subscrições, comprar novos proxies, renovar subscrições ativas e configurar a rotação automática de IP.
A API usa um único endpoint: /api/proxy. Nas operações GET, passe op na query string; nas operações POST, passe op no JSON body.
Início rápido
Crie uma chave de API em Dashboard -> API Keys e envie-a no cabeçalho de cada pedido.
BASE="https://makeadsafe.com"
API_KEY="rk_your_long_lived_api_key" Todos os IDs são alfanuméricos em minúsculas.
A emissão de trial via
POST /api/proxycom{"op":"trial","planId":"..."}está disponível apenas para determinadas API keys. Contacta o suporte para ativar esta funcionalidade na tua chave. A utilização de trial é monitorizada e pode ser limitada ou desativada em caso de abuso.
Planos disponíveis
Devolve os planos de proxy ativos disponíveis para o proprietário da chave de API.
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"
}
}
]
} Subscrições ativas
Devolve as suas subscrições, incluindo credenciais, URLs de protocolo e dados de rotação 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
}
}
]
} Planos de renovação
Devolve planos elegíveis para renovar uma subscrição específica.
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 disponíveis
Retorna as redes disponíveis para trocar uma subscrição 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"
}
]
} Use networks[].id como targetNetwork no pedido switch-network.
Comprar subscrição
Cria uma ou várias novas subscrições a partir do seu saldo com o plano selecionado.
Campos opcionais:
couponCode: aplica um cupão válido à compra.repeatCount: inteiro positivo, valor predefinido1; multiplica a duração e o preço de cada subscrição criada.quantity: inteiro positivo, valor predefinido1; cria várias subscrições num único pedido.os: impressão digital passiva do sistema operativo aplicada a todos os proxies criados;ios,macos,android,win10ouwin11. Indisponível para planosmulti.
{
"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"
}
]
} Se for criada apenas uma subscrição, o gateway pode devolver subscription em vez de subscriptions. Os itens em subscription/subscriptions usam a mesma estrutura de GET /api/proxy?op=subscriptions.
Renovar subscrição
Renova uma subscrição existente com um plano de renovação elegível.
Campos opcionais:
couponCode: aplica um cupão válido à renovação.repeatCount: inteiro positivo, valor predefinido1; multiplica tanto a duração como o preço da renovação.
{
"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
} Alterar credenciais de ligação
Regenera as credenciais de ligação para uma subscrição ativa do utilizador autenticado (JWT) ou do proprietário da chave de API.
{
"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"
} Definir política de rotação automática
Configura a rotação automática de IP para uma subscrição ativa. Disponível apenas para ligações com "rotate": { "available": true }.
Valores permitidos para rotationPolicy: 0, 5, 10, 15, 30, 60 minutos. Usa 0 para desativar a rotação automática.
{
"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
} Alterar rede de conexão
Move uma assinatura ativa para outra rede disponível.
{
"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
}
}
} Erros de gateway
400JSON body inválido400O body deve ser um objeto400opem falta ou desconhecido400planId/subscriptionId/targetNetwork/rotationPolicyem falta ou inválido400repeatCountouquantityinválido400osinválido401Unauthorized402Saldo insuficiente403Forbidden404Subscrição não encontrada409Política de rotação indisponível para esta subscrição409Esgotado, plano/rede inativos ou estado de subscrição inválido409A seleção do sistema operativo não está disponível para planosmulti429Rate limited500Internal error