The Problem: Rotation Breaks Stateful Workflows

Snowpad's rotation pool gives you a fresh IP on every request — that's the point. But some workflows need the same IP for a while:

  • Logging into a site, then browsing pages (login binds to your IP)
  • Checkout / payment flows that fingerprint your session
  • Multi-step scrapes where the target tracks IP continuity
  • Captcha challenge flows that re-verify the same IP

Buying a dedicated sticky plan just for a 10-minute checkout flow is overkill. That's why Snowpad now supports Sticky Sessions on every plan: pin your IP for up to 10 minutes by adding -session-<id> to your API key.

How It Works

# Rotation (default): fresh IP every request
socks5://<api_key>@gw.snowpad.io:9999

# Sticky session: same IP for the TTL window
socks5://<api_key>-session-<id>@gw.snowpad.io:9999

The gateway reads the -session-<id> suffix from your username, binds all connections with that ID to one mobile node, and keeps you there until:

  1. The TTL expires (default 10 minutes) → the next connection with that ID re-pins to a fresh node, or
  2. The pinned node goes offline → your session silently remaps to a fresh online node, or
  3. You stop using the suffix → you're back to normal rotation.

You pick the session ID — any string works. Use abc123, a UUID, your order ID, whatever makes sense. The same session ID = the same IP.

Quick Start: cURL

# Same IP every time with session "abc123"
curl -x socks5h://YOUR_API_KEY-session-abc123@gw.snowpad.io:9999 http://httpbin.org/ip
curl -x socks5h://YOUR_API_KEY-session-abc123@gw.snowpad.io:9999 http://httpbin.org/ip

# Both requests print the same origin IP
# Drop the suffix → fresh IP again
curl -x socks5h://YOUR_API_KEY@gw.snowpad.io:9999 http://httpbin.org/ip

Python (requests + pysocks)

import requests

session_id = "order-4821"
proxy = f"socks5h://YOUR_API_KEY-session-{session_id}@gw.snowpad.io:9999"

proxies = {"http": proxy, "https": proxy}

# Every request with this session exits through the same IP
r1 = requests.get("https://httpbin.org/ip", proxies=proxies, timeout=30)
r2 = requests.get("https://httpbin.org/ip", proxies=proxies, timeout=30)

print(r1.json()["origin"])  # same IP
print(r2.json()["origin"])  # same IP

Playwright

from playwright.sync_api import sync_playwright

with sync_playwright() as p:
    browser = p.chromium.launch(
        headless=False,
        proxy={
            "server": "socks5://gw.snowpad.io:9999",
            "username": "YOUR_API_KEY-session-checkout-77",
            "password": "x",
        },
    )
    page = browser.new_page()
    page.goto("https://httpbin.org/ip")
    browser.close()

The whole browser session — login, cart, checkout — stays on one mobile IP.

What Happens at TTL Expiry

Sessions are time-boxed for a reason: mobile IPs are shared infrastructure, and pinning a phone forever is neither fair nor reliable. When your session's TTL expires:

  • Your open connections keep working until they close naturally.
  • Your next connection with the same session ID lands on a fresh node and re-pins — same session ID, new IP, zero config.
  • If the pinned phone's battery dies or it loses signal, the gateway silently remaps you to another online node.

Rule of thumb: for long-running jobs, re-create the session ID periodically (or just keep using the same one — the gateway re-binds after expiry automatically).

Sticky Sessions vs Dedicated Sticky Plan

Sticky Sessions (all plans) Dedicated Sticky add-on
Same IP for Up to 10 minutes (TTL) Forever (until node changes)
Plan needed Any — Free, Pro, Dedicated ₹2,400/mo per node add-on
Pool Shared rotation pool Your exclusive node
Use case Logins, checkouts, short multi-step flows Long-lived scraping, account management, IP reputation building

Limits & Errors

  • Sessions count toward your concurrent connection limit (60 on Pro, 9 on Free, 30 per dedicated node). Keep your worker count under it.
  • Exceeding the limit returns SOCKS5 error 0x02 ("connection not allowed by ruleset") — reduce concurrency or let sessions expire.
  • If the pool is saturated you may see 0x02 with "pool capacity exhausted" — retry with backoff.

FAQ

Do sessions work over HTTP CONNECT?

Yes. The -session-<id> suffix works on both SOCKS5 and HTTP CONNECT gateways. Use the same username format.

Can I have multiple sessions at once?

Yes. Each distinct session ID pins independently — session-A and session-B can be on different phones simultaneously. Sessions are capped per client to protect the network.

Is there any setup required?

No. The feature is live on all plans — no toggle, no config, no extra billing. Append the suffix and go.

Why would I ever drop the suffix?

When you want fresh IPs again — rotation is still the default, and it's the right choice for anonymous one-shot requests. Sessions are opt-in per connection.