Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

Sticky sessions

By default every request rotates to a fresh exit. To hold one IP across requests, pick any sid:

USER-country-us-sid-mysession-ttl-30

Every request carrying that sid routes to the same exit, for up to ttl minutes. Different sid values are independent, so you can run many sticky identities in parallel under one account.

# Two independent identities, each with its own stable IP
curl -x 'http://USER-country-us-sid-cart-a:PASS@proxy.hypercall.dev:4444' https://api.ipify.org
curl -x 'http://USER-country-us-sid-cart-b:PASS@proxy.hypercall.dev:4444' https://api.ipify.org

How long a session really lasts

Stickiness is best-effort, and this is the single most important thing to design around. ttl is an upper bound you request, not a guarantee.

The exit is a real residential device, and it can go offline at any time. When that happens, your sid moves to another exit that matches the same targeting options, and the IP changes mid-session.

Practical expectations:

  • Requesting a long ttl does not make a device stay online.
  • Holds beyond ~30 minutes are unreliable regardless of ttl.
  • Short sessions (a checkout flow, a login sequence) are very reliable.

Write your client to tolerate a mid-session IP change. If your workflow breaks when the IP moves, re-verify the exit at the start of each critical step rather than assuming continuity:

def exit_ip(session_id):
    p = f"http://USER-country-us-sid-{session_id}-ttl-30:PASS@proxy.hypercall.dev:4444"
    return requests.get("https://api.ipify.org",
                        proxies={"http": p, "https": p}, timeout=30).text

ip = exit_ip("checkout-1")
# ... later, before a step that must run from the same IP:
if exit_ip("checkout-1") != ip:
    restart_flow()   # the device rotated; don't continue on a new identity

Choosing a sid

Any string up to 60 characters. Longer values are truncated. Use something meaningful to your workflow, such as an order id, a worker number, or a customer id, so concurrent jobs don’t collide on the same exit unintentionally.