ProxioDocs
API Reference

Sessions

List and rotate a Proxio credential's active sticky sessions. GET returns every active session with remaining TTL, DELETE expires one or all. Rotation is rate-limited per credential.

A sticky session pins one residential IP for a window of time. These endpoints let you see a credential's active sessions and force rotation by expiring one or all of them.

Scopes: read for GET, write for the deletes.

List sessions

GET /services/{id}/credentials/{credId}/sessions returns the credential's active sessions, no cursor.

Don't rely on a particular order or count

This endpoint returns sessions in no particular order and does not cap how many can appear, so treat the array as unordered and sort or limit it on your side if your integration needs that.

curl https://dashboard.proxio.net/api/v1/services/clpkg_2a9x/credentials/clsub_7h2k/sessions \
  -H "Authorization: Bearer pxo_9fJ2kQ7xR4mN8pL1dW6vB3cH5tZ0aYqS7dK2mN9x"
import requests

BASE = "https://dashboard.proxio.net/api/v1"
API_KEY = "pxo_9fJ2kQ7xR4mN8pL1dW6vB3cH5tZ0aYqS7dK2mN9x"

resp = requests.get(
    f"{BASE}/services/clpkg_2a9x/credentials/clsub_7h2k/sessions",
    headers={"Authorization": f"Bearer {API_KEY}"},
    timeout=15,
)
resp.raise_for_status()
for s in resp.json()["data"]:
    print(s["session_id"], s["remaining_ttl_seconds"])
const BASE = "https://dashboard.proxio.net/api/v1"
const API_KEY = "pxo_9fJ2kQ7xR4mN8pL1dW6vB3cH5tZ0aYqS7dK2mN9x"

const res = await fetch(
  `${BASE}/services/clpkg_2a9x/credentials/clsub_7h2k/sessions`,
  { headers: { Authorization: `Bearer ${API_KEY}` } },
)
for (const s of (await res.json()).data) {
  console.log(s.session_id, s.remaining_ttl_seconds)
}

200 response:

{
  "data": [
    {
      "session_id": "k3n8f2p9q1ab1",
      "remaining_ttl_seconds": 420,
      "created_at": "2026-07-17T09:20:00.000Z"
    }
  ],
  "meta": { "request_id": "req_8Ke2jP4mQ" }
}

created_at is null when the gateway doesn't report a start time for the session.

Rotate one session

DELETE /services/{id}/credentials/{credId}/sessions/{sessId} expires a single session, its next request draws a new IP. The response reports how many sessions were expired.

curl -X DELETE \
  https://dashboard.proxio.net/api/v1/services/clpkg_2a9x/credentials/clsub_7h2k/sessions/k3n8f2p9q1ab1 \
  -H "Authorization: Bearer pxo_9fJ2kQ7xR4mN8pL1dW6vB3cH5tZ0aYqS7dK2mN9x"
import requests

BASE = "https://dashboard.proxio.net/api/v1"
API_KEY = "pxo_9fJ2kQ7xR4mN8pL1dW6vB3cH5tZ0aYqS7dK2mN9x"

resp = requests.delete(
    f"{BASE}/services/clpkg_2a9x/credentials/clsub_7h2k/sessions/k3n8f2p9q1ab1",
    headers={"Authorization": f"Bearer {API_KEY}"},
    timeout=15,
)
resp.raise_for_status()
print(resp.json()["data"]["expired"])
const BASE = "https://dashboard.proxio.net/api/v1"
const API_KEY = "pxo_9fJ2kQ7xR4mN8pL1dW6vB3cH5tZ0aYqS7dK2mN9x"

const res = await fetch(
  `${BASE}/services/clpkg_2a9x/credentials/clsub_7h2k/sessions/k3n8f2p9q1ab1`,
  { method: "DELETE", headers: { Authorization: `Bearer ${API_KEY}` } },
)
console.log((await res.json()).data.expired)

200 response:

{ "data": { "expired": 1 }, "meta": { "request_id": "req_8Ke2jP4mQ" } }

The operation is idempotent: expiring a session that doesn't exist returns "expired": 0 rather than an error.

Rotate all sessions

DELETE /services/{id}/credentials/{credId}/sessions (no session id) expires every active session on the credential at once.

curl -X DELETE \
  https://dashboard.proxio.net/api/v1/services/clpkg_2a9x/credentials/clsub_7h2k/sessions \
  -H "Authorization: Bearer pxo_9fJ2kQ7xR4mN8pL1dW6vB3cH5tZ0aYqS7dK2mN9x"
import requests

BASE = "https://dashboard.proxio.net/api/v1"
API_KEY = "pxo_9fJ2kQ7xR4mN8pL1dW6vB3cH5tZ0aYqS7dK2mN9x"

resp = requests.delete(
    f"{BASE}/services/clpkg_2a9x/credentials/clsub_7h2k/sessions",
    headers={"Authorization": f"Bearer {API_KEY}"},
    timeout=15,
)
resp.raise_for_status()
print(resp.json()["data"]["expired"])
const BASE = "https://dashboard.proxio.net/api/v1"
const API_KEY = "pxo_9fJ2kQ7xR4mN8pL1dW6vB3cH5tZ0aYqS7dK2mN9x"

const res = await fetch(
  `${BASE}/services/clpkg_2a9x/credentials/clsub_7h2k/sessions`,
  { method: "DELETE", headers: { Authorization: `Bearer ${API_KEY}` } },
)
console.log((await res.json()).data.expired)

200 response:

{ "data": { "expired": 7 }, "meta": { "request_id": "req_8Ke2jP4mQ" } }

Rotation is rate-limited

Rotation is capped at 30 calls per 60 seconds per credential. Exceeding it returns RATE_LIMITED (429) with a Retry-After header. If the gateway is briefly unreachable you'll get UPSTREAM_ERROR (502), retry shortly.

On this page