How it works

One endpoint. Everything else is a flag.

You point your client at a single host and port. The gateway reads your username, works out which exit satisfies it, and forwards the request. That is the whole model.

First principles

What a proxy actually is

Normally your computer opens a connection straight to a website, and that website sees your IP address. A proxy inserts a machine in the middle: you connect to it, it connects to the site, and the site sees the proxy's address instead of yours.

That sounds trivial, and for one request it is. It stops being trivial at scale. Sending ten thousand requests from one datacenter address gets that address blocked within minutes. Sending them from ten thousand residential addresses — real home broadband lines, in the country the site expects its visitors to be in — looks like ordinary traffic, because structurally it is.

Our job is to run that second thing reliably: a large, clean, ethically sourced pool of addresses, a gateway that picks the right one for each request, and enough observability that when something does break you can see why.

The path of a request

Four hops, roughly 640 milliseconds

Median end-to-end latency on the residential network. Datacenter and ISP pools are considerably quicker.

Your client

curl, Scrapy, Playwright — anything that speaks HTTP or SOCKS5

wproxy gateway

Authenticates you, parses targeting flags, picks an exit

Exit node

A residential, mobile, ISP or datacenter address in your chosen market

Target site

Sees a normal connection from a normal network

$ curl -x res.wproxy.io:8000 \

-U "wp-acc4821-country-de-city-berlin-session-a91f:••••••" \

https://example.com/pricing

Live exitsstreaming
    Mechanics

    The four things you will configure

    Authentication

    Two options. Send a username and password with each request, or whitelist your server's IP and skip credentials entirely. Whitelisting is faster to set up; credentials are easier to rotate and let you split usage across sub-users.

    bash
    # username / password
    curl -x res.wproxy.io:8000 \
         -U "wp-acc4821:your-password" https://ipinfo.io/json
    
    # IP whitelist — add the server in the dashboard, then drop the -U flag
    curl -x res.wproxy.io:8000 https://ipinfo.io/json

    Geo-targeting

    Country, city and ASN are all username flags. Nothing else changes — same host, same port, same password. Combine flags freely; unmatched targeting falls back to the nearest available pool rather than erroring.

    text
    wp-acc4821-country-de                  # anywhere in Germany
    wp-acc4821-country-de-city-frankfurt   # Frankfurt only
    wp-acc4821-country-de-asn-as3320       # Deutsche Telekom subscribers
    wp-acc4821-country-us-state-california # US state targeting

    Rotation and sticky sessions

    By default every request leaves from a different address. Add a session identifier to hold one address; add a duration to control how long. Sessions survive up to 120 minutes, or until the underlying peer disconnects — at which point we hand you the closest equivalent.

    text
    wp-acc4821                                  # rotate every request
    wp-acc4821-session-a91f                     # hold this exit
    wp-acc4821-session-a91f-sesstime-30         # hold it for 30 minutes

    Protocols and ports

    HTTP, HTTPS and SOCKS5 on dedicated ports. SOCKS5 is the right pick for non-HTTP traffic and for clients that struggle with CONNECT tunnelling. All three carry the same traffic and bill identically.

    text
    res.wproxy.io:8000    # HTTP
    res.wproxy.io:8443    # HTTPS
    res.wproxy.io:1080    # SOCKS5
    Billing

    How traffic is counted

    Residential, mobile and datacenter bandwidth plans bill on total bytes crossing the gateway — request headers and body up, response headers and body down. That is the same number your own network stack sees, so the two should reconcile.

    Failed requests are not free, because the bytes still moved, but any request that fails inside our infrastructure — gateway errors, exhausted pools, authentication faults on our side — is credited automatically and shows as an adjustment on the invoice.

    ISP and dedicated plans bill per IP per month with unmetered traffic, which is usually cheaper once you are moving more than about 200 GB through a fixed set of addresses.

    See the pricing ladder
    Getting started

    From signup to first byte

    1. 1

      Create an account

      Email and password, or Google. One gigabyte of residential traffic is credited immediately — no card.

    2. 2

      Create a proxy user

      A sub-credential with its own password and optional traffic cap. Most teams make one per project.

    3. 3

      Build an endpoint

      Pick a country, decide between rotating and sticky, copy the line. The generator below is the same one in the dashboard.

    4. 4

      Test the connection

      curl -x gateway -U credentials https://ipinfo.io/json. If the address it returns is in your target country, you are done.

    5. 5

      Set a limit

      Optional but recommended: a daily or monthly ceiling and an alert at 75%, so a runaway loop cannot spend your budget overnight.

    Interactive demo

    Build an endpoint now

    Choose a country, a session mode and a protocol. The credentials and the code samples update as you go — no account required to look.

    Pin traffic to a specific network operator.

    Your endpoint

    res.wproxy.io:8000:customer-demo-country-us:s3cr3t-pass

    Targeting lives in the username, so one hostname covers every combination. Change any option above and the credentials update immediately.

    curl -x "http://customer-demo-country-us:s3cr3t-pass@res.wproxy.io:8000" \
      -L "https://ip.wproxy.io/json"

    10 generated endpoints

    res.wproxy.io:8000:customer-demo-country-us:s3cr3t-pass
    res.wproxy.io:8000:customer-demo-country-us:s3cr3t-pass
    res.wproxy.io:8000:customer-demo-country-us:s3cr3t-pass
    res.wproxy.io:8000:customer-demo-country-us:s3cr3t-pass
    res.wproxy.io:8000:customer-demo-country-us:s3cr3t-pass
    res.wproxy.io:8000:customer-demo-country-us:s3cr3t-pass
    res.wproxy.io:8000:customer-demo-country-us:s3cr3t-pass
    res.wproxy.io:8000:customer-demo-country-us:s3cr3t-pass
    res.wproxy.io:8000:customer-demo-country-us:s3cr3t-pass
    res.wproxy.io:8000:customer-demo-country-us:s3cr3t-pass
    FAQ

    Common questions about the mechanics

    No. One host and port per product. Country, city, ASN, session and duration are all encoded in the username, which means you can change targeting at runtime without reconfiguring anything.
    Residential peers are real devices, so they do drop off. When that happens mid-session we transparently hand you the closest equivalent — same city where possible, same country and ASN otherwise — and flag the swap in the response headers so you can react if the session mattered.
    Yes. Playwright, Puppeteer and Selenium all accept a proxy server plus credentials. The docs have copy-paste configuration for each, including the Chromium flag ordering that trips most people up.
    Unlimited on residential, mobile and ISP plans. Datacenter shared pools cap at 250 concurrent per sub-user to keep one customer from starving the rest; dedicated addresses have no cap at all.
    Yes. Everything the dashboard does — creating sub-users, setting limits, pulling usage, listing allocated IPs — is available over REST with a scoped API key. See the API section of the docs.
    Get started

    Send your first request in five minutes

    A free gigabyte, working credentials and documentation that assumes you have better things to do than read documentation.