API for developers
Manage your plans from your own scripts and services: check remaining traffic, get proxy lines, whitelist IP addresses and buy more gigabytes from your balance without opening the dashboard.
Quick start
Create a key in the dashboard: Settings → API. The full key is shown only once, so save it right away in a password manager or an environment variable. Up to 5 keys per account; revoke a key you no longer need in the same place.
All URLs start with https://prokso.com/api/v1. Responses are JSON, money is in US dollar cents, traffic is in bytes and GB, and times are UTC in ISO 8601.
curl https://prokso.com/api/v1/me \
-H "Authorization: Bearer $PROKSO_KEY"
Authentication
Send the key in the Authorization: Bearer <key> header or in X-API-Key. Your browser dashboard session does not work for the API. Requests from a blocked or deleted account and with a revoked key get a 401 response.
Limits
- Up to 60 requests per minute per key. Beyond that you get 429 and a
Retry-Afterheader with the number of seconds to wait. - Up to 20 failed authentication attempts per 10 minutes from one IP address (a /64 network for IPv6), then 429.
- At most 1,000 proxy lines per request and 5 IP addresses in a plan whitelist.
Errors
Errors always come in the same format with a matching HTTP status:
{"error": {"code": "insufficient_balance", "message": "Not enough money on the balance. Top it up in the dashboard."}}
| HTTP | code | Meaning |
|---|---|---|
| 400 | validation_error, invalid_json, below_minimum_order | Invalid parameters, or the order does not meet the conditions from GET /api/v1/prices. |
| 401 | unauthorized | No key, wrong key or revoked key. |
| 402 | insufficient_balance | Not enough money on the balance. Nothing was charged. |
| 404 | not_found | The plan or order does not exist or belongs to another account. |
| 409 / 422 | idempotency_in_progress, idempotency_key_reused | A request with this Idempotency-Key is still running, or the key was used with different data. |
| 429 | rate_limited | Rate limit exceeded: wait as many seconds as Retry-After says. |
| 503 | service_unavailable | The proxy network is temporarily not responding: retry in a minute. |
Purchases without duplicates
Purchases through the API are paid only from your balance (top it up in the dashboard). To make sure a retry after a dropped connection does not buy gigabytes twice, add an Idempotency-Key header with any unique string of up to 100 characters. For 24 hours a repeated request with the same key returns the first order (with the Idempotent-Replayed: true header) instead of creating a new one. If a request is rejected (for example, not enough money), the key can be used again.
Endpoints
GET /api/v1/me
Account email and balance.
curl https://prokso.com/api/v1/me \
-H "Authorization: Bearer $PROKSO_KEY"
{
"email": "you@example.com",
"balance_cents": 4250,
"balance": "$42.50",
"currency": "USD"
}
GET /api/v1/prices
Prices per 1 GB and single-order conditions for each proxy type, the same as in the dashboard.
curl https://prokso.com/api/v1/prices -H "Authorization: Bearer $PROKSO_KEY"
{
"currency": "USD",
"max_gb_per_order": 5000,
"pools": {
"residential": {
"tiers": [
{
"from_gb": 1,
"price_per_gb_cents": 159,
"price_per_gb": "$1.59"
}
],
"min_order_cents": 100,
"min_order": "$1.00",
"min_gb": 1
},
"mobile": {...},
"datacenter": {...}
}
}
GET /api/v1/plans
All plans: type, status (active, paused, limited), login, GB bought and traffic left.
curl https://prokso.com/api/v1/plans -H "Authorization: Bearer $PROKSO_KEY"
{
"plans": [{
"id": 17, "label": "Instagram UA", "pool": "residential",
"status": "active", "paused": false, "login": "a1b2c3d4", "gb_bought": 10,
"traffic": {"left_bytes": 8053063680, "used_bytes": 2684354560, "total_bytes": 10737418240,
"left_gb": 7.5, "used_gb": 2.5, "total_gb": 10.0},
"created_at": "2026-10-05T09:12:44Z"
}]
}
GET /api/v1/plans/{id}
One plan: host, ports, login and password, IP whitelist, pool settings.
curl https://prokso.com/api/v1/plans/17 -H "Authorization: Bearer $PROKSO_KEY"
{
"id": 17, "label": "Instagram UA", "pool": "residential", "status": "active", ...,
"host": "gw.prokso.com", "login": "a1b2c3d4", "password": "********",
"ports": {"http_rotating": 823, "socks5_rotating": 824, "sticky_from": 10000, "sticky_to": 20000},
"ip_whitelist": ["203.0.113.7"], "ip_whitelist_max": 5,
"pool_settings": {"countries": [], "exclude_countries": [], "exclude_asn": [], "anonymous_filter": false,
"rotation_interval_minutes": null, "blocked_hosts": [], "traffic_limit": null}
}
POST /api/v1/plans
A new plan paid from your balance. pool is residential, mobile or datacenter; gb is an integer; label and promo are optional.
curl -X POST https://prokso.com/api/v1/plans \
-H "Authorization: Bearer $PROKSO_KEY" \
-H "Content-Type: application/json" \
-H "Idempotency-Key: 6f1c2a90-order-1" \
-d '{"pool": "residential", "gb": 10, "label": "Instagram UA"}'
201 Created
{
"order": {"id": 311, "kind": "new", "status": "fulfilled", "pool": "residential", "gb": 10,
"plan_id": 18, "amount_cents": 1590, "amount": "$15.90", ...},
"plan": {"id": 18, "login": "e5f6a7b8", ...},
"balance_cents": 2350, "balance": "$23.50"
}
POST /api/v1/plans/{id}/topup
Add GB to an existing plan from your balance. Same rules as for a new plan.
curl -X POST https://prokso.com/api/v1/plans/17/topup \
-H "Authorization: Bearer $PROKSO_KEY" \
-H "Idempotency-Key: 6f1c2a90-topup-1" \
-d '{"gb": 50}'
201 Created
{"order": {"id": 312, "kind": "topup", "status": "fulfilled", "gb": 50, ...}, "plan": {...}, ...}
GET /api/v1/plans/{id}/proxies
Proxy lines for a plan, as JSON or plain text.
Add the Accept: text/plain header to get plain text, one proxy per line.
curl "https://prokso.com/api/v1/plans/17/proxies?country=ua&count=3&protocol=http&session=sticky" \
-H "Authorization: Bearer $PROKSO_KEY"
{
"lines": [
"a1b2c3d4__cr.ua:********@gw.prokso.com:10000",
"a1b2c3d4__cr.ua:********@gw.prokso.com:10001",
"a1b2c3d4__cr.ua:********@gw.prokso.com:10002"
],
"count": 3,
"precise_geo": false
}
GET /api/v1/plans/{id}/whitelist
POST /api/v1/plans/{id}/whitelist
DELETE /api/v1/plans/{id}/whitelist?ip=…
Plan IP whitelist: list, add (POST with an ip field) and remove (DELETE with an ip parameter).
curl -X POST https://prokso.com/api/v1/plans/17/whitelist \
-H "Authorization: Bearer $PROKSO_KEY" \
-d '{"ip": "203.0.113.7"}'
{"ips": ["203.0.113.7"], "max": 5}
POST /api/v1/plans/{id}/pause
POST /api/v1/plans/{id}/resume
Pause a plan (proxies stop working, no traffic is used) or resume it.
curl -X POST https://prokso.com/api/v1/plans/17/pause -H "Authorization: Bearer $PROKSO_KEY"
{"id": 17, "status": "paused", "paused": true, ...}
PATCH /api/v1/plans/{id}
Rename a plan (label, up to 60 characters).
curl -X PATCH https://prokso.com/api/v1/plans/17 \
-H "Authorization: Bearer $PROKSO_KEY" \
-d '{"label": "Ads Poland"}'
{"id": 17, "label": "Ads Poland", ...}
GET /api/v1/orders
GET /api/v1/orders/{id}
Recent account orders (limit up to 100) and a single order by ID.
curl "https://prokso.com/api/v1/orders?limit=20" -H "Authorization: Bearer $PROKSO_KEY"
{"orders": [{"id": 312, "kind": "topup", "status": "fulfilled", "gb": 50, "amount": "$79.50", ...}]}
Proxy generator parameters
The same rules as the generator in the dashboard (advanced mode). Precise geo (state, city, ZIP, provider) uses traffic at double rate.
| Parameter | Value |
|---|---|
country | Country code (ua) or up to 10 comma-separated codes; empty means any country. |
count | Number of lines, 1 to 1,000 (default 10). For session=rotating one line is enough. |
protocol | http or socks5. |
session | sticky: a separate port 10000 to 20000 per line keeping the same IP; rotating: a new IP for every request (port 823 HTTP, 824 SOCKS5); session: the rotating port with a session ID in the login. |
format | lp@hp, hp:lp, url, hp@lp, lp:hp or hp (host and port only, for IP-based access). |
start_port | First port for sticky, 10000 to 20000. |
state, city, zip, asn | Precise geo and provider (ASN) for a single country; state is US only. |
exclude_state, exclude_city, exclude_zip | Exclude states, cities or ZIP codes. |
session_prefix | Prefix for session IDs in session mode, Latin letters and digits. |