Skip to main content

Documentation Index

Fetch the complete documentation index at: https://mintlify.com/SpaceNeuroX/proxy-turn-vk-android/llms.txt

Use this file to discover all available pages before exploring further.

qWDTT needs VK TURN credentials — a username, password, and server URLs — to establish the relay tunnel through VK’s call infrastructure. Two authentication modes are available: anonymous (default) and VK account. Both ultimately deliver TURN credentials from calls.okcdn.ru, but they differ in how those credentials are obtained, how many concurrent workers they support, and whether a personal VK account is involved.

Mode Comparison

FeatureAnonymousVK Account
Login requiredNoOnce (WebView)
Max workers108 (27 × 4 hashes)4
TURN credential TTL~9 min (auto-renewed)~9 min (auto-renewed)
VK cookie (remixsid)Not neededLong-lived
Captcha riskYesLower
Concurrent call sessionsMultipleSingle

Anonymous Mode

Anonymous mode is the default. No VK account is required — the Go client calls the VK API directly, posing as a mobile app.

How it works

The Go client rotates between two stable VK app_id values (6287487 and 8202606) with cycling fallback. On each credential fetch the following API chain is executed:
1

get_anonym_token

Posts to https://login.vk.ru/?act=get_anonym_token with the selected client_id and client_secret to obtain a short-lived anonymous access token.
2

calls.getCallPreview

Calls https://api.vk.ru/method/calls.getCallPreview to validate the join link and mimic real VK client behaviour. A non-retryable error here (VK error codes 951, 954, or 9000–9999) means the call hash is dead or invalid.
3

calls.getAnonymousToken

Calls https://api.vk.ru/method/calls.getAnonymousToken to receive a token scoped to the specific call. This step may trigger a captcha — see Captcha Handling.
4

auth.anonymLogin (OK.ru)

Posts a session-data JSON to https://calls.okcdn.ru/fb.do using auth.anonymLogin to obtain an okcdn session key.
5

vchat.joinConversationByLink

Calls https://calls.okcdn.ru/fb.do with vchat.joinConversationByLink and the anonymous token, which returns the turn_server object containing username, credential, and urls.
All requests use a Chrome TLS fingerprint via tls-client (Chrome_146 profile) to blend in with real browser traffic.

VKCalls API path (vkAnonPath)

The vkAnonPath setting selects which anonymous API sequence is used:
  • vkcalls (default) — Uses the newer api.vk.me endpoint. The chain calls auth.getAnonymTokenmessages.getCallPreviewmessages.getAnonymCallToken before proceeding to the OK.ru TURN join. This path is preferred and is tried first.
  • legacy — Uses the older api.vk.ru endpoint chain described above. Automatically used as fallback if the vkcalls path fails for a retryable reason.
Set this in Settings → VK anon path or pass -vk-anon-path vkcalls / -vk-anon-path legacy on the CLI.
Up to 4 VK call hashes can be configured per profile. Each hash corresponds to a separate VK group call, and the Go client distributes workers across all hashes. With 4 hashes and anonymous mode you can run up to 108 total workers (27 per hash × 4). Add hashes from different VK group calls to maximise throughput.

VK Account Mode

Account mode uses your personal VK account to obtain TURN credentials via an intercepted WebView session.

Enabling account mode

Enable in Settings → VK auth mode → Account.

Authentication flow

1

First login

On first use (or if the remixsid session cookie has expired) a WebView opens to https://m.vk.ru/login. Complete the VK login as normal. The remixsid cookie is stored in Android’s WebView CookieManager and persists across app restarts.
2

Silent TURN fetch (subsequent connections)

On each connection attempt, a headless (invisible) WebView loads one of the VK call join URLs (m.vk.ru/call/join/<hash>). A JavaScript interceptor patches window.fetch and XMLHttpRequest.prototype.send to intercept any response that contains a turn_server object. The TURN credentials are delivered to the Go client without user interaction. The silent attempt has a 22-second timeout.
3

Visible WebView fallback

If the silent fetch fails or no VK session exists, a visible WebView dialog opens. An auto-click script looks for the “Продолжить в браузере” / “Присоединиться” button and clicks it automatically. If auto-click cannot find the button after several attempts, the user is prompted to tap it manually.

Worker limit

A single VK call provides approximately 4 TURN relay sessions. Because account mode draws on a single active call, the worker count is automatically capped at 4 regardless of the value configured in the profile.
Account mode authenticates using your personal VK account. VK may impose limits or suspensions on accounts that join calls unusually frequently. Use a dedicated VK account to avoid affecting your primary account.

Credential Caching

Both modes share the same credential caching layer, implemented in the Go client:
ParameterValue
credentialLifetime10 minutes
cacheSafetyMargin60 seconds
Effective cache duration~9 minutes
Throttle between VK API requests3–6 seconds (randomised)
Streams per cache entry10
Workers are grouped by stream ID: streams 0–9 share cache entry 0, streams 10–19 share cache entry 1, and so on. When a group’s credentials expire, only one worker in the group fetches new credentials while the others wait.

Auth error handling

If authentication errors (HTTP 401, “Unauthorized”, “stale nonce”, “invalid credential”) are detected, the error counter is incremented. If 3 or more errors occur within a 10-second window, the credential cache for that group is invalidated and the next worker request triggers a fresh credential fetch.

Build docs developers (and LLMs) love