Limits and quotas
Default values for every limit: concurrency, connection rate, timeouts, account counts, whitelists, rate limits and risk-control thresholds.
One checklist to consult while designing concurrency and retry strategy. Every number is the current production default and may be adjusted per node.
Connections and concurrency
| Item | Default |
|---|---|
| Total gateway connections | 100,000 |
| Pre-auth concurrency per source IP | 5,000 |
| Pending handshakes | 10,000 |
| New connection rate per source IP | 1,000/s, burst 5,000 |
| New connection rate per account | 2,000/s, burst 5,000 |
| Per-account concurrency baseline | 5,000 |
Per-account concurrency is dynamic
5,000 is not a hard ceiling under light load. The gateway adjusts with overall pressure:
| Gateway load | Per-account concurrency ceiling |
|---|---|
| ≤ 60% | Can relax up to the total gateway connection count |
| 60% – 85% | Tightens linearly between the two |
| ≥ 85% | Tightens to 5,000 (or a lower value from the account snapshot) |
The per-source-IP 5,000 only protects the pre-auth stage
Once authentication succeeds, the source IP's concurrency slot is released. So that limit exists to prevent floods of unauthenticated connections, not to cap your business concurrency.
Authenticated account concurrency or connection-rate limits return HTTP 429 connection_limit; exhausted traffic or account quota returns 402. Protection before protocol detection may close TCP directly, and an established tunnel cannot receive a new HTTP error status. See the error reference.
Timeouts
| Item | Value | Meaning |
|---|---|---|
| First byte | 5s | How long after connecting the first byte must arrive |
| Full handshake | 10s | Total budget for the whole proxy handshake |
| Authentication | 3s | The gateway's auth call to the control plane |
| Target policy / DNS | 8s | Target address check and hostname resolution |
| Exit TCP connect | 8s | Default; connection conditions may result in an earlier timeout |
| Exit handshake | 30s | Default; connection conditions may result in an earlier timeout |
| Idle | 5 minutes | Global ceiling; connection conditions may result in an earlier timeout |
| Maximum connection lifetime | 24 hours | For established relays |
| Half-close drain | 15s | Time to drain reverse data after a TCP half-close |
Accounts and resources
| Item | Limit |
|---|---|
| Proxy sub-accounts per user | 10 |
| Proxy sub-accounts per user (first 24 hours) | 2 |
| IP whitelist entries per sub-account | 10 |
| API keys per sub-account | 1 |
| Sub-account traffic cap | 1 MB – 1 TB |
| Open support tickets per account | 20 |
| Notification channels per traffic alert | 20 |
What exceeding them returns:
| Case | Response |
|---|---|
| Sub-account limit exceeded | 409 proxy_account_limit_reached |
| Whitelist limit exceeded | 409 proxy_api_limit_reached |
API rate limits
| Endpoint | Limit |
|---|---|
| Extract API | 120/minute, counted separately per source IP and per API key |
| CDK redemption | 20/minute |
| Registration code (per email) | 3/hour |
| Registration code (per IP) | 10/hour, 30/day |
| Code resend interval | 60s |
| Successful registrations per IP per day | 3 accounts |
Exceeding returns 429 with Retry-After: 60.
Sign-in and risk control
| Item | Threshold |
|---|---|
| Failure counting window | 10 minutes |
| Failures per IP | 30 |
| Failures per account | 10 |
| Failures per IP + account pair | 5 |
| Cooldown once triggered | 15 minutes |
| Verification code lockout | 5 attempts |
| Verification code validity | 600s |
| MFA ticket validity | 5 minutes |
Hitting any threshold writes a cooldown, during which sign-in returns 429 directly.
Token lifetimes
| Item | Default |
|---|---|
| Access token | 15 minutes |
| Refresh / session | 12 hours |
| Refresh (with "remember me") | 30 days |
| MFA ticket | 5 minutes |
See Authentication and conventions.
Orders and quotes
| Item | Value |
|---|---|
| Dynamic residential quote validity | 5 minutes (shorter if a promotion or delisting comes sooner) |
| Unpaid order expiry | 30 minutes |
| Stripe checkout link retention | 30 days |
| Static residential per-cart | 100 IPs, 100 per country |
| Static residential lease | Fixed 30 days |
| Datacenter lease tiers | 7 / 30 / 90 days |
| CDK face value | 100 MB – 1 TB |
| CDK validity | 1 – 30 days |
Data retention
| Data | Retention |
|---|---|
| Daily usage aggregates | Long-term |
| Hourly usage detail | 60 days |
| Hourly per-domain detail | 60 days |
| Domain list | Most recent 500 |
| Daily endpoint per-call range | 1 – 90 days |
| Whitelist auto-cleanup when unused | 10 days |
See Usage statistics.
Target restrictions
| Item | Rule |
|---|---|
| Private / loopback / link-local / multicast addresses | Blocked |
| Target port 25 | Blocked |
| Hostname resolution | Resolved at the gateway and pinned to the first IP |
| UDP / QUIC / WebRTC | Unsupported (SOCKS5 has no UDP ASSOCIATE) |
See Target restrictions.
Option value ranges
| Option | Range |
|---|---|
country | Two uppercase letters |
state / region / city | 1–100 bytes (UTF-8) |
asn | 1 – 4294967295 |
session | 1–64 bytes, [A-Za-z0-9.-] |
time | 1 – 120 minutes |
| Full username | 1–255 bytes |
| Base username | 1–64 bytes |
| Password | 1–512 bytes (255 in practice for SOCKS5) |
See Username option reference.
Limits that don't exist
Listed so you don't design around mechanisms that aren't there:
| What you might assume exists | Reality |
|---|---|
| A general QPS limit on the client API | No separate configuration |
| A hard daily traffic ceiling | None |
| A global session count ceiling | None |
| ASN extraction quotas | The Extract API doesn't support that dimension at all |
| Monetary balance alert thresholds | Traffic balance alerts only, no monetary alerts |
| Automatic account suspension rules | None |
Designing concurrency around the limits
A workable starting point:
# Per-account concurrency has a 5,000 baseline, but the real bottleneck is
# usually your own machine and the target site, not the gateway. Start small.
MAX_CONCURRENCY = 64
# The Extract API allows 120/min, so don't call it per request.
# Extract a batch at startup and cache it.
EXTRACT_INTERVAL_SECONDS = 60
# The gateway idles out at 5 minutes; keep the client pool shorter so you
# never hand out a connection the gateway has already closed.
KEEPALIVE_TIMEOUT_SECONDS = 90
# Client timeouts slightly wider than the gateway's, so you get the gateway's
# status code rather than your own timeout exception.
CONNECT_TIMEOUT_SECONDS = 15 # gateway: 8s
TOTAL_TIMEOUT_SECONDS = 120