публичная документация

API Справочник

Автоматизируйте покупки и продления прокси.

Управлять ключами
Справочник
ru

Введение

Программный интерфейс для списка тарифов, просмотра подписок, покупки новых прокси, продления активных подписок и настройки автоматической ротации IP.

API использует одну точку входа: /api/proxy. Для GET операций параметр op передается в query string, для POST операций — в JSON body.

Быстрый старт

Создайте API-ключ в Dashboard -> API Keys и передавайте его в заголовке каждого запроса.

BASE="https://makeadsafe.com"
API_KEY="rk_your_long_lived_api_key"

Идентификаторы должны быть в нижнем регистре и состоять из букв и цифр.

Пробная выдача через POST /api/proxy с {"op":"trial","planId":"..."} доступна только для отдельных 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"
      }
    }
  ]
}

Активные подписки

Возвращает список ваших подписок, учетные данные, протоколы и данные для смены 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
      }
    }
  ]
}

Тарифы продления

Возвращает тарифы, которые подходят для продления конкретной подписки.

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
    }
  ]
}

Доступные сети

Возвращает сети, доступные для переключения конкретной подписки.

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"
    }
  ]
}

Используйте networks[].id как targetNetwork в запросе switch-network.

Оформление подписки

Создает одну или несколько новых подписок за счет баланса по выбранному тарифу.

Необязательные поля:

  • couponCode: применяет валидный купон к покупке.
  • repeatCount: положительное целое число, по умолчанию 1; умножает срок и цену каждой создаваемой подписки.
  • quantity: положительное целое число, по умолчанию 1; создает несколько подписок за один запрос.
  • os: пассивный отпечаток ОС для всех создаваемых прокси; одно из значений: ios, macos, android, win10 или win11. Недоступно для тарифов multi.
{
  "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"
    }
  ]
}

Если создается одна подписка, шлюз может вернуть subscription вместо subscriptions. Элементы в subscription/subscriptions имеют ту же структуру, что и в GET /api/proxy?op=subscriptions.

Продление подписки

Продлевает существующую подписку с помощью валидного тарифа продления.

Необязательные поля:

  • couponCode: применяет валидный купон к продлению.
  • repeatCount: положительное целое число, по умолчанию 1; умножает срок и стоимость продления.
{
  "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
}

Смена данных подключения

Обновляет данные доступа для выбранной подписки. Новые данные начинают работать сразу.

{
  "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"
}

Настройка политики авторотации

Настраивает автоматическую ротацию IP для активной подписки. Настройка доступна только для подключений с "rotate": { "available": true }.

Допустимые значения rotationPolicy: 0, 5, 10, 15, 30, 60 минут. Используйте 0, чтобы отключить авторотацию.

{
  "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
}

Смена сети подключения

Перемещает активную подписку в другую доступную сеть.

{
  "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
    }
  }
}

Ошибки шлюза

  • 400 Невалидный JSON в body
  • 400 Body должен быть объектом
  • 400 Отсутствует или неизвестен op
  • 400 Отсутствует или невалиден planId/subscriptionId/targetNetwork/rotationPolicy
  • 400 Невалидный repeatCount или quantity
  • 400 Невалидный os
  • 401 Unauthorized
  • 402 Недостаточно средств
  • 403 Forbidden
  • 404 Подписка не найдена
  • 409 Для этой подписки недоступна указанная политика ротации
  • 409 Нет доступных ресурсов, тариф/сеть неактивны или состояние подписки не подходит
  • 409 Выбор ОС недоступен для тарифов multi
  • 429 Rate limited
  • 500 Internal error