Quick Start
Create an API Token
Console → API Management → New Token
Check balance / pricing
GET /balance and /offerings to check account balance, live stock, and per-region pricing
Place an order
POST /purchase submits an order; the amount is debited from your balance
Poll order status
GET /orders/{order_no} until status=completed (about 30-60s)
Get connection credentials
Response includes vless_link / socks5_url / http_url for all three protocols
Wire it up
Drop the credentials into V2RayN / curl / any supported client
Authentication
https://proxbits.com/api/openGET /api/open/balance HTTP/1.1 Host: proxbits.com Authorization: Bearer YOUR_API_TOKEN Content-Type: application/json
// Standard response envelope
{
"code": 200, // 200 = success, anything else = failure
"msg": "SUCCESS",
"data": { /* ... */ }
}
// Common error codes
// 401 — token invalid or missing
// 403 — permission denied (account disabled, etc.)
// 404 — resource not found (wrong order/IP id, etc.)
// 400 — bad request / insufficient balanceAvailable IP Types
GET /api/open/offerings.| Type code | Name | Available regions | Notes |
|---|---|---|---|
| static_residential | Static Residential ISP | United States (US) | 30 / 60 / 90-day cycles, dedicated IP |
API Reference
curl 'https://proxbits.com/api/open/balance' \ -H 'Authorization: Bearer YOUR_API_TOKEN'
{
"code": 200,
"msg": "SUCCESS",
"data": {
"balance": 102.20,
"currency": "USD"
}
}curl 'https://proxbits.com/api/open/offerings' \ -H 'Authorization: Bearer YOUR_API_TOKEN'
{
"code": 200,
"msg": "SUCCESS",
"data": [
{
"area_id": 16,
"country_name": "United States",
"in_stock": true,
"upstream_price_30d": 4.00,
"price_30d": 8.00,
"price_60d": 16.00,
"price_90d": 24.00
}
// ... 32+ countries
]
}curl 'https://proxbits.com/api/open/pricing' \ -H 'Authorization: Bearer YOUR_API_TOKEN'
{
"code": 200,
"msg": "SUCCESS",
"data": [
{
"area_id": 16,
"country": "United States",
"country_name": "United States",
"ip_type": "static_residential",
"price_per_month_usd": 8.00
}
// ... 32+ countries
]
}| Name | Required | Type | Description |
|---|---|---|---|
area_id | Yes | int | Country id (e.g. US=16, HK=101, JP=36 — full list via GET /api/open/offerings) |
qty | No | int | Quantity, 1-50 (default 1) |
duration_months | No | int | Duration, 1/2/3 (30/60/90 days, default 1) |
auto_renewal | No | bool | Auto-renew (default false) |
curl -X POST 'https://proxbits.com/api/open/purchase' \
-H 'Authorization: Bearer YOUR_API_TOKEN' \
-H 'Content-Type: application/json' \
-d '{
"area_id": 16,
"qty": 1,
"duration_months": 1,
"auto_renewal": false
}'{
"code": 200,
"msg": "SUCCESS",
"data": {
"order_no": "LA-20260520093000-A1B2C3",
"order_id": "uuid-xxx",
"status": "processing",
"qty": 1,
"estimated_amount_usd": 8.00
}
}curl 'https://proxbits.com/api/open/orders/LA-20260520093000-A1B2C3' \ -H 'Authorization: Bearer YOUR_API_TOKEN'
{
"code": 200,
"msg": "SUCCESS",
"data": {
"order_no": "LA-20260520093000-A1B2C3",
"status": "completed",
"qty": 1,
"amount_usd": 8.00,
"created_at": "2026-05-20T09:30:00Z",
"ips": [
{
"id": "uuid-of-proxy-ip",
"real_ip": "168.158.175.227",
"country": "US",
"relay_ip": "5.78.45.83",
"vless_port": 443,
"socks5_port": 1080,
"http_port": 8080,
"relay_user": "la-u583f6e3b-44b02a74",
"relay_password": "PVZLsW6t6HwAz4N7BVSOSznAz4433H5O",
"vless_uuid": "fdbf84fb-b473-4ec7-9d05-9d83fb8a986c",
"vless_link": "vless://...?security=reality&...",
"socks5_url": "socks5://la-u...:PVZ...@5.78.45.83:1080",
"http_url": "http://la-u...:PVZ...@5.78.45.83:8080",
"reality_public_key": "MrwGZqEZO3w5T1g5aetvueYf7jO4UVBCdJxaSqLw6kE",
"reality_short_id": "3ef1d4113fb6de71",
"reality_sni": "www.microsoft.com",
"expire_at": "2026-06-20T09:30:00Z",
"status": "active",
"auto_renewal": false
}
]
}
}| Name | Required | Type | Description |
|---|---|---|---|
status | No | string | active / expired / invalid |
page | No | int | Page number (default 1) |
page_size | No | int | Page size (default 20, max 100) |
curl 'https://proxbits.com/api/open/ips?status=active&page=1&page_size=20' \ -H 'Authorization: Bearer YOUR_API_TOKEN'
{
"code": 200,
"msg": "SUCCESS",
"data": {
"total": 1,
"page": 1,
"page_size": 20,
"items": [ /* same shape as orders/{order_no} ips[] */ ]
}
}curl 'https://proxbits.com/api/open/ips/uuid-of-proxy-ip' \ -H 'Authorization: Bearer YOUR_API_TOKEN'
{
"code": 200,
"msg": "SUCCESS",
"data": { /* same shape as the ip object in orders detail */ }
}| Name | Required | Type | Description |
|---|---|---|---|
ip_ids | Yes | string[] | List of IP ids to renew |
months | No | int | Renewal duration 1/2/3 months (default 1) |
curl -X POST 'https://proxbits.com/api/open/renew' \
-H 'Authorization: Bearer YOUR_API_TOKEN' \
-H 'Content-Type: application/json' \
-d '{
"ip_ids": ["uuid-1", "uuid-2"],
"months": 1
}'{
"code": 200,
"msg": "SUCCESS",
"data": {
"order_no": "LA-R-20260520093500-X9Y8Z7",
"status": "completed",
"amount_usd": 16.00,
"qty": 2
}
}Full Examples
import time
import requests
API_BASE = "https://proxbits.com"
HEADERS = {"Authorization": "Bearer YOUR_API_TOKEN"}
def main():
# 1. Check balance
bal = requests.get(f"{API_BASE}/api/open/balance", headers=HEADERS).json()
print(f"Balance: ${bal['data']['balance']:.2f}")
# 2. Fetch live offerings and choose an in-stock area_id
offerings = requests.get(
f"{API_BASE}/api/open/offerings", headers=HEADERS
).json()["data"]
choice = next(item for item in offerings if item["in_stock"])
area_id = choice["area_id"]
print(f"Selected region: {choice['country_name']} (area_id={area_id})")
# 3. Order 1 IP for 1 month
r = requests.post(
f"{API_BASE}/api/open/purchase",
headers={**HEADERS, "Content-Type": "application/json"},
json={"area_id": area_id, "qty": 1, "duration_months": 1},
).json()
order_no = r["data"]["order_no"]
print(f"Order placed: {order_no}, estimated ${r['data']['estimated_amount_usd']}")
# 4. Poll the order (up to 3 minutes)
for _ in range(60):
info = requests.get(
f"{API_BASE}/api/open/orders/{order_no}", headers=HEADERS
).json()
status = info["data"]["status"]
if status == "completed":
for ip in info["data"]["ips"]:
print(f"\nIP {ip['real_ip']} ({ip['country']}):")
print(f" VLESS: {ip['vless_link']}")
print(f" SOCKS5: {ip['socks5_url']}")
print(f" HTTP: {ip['http_url']}")
break
if status == "failed":
print(f"Purchase failed: {info['data'].get('error')}")
break
time.sleep(3)
main()FAQ
A: A single IP serves all three protocols with shared credentials (same user/password) routing to the same egress IP. VLESS+Reality offers the strongest anti-censorship resilience and is best for v2rayN / Clash users; SOCKS5 / HTTP suit fingerprint browsers (AdsPower / Multilogin) and command-line tools (curl / requests).
A: docs.api.faq.a2
A: No. Renewal only extends expire_at — UUID / password / egress IP all stay the same, so clients don't need to be reconfigured.
A: For security, the underlying socks5 username/password is never exposed to customers. All traffic flows through the ProxBits relay node using credentials we issue, preventing credential leakage and abuse.
A: Currently supported durations: 30 / 60 / 90 days (duration_months = 1 / 2 / 3).
A: Up to 50 per order; no account-level cap (limited by balance). Bulk orders provision sequentially — expect about 30s per IP.
