Skip to content
API Reference

ISP Orders API

Read your static ISP proxies from your own tools: the regions you can order with their price and live stock, your orders, and each order's proxy lines as JSON or as a plain text list. The data is the same as on the ISP page of the dashboard. Ordering, renewing and cancelling stay in the dashboard.

Orders, Ids and Authentication

  • Every endpoint needs your API key in the X-API-Key header (or as Authorization: Bearer YOUR_API_KEY), see Authentication. Base URL: https://api.zentislabs.com/api/v1.
  • An order is one purchase: a number of IPs in one region with one billing term. Its id is a 16-character code (for example 3f9a0c1d2e4b5a69), the same order the dashboard groups the IPs by.
  • All IPs of an order share one username and password. A line is host:port:username:password, exactly as the dashboard copies it. The proxies accept HTTP, HTTPS and SOCKS5.
  • status is active, expiring_soon (ends within 3 days) or expired.

List ISP Regions

GET/api/v1/isp/products

The regions you can order, with the price per IP for each billing term and the stock right now. An order is 5 to 1,000 IPs in steps of 5; maxQuantity is the most you can order at this moment (stock rounded down to a step) and available is false when fewer than 5 IPs are in stock. Stock changes during the day; the answer may be cached for 30 seconds.

Parameters

region
query · string · optional
One region code, for example DE or UK (GB also works).
bash
curl "https://api.zentislabs.com/api/v1/isp/products" \
-H "X-API-Key: YOUR_API_KEY"
json
// Abridged: one region shown
{
"success": true,
"billing": ["daily", "monthly"],
"note": "Prices are per IP before VAT. ...",
"count": 14,
"products": [
{
"region": "DE",
"name": "Germany",
"type": "static",
"prices": {
"daily": { "usd": 0.72, "eur": 0.65 },
"monthly": { "usd": 2.16, "eur": 1.94 }
},
"minQuantity": 5,
"maxQuantity": 240,
"step": 5,
"stock": 243,
"available": true
}
]
}

Errors

400
region is not a region we sell.
401
Missing or invalid API key, or the account is suspended.
429
More than 3,000 requests in a minute from this API key. Wait for Retry-After seconds.

List Your ISP Orders

GET/api/v1/isp/orders

Your ISP orders, newest first, without credentials. Use the id with the endpoints below.

Parameters

status
query · string · optional
all (default), active (active and expiring soon) or expired.
bash
curl "https://api.zentislabs.com/api/v1/isp/orders?status=active" \
-H "X-API-Key: YOUR_API_KEY"
json
{
"success": true,
"count": 1,
"orders": [
{
"id": "3f9a0c1d2e4b5a69",
"region": "DE",
"regionName": "Germany",
"quantity": 10,
"status": "active",
"billing": "monthly",
"autoRenew": true,
"subscription": true,
"swapAvailable": true,
"createdAt": "2026-11-02T09:14:03.000Z",
"expiresAt": "2026-12-02T09:14:03.000Z"
}
]
}

subscription: a monthly order paid by a subscription. autoRenew: the order renews at expiresAt. swapAvailable: the one free IP replacement of the order has not been used (replace in the dashboard).

Errors

400
status is not all, active or expired.
401
Missing or invalid API key, or the account is suspended.
429
More than 3,000 requests in a minute from this API key. Wait for Retry-After seconds.

Get One Order

GET/api/v1/isp/orders/:id

One order with the same fields as in the list, plus proxies: host, port, username, password and status of every IP.

Parameters

id
path · string · required
The order id from GET /isp/orders.
bash
curl "https://api.zentislabs.com/api/v1/isp/orders/3f9a0c1d2e4b5a69" \
-H "X-API-Key: YOUR_API_KEY"
json
// Abridged
{
"success": true,
"order": {
"id": "3f9a0c1d2e4b5a69",
"region": "DE",
"quantity": 10,
"status": "active",
"...": "...",
"proxies": [
{ "host": "203.0.113.10", "port": 8080, "username": "zl_user", "password": "s3cret", "status": "active" },
{ "host": "203.0.113.11", "port": 8080, "username": "zl_user", "password": "s3cret", "status": "active" }
]
}
}

Errors

404
No ISP order with this id on your account (an order of another account answers the same).
401
Missing or invalid API key, or the account is suspended.
429
More than 3,000 requests in a minute from this API key. Wait for Retry-After seconds.

Proxy Lines of an Order

GET/api/v1/isp/orders/:id/proxies

The proxy lines of one order. format=txt returns plain text (text/plain), one host:port:username:password per line, ready for tools that read a proxy list file.

Parameters

id
path · string · required
The order id.
format
query · string · optional
json (default) or txt.
bash
# Save the list as a file
curl "https://api.zentislabs.com/api/v1/isp/orders/3f9a0c1d2e4b5a69/proxies?format=txt" \
-H "X-API-Key: YOUR_API_KEY" -o isp-proxies.txt
# JSON
curl "https://api.zentislabs.com/api/v1/isp/orders/3f9a0c1d2e4b5a69/proxies" \
-H "X-API-Key: YOUR_API_KEY"
text
203.0.113.10:8080:zl_user:s3cret
203.0.113.11:8080:zl_user:s3cret
json
{
"success": true,
"orderId": "3f9a0c1d2e4b5a69",
"status": "active",
"count": 2,
"proxies": [
{ "host": "203.0.113.10", "port": 8080, "username": "zl_user", "password": "s3cret", "status": "active" },
{ "host": "203.0.113.11", "port": 8080, "username": "zl_user", "password": "s3cret", "status": "active" }
],
"lines": ["203.0.113.10:8080:zl_user:s3cret", "203.0.113.11:8080:zl_user:s3cret"]
}

Errors

400
format is not json or txt.
404
No ISP order with this id on your account (an order of another account answers the same).
401
Missing or invalid API key, or the account is suspended.
429
More than 3,000 requests in a minute from this API key. Wait for Retry-After seconds.

Example: Export Every Active Order

python
import requests
API = "https://api.zentislabs.com/api/v1"
HEADERS = {"X-API-Key": "YOUR_API_KEY"}
orders = requests.get(f"{API}/isp/orders", params={"status": "active"}, headers=HEADERS, timeout=30).json()["orders"]
for order in orders:
r = requests.get(f"{API}/isp/orders/{order['id']}/proxies", params={"format": "txt"}, headers=HEADERS, timeout=30)
r.raise_for_status()
with open(f"isp-{order['region']}-{order['id']}.txt", "w") as f:
f.write(r.text)
print(order["region"], order["quantity"], "IPs, expires", order["expiresAt"])