StealthSurf VPNStealthSurf VPN
Доступные методы

Платные опции

Методы для управления платными опциями: покупка, управление устройствами, лимитами и настройками.

Обзор

Модуль для работы с платными опциями пользователя, такими как white_internet. Позволяет покупать опции, управлять устройствами и лимитами.


GET /paid-options

Получить активные платные опции пользователя. Возвращаются только подписки, у которых expires_at ещё не наступил. Для опции white_internet в configs отдаются конфиги персональной подписки по индексам, для остальных опций — VPN-конфиги.

Rate Limit: 60 req / 60 sec

Пример запроса

curl -X GET "https://api.stealthsurf.net/paid-options" \
  -H "Authorization: Bearer stlth_XXXXXXXX_YYYYYYYYYYYYYYYYYYYYYYYY"

Ответ

{
  status: true,
  statusCode: 200,
  data: Array<{
    id: number              // ID подписки пользователя на платную опцию
    option_id: number       // ID типа платной опции
    expires_at: number      // Unix timestamp окончания подписки
    auto_renewal: boolean
    auto_renewal_days: number | null
    configs: Array<
      | {                                   // VPN-конфиги обычных платных опций
          id: number
          server_id: number
          location_id: number
          connection_url: string
          title: string | null
          protocol: string
          created_at: number
          is_extended_settings_enabled: boolean
          is_online: boolean
          xray_config?: string
          awg_config?: string
        }
      | {                                   // Конфиги персональной подписки white_internet
          index: number
          traffic_scope_id: number
          original_title: string
          custom_title: string | null
          is_online: boolean
        }
    >
  }>
}

Для опции white_internet объекты в configs имеют другую форму: вместо id и connection_url они содержат index, traffic_scope_id, original_title, custom_title и is_online.


GET /paid-options/tariffs

Получить тарифы платных опций. Данные отдаются из кэша: возвращаются активные опции, а также неактивные, если у пользователя есть по ним активная подписка. Опции и способы оплаты без доступных тарифов из выдачи исключаются.

Rate Limit: глобальный (60 req/min)

Пример запроса

curl -X GET "https://api.stealthsurf.net/paid-options/tariffs" \
  -H "Authorization: Bearer stlth_XXXXXXXX_YYYYYYYYYYYYYYYYYYYYYYYY"

Ответ

{
  status: true,
  statusCode: 200,
  data: Array<{
    id: number              // ID платной опции
    option_key: string      // Ключ опции (white_internet, etc.)
    title: string
    caption: string
    description: string
    is_sold_out: boolean
    almost_full: boolean
    allow_multiple_purchase: boolean
    payment_methods: Array<{
      id: number
      display_name: string
      currency: string
      min_amount: number | null
      tariffs: Array<{
        id: number
        days: number
        price: number
        old_price?: number      // Старая цена (для отображения скидки)
      }>
    }>
  }>
}

POST /paid-options

Создать заказ на платную опцию или продлить существующую. Поведение зависит от тела запроса: активация по промокоду, покупка с баланса или реферального баланса (мгновенная выдача), покупка в виде ключа активации (as_key) либо создание платёжной ссылки.

Rate Limit: 1 req / 1 sec

Request Body

FieldTypeRequiredDescription
paid_option_idnumberДаID платной опции
payment_method_idnumberНетID способа оплаты (min 1). Указывается вместе с tariff_id
tariff_idnumberНетID тарифа (min 1). Указывается вместе с payment_method_id, несовместим с promocode
promocodestringНетПромокод (4-32 символа). Нельзя комбинировать с оплатой или as_key
as_keybooleanНетКупить как ключ активации
enable_auto_renewalbooleanНетВключить автопродление
users_paid_option_idnumberНетЦелевая подписка для продления, если опция допускает несколько покупок (min 1). Опустите, чтобы создать новую подписку
location_idnumberНетПредпочтительная локация для стартового конфига новой подписки (min 1)

Пример запроса

curl -X POST "https://api.stealthsurf.net/paid-options" \
  -H "Authorization: Bearer stlth_XXXXXXXX_YYYYYYYYYYYYYYYYYYYYYYYY" \
  -H "Content-Type: application/json" \
  -d '{
    "paid_option_id": 1,
    "payment_method_id": 1,
    "tariff_id": 1
  }'

Ответ (требуется оплата)

{
  status: true,
  statusCode: 201,
  data: {
    link: string    // URL для оплаты
  }
}

Ответ (мгновенная активация: промокод, баланс, реферальный баланс)

{
  status: true,
  statusCode: 201,
  data: {
    option_id: number       // ID типа платной опции
    expires_at: number      // Unix timestamp окончания подписки
  }
}

Ответ (покупка ключа активации, as_key: true)

{
  status: true,
  statusCode: 201,
  data: {
    promocode: string    // Ключ активации
    days: number         // Количество дней
  }
}

GET /paid-options/:id/locations

Получить доступные локации для платной опции.

Rate Limit: 10 req / 5 sec

URL Parameters

ParameterTypeRequiredDescription
idnumberДаID типа платной опции

Пример запроса

curl -X GET "https://api.stealthsurf.net/paid-options/1/locations" \
  -H "Authorization: Bearer stlth_XXXXXXXX_YYYYYYYYYYYYYYYYYYYYYYYY"

Ответ

{
  status: true,
  statusCode: 200,
  data: Array<{
    id: number
    code: string
    title: string
    emoji: string
    description: string | null
    caption: string | null
    ping_ip: string
    is_active: boolean
    position: number
    has_servers: boolean
  }>
}

GET /paid-options/:id/devices

Получить устройства Remnawave. Работает только для опции с ключом white_internet.

Rate Limit: 60 req / 60 sec

URL Parameters

ParameterTypeRequiredDescription
idnumberДаID платной опции

Пример запроса

curl -X GET "https://api.stealthsurf.net/paid-options/123/devices" \
  -H "Authorization: Bearer stlth_XXXXXXXX_YYYYYYYYYYYYYYYYYYYYYYYY"

Ответ

{
  status: true,
  statusCode: 200,
  data: {
    total: number
    devices: Array<{
      hwid: string
      platform: string
      os_version: string
      device_model: string
      created_at: number
    }>
  }
}

GET /paid-options/:id/subscription

Получить информацию о подписке платной опции.

Rate Limit: 60 req / 60 sec

URL Parameters

ParameterTypeRequiredDescription
idnumberДаID платной опции

Пример запроса

curl -X GET "https://api.stealthsurf.net/paid-options/123/subscription" \
  -H "Authorization: Bearer stlth_XXXXXXXX_YYYYYYYYYYYYYYYYYYYYYYYY"

Ответ

{
  status: true,
  statusCode: 200,
  data: {
    used_traffic_bytes: number
    lifetime_used_traffic_bytes: number
    period_used_traffic_bytes: number // Трафик за текущий расчётный период
    period_start: string              // Начало периода (YYYY-MM-DD)
    device_limit: number | null       // null = безлимит
    traffic_limit_bytes: number       // 0 = безлимит
    status: string                    // active | disabled | limited | expired
  }
}

GET /paid-options/:id/configs

Получить прямые URL подключения для конфигов white_internet. Ссылки отдаются без фрагмента с названием — название доступно отдельно в полях original_title и custom_title.

Rate Limit: 60 req / 60 sec

URL Parameters

ParameterTypeRequiredDescription
idnumberДаID платной опции

Пример запроса

curl -X GET "https://api.stealthsurf.net/paid-options/123/configs" \
  -H "Authorization: Bearer stlth_XXXXXXXX_YYYYYYYYYYYYYYYYYYYYYYYY"

Ответ

{
  status: true,
  statusCode: 200,
  data: Array<{
    index: number
    connection_url: string
    original_title: string
    custom_title: string | null
  }>
}

PATCH /paid-options/:id/limits

Обновить лимиты устройств и трафика. Хотя бы одно из полей должно быть передано.

Rate Limit: 1 req / 5 sec

URL Parameters

ParameterTypeRequiredDescription
idnumberДаID платной опции

Request Body

FieldTypeRequiredDescription
device_limitnumberНетЛимит устройств (min 0, max 100; 0 = безлимит)
traffic_limitnumberНетЛимит трафика в байтах (0 = безлимит)

Пример запроса

curl -X PATCH "https://api.stealthsurf.net/paid-options/123/limits" \
  -H "Authorization: Bearer stlth_XXXXXXXX_YYYYYYYYYYYYYYYYYYYYYYYY" \
  -H "Content-Type: application/json" \
  -d '{
    "device_limit": 5,
    "traffic_limit": 10737418240
  }'

Ответ

{
  status: true,
  statusCode: 200,
  data: true
}

PATCH /paid-options/:id/titles/:index

Установить пользовательское название для конфига white_internet.

Rate Limit: 5 req / 2 sec

URL Parameters

ParameterTypeRequiredDescription
idnumberДаID платной опции
indexnumberДаИндекс конфига

Request Body

FieldTypeRequiredDescription
titlestringДаНазвание (1-64 символа)

Пример запроса

curl -X PATCH "https://api.stealthsurf.net/paid-options/123/titles/0" \
  -H "Authorization: Bearer stlth_XXXXXXXX_YYYYYYYYYYYYYYYYYYYYYYYY" \
  -H "Content-Type: application/json" \
  -d '{
    "title": "Мой конфиг"
  }'

Ответ

{
  status: true,
  statusCode: 200,
  data: true
}

DELETE /paid-options/:id/titles/:index

Удалить пользовательское название.

Rate Limit: 5 req / 2 sec

URL Parameters

ParameterTypeRequiredDescription
idnumberДаID платной опции
indexnumberДаИндекс конфига

Пример запроса

curl -X DELETE "https://api.stealthsurf.net/paid-options/123/titles/0" \
  -H "Authorization: Bearer stlth_XXXXXXXX_YYYYYYYYYYYYYYYYYYYYYYYY"

Ответ

{
  status: true,
  statusCode: 200,
  data: true
}

GET /paid-options/:id/stats/:index

Получить статистику сервера для конфига white_internet. Если статистика ещё не собрана, в data возвращается null.

Rate Limit: 3 req / 5 sec

URL Parameters

ParameterTypeRequiredDescription
idnumberДаID платной опции
indexnumberДаИндекс конфига

Пример запроса

curl -X GET "https://api.stealthsurf.net/paid-options/123/stats/0" \
  -H "Authorization: Bearer stlth_XXXXXXXX_YYYYYYYYYYYYYYYYYYYYYYYY"

Ответ

{
  status: true,
  statusCode: 200,
  data: {
    host: string              // IP адрес сервера
    status: string            // Статус (up, down)
    uptime_days: number       // Время работы в днях
    cpu_model: string         // Модель CPU
    stats: Array<{
      date: string            // Дата (YYYY-MM-DD)
      cpu: number             // CPU usage %
      ram: number             // RAM usage %
      up: number              // Upload Mbps
      down: number            // Download Mbps
    }>
  } | null
}

DELETE /paid-options/:id/devices/:device_id

Удалить устройство Remnawave.

Rate Limit: 20 req / 60 sec

URL Parameters

ParameterTypeRequiredDescription
idnumberДаID платной опции
device_idstringДаID устройства (hwid)

Пример запроса

curl -X DELETE "https://api.stealthsurf.net/paid-options/123/devices/abc123" \
  -H "Authorization: Bearer stlth_XXXXXXXX_YYYYYYYYYYYYYYYYYYYYYYYY"

Ответ

{
  status: true,
  statusCode: 200,
  data: true
}

DELETE /paid-options/:id/devices

Удалить все устройства Remnawave.

Rate Limit: 1 req / 5 sec

URL Parameters

ParameterTypeRequiredDescription
idnumberДаID платной опции

Пример запроса

curl -X DELETE "https://api.stealthsurf.net/paid-options/123/devices" \
  -H "Authorization: Bearer stlth_XXXXXXXX_YYYYYYYYYYYYYYYYYYYYYYYY"

Ответ

{
  status: true,
  statusCode: 200,
  data: true
}

PATCH /paid-options/:id/auto-renewal

Переключить автопродление платной опции.

Rate Limit: 1 req / 1 sec

URL Parameters

ParameterTypeRequiredDescription
idnumberДаID платной опции

Request Body

FieldTypeRequiredDescription
enabledbooleanДаВключить/выключить автопродление
daysnumberНетДней для автопродления (min 1, обязательно при enabled: true)
users_paid_option_idnumberНетЦелевая подписка, если у опции несколько активных покупок (min 1). Опустите, чтобы использовать первую

Пример запроса

curl -X PATCH "https://api.stealthsurf.net/paid-options/123/auto-renewal" \
  -H "Authorization: Bearer stlth_XXXXXXXX_YYYYYYYYYYYYYYYYYYYYYYYY" \
  -H "Content-Type: application/json" \
  -d '{
    "enabled": true,
    "days": 30
  }'

Ответ

{
  status: true,
  statusCode: 200,
  data: {
    auto_renewal: boolean
    auto_renewal_days: number | null
  }
}

Конфигурации платных опций


POST /paid-options/:id/configs

Создать VPN конфиг для платной опции. Сервер выбирается автоматически, если не переданы server_id и location_id.

Rate Limit: 1 req / 1 sec

URL Parameters

ParameterTypeRequiredDescription
idnumberДаID платной опции пользователя

Request Body

FieldTypeRequiredDescription
protocolstringДаПротокол: vless, trojan, trojan-2901, hysteria2, vless-2410, shadowsocks-2022, amnezia-wg-2, wg
users_paid_option_idnumberНетЦелевая подписка при множественной покупке опции (min 1; по умолчанию первая активная)
server_idnumberНетПредпочтительный сервер (min 1)
location_idnumberНетПредпочтительная локация (min 1; выбирается автоматически, если не указана)
titlestringНетНазвание конфига (1-64 символа)
use_extended_settingsbooleanНетРасширенные настройки. Несовместимо с wg
use_warpbooleanНетWARP
disable_flow_realitybooleanНетОтключить Flow Reality. Несовместимо с use_xhttp и use_grpc
disable_realitybooleanНетОтключить Reality. Для trojan и trojan-2901 несовместимо с change_sni
change_snibooleanНетПрименить SNI. Недоступно для vless-2410 и trojan-2901, а также для платной опции с id = 3
disable_snibooleanНетУстановить отпечаток QQ. Недоступно для vless-2410 и trojan-2901; для опции с id = 3 недоступно с этими протоколами
enable_family_filterbooleanНетСемейный фильтр
pass_all_traffic_through_vpnbooleanНетВесь трафик через VPN
block_bittorrentbooleanНетБлокировать BitTorrent
use_xhttpbooleanНетXHTTP вместо TCP (нельзя одновременно с use_grpc)
use_grpcbooleanНетgRPC вместо TCP (нельзя одновременно с use_xhttp)
grpc_multi_modebooleanНетВключить gRPC multi mode (TunMulti); требует use_grpc = true
randomize_fingerprintbooleanНетРандомизированный uTLS-отпечаток вместо chrome
use_loopbacksbooleanНетПерелив трафика в следующую группу балансировщика при полном отказе группы
dns_presetstringНетDNS-пресет: cloudflare, google, quad9, adguard, adguard_family, yandex, comss, mullvad, custom
custom_dns_urlstringНетDoH URL, обязателен при dns_preset: "custom". Должен быть валидным URL по протоколу https

Пример запроса

curl -X POST "https://api.stealthsurf.net/paid-options/123/configs" \
  -H "Authorization: Bearer stlth_XXXXXXXX_YYYYYYYYYYYYYYYYYYYYYYYY" \
  -H "Content-Type: application/json" \
  -d '{
    "protocol": "vless",
    "title": "Мой конфиг"
  }'

Ответ

{
  status: true,
  statusCode: 201,
  data: {
    id: number
    server_id: number
    connection_url: string
    title: string | null
    protocol: string
    created_at: number
    is_extended_settings_enabled: boolean
    is_online: boolean
    xray_config?: string
    awg_config?: string
  }
}

PATCH /paid-options/:id/configs/:configId/settings

Обновить настройки конфига платной опции. Конфиг пересоздаётся на выбранном сервере с новыми параметрами.

Rate Limit: 1 req / 1 sec

URL Parameters

ParameterTypeRequiredDescription
idnumberДаID платной опции пользователя
configIdnumberДаID конфига

Request Body

FieldTypeRequiredDescription
protocolstringДаПротокол: vless, trojan, trojan-2901, hysteria2, vless-2410, shadowsocks-2022, amnezia-wg-2, wg
server_idnumberНетПредпочтительный сервер (min 1)
location_idnumberНетПредпочтительная локация (min 1; выбирается автоматически, если не указана)
use_extended_settingsbooleanНетРасширенные настройки. Несовместимо с wg
use_warpbooleanНетWARP
disable_flow_realitybooleanНетОтключить Flow Reality. Несовместимо с use_xhttp и use_grpc
disable_realitybooleanНетОтключить Reality. Для trojan и trojan-2901 несовместимо с change_sni
change_snibooleanНетПрименить SNI. Недоступно для vless-2410 и trojan-2901, а также для платной опции с id = 3
disable_snibooleanНетУстановить отпечаток QQ. Недоступно для vless-2410 и trojan-2901; для опции с id = 3 недоступно с этими протоколами
enable_family_filterbooleanНетСемейный фильтр
pass_all_traffic_through_vpnbooleanНетВесь трафик через VPN
block_bittorrentbooleanНетБлокировать BitTorrent
use_xhttpbooleanНетXHTTP вместо TCP (нельзя одновременно с use_grpc)
use_grpcbooleanНетgRPC вместо TCP (нельзя одновременно с use_xhttp)
grpc_multi_modebooleanНетВключить gRPC multi mode (TunMulti); требует use_grpc = true
randomize_fingerprintbooleanНетРандомизированный uTLS-отпечаток вместо chrome
use_loopbacksbooleanНетПерелив трафика в следующую группу балансировщика при полном отказе группы
dns_presetstringНетDNS-пресет: cloudflare, google, quad9, adguard, adguard_family, yandex, comss, mullvad, custom
custom_dns_urlstringНетDoH URL, обязателен при dns_preset: "custom". Должен быть валидным URL по протоколу https

Пример запроса

curl -X PATCH "https://api.stealthsurf.net/paid-options/123/configs/456/settings" \
  -H "Authorization: Bearer stlth_XXXXXXXX_YYYYYYYYYYYYYYYYYYYYYYYY" \
  -H "Content-Type: application/json" \
  -d '{
    "protocol": "hysteria2"
  }'

Ответ

{
  status: true,
  statusCode: 200,
  data: {
    connection_url: string
    server_id: number
    location_id: number
    xray_config?: string
    awg_config?: string
  }
}

PATCH /paid-options/:id/configs/:configId/xray

Обновить XRay конфиг для конфига платной опции. Доступно только для конфигов с включёнными расширенными настройками.

Rate Limit: 1 req / 1 sec

URL Parameters

ParameterTypeRequiredDescription
idnumberДаID платной опции пользователя
configIdnumberДаID конфига

Request Body

FieldTypeRequiredDescription
xray_configstringДаXRay конфигурация в виде JSON-строки. Должна содержать числовое поле inbounds[0].port
public_keystring | nullНетПубличный ключ
use_loopbacksbooleanНетПерелив трафика в следующую группу балансировщика при полном отказе группы

Пример запроса

curl -X PATCH "https://api.stealthsurf.net/paid-options/123/configs/456/xray" \
  -H "Authorization: Bearer stlth_XXXXXXXX_YYYYYYYYYYYYYYYYYYYYYYYY" \
  -H "Content-Type: application/json" \
  -d '{
    "xray_config": "{...}",
    "public_key": "..."
  }'

Ответ

{
  status: true,
  statusCode: 200,
  data: {
    connection_url: string
    server_id: number
    location_id: number
    xray_config?: string
    awg_config?: string
  }
}

PATCH /paid-options/:id/configs/:configId/awg

Обновить AWG конфиг платной опции. Доступно только для конфигов amnezia-wg-2 с включёнными расширенными настройками.

Rate Limit: 1 req / 1 sec

URL Parameters

ParameterTypeRequiredDescription
idnumberДаID платной опции пользователя
configIdnumberДаID конфига

Request Body

FieldTypeRequiredDescription
portnumberНетUDP-порт сервера: 0 — автоназначение, иначе 1024-65535
client_listen_portnumberНетКлиентский порт WireGuard: 0 — автоматически, иначе 1024-65535
mtunumberНетMTU клиентского интерфейса: 0 — значение сервера, иначе 1280-1420
dnsstringНетУстаревший одиночный IPv4 DNS. Пустая строка сбрасывает значение. Несовместим с dns_mode и dns_servers
dns_modestringНетРежим DNS: default, custom, system
dns_serversstring[]НетСписок IPv4-адресов DNS, используется при dns_mode: "custom"
persistent_keepalivenumberНетИнтервал keepalive, 0-65535 (0 отключает keepalive)
jcnumberНетКоличество junk-пакетов, 0-128
jminnumberНетМинимальный размер junk-пакета, 0-1280
jmaxnumberНетМаксимальный размер junk-пакета, 0-1280
s1numberНетРазмер junk-данных init-пакета, 0-1132
s2numberНетРазмер junk-данных response-пакета, 0-1188
s3numberНетМагический заголовок init-пакета, 0-64
s4numberНетМагический заголовок response-пакета, 0-32
h1stringНетОбфускация заголовка h1: число или диапазон min-max. Пустая строка сбрасывает значение
h2stringНетОбфускация заголовка h2: число или диапазон min-max
h3stringНетОбфускация заголовка h3: число или диапазон min-max
h4stringНетОбфускация заголовка h4: число или диапазон min-max
i1stringНетСигнатурный CPS-пакет i1
i2stringНетСигнатурный CPS-пакет i2
i3stringНетСигнатурный CPS-пакет i3
i4stringНетСигнатурный CPS-пакет i4
i5stringНетСигнатурный CPS-пакет i5
awg_paramsobjectНетПолная замена AWG-переопределений (поля те же, что перечислены выше). null сбрасывает все переопределения. Нельзя комбинировать с отдельными AWG-полями
routingobjectНетПолная замена политики маршрутизации. null или режим full возвращает полный туннель
routing.modestringДа*Режим маршрутизации: full, bypass, split (*обязателен, если передан routing)
routing.allowed_ipsstring[]НетIPv4 CIDR, направляемые в туннель. Обязательно для split, запрещено для bypass и full. Максимум 4096 элементов
routing.excluded_ipsstring[]НетIPv4 CIDR, исключаемые из маршрутизации. Обязательно для bypass, опционально для split. Максимум 4096 элементов

Пример запроса

curl -X PATCH "https://api.stealthsurf.net/paid-options/123/configs/456/awg" \
  -H "Authorization: Bearer stlth_XXXXXXXX_YYYYYYYYYYYYYYYYYYYYYYYY" \
  -H "Content-Type: application/json" \
  -d '{
    "jc": 4,
    "jmin": 50,
    "jmax": 1000,
    "mtu": 1280
  }'

Ответ

{
  status: true,
  statusCode: 200,
  data: {
    connection_url: string    // Конфиг WireGuard в формате [Interface]
    server_id: number
    location_id: number
    xray_config?: string
    awg_config?: string       // AWG-параметры в виде JSON-строки
  }
}

Ошибки

errorCodemessageКогда
49paid option config not foundКонфиг не найден или не принадлежит пользователю
48expiredПодписка на платную опцию истекла
3bad requestОбновление настроек этого конфига уже выполняется; конфиг не amnezia-wg-2 или расширенные настройки выключены; повреждённый JSON сохранённых AWG-настроек; изменения не удалось сохранить
1not foundУ конфига нет сохранённых настроек
72awg params invalidНабор AWG-параметров не прошёл нормализацию (конфликт отдельных полей и awg_params, некорректная политика routing)
60port not availableНовый порт недопустим, заблокирован другой операцией или уже занят на сервере

POST /paid-options/:id/configs/:configId/awg/generate

Сгенерировать параметры обфускации AWG без изменения конфига платной опции.

Rate Limit: 1 req / 1 sec

URL Parameters

ParameterTypeRequiredDescription
idnumberДаID платной опции пользователя
configIdnumberДаID конфига

Пример запроса

curl -X POST "https://api.stealthsurf.net/paid-options/123/configs/456/awg/generate" \
  -H "Authorization: Bearer stlth_XXXXXXXX_YYYYYYYYYYYYYYYYYYYYYYYY"

Ответ

{
  status: true,
  statusCode: 201,
  data: {
    h1: string    // Обфускация заголовка h1 (диапазон min-max)
    h2: string    // Обфускация заголовка h2
    h3: string    // Обфускация заголовка h3
    h4: string    // Обфускация заголовка h4
    s1: number    // Размер junk-данных init-пакета
    s2: number    // Размер junk-данных response-пакета
  }
}

Ошибки

errorCodemessageКогда
49paid option config not foundКонфиг не найден или не принадлежит пользователю
48expiredПодписка на платную опцию истекла
3bad requestКонфиг не amnezia-wg-2 или расширенные настройки выключены; повреждённый JSON сохранённых AWG-настроек
1not foundУ конфига нет сохранённых настроек

POST /paid-options/:id/configs/:configId/awg/regenerate

Перегенерировать параметры H1-H4 и S1-S2 AWG конфига платной опции и сразу применить их.

Rate Limit: 1 req / 1 sec

URL Parameters

ParameterTypeRequiredDescription
idnumberДаID платной опции пользователя
configIdnumberДаID конфига

Пример запроса

curl -X POST "https://api.stealthsurf.net/paid-options/123/configs/456/awg/regenerate" \
  -H "Authorization: Bearer stlth_XXXXXXXX_YYYYYYYYYYYYYYYYYYYYYYYY"

Ответ

{
  status: true,
  statusCode: 201,
  data: {
    connection_url: string    // Конфиг WireGuard в формате [Interface]
    server_id: number
    location_id: number
    xray_config?: string
    awg_config?: string       // AWG-параметры в виде JSON-строки
  }
}

Ошибки

errorCodemessageКогда
49paid option config not foundКонфиг не найден или не принадлежит пользователю
48expiredПодписка на платную опцию истекла
3bad requestОбновление настроек этого конфига уже выполняется; конфиг не amnezia-wg-2 или расширенные настройки выключены; повреждённый JSON сохранённых AWG-настроек; изменения не удалось сохранить
1not foundУ конфига нет сохранённых настроек

POST /paid-options/:id/configs/:configId/resetXrayConfig

Сбросить XRay конфигурацию конфига платной опции к настройкам по умолчанию. Доступно только для конфигов с включёнными расширенными настройками.

Rate Limit: 1 req / 4 sec

URL Parameters

ParameterTypeRequiredDescription
idnumberДаID платной опции пользователя
configIdnumberДаID конфига

Пример запроса

curl -X POST "https://api.stealthsurf.net/paid-options/123/configs/456/resetXrayConfig" \
  -H "Authorization: Bearer stlth_XXXXXXXX_YYYYYYYYYYYYYYYYYYYYYYYY"

Ответ

{
  status: true,
  statusCode: 201,
  data: {
    connection_url: string
    server_id: number
    location_id: number
    xray_config?: string
    awg_config?: string
  }
}

PATCH /paid-options/:id/configs/:configId/title

Обновить название конфига платной опции.

Rate Limit: 1 req / 1 sec

URL Parameters

ParameterTypeRequiredDescription
idnumberДаID платной опции пользователя
configIdnumberДаID конфига

Request Body

FieldTypeRequiredDescription
titlestring | nullДаНовое название (1-64 символа) или null для сброса. Строка из одних пробелов не принимается

Пример запроса

curl -X PATCH "https://api.stealthsurf.net/paid-options/123/configs/456/title" \
  -H "Authorization: Bearer stlth_XXXXXXXX_YYYYYYYYYYYYYYYYYYYYYYYY" \
  -H "Content-Type: application/json" \
  -d '{
    "title": "Новое название"
  }'

Ответ

{
  status: true,
  statusCode: 200,
  data: true
}

GET /paid-options/:id/configs/:configId/stats

Получить статистику сервера для конфига платной опции. Если статистика ещё не собрана, в data возвращается null.

Rate Limit: глобальный (60 req/min)

URL Parameters

ParameterTypeRequiredDescription
idnumberДаID платной опции пользователя
configIdnumberДаID конфига

Пример запроса

curl -X GET "https://api.stealthsurf.net/paid-options/123/configs/456/stats" \
  -H "Authorization: Bearer stlth_XXXXXXXX_YYYYYYYYYYYYYYYYYYYYYYYY"

Ответ

{
  status: true,
  statusCode: 200,
  data: {
    host: string              // IP адрес сервера
    status: string            // Статус (up, down)
    uptime_days: number       // Время работы в днях
    cpu_model: string         // Модель CPU
    stats: Array<{
      date: string            // Дата (YYYY-MM-DD)
      cpu: number             // CPU usage %
      ram: number             // RAM usage %
      up: number              // Upload Mbps
      down: number            // Download Mbps
    }>
  } | null
}

GET /paid-options/:id/configs/available-servers

Получить доступные серверы для конфигов платной опции. Возвращаются только серверы со свободными слотами, отсортированные по убыванию их количества.

Rate Limit: 5 req / 5 sec

URL Parameters

ParameterTypeRequiredDescription
idnumberДаID платной опции пользователя

Query Parameters

ParameterTypeRequiredDescription
protocolstringДаVPN-протокол: vless, trojan, trojan-2901, hysteria2, vless-2410, shadowsocks-2022, amnezia-wg-2, wg
location_idnumberНетФильтр по локации

Пример запроса

curl -X GET "https://api.stealthsurf.net/paid-options/123/configs/available-servers?protocol=vless" \
  -H "Authorization: Bearer stlth_XXXXXXXX_YYYYYYYYYYYYYYYYYYYYYYYY"

Ответ

{
  status: true,
  statusCode: 200,
  data: Array<{
    id: number                // ID сервера
    available_slots: number   // Доступные слоты
  }>
}

Устройства WireGuard конфигураций платных опций

Методы управляют отдельными устройствами конфигураций платной опции с протоколом wg или amnezia-wg-2. Основное устройство возвращается с id: null и is_primary: true.

Объект устройства имеет следующую структуру:

{
  id: number | null
  title: string
  is_primary: boolean
  protocol: "wg" | "amnezia-wg-2"
  connection_url: string
  created_at: number
}

GET /paid-options/:id/configs/:configId/devices

Получить устройства конфигурации платной опции.

Rate Limit: глобальный (60 req/min)

URL Parameters

ParameterTypeRequiredDescription
idnumberДаID платной опции пользователя
configIdnumberДаID конфигурации

Пример запроса

curl -X GET "https://api.stealthsurf.net/paid-options/123/configs/456/devices" \
  -H "Authorization: Bearer stlth_XXXXXXXX_YYYYYYYYYYYYYYYYYYYYYYYY"

Ответ

{
  status: true,
  statusCode: 200,
  data: Array<{
    id: number | null
    title: string
    is_primary: boolean
    protocol: "wg" | "amnezia-wg-2"
    connection_url: string
    created_at: number
  }>
}

Ошибки

Возможны ошибки not found (1), bad request (3), expired (48), paid option config not found (49), server not available (52) и wireguard devices are not supported for this config (93).


POST /paid-options/:id/configs/:configId/devices

Создать устройство для конфигурации платной опции.

Rate Limit: 1 req / 1 sec

URL Parameters

ParameterTypeRequiredDescription
idnumberДаID платной опции пользователя
configIdnumberДаID конфигурации

Request Body

FieldTypeRequiredDescription
titlestringДаНазвание устройства, от 1 до 64 символов

Пример запроса

curl -X POST "https://api.stealthsurf.net/paid-options/123/configs/456/devices" \
  -H "Authorization: Bearer stlth_XXXXXXXX_YYYYYYYYYYYYYYYYYYYYYYYY" \
  -H "Content-Type: application/json" \
  -d '{
    "title": "MacBook"
  }'

Ответ

{
  status: true,
  statusCode: 200,
  data: {
    id: number | null
    title: string
    is_primary: boolean
    protocol: "wg" | "amnezia-wg-2"
    connection_url: string
    created_at: number
  }
}

Ошибки

errorCodemessageКогда
1not foundПлатная опция или конфигурация не найдены
3bad requestКонфигурация недоступна для управления устройствами
48expiredСрок действия платной опции истёк
49paid option config not foundКонфигурация платной опции не найдена
52server not availableСервер конфигурации недоступен
60port not availableНе удалось выделить порт для нового устройства
72awg params invalidПараметры AWG не прошли проверку
93wireguard devices are not supported for this configПротокол конфигурации не поддерживает устройства WireGuard
94wireguard device limit reachedДостигнут лимит устройств WireGuard

PATCH /paid-options/:id/configs/:configId/devices/:deviceId

Переименовать устройство конфигурации платной опции.

Rate Limit: 1 req / 1 sec

URL Parameters

ParameterTypeRequiredDescription
idnumberДаID платной опции пользователя
configIdnumberДаID конфигурации
deviceIdnumberДаID устройства

Request Body

FieldTypeRequiredDescription
titlestringДаНовое название устройства, от 1 до 64 символов

Пример запроса

curl -X PATCH "https://api.stealthsurf.net/paid-options/123/configs/456/devices/42" \
  -H "Authorization: Bearer stlth_XXXXXXXX_YYYYYYYYYYYYYYYYYYYYYYYY" \
  -H "Content-Type: application/json" \
  -d '{
    "title": "Рабочий MacBook"
  }'

Ответ

{
  status: true,
  statusCode: 200,
  data: {
    id: number | null
    title: string
    is_primary: boolean
    protocol: "wg" | "amnezia-wg-2"
    connection_url: string
    created_at: number
  }
}

Ошибки

Возможны ошибки not found (1), bad request (3), expired (48), paid option config not found (49), server not available (52) и wireguard devices are not supported for this config (93).


DELETE /paid-options/:id/configs/:configId/devices/:deviceId

Отозвать устройство конфигурации платной опции.

Rate Limit: 1 req / 1 sec

URL Parameters

ParameterTypeRequiredDescription
idnumberДаID платной опции пользователя
configIdnumberДаID конфигурации
deviceIdnumberДаID устройства

Пример запроса

curl -X DELETE "https://api.stealthsurf.net/paid-options/123/configs/456/devices/42" \
  -H "Authorization: Bearer stlth_XXXXXXXX_YYYYYYYYYYYYYYYYYYYYYYYY"

Ответ

{
  status: true,
  statusCode: 200,
  data: {
    success: true
  }
}

Ошибки

Возможны ошибки not found (1), bad request (3), expired (48), paid option config not found (49), server not available (52) и wireguard devices are not supported for this config (93).


Субконфиги платных опций


GET /paid-options/:id/configs/:configId/subconfig/protocols

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

Rate Limit: глобальный (60 req/min)

URL Parameters

ParameterTypeRequiredDescription
idnumberДаID платной опции пользователя
configIdnumberДаID конфига

Пример запроса

curl -X GET "https://api.stealthsurf.net/paid-options/123/configs/456/subconfig/protocols" \
  -H "Authorization: Bearer stlth_XXXXXXXX_YYYYYYYYYYYYYYYYYYYYYYYY"

Ответ

{
  status: true,
  statusCode: 200,
  data: {
    protocols: string[]
  }
}

GET /paid-options/:id/configs/:configId/subconfig

Получить субконфиг конфигурации платной опции.

Rate Limit: глобальный (60 req/min)

URL Parameters

ParameterTypeRequiredDescription
idnumberДаID платной опции пользователя
configIdnumberДаID конфига

Пример запроса

curl -X GET "https://api.stealthsurf.net/paid-options/123/configs/456/subconfig" \
  -H "Authorization: Bearer stlth_XXXXXXXX_YYYYYYYYYYYYYYYYYYYYYYYY"

Ответ

{
  status: true,
  statusCode: 200,
  data: {
    id: number
    protocol: string            // http | socks5
    connection_url: string      // http://user:pass@server:8080
  } | null
}

POST /paid-options/:id/configs/:configId/subconfig

Создать субконфиг для конфигурации платной опции.

Rate Limit: 1 req / 1 sec

URL Parameters

ParameterTypeRequiredDescription
idnumberДаID платной опции пользователя
configIdnumberДаID конфига

Request Body

FieldTypeRequiredDescription
protocolstringДаПротокол: http или socks5

Пример запроса

curl -X POST "https://api.stealthsurf.net/paid-options/123/configs/456/subconfig" \
  -H "Authorization: Bearer stlth_XXXXXXXX_YYYYYYYYYYYYYYYYYYYYYYYY" \
  -H "Content-Type: application/json" \
  -d '{
    "protocol": "http"
  }'

Ответ

{
  status: true,
  statusCode: 201,
  data: {
    id: number
    protocol: string
    connection_url: string
  }
}

PATCH /paid-options/:id/configs/:configId/subconfig

Сменить протокол субконфига платной опции.

Rate Limit: 1 req / 1 sec

URL Parameters

ParameterTypeRequiredDescription
idnumberДаID платной опции пользователя
configIdnumberДаID конфига

Request Body

FieldTypeRequiredDescription
protocolstringДаНовый протокол: http или socks5

Пример запроса

curl -X PATCH "https://api.stealthsurf.net/paid-options/123/configs/456/subconfig" \
  -H "Authorization: Bearer stlth_XXXXXXXX_YYYYYYYYYYYYYYYYYYYYYYYY" \
  -H "Content-Type: application/json" \
  -d '{
    "protocol": "socks5"
  }'

Ответ

{
  status: true,
  statusCode: 200,
  data: {
    id: number
    protocol: string
    connection_url: string
  }
}

DELETE /paid-options/:id/configs/:configId/subconfig

Удалить субконфиг платной опции.

Rate Limit: 1 req / 1 sec

URL Parameters

ParameterTypeRequiredDescription
idnumberДаID платной опции пользователя
configIdnumberДаID конфига

Пример запроса

curl -X DELETE "https://api.stealthsurf.net/paid-options/123/configs/456/subconfig" \
  -H "Authorization: Bearer stlth_XXXXXXXX_YYYYYYYYYYYYYYYYYYYYYYYY"

Ответ

{
  status: true,
  statusCode: 200,
  data: true
}

Помогла ли вам эта статья?

Содержание

ОбзорGET /paid-optionsПример запросаОтветGET /paid-options/tariffsПример запросаОтветPOST /paid-optionsRequest BodyПример запросаОтвет (требуется оплата)Ответ (мгновенная активация: промокод, баланс, реферальный баланс)Ответ (покупка ключа активации, as_key: true)GET /paid-options/:id/locationsURL ParametersПример запросаОтветGET /paid-options/:id/devicesURL ParametersПример запросаОтветGET /paid-options/:id/subscriptionURL ParametersПример запросаОтветGET /paid-options/:id/configsURL ParametersПример запросаОтветPATCH /paid-options/:id/limitsURL ParametersRequest BodyПример запросаОтветPATCH /paid-options/:id/titles/:indexURL ParametersRequest BodyПример запросаОтветDELETE /paid-options/:id/titles/:indexURL ParametersПример запросаОтветGET /paid-options/:id/stats/:indexURL ParametersПример запросаОтветDELETE /paid-options/:id/devices/:device_idURL ParametersПример запросаОтветDELETE /paid-options/:id/devicesURL ParametersПример запросаОтветPATCH /paid-options/:id/auto-renewalURL ParametersRequest BodyПример запросаОтветКонфигурации платных опцийPOST /paid-options/:id/configsURL ParametersRequest BodyПример запросаОтветPATCH /paid-options/:id/configs/:configId/settingsURL ParametersRequest BodyПример запросаОтветPATCH /paid-options/:id/configs/:configId/xrayURL ParametersRequest BodyПример запросаОтветPATCH /paid-options/:id/configs/:configId/awgURL ParametersRequest BodyПример запросаОтветОшибкиPOST /paid-options/:id/configs/:configId/awg/generateURL ParametersПример запросаОтветОшибкиPOST /paid-options/:id/configs/:configId/awg/regenerateURL ParametersПример запросаОтветОшибкиPOST /paid-options/:id/configs/:configId/resetXrayConfigURL ParametersПример запросаОтветPATCH /paid-options/:id/configs/:configId/titleURL ParametersRequest BodyПример запросаОтветGET /paid-options/:id/configs/:configId/statsURL ParametersПример запросаОтветGET /paid-options/:id/configs/available-serversURL ParametersQuery ParametersПример запросаОтветУстройства WireGuard конфигураций платных опцийGET /paid-options/:id/configs/:configId/devicesURL ParametersПример запросаОтветОшибкиPOST /paid-options/:id/configs/:configId/devicesURL ParametersRequest BodyПример запросаОтветОшибкиPATCH /paid-options/:id/configs/:configId/devices/:deviceIdURL ParametersRequest BodyПример запросаОтветОшибкиDELETE /paid-options/:id/configs/:configId/devices/:deviceIdURL ParametersПример запросаОтветОшибкиСубконфиги платных опцийGET /paid-options/:id/configs/:configId/subconfig/protocolsURL ParametersПример запросаОтветGET /paid-options/:id/configs/:configId/subconfigURL ParametersПример запросаОтветPOST /paid-options/:id/configs/:configId/subconfigURL ParametersRequest BodyПример запросаОтветPATCH /paid-options/:id/configs/:configId/subconfigURL ParametersRequest BodyПример запросаОтветDELETE /paid-options/:id/configs/:configId/subconfigURL ParametersПример запросаОтвет