Appearance
VPN
Памятка
Идентификация клиента (обязательно для всех VPN-методов)
Все операции выполняются для клиента реселлера, а не для владельца токена.
Клиент определяется парой:
telegram_id— Telegram ID конечного пользователя.client_key— произвольная строка, которую задаёт реселлер (можно писать что угодно: внутренний id, username, email,user-42и т.п.).
По паре telegram_id + client_key происходит управление. client_key можно использовать одинаковым для разных telegram_id — важна именно пара.
Периоды покупки и продления
period_months — период в месяцах. Поддерживаемые значения:
1,3,6,12
Статусы подписки
status может быть одним из:
ACTIVE— активнаDISABLED— отключенаLIMITED— ограничена (например, лимит устройств/трафика)EXPIRED— истекла
UUID подписки (важно для продления)
У клиента может быть несколько подписок одновременно.
GET /vpn/infoвозвращает список подписок, каждая содержитuuid.POST /vpn/renewпродлевает конкретную подписку — нужно передать еёuuid.POST /vpn/buyпозволяет купить дополнительную подписку даже если уже есть активные.
1) Посчитать стоимость
GET /vpn/quote
Параметры запроса (query)
| Name | Type | Description |
|---|---|---|
| period_months* | int | Период в месяцах. |
Пример
bash
curl -s "https://proxy.killa.cc/api/v1/vpn/quote?period_months=1" \
-H "Authorization: Bearer YOUR_TOKEN"Ответ
json
{
"ok": true,
"data": {
"period_months": 1,
"price_rub": 99.0
}
}2) Купить
POST /vpn/buy
Тело запроса (Request Body)
| Name | Type | Description |
|---|---|---|
| telegram_id* | int | Telegram ID конечного клиента. |
| client_key* | string | Ключ клиента у реселлера |
| period_months* | int | Период в месяцах |
Пример
bash
curl -s https://proxy.killa.cc/api/v1/api/v1/vpn/buy \
-H "Authorization: Bearer YOUR_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"telegram_id": 123456789,
"client_key": "client-001",
"period_months": 1
}'Ответ
json
{
"ok": true,
"data": {
"uuid": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"subscriptionUrl": "https://vpn.killa.cc/qwerty12345678",
"expireAt": "2027-01-01T00:00:00.000Z",
"expireAt_date": "01.01.2027"
}
}3) Продлить
POST /vpn/renew
Тело запроса (Request Body)
| Name | Type | Description |
|---|---|---|
| period_months* | int | Период в месяцах |
| telegram_id* | int | Telegram ID конечного клиента. |
| client_key* | string | Ключ клиента у реселлера |
| uuid* | string | UUID подписки |
Пример
bash
curl -s https://proxy.killa.cc/api/v1/vpn/renew \
-H "Authorization: Bearer YOUR_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"period_months":3,
"telegram_id":123456789,
"client_key":"client-001",
"uuid":"xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
}'Ответ
json
{
"ok": true,
"data": {
"uuid": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"subscriptionUrl": "https://vpn.killa.cc/qwerty12345678",
"expireAt": "2027-04-01T00:00:00.000Z",
"expireAt_date": "01.04.2027"
}
}4) Удалить подписку
POST /vpn/delete
Тело запроса (Request Body)
| Name | Type | Description |
|---|---|---|
| telegram_id* | int | Telegram ID конечного клиента. |
| client_key* | string | Ключ клиента у реселлера |
| uuid* | string | UUID подписки |
Пример
bash
curl -s https://proxy.killa.cc/api/v1/vpn/delete \
-H "Authorization: Bearer YOUR_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"telegram_id":123456789,
"client_key":"client-001",
"uuid":"xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
}'Ответ
json
{
"ok": true,
"data": {
"uuid": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"deleted": true
}
}5) Получить текущую информацию
GET /vpn/info
Параметры запроса (query)
| Name | Type | Description |
|---|---|---|
| telegram_id* | int | Telegram ID конечного клиента. |
| client_key* | string | Ключ клиента у реселлера |
Пример
bash
curl -s "https://proxy.killa.cc/api/v1/vpn/info?telegram_id=123456789&client_key=client-001" \
-H "Authorization: Bearer YOUR_TOKEN"Ответ
json
{
"ok": true,
"data": {
"exists": true,
"count": 1,
"items": [
{
"uuid": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"status": "ACTIVE",
"expireAt": "2027-01-01T00:00:00.000Z",
"expireAt_date": "01.01.2027",
"subscriptionUrl": "https://vpn.killa.cc/qwerty12345678",
"trafficLimitBytes": 0
}
]
}
}