Packages
A proxy package is your entry point to the proxy network. It’s where credentials, limits, and access controls live. When you create a package in the dashboard, you’re setting up a self-contained unit of proxy access. Each package has its own:- Package key for authentication
- Network types (residential, mobile, or both)
- Traffic limits (optional, set by the organization owner)
- RPS and connection limits controlling throughput
- IP allowlist for IP-based authentication
- Assigned users who can use the package
Sessions
A session groups related requests and gives them a shared context. Without a session, every request is independent. The system picks a new node each time, with no memory of what happened before. This is rotating mode, and it’s the right choice for high-volume work where you don’t need IP continuity. But many workflows need continuity. You might need to log in, navigate to a page, and then scrape it. Or you might need to maintain the same IP for a few minutes while you collect data from a multi-page flow. That’s what sessions are for. When you create a session (by adding asession parameter to your connection string), the system binds your session to a node and keeps using that node for subsequent requests. All the rules you set apply consistently across every request in that session. Changes to the node only happen when your rules allow it.
409 SESSION_PARAMS_MISMATCH. To change rules, use a new session ID. Sessions expire after 60 seconds of inactivity.
The key principle: sessions give you controlled continuity. You’re not locked to a random IP and hoping it stays up. You’re telling the system what behavior you need, and it maintains that behavior across requests.
Rules
Rules are what set SOAX apart from most proxy providers. Instead of giving you a few toggles (country, rotation time), SOAX uses a composable rules system with four independent categories. Each category answers a different question about how your requests should be handled:Filtering rules: which nodes can be used?
Filtering rules constrain the pool of eligible nodes based on their characteristics. You can filter by country, region, city, ISP, ASN, zip code, or network type. These filters are enforced continuously. If you’re in a session and the bound node stops matching your filters (for example, the node’s IP is reclassified from US to JP), the binding becomes invalid and the system replaces it.Routing rules: how does the system choose between eligible nodes?
Once the system knows which nodes are eligible, routing rules influence which one it picks. The available option isprefer-lookalike, which tells the system to favor nodes with similar characteristics to the previous one when it needs to select a replacement.
This matters when your node gets replaced (due to rotation, error, or reclassification). Without prefer-lookalike, you might jump from a Comcast IP in New York to a Verizon IP in Texas. With it, the system tries to find another Comcast IP in New York first.
Rotation rules: when is the system allowed to change the node?
Rotation rules control when the current node can be replaced during a session. You can rotate after a set number of seconds (rotate-timed_N, max 1 week, accepts s/m/h suffixes) or after a set number of requests (rotate-requests_N, max 1,000,000).
Without a rotation rule, a session keeps the same node until it encounters an error or its filters stop matching.
Error handling rules: what happens when something goes wrong?
Error handling rules define how the system reacts to infrastructure failures (node goes offline, connection refused, timeout). You have three options: replace the node with a new one (default), retry the request on the same node a set number of times before replacing (max 10), or fail immediately and return the error to your client.Why this matters
These four categories are independent. You can combine any filtering rule with any routing preference, any rotation trigger, and any error handling strategy. They compose together in a single connection string:Bindings
A binding is the link between a session and a node. When your session’s first request is processed, the system selects a node that matches your filtering rules and creates a binding. That node handles all subsequent requests in the session until something causes the binding to change. A binding can change when:- A rotation rule triggers (timed or request-count)
- The node fails and error handling replaces it
- The node no longer matches your filtering rules
bind-node.
When you use bind-node, you’re telling the system to lock the session to exactly one node. No rotation, no automatic replacement. If that node goes offline, your requests fail with an explicit error (503 BOUND_NODE_FAILED) instead of silently switching to a different node. This is useful for workflows where using a different node mid-session would cause problems (for example, maintaining a logged-in state on a target that fingerprints by IP).
bind-node requires a session and is incompatible with rotate-timed_N, rotate-requests_N, onerror-replace, and prefer-lookalike. You can pair it with onerror-retry_N to retry on the same node before failing.
Nodes and IPs
A node is a real device in the SOAX network that executes your requests. It has a physical location, a network connection, and an IP address that the target website sees. Nodes are not permanent. They’re real devices on real networks, which means they can change IP, go offline, or shift characteristics over time. SOAX is designed to handle this as a normal operating condition, not as an exception. This is why continuity in SOAX doesn’t live at the IP level. It lives in sessions and bindings. Your session’s rules define what behavior you need, and the system delivers it using whatever nodes are currently available and eligible. If a node changes or disappears, the rules handle what happens next. This is a deliberate design choice. Systems that promise IP stability are making guarantees they can’t always keep, especially at scale. SOAX instead gives you explicit control over what happens when things change, so your workflows stay predictable.How it all fits together
- Your organization has a credit pool and one or more packages.
- Each package defines who can connect, what network types are available, and what limits apply.
- When you send a request, you include rules in your connection string that describe what you need.
- If you include a session parameter, the system creates a session and binds it to a node that matches your rules.
- The binding persists across requests, changing only when your rotation, error handling, or filtering rules require it.
- If you don’t include a session, each request is independent and gets a fresh node every time.
Next steps
Quickstart
Make your first request in under 5 minutes.
Residential proxies
Full parameter reference for residential proxy rules.
Mobile proxies
Full parameter reference for mobile proxy rules.
Authentication
How to set up credentials and connect.