When your client sends a request through the KnoxProxy gateway, the rotation engine selects an exit IP from the residential pool based on your session parameters. If you are using per-request rotation (the default), every request gets a different IP. If you have set a session ID with the sticky flag, the engine pins your traffic to one IP for up to 24 hours.
The selection is not random. The engine considers IP freshness (how recently the IP was used on your target domain), geographic match (country, city, or ASN you requested), and reputation score (a composite of recent success rates across all customers).
Per-request rotation is the default because most proxy workloads -- price monitoring, SERP tracking, ad verification -- consist of independent, stateless checks. Each request is a separate "visit" that should look like a different household. Identity reuse across independent checks is what anti-bot systems learn to flag.
Sticky sessions exist for multi-step flows that require state: logging into a test account, navigating a checkout funnel, or maintaining a cookie jar across pages. The same IP needs to persist through the entire flow. Set a session ID and the sticky flag; the engine holds that IP for up to 24 hours or until the IP becomes unavailable.
The rule of thumb: if the target needs to see the same visitor across requests, use sticky. For everything else, rotate.
import requests
# Per-request rotation (default) -- each request gets a new IP
proxy_rotating = "http://USER:PASS@gw.knoxproxy.com:7000"
# Sticky session -- same IP for up to 24h
proxy_sticky = "http://USER-session-abc123-sticky:PASS@gw.knoxproxy.com:7000"
# Rotating: 3 requests, 3 different IPs
for i in range(3):
r = requests.get("https://api.ipify.org",
proxies={"https": proxy_rotating})
print(f"Rotating #{i+1}: {r.text}")
# Sticky: 3 requests, same IP
for i in range(3):
r = requests.get("https://api.ipify.org",
proxies={"https": proxy_sticky})
print(f"Sticky #{i+1}: {r.text}")Pool size is a marketing metric. Pool quality -- measured by success rate on real targets -- is the engineering metric.
Three things separate a reliable rotation engine from a naive round-robin: IP freshness tracking (never assigning an IP that was recently used on the same target), graceful failover (if a sticky IP goes down, the engine transparently assigns a new one with matching geo), and hygiene (continuously retiring IPs that show declining success rates before they affect your workload).
Pool size is a marketing metric. Pool quality -- measured by success rate on real targets -- is the engineering metric. That is why a well-maintained 90.4M pool can match or beat a poorly maintained 150M pool on mainstream targets.
KnoxProxy encodes all session parameters in the proxy username. No separate API calls, no SDKs required. Your existing HTTP client is the only dependency.
Rotation strategy directly affects cost. Per-request rotation with 2xx-only billing means you only pay for successful responses. If a request fails (target blocks, timeout, network error), no bandwidth is billed. This makes effective cost predictable: it tracks your success rate, not your attempt rate.
Sticky sessions are slightly more expensive in practice because holding an IP removes it from the available pool for other customers. But on KnoxProxy, there is no surcharge for sticky -- the same per-GB rate applies. The cost difference comes from the nature of your workload, not a pricing penalty.
Default to per-request rotation. Switch to sticky only for multi-step flows that require session state. The username-flag system means you can switch between modes by changing one string -- no code refactoring needed.
Start free, run a thousand requests, and log the exit IPs. The difference is measurable in the first batch.