Ваш сайт или программа сама выдаёт подписки из нашего VPN. Нужен разработчик.

Привязать пользователя из бота

POST/api/v1/vpn/clients/link

Связывает ваш external_user_id с человеком из вашего бота по telegram_id, без покупки. После этого его подписки, купленные в боте, находятся по external_user_id и управляются через API. result: linked (привязали), already_linked (уже было так, повтор безопасен), created (человека с таким Telegram у вас ещё не было: заведён, и бот увидит его, когда он придёт). 409 external_user_conflict с полем conflict: telegram_taken (этот Telegram уже под другим external_user_id, он в поле external_user_id) или external_id_taken (ваш external_user_id уже у другого человека).

Тело запроса

external_user_idstringобязательно

Идентификатор пользователя в вашей системе. Один человек = один id.

telegram_idintegerобязательно

Telegram id человека, который уже есть в вашем боте (или придёт туда).

bot_iduuid | nullнеобязательно

Необязательно. UUID вашего бота: запишем его человеку из бота, у которого бот ещё не записан. Новому человеку бот не ставим: он запишется, когда человек откроет бота.

Когда откажет

401unauthorized: Неверный или отсутствующий API-ключ
403forbidden: Объект принадлежит другому аккаунту; api_disabled: Доступ к API для этого аккаунта закрыт; ip_not_allowed: Адрес запроса не входит в список разрешённых
409external_user_conflict: telegram_id или external_user_id уже привязан к другому пользователю
422validation_error: Неверные параметры запроса
429rate_limited: Слишком много запросов
503upstream_unavailable: Поставщик VPN временно недоступен
Попробовать запрос

Подставится в примеры и в запрос. Хранится только в этом браузере.

curl -X POST https://api.relayhub.surf/api/v1/vpn/clients/link \
  -H "Authorization: Bearer <YOUR_API_KEY>" \
  -H "Content-Type: application/json" \
  -d '{
    "external_user_id": "user-42",
    "telegram_id": 123456789
  }'
Вставьте свой ключ, и он подставится вместо <YOUR_API_KEY>.

Запрос меняет данные или списывает деньги: выполняйте его из своего кода.

Пример ответа
{
  "success": true,
  "result": "linked",
  "client": {
    "client_id": "01a06310-8f2b-7c11-9a3e-2b5c7d9e1f00",
    "external_user_id": "user-42",
    "telegram_id": 123456789,
    "bot_id": "01a06300-1c4e-7d2a-8b6f-9e0a1b2c3d4e",
    "source": "bot",
    "created_at": "2026-08-14T09:30:00Z"
  }
}

Поля ответа

successboolean

true у любого успешного ответа.

resultstring

linked: привязали; already_linked: так уже было; created: такого Telegram у вас ещё не было, пользователь заведён.

clientobject

Пользователь после привязки.

Собираем анонимную аналитику посещений. Подробнее