Sessions & rotation
Choose a fresh IP on every request (rotating) or hold a single IP across many requests (sticky). This is controlled by the -session parameter you append to your username.
-session for a new IP each request, or keep the same -session-<id> to reuse one IP.Rotating sessions
For rotating traffic, omit -session, or send a new value each request. You get a different IP on every request, which suits high-volume scraping where each request should look independent.
Two equivalent approaches:
- Omit
-sessionentirely. Every request rotates to a fresh IP automatically. - Send a unique
-sessionvalue each time (for example a random string or an incrementing counter). Each new value maps to a new IP.
In this example there is no session parameter, so each call goes out on a different IP:
# Two requests, two different exit IPs (rotating)
curl -x "http://USERNAME-country-us:[email protected]:10000" https://api.ipify.org
curl -x "http://USERNAME-country-us:[email protected]:10000" https://api.ipify.org
A fresh random session value per request also rotates:
# A new -session value each time = a new IP each time
curl -x "http://USERNAME-country-us-session-$RANDOM:[email protected]:10000" https://api.ipify.org
Sticky sessions
To hold the same IP across multiple requests, pick a session id and keep sending it unchanged. The same -session-<id> value maps to the same IP for the life of the session. Use sticky sessions when you need continuity, such as logging in, browsing behind a session cookie, or completing a multi-step flow that must come from one IP.
Here the same -session-abc123 on both requests reuses one IP:
# Same -session value = same exit IP across requests (sticky)
curl -x "http://USERNAME-country-us-session-abc123:[email protected]:10000" https://api.ipify.org
curl -x "http://USERNAME-country-us-session-abc123:[email protected]:10000" https://api.ipify.org
The session id can be any string you choose (letters and numbers). Change it, or drop it, whenever you want a fresh IP.
Session TTL
By default a sticky IP is held for a standard window. To control that window yourself, append -ttl-<minutes>. The value is always in minutes and sets how long that session's IP is held before it is released.
# Hold this session's IP for 30 minutes
curl -x "http://USERNAME-country-us-session-abc123-ttl-30:[email protected]:10000" https://api.ipify.org
-ttl-30 means thirty minutes, not thirty seconds. Keep the TTL short if you want the IP to refresh often, or raise it (up to your product's maximum below) if you need the same IP to persist longer.Maximum sticky duration by product
Each product caps how long a single sticky IP can be held. Beyond the maximum, the session rotates to a new IP.
| Product | Sticky support | Maximum sticky duration |
|---|---|---|
| Budget Unlimited | Yes | Up to 24 hours |
| Premium Unlimited | Yes | Up to 24 hours |
| Residential / ISP | Yes | Up to 60 hours |
| Mobile | Yes | Sticky supported |
| IPv6 | Yes | Sticky supported |
| Static ISP | Permanently pinned | IP never rotates |
Which products accept session and TTL
Not every product accepts both parameters. Check here before you build your username string:
| Product | -session | -ttl |
|---|---|---|
| Budget Unlimited | Yes | Yes |
| Premium Unlimited | Yes | Yes |
| Residential / ISP | Yes | Yes |
| Mobile | Yes | Yes |
| IPv6 | Yes | No |
| Static ISP | Not applicable; each port is a fixed dedicated IP | |
Best practices
- Use a unique session id per worker or thread. Give each concurrent task its own
-sessionvalue so their IPs don't collide, and each worker keeps a consistent identity. - Rotate on a ban. If a target blocks a session, change the
-sessionvalue (or drop it) to move that worker onto a fresh IP immediately. - Keep the TTL short if you need fresh IPs often. A low
-ttl-<minutes>refreshes the IP more frequently. Raise it only when you genuinely need the same IP to persist. - Match the session length to the job. Multi-step flows like login, checkout, or paginated browsing want a stable sticky IP, whereas one-off lookups are usually better rotating.
-session and -ttl strings automatically, which is a quick way to get the exact format for your product.Next steps
Targeting
Combine sessions with country, state, city, and ASN targeting in the same username string.
Code examples
Ready-to-run rotating and sticky examples in bash, Python, and JavaScript.
Last updated July 6, 2026