New v5.5.1: balance-first checkout — add funds once, buy instantly. Read more
REST API

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#

HTTP
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"

Response:

JSON
{
  "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#

HTTP
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#

HTTP
POST /proxies/{id}/rotate

No body. Returns once the modem has a new address:

JSON
{
  "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#

HTTP
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
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:

JSON
{
  "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#

HTTP
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:

JSON
{
  "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#

HTTP
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
JSON
{
  "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