- Destinations are limited to ports 80, 443, 8080, 8443
- Anything else is refused at the gateway, on both the HTTP and the SOCKS5 path. Without that rule the product is also an open mail relay and an SSH jump host, and the complaints land on the addresses every customer shares.
- There is no https:// proxy scheme
- As a proxy scheme, https:// means TLS to the proxy itself, and there is no TLS listener to speak it to. The protocol parameter still accepts the value, because it mirrors the grammar the network behind us publishes — so it is possible to build a line that has nothing to connect to. Use http:// or socks5://, both on the same port. None of this touches your destinations: https:// URLs are the normal case and ride a CONNECT tunnel over the http:// line, encrypted end to end. We cannot read them and do not want to.
- UDP is refused
- A SOCKS5 client asking for UDP ASSOCIATE, or for BIND, gets "command not supported" at the handshake. The path to the network is a TCP tunnel, so no answer at that handshake could make UDP work — and claiming it and then dropping the datagrams is worse than saying no.
- A proxy user’s secret is shown once
- It exists in the response that created it and nowhere else afterwards. We keep a SHA-256 digest, which is enough to check a connection and not enough to reconstruct anything. No endpoint can return it, support cannot recover it, and a dump of our database does not hand anyone working proxy access.
- A top-up is not instant at the gateway
- The gateway caches an account’s balance for about fifteen seconds. After a purchase, connections may be refused for a few seconds more before the new balance is seen. Nothing is lost and nothing needs reissuing — wait, then retry.
- Revoking a proxy user takes up to 30 seconds
- The gateway authenticates every connection and therefore holds a credential that long before asking the database again, and it never cuts a connection already open. The DELETE response returns the figure as stopsServingWithinSeconds so an automation can compare it to a clock rather than to an adverb. Revoking an API KEY is a different promise: nothing caches that table, so the very next API call with it fails.
- Country is required, and city and state are exclusive
- Every connection names a country. Then a city or a state, never both — sending both is a request whose meaning depends on which one a parser reads last, so it is refused instead. Send the value the location catalogue gives you rather than a name you typed: names are letters, digits and underscores, spaces become underscores, and a place carrying an accent, a dash or an apostrophe cannot be expressed in a proxy username at all. Those are left out of the catalogue and counted, so you can see what is missing instead of guessing.
- A deleted proxy user keeps its name for ever
- Labels are unique across every proxy user an account has ever created, deleted ones included. That is deliberate — it is what keeps "scraper_prod spent 40 GB" unambiguous a year later — and it means a create-and-delete loop burns names permanently. Label by run rather than by role: scraper_prod_2026_09 can be created again, scraper_prod cannot.
- Usage is account-wide, and today has not settled
- usedBytes moves as traffic passes; billableBytes counts complete days only, so the two differ by however much of today has happened. Reconcile against billableBytes. Neither figure splits by proxy user, country or destination — the meter records bytes and a timestamp, and our privacy policy commits to not keeping the addresses you connect to.
- One account, many connections, one ceiling
- Up to 50 live proxy users and 10 live API keys per account, neither of them charged for. The gateway also caps how many connections one account may hold open at once, because every proxy user is another parallel channel spending the same balance.