REST API overview
Base URL, authentication, versioning policy, rate limits, conventions and the complete endpoint list of the Proxuno REST API v1.
On this page
The REST API exposes everything you need to run proxies from code: list and configure proxies, rotate mobile IPs, read usage, generate residential endpoints and read your orders. Purchases and top-ups stay in the dashboard: there is no endpoint to create a purchase or a crypto invoice.
The public API uses version v1. Changes are additive only: new endpoints, new optional parameters and new response fields can appear; existing fields are never removed, renamed or retyped within v1. Write clients that ignore unknown fields.
Base URL#
https://proxuno.com/api/v1
Use HTTPS in production: an API key sent over plain HTTP must be considered leaked. Unknown paths under /api/v1 answer 404 with code not_found.
Authentication#
Create a key in Dashboard → API and send it with every request, either as a bearer token or in X-API-Key:
GET /api/v1/me HTTP/1.1
Host: proxuno.com
Authorization: Bearer pxl_live_7Gq2Xk9Rm4Tn8Vw1Zc5Hb3Jd6Lf0Ps2A
Details, key rotation and storage advice: Authentication.
Conventions#
| Topic | Rule |
|---|---|
| Format | JSON in and out, UTF-8. Send Content-Type: application/json with a body. |
| Field names | snake_case. |
| Dates | ISO 8601 in UTC, e.g. 2026-09-30T14:05:12.000Z. Date-only parameters use YYYY-MM-DD. |
| Money | Integer cents of the account currency (10500 = $105) with a separate currency field ("USD"). |
| Traffic | Integer bytes. 1 GB = 1,000,000,000 bytes, as billed. |
| Countries | ISO 3166-1 alpha-2, lowercase (fr, gb, de). |
| Ids | Proxies use numeric ids; orders use their reference (ORD-2026-01482). |
| Envelope | Every success response is {"data": …}. Lists add "meta" (totals, applied filters, pagination). |
| Version header | Every response carries X-API-Version: v1. |
| Ownership | Every endpoint only ever returns resources of the key's account. Another account's id answers 404, not 403. |
Endpoints#
| Method | Path | Purpose |
|---|---|---|
GET |
/me |
Account summary: email, balance, residential login and traffic left. |
GET |
/proxies |
Mobile and static proxies. Filters: type, country, status. |
GET |
/proxies/{id} |
One proxy with credentials, current IP and rotation settings. |
POST |
/proxies/{id}/rotate |
Rotate a mobile proxy's IP. |
PATCH |
/proxies/{id} |
Change rotation_interval_min and auto_renew. |
GET |
/usage |
Daily traffic and requests between from and to. |
GET |
/residential/endpoints |
Generate residential endpoints (country, city, sessions, format). |
GET |
/countries |
Countries, cities and carriers with product availability. |
GET |
/orders |
Your orders with status and totals. |
GET |
/rotate/{token} |
Rotation link — outside /api/v1, needs no key. |
Reference pages: Proxies, usage & orders · Residential endpoints & countries · Errors & rate limits.
Rate limits#
Each API key may send 60 requests per minute. Every response carries:
| Header | Meaning |
|---|---|
X-RateLimit-Limit |
Requests allowed in the current window (60). |
X-RateLimit-Remaining |
Requests left in the window. |
X-RateLimit-Reset |
When the window resets, as a Unix timestamp in seconds. |
Over the limit, the API answers 429 with code rate_limited and a Retry-After header. Mobile rotation has its own 10-second cooldown per proxy on top of this — see Errors & rate limits.
A first call#
curl -s https://proxuno.com/api/v1/me -H "Authorization: Bearer $PROXUNO_API_KEY"
import os, httpx
client = httpx.Client(
base_url="https://proxuno.com/api/v1",
headers={"Authorization": f"Bearer {os.environ['PROXUNO_API_KEY']}"},
timeout=30,
)
print(client.get("/me").json())
const api = (path, init = {}) =>
fetch(`https://proxuno.com/api/v1${path}`, {
...init,
headers: { Authorization: `Bearer ${process.env.PROXUNO_API_KEY}`, ...init.headers },
}).then(async (r) => {
const body = await r.json();
if (!r.ok) throw Object.assign(new Error(body.error.message), { code: body.error.code, status: r.status });
return body;
});
console.log(await api("/me"));
<?php
$ch = curl_init("https://proxuno.com/api/v1/me");
curl_setopt_array($ch, [
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => ["Authorization: Bearer " . getenv("PROXUNO_API_KEY")],
]);
$me = json_decode(curl_exec($ch), true);
print_r($me);
Response:
{
"data": {
"id": 3187,
"email": "[email protected]",
"name": null,
"locale": "en",
"email_verified": true,
"created_at": "2025-11-04T09:12:44.000Z",
"balance": { "cents": 7550, "currency": "USD" },
"proxy_auth_mode": "userpass",
"proxies": { "mobile_active": 3, "static_active": 5, "expiring_soon": 1 },
"residential": {
"login": "px4k2m9q7a",
"host": "resi.gw.proxuno.com",
"ports": { "http": 7000, "socks5": 7001 },
"bytes_total": 25000000000,
"bytes_used": 10180000000,
"bytes_remaining": 14820000000,
"active_packages": 1,
"next_expiry": "2026-11-28T10:41:07.000Z"
}
}
}
GET /me does not include the residential password; it is embedded in the lines (or in the password field with format=json) returned by GET /residential/endpoints. Regenerate it from Dashboard → Residential if it leaks.
Changes to v1#
Additions are listed in the changelog under the API tag. The most recent: extended residential endpoint generation (format, protocol, count up to 1,000) in v5.4.2, September 2026.
Public catalogue feed#
The public pricing feed lists current USD prices by mobile country and duration, residential traffic tier and static ISP quantity bracket. It also gives the catalogue date, crypto options and balance top-up limits; it requires no API key.
Use the HTML price list or its Markdown representation to read the same prices with their purchase and refund conditions.
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