Highlights
For its whole life FourA has had one door: you send us a URL, we send you the page. This week we opened a second one, a proxy endpoint of the ordinary kind you paste into any HTTP client, with credentials you make in the Dashboard. Proxy Finder also learned to reach for a paid exit on targets that refuse everything else, and Auto got better at remembering which exits work.
What's New
Point any HTTP client at us
New section in the Dashboard: ACCESS, then Proxy. Create a proxy user and the page hands you the exact connection string, with curl, Python and Node examples beside it. Pick the exit type, a country, whether to keep the same exit across a run of requests, and the string rewrites itself while you choose.
Why build it when the API already works? Some jobs aren't request-and-response. A tunnel copies bytes as they arrive: no JSON envelope, no buffering. That's what a large file or a video stream needs, and our API was never going to do it.
Targeting goes deeper on the paid exits: region, city, network by ISP name, and how long an exit stays yours. Our own pool is country only, on purpose. A city inside a thinly covered country is a handful of addresses, and a filter that mostly fails is worse than no filter.
One trade, stated plainly. Through a plain tunnel your client makes the connection to the site, not us, so the work our API does on your behalf isn't in that path: the unblocker flag, browser-based solving, validate rules, session replay. The tunnel gives you our exits and our bandwidth. The API gives you what we build on top. Pick per job, not per company.
Premium exits, and a response that says which one served you
/api/proxy takes an exitClass now, either standard or premium. Premium routes you through an exit we pay for, for the targets our own pool keeps getting the door shut on.
Send nothing and you get auto: the shared pool goes first, and a paid exit joins the search only once that search is struggling. Name a class and we obey it exactly. standard never escalates on its own, which is the whole point of saying it out loud.
The response carries exitClass back, so you always know which one delivered. A premium request our own pool answered first comes back standard, which is a success, not a downgrade. If your plan doesn't carry premium, the request is refused outright rather than quietly served from somewhere else.
Premium reads as a slice of your bandwidth, never as a second total: a row on Quota, a column on Metrics, a mark on the Activity row that went out that way, a tile on your Overview card. The Playground got the control, and its empty option is load-bearing: leaving it unset sends no field at all, because "never asked" and "asked never to escalate" are different requests.
Auto remembers what worked
Auto's ladder has always recorded which exits failed. It now records which ones delivered, from every rung rather than only the browser ones, and only after the content clears the same check that decides whether we'd hand the page back. An exit can't be marked good for a page we wouldn't return to you.
Bans age out on their own clock, too. A host's exclusion list used to have its life renewed every time a new ban landed on it; now each ban expires on the schedule it was given.
And when a run reaches your plan's browser limit, the ladder no longer stops. It works the proxy rung instead, then caches the exit that wins so later calls replay it cheaply on Single.
Auto is still the path finder, not the production route. Let it tell you which rung won and hand back the session, then point your volume at /api/single or /api/browser with that session directly. That was the argument when Auto launched and none of this changes it.
A page that isn't the page you asked for
Some exits sit inside a filtered corporate network where the gateway answers instead of the site. The response comes back 200, with a body, and it passed every check we had. Not any more: a page like that now counts as proof the exit is unusable rather than proof the site replied, so the request moves past it and that exit stops being preferred.
Every page shape we match on carries a size bound, so a real document that happens to quote the words can't be condemned for it. Size is a guard, never a signal. We wrote about the wider version of this two weeks ago, when a block looks like a data point.
Under the Hood
Rate limits are now checked against your own account's ceiling before anything gets charged against shared capacity. A burst inside one account is refused on its own limit, instantly, without spending a slot anyone else is waiting on.
The in-flight number on your dashboard comes from a live gauge each instance republishes every second, not a counter that could climb and never come back down. The screen and the limiter read the same number now.
Numbers
In our own testing, opening a tunnel to a host we'd already found exits for took 63 to 672 ms across a dozen samples, most under 260 ms. First contact with a host we've never carried is slower: seconds, sometimes tens of seconds, while the pool gets searched for exits that work on that target. That happens once per host, not once per request. Small sample, our own numbers.
Two doors means a question you didn't have last week: is this job about the bytes, or about getting through the door? Move a big file and the tunnel is the cheapest thing we own. Everything harder than that is still what the API is for.