Proxies, usage & orders API
Reference for GET /proxies, GET /proxies/{id}, POST /proxies/{id}/rotate, PATCH /proxies/{id}, GET /usage and GET /orders — parameters, responses and examples.
On this page
All paths are relative to https://proxuno.com/api/v1 and require an API key (Authentication). Responses use the {"data": …} envelope described in the overview.
List proxies#
GET /proxies?type=mobile&country=fr&status=active
| Parameter | Values | Default |
|---|---|---|
type |
mobile · static |
both |
country |
ISO code, e.g. fr, gb |
all |
status |
active · expiring (active, ends within 3 days) · expired · suspended |
all |
curl -s "https://proxuno.com/api/v1/proxies?type=mobile&status=active" -H "Authorization: Bearer $PROXUNO_API_KEY"
import os, httpx
api = httpx.Client(base_url="https://proxuno.com/api/v1", headers={"Authorization": f"Bearer {os.environ['PROXUNO_API_KEY']}"}, timeout=30)
for p in api.get("/proxies", params={"type": "mobile", "status": "active"}).json()["data"]:
print(p["id"], p["country"], p["carrier"], p["ip"], p["expires_at"])
const res = await fetch("https://proxuno.com/api/v1/proxies?type=mobile&status=active", {
headers: { Authorization: `Bearer ${process.env.PROXUNO_API_KEY}` },
});
const { data, meta } = await res.json();
console.log(meta.total, data.map((p) => `${p.host}:${p.ports.http}`));
Response:
{
"data": [
{
"id": 1482,
"type": "mobile",
"status": "active",
"country": "fr",
"carrier": "orange",
"isp": null,
"tech": "5G",
"label": "serp-fr-01",
"ip": "198.51.100.181",
"host": "fr.mobile.gw.proxuno.com",
"ports": { "http": 10421, "socks5": 20421 },
"username": "m_k3v9q2xa",
"password": "Hq7Lr2Nw8Zt4Bc6D",
"auto_renew": true,
"duration": "30d",
"starts_at": "2026-09-12T08:30:00.000Z",
"expires_at": "2026-10-12T08:30:00.000Z",
"created_at": "2026-09-12T08:30:00.000Z",
"rotation": {
"interval_min": 10,
"last_rotated_at": "2026-09-30T14:05:12.000Z",
"rotations_count": 412,
"link": "https://proxuno.com/rotate/9f3c1e7a2b8d4c60a1e5f7b3d9c2e8a4"
}
}
],
"meta": { "total": 1 }
}
Static ISP proxies have "type": "static", carrier: null, the provider name in isp, the IP as host, and no rotation object.
Get one proxy#
GET /proxies/{id}
Returns the same object as in the list. An id that does not exist or belongs to another account returns 404 not_found.
Rotate a mobile IP#
POST /proxies/{id}/rotate
No body. Returns once the modem has a new address:
{
"data": {
"id": 1482,
"ip": "198.51.100.207",
"previous_ip": "198.51.100.181",
"rotated_at": "2026-09-30T14:07:40.000Z",
"next_rotation_at": "2026-09-30T14:07:50.000Z"
}
}
| Status | Code | When |
|---|---|---|
400 |
validation_error |
The proxy is a static ISP proxy. |
403 |
forbidden |
The proxy is expired or suspended. |
404 |
not_found |
Unknown id. |
429 |
rotation_cooldown |
Less than 10 seconds since the previous manual rotation. Retry-After gives the wait. |
More context in IP rotation.
Update a proxy#
PATCH /proxies/{id}
Content-Type: application/json
| Field | Type | Meaning |
|---|---|---|
rotation_interval_min |
integer | 0 = off, or 2–60 minutes. Mobile proxies only. |
auto_renew |
boolean | Renew from the prepaid balance 24 hours before expiry (6 hours for 24-hour plans). |
label |
string ≤ 60 or null |
Your own name for the proxy, shown in the dashboard and exports. |
Send only the fields you want to change; at least one is required. Unknown fields are rejected.
curl -s -X PATCH https://proxuno.com/api/v1/proxies/1482 \
-H "Authorization: Bearer $PROXUNO_API_KEY" \
-H "Content-Type: application/json" \
-d '{"rotation_interval_min": 5, "auto_renew": true}'
The response is the updated proxy object. A value outside the allowed range returns 400 validation_error with the offending field in error.fields:
{
"error": {
"code": "validation_error",
"message": "Some fields need your attention.",
"fields": { "rotation_interval_min": "Choose an interval between 2 and 60 minutes, or turn automatic rotation off." }
}
}
Usage#
GET /usage?from=2026-09-01&to=2026-09-30
| Parameter | Format | Default |
|---|---|---|
from |
YYYY-MM-DD (UTC) |
29 days before to |
to |
YYYY-MM-DD (UTC) |
today |
proxy_id |
integer | all proxies and residential |
The range may cover up to 366 days. One entry per day, bytes per product:
{
"data": [
{ "date": "2026-09-29", "mobile_bytes": 4182000000, "residential_bytes": 512300000, "static_bytes": 902000000, "bytes": 5596300000, "requests": 48210 },
{ "date": "2026-09-30", "mobile_bytes": 3907000000, "residential_bytes": 488100000, "static_bytes": 875000000, "bytes": 5270100000, "requests": 45876 }
],
"meta": {
"from": "2026-09-29", "to": "2026-09-30", "days": 2,
"totals": { "mobile_bytes": 8089000000, "residential_bytes": 1000400000, "static_bytes": 1777000000, "bytes": 10866400000, "requests": 94086 }
}
}
Only residential_bytes is billed; mobile and static traffic is unlimited and reported for your own monitoring. Today's figures are updated every few minutes.
Orders#
GET /orders?status=fulfilled&limit=25&offset=0
| Parameter | Values | Default |
|---|---|---|
status |
pending · awaiting_payment · paid · fulfilled · expired · cancelled · refunded |
all |
limit |
1–100 | 25 |
offset |
≥ 0 | 0 |
{
"data": [
{
"ref": "ORD-2026-01482",
"kind": "purchase",
"status": "fulfilled",
"currency": "USD",
"subtotal_cents": 31500,
"discount_cents": 0,
"total_cents": 31500,
"payment_method": "balance",
"created_at": "2026-09-30T08:21:03.000Z",
"paid_at": "2026-09-30T08:21:03.000Z",
"items": [
{ "product": "mobile", "description": "3 × mobile proxies — France · Orange · 30 days", "country": "fr", "carrier": "orange", "duration": "30d", "gb": null, "quantity": 3, "unit_cents": 10500, "total_cents": 31500 }
]
}
],
"meta": { "total": 16, "limit": 25, "offset": 0 }
}
kind is purchase, topup or renewal. Purchases and renewals are paid from the balance (payment_method balance) and are paid as soon as they are created; only top-ups are paid in crypto and can be awaiting_payment or expired. Amounts are integer cents of the currency. Orders are read-only through the API: there is no endpoint to create purchases or crypto invoices — add funds and buy in the dashboard.
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