REST API for managing your mobile proxies from your own application. Authenticate once with a bearer key, get and rotate proxies, pull usage. All proxies under your account; tenant-isolated.
Every request needs an Authorization header carrying your API key:
Authorization: Bearer qp_live_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
Keys are issued by your QuantumProxy operator. Each key is tied to one account; it only sees proxies under that account. Keep your key secret — anyone with it can rotate your proxies and read your usage. Revoke + re-issue at any time.
https://app.quantumhproxy.com/v1
curl -H "Authorization: Bearer qp_live_..." \
https://app.quantumhproxy.com/v1/proxies
Returns an array of every proxy in your account with current online state, exit IP, delivery strings (passwords masked), auto-rotate setting, and expiry.
curl -H "Authorization: Bearer qp_live_..." \
https://app.quantumhproxy.com/v1/proxies/ap-ggMrblS6
curl -X POST -H "Authorization: Bearer qp_live_..." \
https://app.quantumhproxy.com/v1/proxies/ap-ggMrblS6/rotate
Returns immediately with {"ok":true,"queued":true}. The new IP appears on the proxy within ~10 seconds. If the proxy has a per-proxy rotation rate-limit and you hit it inside the window, you get 429 with Retry-After header.
curl -X PATCH -H "Authorization: Bearer qp_live_..." \
-H "Content-Type: application/json" \
-d '{"label":"reseller PA #14","auto_rotate_minutes":30}' \
https://app.quantumhproxy.com/v1/proxies/ap-ggMrblS6
Allowed fields: label, auto_rotate_minutes. Other fields (ports, passwords, expiry, enable/disable) are operator-only.
Returns daily byte totals for the last N days (default 30, max 365).
Returns the last N rotations (default 50, max 500) with status ok/fail and the new IP on success.
curl -H "Authorization: Bearer $API_KEY" \
https://app.quantumhproxy.com/v1/devices
Phone-level view scoped to your account. Returns id, name, online status, rotating flag, last seen timestamp, last known exit IP, lifetime bytes, and the AP id(s) this device serves. Use this for fleet monitoring; use /v1/proxies for proxy-level info.
Returns successful IP changes for a proxy with date + ipv4 fields. Optional from/to unix-second filters. Mirrors iProxy's ip-history shape.
5-minute (default) buckets of online/offline/nodata status. Default window: last 24 hours, max 24 hours per request. Bucket size 60..3600 seconds. Useful for SLA dashboards.
Response: {"bucket_seconds":300,"from":...,"to":...,"uptime":[{"date":"...","status":"online|offline|nodata"}]}
curl -X POST -H "Authorization: Bearer $API_KEY" \
-H "Content-Type: application/json" \
-d '{"action":"changeip"}' \
https://app.quantumhproxy.com/v1/proxies/ap-XXXXXXXX/command
iProxy-shaped action endpoint. Today supports changeip (alias rotate). Returns {"message":"changeip command has been sent"}. Unsupported actions return HTTP 501 so client code can detect feature gaps cleanly. Future: reboot, refresh, toggle_proxy when the APK lands matching handlers.
Step 1 — get your connection id. List your connections and copy the id of the one you want to move. The ap-YOURID below is a placeholder: replace it with a real id from this list, or you will get 404 proxy not found.
curl -H "Authorization: Bearer $API_KEY" \
https://app.quantumhproxy.com/v1/proxies
# iProxy shape: GET https://app.quantumhproxy.com/api/console/v1/connection
Step 2 — mint the pin for that id (valid 10 minutes, single use).
curl -X POST -H "Authorization: Bearer $API_KEY" \
-H "Content-Type: application/json" \
-d '{"ap_id":"ap-YOURID"}' \
https://app.quantumhproxy.com/v1/pairing-codes
Response: {"code":"123456","ap_id":"ap-YOURID","expires_at":1700000000,"relay_url":"wss://..."}
iProxy-compatible equivalent — the id goes in the URL and no body is needed:
curl -X POST -H "Authorization: Bearer $API_KEY" \
https://app.quantumhproxy.com/api/console/v1/connection/ap-YOURID/pin-code
Response: {"pincode":"123456","expires_at":"...","relay_url":"wss://..."}
Then on the new phone: open the QuantumProxy Android app, run the setup wizard, and enter the 6-digit pin at the Pairing step. The proxy re-binds to that phone.
Moving a live connection (maintenance, minimal downtime): generate a pin for the proxy you want to move and enter it on the replacement phone. The proxy keeps the same SOCKS5/HTTP ports, the same username & password, and the same rotation URL — your customer's connection string never changes. Downtime is only the few seconds the new phone takes to pair. Same flow for swapping failed hardware or bringing new capacity online.
import requests
API_KEY = "qp_live_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
HEADERS = {"Authorization": f"Bearer {API_KEY}"}
BASE = "https://app.quantumhproxy.com/v1"
# List proxies
proxies = requests.get(f"{BASE}/proxies", headers=HEADERS).json()
for p in proxies:
print(p["id"], p["label"], "online" if p["online"] else "offline", p.get("exit_ip"))
# Rotate one
requests.post(f"{BASE}/proxies/ap-ggMrblS6/rotate", headers=HEADERS)
const API_KEY = "qp_live_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx";
const BASE = "https://app.quantumhproxy.com/v1";
const headers = { Authorization: `Bearer ${API_KEY}` };
// List proxies
const proxies = await fetch(`${BASE}/proxies`, { headers }).then(r => r.json());
console.log(proxies);
// Rotate
await fetch(`${BASE}/proxies/ap-ggMrblS6/rotate`, { method: "POST", headers });
{
"error": "machine_readable_code",
"message": "Human readable description.",
"request_id": "req-A2bC3dE4"
}
| Status | Code | Meaning |
|---|---|---|
| 401 | unauthorized | Missing or invalid API key. |
| 401 | key_revoked | API key has been revoked. Mint a new one. |
| 403 | account_locked | Account is locked. Contact operator. |
| 404 | not_found | Proxy does not exist or is not in your account. |
| 400 | invalid_request | Body or query parameter is malformed. |
| 429 | rate_limited | Per-proxy or per-key rate limit hit. Retry-After header tells you when. |
| 500 | internal | Server error. Quote request_id to support. |
60 write requests (POST/PATCH) per minute per key. 600 reads per minute. Hitting the limit returns 429 with the Retry-After header.
For partners with existing iProxy integrations: mirror routes and JSON shapes are available at /api/console/v1/*. Same auth (Bearer API key), same scoping. In most cases you can swap the iProxy base URL with https://app.quantumhproxy.com/api/console/v1 and your existing code keeps working.
| iProxy path | Native equivalent |
|---|---|
GET /connection | GET /v1/proxies |
GET /connection/{id} | GET /v1/proxies/{id} |
GET /connection-status | GET /v1/devices |
POST /connection/{id}/command-push | POST /v1/proxies/{id}/command |
GET /connection/{id}/traffic/by-day | GET /v1/proxies/{id}/usage |
GET /connection/{id}/uptime | GET /v1/proxies/{id}/uptime |
GET /connection/{id}/ip-history | GET /v1/proxies/{id}/ip-history |
POST /connection/{id}/pin-code | POST /v1/pairing-codes |
Action set on command-push: changeip is wired today. reboot, refresh, toggle_proxy, find_my_device, speed_test, upgrade_app, debug_report, fix_lte, refresh_fingerprint are recognized but return HTTP 501 ({"error":"unsupported_action"}) until the matching APK opcodes ship — your code can detect feature gaps from the error code.
Known iProxy endpoints we don't alias: SMS history (no phone-side reader), traffic-ACL rules (no enforcement engine), OpenVPN access (we're a proxy, not a VPN), plan/billing (we sell out-of-band).
This is v1. Future versions live at /v2/, /v3/, etc. v1 endpoints will be supported for at least 12 months past any successor release.
Questions? Reach the operator who issued your key.