Ваш сайт или программа сама выдаёт подписки из нашего VPN. Нужен разработчик.
/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 уже у другого человека).
Идентификатор пользователя в вашей системе. Один человек = один id.
successbooleantrue у любого успешного ответа.
resultstringlinked: привязали; already_linked: так уже было; created: такого Telegram у вас ещё не было, пользователь заведён.
clientobjectПользователь после привязки.
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
}'Запрос меняет данные или списывает деньги: выполняйте его из своего кода.
{
"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"
}
}successbooleantrue у любого успешного ответа.
resultstringlinked: привязали; already_linked: так уже было; created: такого Telegram у вас ещё не было, пользователь заведён.
clientobjectПользователь после привязки.