Rotation

Rotating gives a proxy a new mobile IP (the dongle reconnects to the carrier). You can rotate on demand, on a timer (auto-rotate), or through the token-less rotation link.

Rotate now

POST /proxies/{id}/rotate

Ability: rotate · Who: anyone on the account except team viewers; sub-users for their assigned proxies.

The call is synchronous: it returns when the rotation is done, normally in 5–30 s and at most about 60 s. Use a client timeout of at least 90 s.

curl
Python
Node.js
PHP
curl -X POST 'https://proxykite.com/api/v1/proxies/7/rotate' \
  -H "Authorization: Bearer $HYP_TOKEN" \
  -H 'Accept: application/json'

Response 200 (flat, no data wrapper)

{"ok": true, "old_ip": "100.64.1.2", "new_ip": "100.64.9.8", "method": "netflip", "duration_ms": 8000}

method is how the dongle was rotated: netflip (network mode switched Auto ↔ 4G only; the dongle stays in the new mode until the next rotation), netmode (older toggle-and-restore) or dataswitch (mobile data off/on). Errors also carry "ok": false:

Statuserror
403dongle_disabledthe proxy is disabled (message names the reason)
409rotation_in_progressa rotation of this proxy is already running — retry in a few seconds
501not_implementedthe dongle cannot rotate this way
502rotation_failedno new IP; includes old_ip

Every rotation, successful or not, also fires the rotation.completed webhook.

Auto-rotate

PUT /proxies/{id}/auto-rotate

Ability: manage · Who: anyone on the account except team viewers; sub-users for their assigned proxies.

Body fieldType
interval_secondsinteger 60–604800, or null / 0required — null or 0 turns auto-rotate off
stickybooleanoptional — true pauses auto-rotation and keeps the current IP

The panel offers 60, 120, 300, 600, 900, 1800, 3600, 7200, 21600, 43200, 86400, 259200 and 604800 seconds, but any value in range is accepted. Auto-rotation is checked once a minute and skips a proxy for 5 minutes after a failed auto-rotation.

curl
Python
Node.js
PHP
curl -X PUT 'https://proxykite.com/api/v1/proxies/7/auto-rotate' \
  -H "Authorization: Bearer $HYP_TOKEN" \
  -H 'Accept: application/json' \
  -H 'Content-Type: application/json' \
  -d '{"interval_seconds":600,"sticky":false}'

Response 200

{"data": {"auto_rotate_seconds": 600, "sticky": false}}

422 validation_failed with fields.interval_seconds if the value is out of range.

Rotation history

GET /proxies/{id}/rotations

Ability: read · Newest first.

Query
limit1–200, default 50
curl
Python
Node.js
PHP
curl 'https://proxykite.com/api/v1/proxies/7/rotations?limit=20' \
  -H "Authorization: Bearer $HYP_TOKEN" \
  -H 'Accept: application/json'

Response 200

{"data": [
  {"id": 981, "status": "ok", "old_ip": "100.64.1.2", "new_ip": "100.64.9.8", "method": "netmode",
   "duration_ms": 9000, "triggered_by": "api", "error": null, "created_at": "2026-10-09T18:00:00+00:00"}
]}

status: running, ok, failed, not_implemented. triggered_by: api, link, panel, auto.