Платные опции
Методы для управления платными опциями: покупка, управление устройствами, лимитами и настройками.
Обзор
Модуль для работы с платными опциями пользователя, такими как 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
| Field | Type | Required | Description |
|---|---|---|---|
paid_option_id | number | Да | ID платной опции |
payment_method_id | number | Нет | ID способа оплаты (min 1). Указывается вместе с tariff_id |
tariff_id | number | Нет | ID тарифа (min 1). Указывается вместе с payment_method_id, несовместим с promocode |
promocode | string | Нет | Промокод (4-32 символа). Нельзя комбинировать с оплатой или as_key |
as_key | boolean | Нет | Купить как ключ активации |
enable_auto_renewal | boolean | Нет | Включить автопродление |
users_paid_option_id | number | Нет | Целевая подписка для продления, если опция допускает несколько покупок (min 1). Опустите, чтобы создать новую подписку |
location_id | number | Нет | Предпочтительная локация для стартового конфига новой подписки (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
| Parameter | Type | Required | Description |
|---|---|---|---|
id | number | Да | 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
| Parameter | Type | Required | Description |
|---|---|---|---|
id | number | Да | 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
| Parameter | Type | Required | Description |
|---|---|---|---|
id | number | Да | 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
| Parameter | Type | Required | Description |
|---|---|---|---|
id | number | Да | 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
| Parameter | Type | Required | Description |
|---|---|---|---|
id | number | Да | ID платной опции |
Request Body
| Field | Type | Required | Description |
|---|---|---|---|
device_limit | number | Нет | Лимит устройств (min 0, max 100; 0 = безлимит) |
traffic_limit | number | Нет | Лимит трафика в байтах (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
| Parameter | Type | Required | Description |
|---|---|---|---|
id | number | Да | ID платной опции |
index | number | Да | Индекс конфига |
Request Body
| Field | Type | Required | Description |
|---|---|---|---|
title | string | Да | Название (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
| Parameter | Type | Required | Description |
|---|---|---|---|
id | number | Да | ID платной опции |
index | number | Да | Индекс конфига |
Пример запроса
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
| Parameter | Type | Required | Description |
|---|---|---|---|
id | number | Да | ID платной опции |
index | number | Да | Индекс конфига |
Пример запроса
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
| Parameter | Type | Required | Description |
|---|---|---|---|
id | number | Да | ID платной опции |
device_id | string | Да | 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
| Parameter | Type | Required | Description |
|---|---|---|---|
id | number | Да | 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
| Parameter | Type | Required | Description |
|---|---|---|---|
id | number | Да | ID платной опции |
Request Body
| Field | Type | Required | Description |
|---|---|---|---|
enabled | boolean | Да | Включить/выключить автопродление |
days | number | Нет | Дней для автопродления (min 1, обязательно при enabled: true) |
users_paid_option_id | number | Нет | Целевая подписка, если у опции несколько активных покупок (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
| Parameter | Type | Required | Description |
|---|---|---|---|
id | number | Да | ID платной опции пользователя |
Request Body
| Field | Type | Required | Description |
|---|---|---|---|
protocol | string | Да | Протокол: vless, trojan, trojan-2901, hysteria2, vless-2410, shadowsocks-2022, amnezia-wg-2, wg |
users_paid_option_id | number | Нет | Целевая подписка при множественной покупке опции (min 1; по умолчанию первая активная) |
server_id | number | Нет | Предпочтительный сервер (min 1) |
location_id | number | Нет | Предпочтительная локация (min 1; выбирается автоматически, если не указана) |
title | string | Нет | Название конфига (1-64 символа) |
use_extended_settings | boolean | Нет | Расширенные настройки. Несовместимо с wg |
use_warp | boolean | Нет | WARP |
disable_flow_reality | boolean | Нет | Отключить Flow Reality. Несовместимо с use_xhttp и use_grpc |
disable_reality | boolean | Нет | Отключить Reality. Для trojan и trojan-2901 несовместимо с change_sni |
change_sni | boolean | Нет | Применить SNI. Недоступно для vless-2410 и trojan-2901, а также для платной опции с id = 3 |
disable_sni | boolean | Нет | Установить отпечаток QQ. Недоступно для vless-2410 и trojan-2901; для опции с id = 3 недоступно с этими протоколами |
enable_family_filter | boolean | Нет | Семейный фильтр |
pass_all_traffic_through_vpn | boolean | Нет | Весь трафик через VPN |
block_bittorrent | boolean | Нет | Блокировать BitTorrent |
use_xhttp | boolean | Нет | XHTTP вместо TCP (нельзя одновременно с use_grpc) |
use_grpc | boolean | Нет | gRPC вместо TCP (нельзя одновременно с use_xhttp) |
grpc_multi_mode | boolean | Нет | Включить gRPC multi mode (TunMulti); требует use_grpc = true |
randomize_fingerprint | boolean | Нет | Рандомизированный uTLS-отпечаток вместо chrome |
use_loopbacks | boolean | Нет | Перелив трафика в следующую группу балансировщика при полном отказе группы |
dns_preset | string | Нет | DNS-пресет: cloudflare, google, quad9, adguard, adguard_family, yandex, comss, mullvad, custom |
custom_dns_url | string | Нет | 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
| Parameter | Type | Required | Description |
|---|---|---|---|
id | number | Да | ID платной опции пользователя |
configId | number | Да | ID конфига |
Request Body
| Field | Type | Required | Description |
|---|---|---|---|
protocol | string | Да | Протокол: vless, trojan, trojan-2901, hysteria2, vless-2410, shadowsocks-2022, amnezia-wg-2, wg |
server_id | number | Нет | Предпочтительный сервер (min 1) |
location_id | number | Нет | Предпочтительная локация (min 1; выбирается автоматически, если не указана) |
use_extended_settings | boolean | Нет | Расширенные настройки. Несовместимо с wg |
use_warp | boolean | Нет | WARP |
disable_flow_reality | boolean | Нет | Отключить Flow Reality. Несовместимо с use_xhttp и use_grpc |
disable_reality | boolean | Нет | Отключить Reality. Для trojan и trojan-2901 несовместимо с change_sni |
change_sni | boolean | Нет | Применить SNI. Недоступно для vless-2410 и trojan-2901, а также для платной опции с id = 3 |
disable_sni | boolean | Нет | Установить отпечаток QQ. Недоступно для vless-2410 и trojan-2901; для опции с id = 3 недоступно с этими протоколами |
enable_family_filter | boolean | Нет | Семейный фильтр |
pass_all_traffic_through_vpn | boolean | Нет | Весь трафик через VPN |
block_bittorrent | boolean | Нет | Блокировать BitTorrent |
use_xhttp | boolean | Нет | XHTTP вместо TCP (нельзя одновременно с use_grpc) |
use_grpc | boolean | Нет | gRPC вместо TCP (нельзя одновременно с use_xhttp) |
grpc_multi_mode | boolean | Нет | Включить gRPC multi mode (TunMulti); требует use_grpc = true |
randomize_fingerprint | boolean | Нет | Рандомизированный uTLS-отпечаток вместо chrome |
use_loopbacks | boolean | Нет | Перелив трафика в следующую группу балансировщика при полном отказе группы |
dns_preset | string | Нет | DNS-пресет: cloudflare, google, quad9, adguard, adguard_family, yandex, comss, mullvad, custom |
custom_dns_url | string | Нет | 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
| Parameter | Type | Required | Description |
|---|---|---|---|
id | number | Да | ID платной опции пользователя |
configId | number | Да | ID конфига |
Request Body
| Field | Type | Required | Description |
|---|---|---|---|
xray_config | string | Да | XRay конфигурация в виде JSON-строки. Должна содержать числовое поле inbounds[0].port |
public_key | string | null | Нет | Публичный ключ |
use_loopbacks | boolean | Нет | Перелив трафика в следующую группу балансировщика при полном отказе группы |
Пример запроса
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
| Parameter | Type | Required | Description |
|---|---|---|---|
id | number | Да | ID платной опции пользователя |
configId | number | Да | ID конфига |
Request Body
| Field | Type | Required | Description |
|---|---|---|---|
port | number | Нет | UDP-порт сервера: 0 — автоназначение, иначе 1024-65535 |
client_listen_port | number | Нет | Клиентский порт WireGuard: 0 — автоматически, иначе 1024-65535 |
mtu | number | Нет | MTU клиентского интерфейса: 0 — значение сервера, иначе 1280-1420 |
dns | string | Нет | Устаревший одиночный IPv4 DNS. Пустая строка сбрасывает значение. Несовместим с dns_mode и dns_servers |
dns_mode | string | Нет | Режим DNS: default, custom, system |
dns_servers | string[] | Нет | Список IPv4-адресов DNS, используется при dns_mode: "custom" |
persistent_keepalive | number | Нет | Интервал keepalive, 0-65535 (0 отключает keepalive) |
jc | number | Нет | Количество junk-пакетов, 0-128 |
jmin | number | Нет | Минимальный размер junk-пакета, 0-1280 |
jmax | number | Нет | Максимальный размер junk-пакета, 0-1280 |
s1 | number | Нет | Размер junk-данных init-пакета, 0-1132 |
s2 | number | Нет | Размер junk-данных response-пакета, 0-1188 |
s3 | number | Нет | Магический заголовок init-пакета, 0-64 |
s4 | number | Нет | Магический заголовок response-пакета, 0-32 |
h1 | string | Нет | Обфускация заголовка h1: число или диапазон min-max. Пустая строка сбрасывает значение |
h2 | string | Нет | Обфускация заголовка h2: число или диапазон min-max |
h3 | string | Нет | Обфускация заголовка h3: число или диапазон min-max |
h4 | string | Нет | Обфускация заголовка h4: число или диапазон min-max |
i1 | string | Нет | Сигнатурный CPS-пакет i1 |
i2 | string | Нет | Сигнатурный CPS-пакет i2 |
i3 | string | Нет | Сигнатурный CPS-пакет i3 |
i4 | string | Нет | Сигнатурный CPS-пакет i4 |
i5 | string | Нет | Сигнатурный CPS-пакет i5 |
awg_params | object | Нет | Полная замена AWG-переопределений (поля те же, что перечислены выше). null сбрасывает все переопределения. Нельзя комбинировать с отдельными AWG-полями |
routing | object | Нет | Полная замена политики маршрутизации. null или режим full возвращает полный туннель |
routing.mode | string | Да* | Режим маршрутизации: full, bypass, split (*обязателен, если передан routing) |
routing.allowed_ips | string[] | Нет | IPv4 CIDR, направляемые в туннель. Обязательно для split, запрещено для bypass и full. Максимум 4096 элементов |
routing.excluded_ips | string[] | Нет | 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-строки
}
}Ошибки
| errorCode | message | Когда |
|---|---|---|
| 49 | paid option config not found | Конфиг не найден или не принадлежит пользователю |
| 48 | expired | Подписка на платную опцию истекла |
| 3 | bad request | Обновление настроек этого конфига уже выполняется; конфиг не amnezia-wg-2 или расширенные настройки выключены; повреждённый JSON сохранённых AWG-настроек; изменения не удалось сохранить |
| 1 | not found | У конфига нет сохранённых настроек |
| 72 | awg params invalid | Набор AWG-параметров не прошёл нормализацию (конфликт отдельных полей и awg_params, некорректная политика routing) |
| 60 | port not available | Новый порт недопустим, заблокирован другой операцией или уже занят на сервере |
POST /paid-options/:id/configs/:configId/awg/generate
Сгенерировать параметры обфускации AWG без изменения конфига платной опции.
Rate Limit: 1 req / 1 sec
URL Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
id | number | Да | ID платной опции пользователя |
configId | number | Да | 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-пакета
}
}Ошибки
| errorCode | message | Когда |
|---|---|---|
| 49 | paid option config not found | Конфиг не найден или не принадлежит пользователю |
| 48 | expired | Подписка на платную опцию истекла |
| 3 | bad request | Конфиг не amnezia-wg-2 или расширенные настройки выключены; повреждённый JSON сохранённых AWG-настроек |
| 1 | not found | У конфига нет сохранённых настроек |
POST /paid-options/:id/configs/:configId/awg/regenerate
Перегенерировать параметры H1-H4 и S1-S2 AWG конфига платной опции и сразу применить их.
Rate Limit: 1 req / 1 sec
URL Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
id | number | Да | ID платной опции пользователя |
configId | number | Да | 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-строки
}
}Ошибки
| errorCode | message | Когда |
|---|---|---|
| 49 | paid option config not found | Конфиг не найден или не принадлежит пользователю |
| 48 | expired | Подписка на платную опцию истекла |
| 3 | bad request | Обновление настроек этого конфига уже выполняется; конфиг не amnezia-wg-2 или расширенные настройки выключены; повреждённый JSON сохранённых AWG-настроек; изменения не удалось сохранить |
| 1 | not found | У конфига нет сохранённых настроек |
POST /paid-options/:id/configs/:configId/resetXrayConfig
Сбросить XRay конфигурацию конфига платной опции к настройкам по умолчанию. Доступно только для конфигов с включёнными расширенными настройками.
Rate Limit: 1 req / 4 sec
URL Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
id | number | Да | ID платной опции пользователя |
configId | number | Да | 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
| Parameter | Type | Required | Description |
|---|---|---|---|
id | number | Да | ID платной опции пользователя |
configId | number | Да | ID конфига |
Request Body
| Field | Type | Required | Description |
|---|---|---|---|
title | string | 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
| Parameter | Type | Required | Description |
|---|---|---|---|
id | number | Да | ID платной опции пользователя |
configId | number | Да | 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
| Parameter | Type | Required | Description |
|---|---|---|---|
id | number | Да | ID платной опции пользователя |
Query Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
protocol | string | Да | VPN-протокол: vless, trojan, trojan-2901, hysteria2, vless-2410, shadowsocks-2022, amnezia-wg-2, wg |
location_id | number | Нет | Фильтр по локации |
Пример запроса
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
| Parameter | Type | Required | Description |
|---|---|---|---|
id | number | Да | ID платной опции пользователя |
configId | number | Да | 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
| Parameter | Type | Required | Description |
|---|---|---|---|
id | number | Да | ID платной опции пользователя |
configId | number | Да | ID конфигурации |
Request Body
| Field | Type | Required | Description |
|---|---|---|---|
title | string | Да | Название устройства, от 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
}
}Ошибки
| errorCode | message | Когда |
|---|---|---|
| 1 | not found | Платная опция или конфигурация не найдены |
| 3 | bad request | Конфигурация недоступна для управления устройствами |
| 48 | expired | Срок действия платной опции истёк |
| 49 | paid option config not found | Конфигурация платной опции не найдена |
| 52 | server not available | Сервер конфигурации недоступен |
| 60 | port not available | Не удалось выделить порт для нового устройства |
| 72 | awg params invalid | Параметры AWG не прошли проверку |
| 93 | wireguard devices are not supported for this config | Протокол конфигурации не поддерживает устройства WireGuard |
| 94 | wireguard device limit reached | Достигнут лимит устройств WireGuard |
PATCH /paid-options/:id/configs/:configId/devices/:deviceId
Переименовать устройство конфигурации платной опции.
Rate Limit: 1 req / 1 sec
URL Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
id | number | Да | ID платной опции пользователя |
configId | number | Да | ID конфигурации |
deviceId | number | Да | ID устройства |
Request Body
| Field | Type | Required | Description |
|---|---|---|---|
title | string | Да | Новое название устройства, от 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
| Parameter | Type | Required | Description |
|---|---|---|---|
id | number | Да | ID платной опции пользователя |
configId | number | Да | ID конфигурации |
deviceId | number | Да | 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
| Parameter | Type | Required | Description |
|---|---|---|---|
id | number | Да | ID платной опции пользователя |
configId | number | Да | 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
| Parameter | Type | Required | Description |
|---|---|---|---|
id | number | Да | ID платной опции пользователя |
configId | number | Да | 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
| Parameter | Type | Required | Description |
|---|---|---|---|
id | number | Да | ID платной опции пользователя |
configId | number | Да | ID конфига |
Request Body
| Field | Type | Required | Description |
|---|---|---|---|
protocol | string | Да | Протокол: 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
| Parameter | Type | Required | Description |
|---|---|---|---|
id | number | Да | ID платной опции пользователя |
configId | number | Да | ID конфига |
Request Body
| Field | Type | Required | Description |
|---|---|---|---|
protocol | string | Да | Новый протокол: 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
| Parameter | Type | Required | Description |
|---|---|---|---|
id | number | Да | ID платной опции пользователя |
configId | number | Да | 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
}Помогла ли вам эта статья?