Pass sessionId and sessionMinutes from 1 to 60 when extracting a dynamic residential proxy to keep the same exit where possible. A sticky session is not a static IP. Not for mainland China.
When you need the same exit for a limited window, pass `sessionId` and `sessionMinutes` together while you extract credentials. This page follows the official Dynamic Resource 2 guide for those fields. It explains how to turn sticky on, not the conceptual difference between sticky and static; that comparison is sticky session vs static IP.
If you omit session fields, requests can rotate IPs. A sticky session tries to keep the same exit for the window; it does not guarantee the exit never changes. If you need a relatively fixed residential IP for the subscription term, use static. Authorized targets only. Not supported in mainland China.
What to prepare
| Item | Where it comes from |
|---|---|
| Dynamic account ID and token | `accountId` from the purchase response; keep the token on the server |
| Whether you really need sticky | Skip session fields if you want rotation; use static if you need a long-lived fixed exit |
| Session id rules | Docs: `sessionId` is letters and digits only, kept to at most 6 characters |
| Duration rules | Docs: `sessionMinutes` supports 1 to 60 minutes |
Placeholders only (not production): host `proxy.example.invalid`, port `10000`, user `USER_EXAMPLE`, password `PASS_EXAMPLE_NOT_REAL`. Account ID example `ACCOUNT_ID_EXAMPLE`. The `cart01` value below comes from the official docs example; it is not a product-assigned session name.
What the fields mean
| Field | Documented behavior | Watch-outs |
|---|---|---|
| No session fields | You can receive rotating IPs | A repeated exit by chance is not a sticky session |
| `sessionId` | Letters and digits, at most 6 characters; the platform binds it to the current standard location level and builds the 6-character session id actually used | Do not invent a longer id, and do not write it into the username |
| `sessionMinutes` | 1 to 60 minutes | Do not describe a longer window as a verified product capability |
| Changing country, state, or city | Generate a new session id at the same time | Changing location while reusing the old id may keep the previous exit |
| Batch extract | Each credential gets its own 5-minute session by default; if you also send session fields, the platform derives a separate id per item and uses the duration you set | This is not a concurrency cap or SLA |
Use different `sessionId` values for tasks that must stay isolated. Clients should still use the username and password exactly as returned; do not encode the session into the username yourself.
Extract example with sticky fields
export ZTPROXY_BASE="https://backend.ztproxy.net/api"
export ZTPROXY_TOKEN="TOKEN_EXAMPLE_NOT_REAL"
curl -X POST "$ZTPROXY_BASE/business/dynamic-accounts/ACCOUNT_ID_EXAMPLE/extract" \
-H "Authorization: Bearer $ZTPROXY_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"protocol": "socks5",
"country": "US",
"sessionId": "cart01",
"sessionMinutes": 10
}'
`country` is not required for sticky mode. If you need a specific exit, query the location catalog first; see location targeting. The documented default protocol is still `socks5`. For a first check, pass host, port, and auth as separate flags; see test with curl.
Do not confuse sticky with static
| Need | Better product or practice |
|---|---|
| A new exit for each public-page sample | Dynamic traffic, without session fields |
| The same exit where possible for up to 60 minutes | Dynamic traffic plus the documented sticky fields |
| A relatively fixed residential IP for the term, including addresses you send to a partner | Static; see allowlists |
Sticky is not static, and it is not an SLA. When the window ends, or if the exit changes, extract again if your task still needs a stable address. Do not assume the same credentials always point at the same IP.
Scope and compliance
Use this only against targets you are authorized to access. This is not a bypass guide. Prices follow the console and Pricing (dynamic about $0.40/GB, about $0.20/GB on the 100 TB package; shared static about $1.50 and dedicated about $5 per IP per month). USDT and USDC are accepted; Visa and Mastercard are still being applied for. Not supported in mainland China.
FAQ
Can a sticky session replace a static IP?
No. Sticky tries to keep the same exit for a 1-to-60-minute window. Static is a relatively fixed residential IP for the subscription term. See sticky vs static.
Can sessionId be longer than 6 characters?
Not according to the docs. Use letters and digits only, kept to at most 6 characters. The platform builds the 6-character id that is actually used.
What is the longest sticky window?
Documented `sessionMinutes` values are 1 to 60. Do not treat a longer window as a verified capability.
Does the same session guarantee the IP never changes?
No. The docs say the platform tries to keep the same exit for the duration, but the exit can still change.
Can I reuse the same sessionId after I change country?
You should not. The docs say to generate a new session id when you change country, state, or city; otherwise you may keep the previous exit.
Can I use this to bypass login walls?
No. Authorized targets only.
Is the 5-minute batch default a billing plan?
No. It is the documented default session for batch extract. It is not a traffic package and not a concurrency SLA. For billing see GB vs IP.
Which price should I trust?
The console and Pricing.
Next steps
- Choose rotation, sticky, or static for the task.
- Extract a complete credential set and run a check.
- If you need to report a fixed address, use static and allowlists.