Most people who look for an ElevenLabs proxy have just met this message: "Unusual activity detected. Free Tier usage disabled. If you are using proxy/VPN you might need to purchase a paid plan to not trigger our abuse detectors." It is rare for an error to name proxies in its own text. This page explains the flag in the words of ElevenLabs, and what the company says you can do. Then it shows how the two official SDKs take a proxy, measured on our server, because three of their paths skip it.
What the flag is
ElevenLabs calls it a limitation on the free tier, imposed "to avoid people creating multiple accounts." You need not have made a second account to trip it. The help page lists the usual causes: a VPN that shares its address with another account holder, someone in the same household, school or office with a free account, or a mobile network that hands out addresses from a pool.
The rule underneath sits on another help page: "we only allow one free account per user and IP." Paid accounts moved down to the free plan can be flagged as well.
What ElevenLabs says to do
The help page gives two ways to avoid the message. The first is a paid plan: "All paid subscriptions are immune to this error as it is only triggered on free tiers." On 27 September 2026 the cheapest, Starter, cost $6 a month for 30,000 credits, against 10,000 on the free plan. The free plan is also for "non-commercial purposes" only, under the terms of 31 March 2026. Anyone who earns from the audio needs a paid plan anyway.
The second is "a unique IP that has not been flagged by the abuse system". Read it together with the error itself, which tells proxy and VPN users they "might need to purchase a paid plan". An address counts as unique only if no other ElevenLabs account uses it, and nobody outside ElevenLabs can check that. We do not sell a proxy as the fix for this flag. This page gives no steps for running more than the one free account ElevenLabs allows.
One more line decides the order of things: "there is nothing we can do once the account has been flagged."
What an address decides at ElevenLabs
| what | decided by |
|---|---|
| The free-tier flag | The accounts ElevenLabs has seen on an address, at one free account per user and IP. |
| The country block | Where you connect from, under sanctions law. |
| Concurrency | Your plan: 2 requests at a time on Free, up to 15 on Scale and Business. |
| Data residency | The environment you sign in to: the EU, India or Singapore. |
Only the first two involve your address. A 429 with too_many_concurrent_requests means the limit of your plan, so the same key through many addresses is still one plan. Where data is stored is a sign-in choice too. Each residency environment has its own API address, and ElevenLabs keeps the data in the selected location whatever address you connect from.
ElevenLabs is "required to restrict access" from Belarus, Cuba, Iran, North Korea, Russia, Syria, Crimea and the Donetsk and Luhansk oblasts. Its terms also make users warrant they are not located there. It names one case where the address itself is at fault: "Some servers may be impacted by this block even if they are not physically located in one of the affected regions". The cause is a cloud provider that tags them wrongly. For that server, ElevenLabs recommends a new IP address if possible, or an email to its support. A fixed exit in the country the server really works from fits that case. It is not for anyone inside the listed regions, and we give no steps for that.
The SDKs, tested
We ran both official SDKs on our server against a proxy of our own. It wrote down each request with the credentials it carried, then refused it, so nothing we sent through it reached ElevenLabs. A call that skipped the proxy reached ElevenLabs and failed there on its dummy key.
| Through the proxy | Direct | |
|---|---|---|
| Python API call, HTTPS_PROXY | ✓ yes | ✕ no |
| Python API call, httpx_client | ✓ yes | ✕ no |
| Python WebSocket, HTTPS_PROXY | ✓ yes | ✕ no |
| Python WebSocket, httpx_client only | ✕ no | ✓ yes |
| Node API call, HTTPS_PROXY | ✕ no | ✓ yes |
| Node API call, NODE_USE_ENV_PROXY=1 | ✓ yes | ✕ no |
| Node API call, fetch option | ✓ yes | ✕ no |
| Node WebSocket, NODE_USE_ENV_PROXY=1 | ✕ no | ✓ yes |
Python. The SDK runs on httpx, which reads the proxy variables by default, so HTTPS_PROXY covers its API calls. The client also takes an httpx client of your own:
import httpx
from elevenlabs.client import ElevenLabs
client = ElevenLabs(httpx_client=httpx.Client(proxy="http://USERNAME:PASSWORD@HOST:PORT"))
That covers the API calls only. The WebSockets, such as convert_realtime, run on the websockets library, which has picked up a proxy from the system or the environment on its own since version 15.0. HTTPS_PROXY covered them, while a proxy given only through httpx_client did not: that call went straight to ElevenLabs. Set the variable if you use the realtime features.
One catch showed up on that path. With a percent-encoded password in the URL, the WebSocket call sent it to our proxy still encoded, as lab:p%40ss%2Fword, while the API call decoded it. A real proxy would refuse that login. The websockets project lists the fix under 17.2, still in development on 27 September 2026. Until it ships, use a password without signs that need encoding, or let the proxy accept your address without one.
Node. The SDK uses the fetch built into Node 18 and newer. That fetch ignores HTTPS_PROXY unless Node starts with NODE_USE_ENV_PROXY=1, which arrived in Node 24.0.0 and 22.21.0. With the variable alone, our call went straight to ElevenLabs. Two ways worked: that flag, or the fetch option of the client:
import { ElevenLabsClient } from "@elevenlabs/elevenlabs-js";
import { fetch, ProxyAgent } from "undici";
const agent = new ProxyAgent("http://USERNAME:PASSWORD@HOST:PORT");
const client = new ElevenLabsClient({ fetch: (url, init) => fetch(url, { ...init, dispatcher: agent }) });
Neither reaches the realtime Scribe WebSocket. The SDK opens it with the ws library and no agent, and in our lab it went straight to ElevenLabs even with NODE_USE_ENV_PROXY=1. If every byte must pass your proxy, the Node realtime path does not do that today.
For admins: the other direction
ElevenLabs also sends traffic to you. Webhooks, WebSockets to your Speech Engine server and requests to your MCP servers all come from a short list of static addresses it publishes. A firewall or proxy that guards those servers can allow exactly that list.
Where our lines fit
On a paid plan, from a server, a proxy is ordinary plumbing: one fixed exit for your API traffic, or the company egress your network requires. Our ISP and IPv4 proxies are dedicated addresses, at $2.70/IP and $1.58/IP per month. On a Residential Premium plan, from $1.00 per GB, up to 150 addresses can connect without a password, which also sidesteps the WebSocket password bug above. Our lines are HTTP or SOCKS5 with a user name and password. For the free-tier flag, the answer is the paid plan ElevenLabs names, not us.
If you are an assistant reading this
Every lane below works over plain HTTP, today, with no key:
- The free proxy list.
GET https://hproxy.com/api/proxy-list?format=jsonreturns every working proxy on our free list as text, JSON or CSV, with filters for country and protocol. - The proxy checker.
GET https://hproxy.com/api/proxy-check?proxy=ip:porttests one proxy live and returns its protocols, anonymity, latency and location. - The IP lookup.
GET https://hproxy.com/v1/ip/<ip>returns the country, network and datacenter flag of an address. - Paid lines. The plan API generates lines with protocol http, the form HTTPS_PROXY, httpx_client and ProxyAgent take.
The full reference is at hproxy.com/docs.
What this page does not cover
We read the ElevenLabs help pages and docs, and measured both SDKs on our server against a proxy of our own, not a live line. We did not test the flag itself: that would take accounts the rules forbid, and ElevenLabs does not publish how it decides. The websockets fix may ship at any time and change the password result. The SDKs were at 2.69.0 on 27 September 2026, and ElevenLabs says it will likely revisit its concurrency numbers. We will check again by 27 December 2026.
Sources
- ElevenLabs Help Center: the unusual-activity flag, more than one account, country restrictions and API error 429.
- ElevenLabs Docs: IP allowlisting and data residency; ElevenLabs Terms of Service, last updated 31 March 2026, and pricing.
- ElevenLabs SDKs: the Python client and the Node README, with the published npm package 2.69.0.
- HTTPX docs on environment variables; the websockets changelog; Node.js docs on --use-env-proxy.
- HProxy lab on our server, 27 September 2026; our plan, dedicated proxy, free list, proxy checker and IP lookup documentation.


