IP rotation
Change the IP of a mobile proxy from the dashboard, a rotation link, the REST API or on an automatic schedule from 2 to 60 minutes — with the 10-second cooldown explained.
On this page
Rotation applies to mobile proxies only. Residential proxies rotate per request or per session through the username, and static ISP IPs never change.
When a mobile proxy rotates, its modem drops and re-establishes its data session. The carrier then assigns a new address from its pool. Open connections through the proxy are closed; your port, username and password stay the same.
Four ways to rotate#
| Method | Trigger | Needs | Logged as |
|---|---|---|---|
| Dashboard | Rotate IP button on the proxy page | dashboard login | Dashboard |
| Rotation link | GET https://proxuno.com/rotate/<token> |
only the link | Rotation link |
| REST API | POST https://proxuno.com/api/v1/proxies/{id}/rotate |
API key | API |
| Automatic | every N minutes, set per proxy | nothing | Automatic |
Every rotation, its source and the old and new IPs are listed on the proxy page.
Rotation link#
Each mobile proxy has a unique link containing a 32-character token. It is designed for tools that can call a URL but cannot hold an API key — antidetect browsers, automation platforms, cron jobs, a bookmark on a phone.
curl -s https://proxuno.com/rotate/9f3c1e7a2b8d4c60a1e5f7b3d9c2e8a4
Successful response (200):
{
"ok": true,
"id": 1482,
"ip": "198.51.100.181",
"previous_ip": "198.51.100.23",
"rotated_at": "2026-09-30T14:05:12.000Z",
"next_rotation_at": "2026-09-30T14:05:22.000Z"
}
The link works without cookies or headers, and accepts GET so it can be opened in any browser. next_rotation_at is the earliest moment the next manual rotation will be accepted. Each link accepts up to 30 calls per minute from one IP; above that it answers 429 rate_limited. Anyone with the link can rotate the proxy (but not see its credentials). If a link leaks, Regenerate link on the proxy page invalidates the old one immediately.
REST API#
curl -X POST https://proxuno.com/api/v1/proxies/1482/rotate -H "Authorization: Bearer $PROXUNO_API_KEY"
import os, requests
r = requests.post(
"https://proxuno.com/api/v1/proxies/1482/rotate",
headers={"Authorization": f"Bearer {os.environ['PROXUNO_API_KEY']}"},
timeout=30,
)
r.raise_for_status()
print(r.json()["data"]["ip"])
const res = await fetch("https://proxuno.com/api/v1/proxies/1482/rotate", {
method: "POST",
headers: { Authorization: `Bearer ${process.env.PROXUNO_API_KEY}` },
});
const body = await res.json();
if (!res.ok) throw new Error(`${body.error.code}: ${body.error.message}`);
console.log(body.data.ip);
The call returns once the new IP is known (typically 5–10 seconds), so set a client timeout of at least 30 seconds. Response:
{
"data": {
"id": 1482,
"ip": "198.51.100.181",
"previous_ip": "198.51.100.23",
"rotated_at": "2026-09-30T14:05:12.000Z",
"next_rotation_at": "2026-09-30T14:05:22.000Z"
}
}
The rotation cooldown#
Two manual rotations (dashboard, link or API) of the same proxy must be at least 10 seconds apart. A rotation inside that window is refused with 429 and the code rotation_cooldown:
{
"error": {
"code": "rotation_cooldown",
"message": "Please wait 7 s before rotating this proxy again (minimum 10 s between rotations).",
"retry_after": 7
}
}
The response carries a Retry-After header (and retry_after in the body) with the number of seconds to wait. Do not hammer the endpoint: wait Retry-After seconds, then retry once. In practice, rotating more often than every 30–60 seconds rarely helps — carriers frequently hand back a recently used address when sessions are torn down too quickly.
Automatic rotation#
Set an interval between 2 and 60 minutes on the proxy page, or with the API:
curl -X PATCH https://proxuno.com/api/v1/proxies/1482 \
-H "Authorization: Bearer $PROXUNO_API_KEY" -H "Content-Type: application/json" \
-d '{"rotation_interval_min": 10}'
0 turns automatic rotation off. The schedule is counted from the last rotation of any kind: a manual rotation at 14:03 on a 10-minute schedule moves the next automatic one to 14:13.
Getting a different IP, not just a new one#
Carrier pools are large but not infinite, and CGNAT means the same public IP can come back after a few rotations. If your workflow needs distinct IPs:
- Record
ipafter each rotation. - If it was seen recently, wait 10 seconds and rotate again.
- Spread work across several proxies on different carriers rather than rotating one proxy very fast.
Troubleshooting#
| Response | Meaning |
|---|---|
404 not_found |
The id or rotation token does not exist, or the proxy belongs to another account. |
403 forbidden |
The proxy is expired or suspended — renew it first. |
400 validation_error |
The proxy is a static ISP proxy; only mobile proxies rotate. |
429 rotation_cooldown |
Less than 10 s since the previous manual rotation. |
429 rate_limited |
Over 60 API requests per minute for this key. |
| New IP identical to the old one | The carrier re-assigned the same address. Rotate again after the cooldown. |
Something unclear, outdated or wrong on this page? Tell us — documentation issues are fixed in the next release at the latest.
Report an issue with this page