My request returns 407 Proxy Authentication Required
Three causes, in order of likelihood:- Wrong credential format. Your username is the full
keyId(starts withavp_live_oravp_test_), and your password is the secret you copied at mint time. The wire format is HTTP Basic inProxy-Authorization. If you put the secret as the username or vice-versa, you’ll get 407. - Stale secret after rotation. If you rotated the key, the OLD secret stops working within milliseconds (we flush the gateway cache on rotate). Update your config to the new secret shown in the rotation response.
- Key was revoked. Check your dashboard at app.atlasvpn.live/developer — if the key is in the “Revoked” list, you’ll need to mint a new one.
-v output shows the Proxy-Authorization header — make sure it’s set and the base64 decodes to <keyId>:<secret> exactly.
My request returns 402 Payment Required
You’ve used up your tier’s bandwidth quota for this calendar month.- Free tier: 500 MB/mo. The gateway returns 402 (or 429, depending on overage opt-in) once you hit the cap. Reset on the 1st of next month UTC.
- Paid tier: Same — you hit your tier’s GB cap. Either:
- Wait for the next billing cycle (1st UTC).
- Enable overage in your dashboard (per-key opt-in flag, off by default — no surprise charges).
- Upgrade tier at
/developer.
My request returns 429 Too Many Requests
You’ve exceeded your tier’s rate limit (requests per second).| Tier | Rate limit | Burst |
|---|---|---|
| Free | 3 rps | 30 tokens |
| Developer | 10 rps | 100 tokens |
| Team | 25 rps | 250 tokens |
| Scale | 50 rps | 500 tokens |
Retry-After in the 429 response — respect it.
If you’re constantly hitting 429: you’re under-tiered. Upgrade or restructure your client to batch requests.
My request returns 502 Bad Gateway
The gateway accepted your CONNECT but couldn’t find a healthy node to route through. Possible causes:- Country pool empty. If you specified
-country-XX, that country might temporarily have zero online nodes. Drop the country pin or pick a country with deeper coverage (FR/DE typically have the most nodes). - Node disconnected mid-tunnel. If a node’s home internet drops while serving your tunnel, the gateway returns 502. Retry the request.
- Target host blocked. Some target ports / hosts are blocked by the protocol (SMTP-25, RFC1918 ranges). See allowed ports.
My request hangs forever
CONNECT response should arrive within 5 seconds. If it doesn’t:- Check port 7777 isn’t firewalled at your end. Some corporate networks block non-standard ports.
- Check your DNS isn’t pointing at a stale IP.
dig api.atlasvpn.liveshould match what you’re resolving. - Try with verbose:
curl -v -x http://...and watch where it stalls.
I see different IPs even though I set a sticky session
Sticky sessions only persist if:- The session tag is the SAME across requests.
- Less than 10 minutes have elapsed since the last request with that tag.
- A node matching the country (if pinned) is still online.
- You haven’t exceeded the per-session cap (500 MB/session).
My CONNECT to a non-standard port returns 403 Forbidden
The gateway’s port allowlist:| Port | Use case |
|---|---|
| 80 | Plaintext HTTP |
| 443 | HTTPS (most common) |
| 8080 | Alt-HTTP |
| 8443 | Alt-HTTPS |
error: port_not_allowed.
This is by design — we don’t want to be a generic VPN tunnel for arbitrary protocols. If your use case genuinely needs another port, contact us with a justification.
I’m using HTTPS_PROXY env var but only some traffic is proxied
Different libraries respectHTTPS_PROXY / HTTP_PROXY differently:
- curl: ✅ Respects both. Also
NO_PROXYfor exclusions. - wget: ✅ Respects both.
- Python requests: ✅ Respects both, but must be set BEFORE the
requestsimport in some cases. - Node.js: ❌ Does NOT respect env vars by default. Use
https-proxy-agentlibrary. - Go (net/http): ✅ Respects via
http.ProxyFromEnvironmentif you wire it. - Java HttpClient: ❌ Use
-Dhttps.proxyHost=JVM args instead.
My script worked yesterday but suddenly returns 407
Likely the secret was rotated. Run:rotatedAt on the key. If it’s recent and you haven’t updated your config, that’s the cause. Update with the new secret (which we shown ONCE at rotation time — if you didn’t save it, you’ll need to rotate again).
My script is getting different IPs per request when I want stickiness
You probably forgot the-session- qualifier in the username. Sticky requires both:
-session-, every request rotates. With -session-myrun42, requests with the SAME tag pin to the same exit for 10 minutes.
Target site blocks my requests despite using a residential IP
Some target sites use behavioural fingerprinting beyond IP. AvocadoVPN provides a clean residential IP — but if your User-Agent, TLS handshake, or browser fingerprint is bot-like, the target will still block. Mitigations:- Rotate User-Agent per request — match real browser strings.
- Use a real browser — Puppeteer / Playwright / Selenium with stealth plugins.
- Slow down. Bot-detection often triggers on request frequency.
DOWNLOAD_DELAY=0.5in Scrapy,time.sleep(1)in Python — be polite. - Use sticky sessions — looks more human than rotating per-request.
- Match the geography. US sites expect US IPs + US-locale Accept-Language. Don’t pull a French IP for a US-only product.
I exceeded my tier and got billed for overage I didn’t expect
You shouldn’t have. Overage billing is opt-in per key, and the default is OFF. To audit:- Check the per-key overage flag in the dashboard.
- Check your usage event log via
GET /api/v1/proxy/keys/<id>/events(coming Q2). - If you genuinely didn’t enable overage and got billed: email
support@atlasvpn.livewith your account email + the time window. We’ll refund + audit.
I rotated my key and now nothing works
Two checks:- Did you update your config? The OLD secret is dead immediately. Your env var, your CI/CD secret, your hardcoded test all need the new value.
- Did you save the new secret at rotation time? It’s shown ONCE in the rotate response. If you didn’t capture it, you need to rotate again and save it this time.
My node-provider client shows “online” but proxy requests through it fail
The gateway and the node-provider WebSocket connection have separate health checks. Symptoms:- Node-provider dashboard says “online” — the WebSocket is connected.
- But proxy CONNECT fails with 502 — the node isn’t responding to tunnel_connect messages.
- Node-provider client is hung but WS keepalive still alive. Restart the client.
- Node’s home internet has narrow upload bandwidth and is dropping tunnel data. Check your upload speed.
- Local firewall blocking outbound to target ports. Check allowed-ports in node config.
pm2 restart atlas-node (or the equivalent on your node-provider deployment), watch the logs.
Anything else
Emailsupport@atlasvpn.live with:
- Your
keyId(NEVER the secret). - Approximate timestamp + timezone of the failing request.
- The full curl command (with secret REDACTED).
- The full HTTP response including headers.