Skip to main content
The SOAX API enforces two independent rate limits, and a request must pass both: Two keys used from the same machine share the IP budget; the same key used from two machines shares the key budget. Limits are fixed-window: the counter resets at each window boundary rather than sliding continuously.

The 429 response

Exceeding either limit returns 429 Too Many Requests:
The response carries standard rate-limit headers telling you exactly when to retry: Honor Retry-After rather than guessing:
For sustained workloads, spacing requests (a client-side throttle at ~4 requests/second per key) is more effective than reacting to 429s.

Checking your quota

Every authenticated response — not just 429s — includes the RateLimit-Limit, RateLimit-Remaining, RateLimit-Reset, and Retry-After headers for your key’s bucket, so you can track quota passively from responses you’re already making. If you want it in a body instead, GET /v1/api-keys/me returns the same information (note that this call itself counts against the limit):

Other usage constraints

Beyond request rates, individual endpoints enforce these caps:

Tips for staying under the limits

  • Cache reference data. Tiers, countries, and package location lists change rarely — fetch them once and refresh occasionally, don’t call them per request.
  • Batch connection strings. One call with count=100 gives you 100 session-distinct connection strings; you don’t need 100 calls.
  • Use one key per service, not per request. Each key gets its own 5 req/s budget, but creating keys in a hot path is an anti-pattern — create them ahead of time.
These limits apply to the management API only. Proxy traffic through proxy.soax.com:1337 is governed by your package’s own limits (concurrent connections, traffic volume), not by these API rate limits.