The sticky vs rotating proxy choice comes down to whether each request should use a fresh exit IP or stay on one. By default, ColdProxy proxies rotate: every request gets a new exit IP from the pool. To hold one IP across multiple requests (for multi-step flows, checkout sequences, or consistent localization), you switch to a sticky session by adding session tags to your username. The most common configuration mistake is getting that switch half right. For the full username grammar, see the Username tag scheme.
Rotating proxy: the default behavior
With no session tags, each request is assigned a new IP from the pool. This is ideal for high-volume public web data collection where you want to spread requests across many IPs to reduce IP blocks and lower block rates:
import requests
proxy = "http://user-country-us:PASSWORD@gw-2312.coldproxy.com:30000"
proxies = {"http": proxy, "https": proxy}
for _ in range(3):
print(requests.get("https://api.vipv6proxy.com/api/checker/my-ip", proxies=proxies, timeout=30).json()["ip"])
# Three different exit IPsSticky proxy sessions require TWO tags
To keep one IP, supply both -session-<n> (a numeric ID you choose, digits only) and -time-<dur> (how long to hold it). Reusing the same session value within the time window returns the same exit IP while that IP works. If the exit IP stops working, the session's IP may change.
# Request a 30-minute sticky session with a US exit IP
curl -x "http://user-country-us-session-481516-time-30m:PASSWORD@gw-2312.coldproxy.com:30000" \
https://api.vipv6proxy.com/api/checker/my-ipSticky needs BOTH -session- and -time- together. Supplying only one of the two does not create a sticky session; the proxy keeps rotating and you silently get a new IP per request. This is the number-one cause of "my sticky session isn't sticking." If your IP changes mid-flow, check that both segments are present in the username.
# WRONG: session without time => still rotates
curl -x "http://user-country-us-session-481516:PASSWORD@gw-2312.coldproxy.com:30000" ...
# WRONG: time without session => still rotates
curl -x "http://user-country-us-time-30m:PASSWORD@gw-2312.coldproxy.com:30000" ...
# ERROR: invalid time value ("min" is not a unit) => 400 Bad Request, or SOCKS5 reply 0x01
curl -x "http://user-country-us-session-481516-time-30min:PASSWORD@gw-2312.coldproxy.com:30000" ...
# CORRECT: both present => sticky
curl -x "http://user-country-us-session-481516-time-30m:PASSWORD@gw-2312.coldproxy.com:30000" ...Both values must also be valid: -session- takes digits only, and -time- takes a positive whole number with an optional s, m, h, or d unit. The proxy refuses an invalid value with 400 Bad Request (SOCKS5: reply 0x01), so fix the tag rather than your credentials; see Invalid session or time value.
The exact session/time segment prefixes are configured per product by the ColdProxy admin and may differ from session/time. Confirm the precise prefixes for your service in your client area before scripting.
Sticky duration ranges
The maximum hold time depends on the product:
| Product | Sticky duration range |
|---|---|
| Residential IPv4 (Unmetered) | 5s - 24h |
| Residential IPv4 (GB Based) | 5s - 24h |
| Residential IPv6 | 5s - FOREVER |
| Datacenter IPv6 | 5s - FOREVER |
Use values within these ranges for -time-, e.g. 30s, 10m, 1h, 24h (the tag accepts s, m, h, and d units; a bare number means seconds). A value above your plan's maximum is shortened to that maximum. The window is fixed from the first request: activity does not extend it, and when it ends the next request with that session ID is assigned a new IP.
On the IPv6 products you can hold an IP indefinitely, but FOREVER is not a -time- value you type. Indefinite holds come from the client area's FOREVER option in the proxy generator; SuperPort sticky windows are timed, so they cannot hold an IP indefinitely. The generated username carries a stable -identifier- value instead of session/time tags, which pins the IP deterministically with no window to expire. Use the exact gateway, port, username, and password your client area shows:
# Generated by the client area's FOREVER option — identifier, no session/time tags
gw-2312.coldproxy.com:30000:USERNAME-identifier-mq8hhadw1mbdj50:PASSWORD# Residential IPv4: hold one IP for 1 hour across a multi-step flow
import requests
session = requests.Session()
proxy = "http://user-country-gb-session-729103-time-1h:PASSWORD@gw-2312.coldproxy.com:30000"
session.proxies = {"http": proxy, "https": proxy}
step1 = session.get("https://api.vipv6proxy.com/api/checker/my-ip", timeout=30).json()["ip"]
step2 = session.get("https://api.vipv6proxy.com/api/checker/my-ip", timeout=30).json()["ip"]
print(step1 == step2) # True while the session's exit IP worksIP-authentication users: use SuperPorts
If you authenticate by IP whitelist, the username carries no tags. To get sticky behavior on the IP-auth path, bind a sticky duration to a port range with SuperPorts; requests through those ports inherit the configured stickiness automatically (username tags override the port defaults when present).
# Ports configured as US + 10-minute sticky at the plan level.
# IP-auth proxies are issued as IP:PORT (e.g. 203.0.113.10:30000) in your client area.
curl -x "http://203.0.113.10:30000" https://api.vipv6proxy.com/api/checker/my-ipSticky vs rotating proxy: when to use which
- Rotating — large-scale public data collection, SEO/SERP monitoring, ad verification, price and market research where each request should look independent.
- Sticky — multi-request flows that must stay on one IP: localization/QA sessions, consistent checkout or navigation paths, and authorized testing that needs a stable identity for a bounded window.
On Residential IPv6 and Datacenter IPv6, if you need a stable IP without holding a session (consistent identity across processes or restarts), use the stateless -identifier- pin instead. See Deterministic IP pinning. The Residential IPv4 plans do not support -identifier-, so a sticky session of up to 24 hours is how you hold an IP there.
Verify stickiness by making two requests through the same session and confirming the exit IP matches with the Proxy Checker or My IP.