ProxyWorld API

What you do in the dashboard, you can also do from code. Read your balance, check prices, order from your balance and get proxy usernames with options, all through a single REST API.

New here? Follow these steps

  1. 1Sign up with an email and password, or with a token, and open the dashboard.
  2. 2Issue an API key on the Connect tab. The full key appears only once, at the moment you issue it, so save it right there.
  3. 3Put the key in the Authorization header of every request that needs one.
  4. 4Call /account first to make sure the key is accepted, then place orders with /orders.

How does authentication work?

Requests that touch your own account (account, orders, proxy-user) need an API key. Send it in the header as Authorization: Bearer pwk_... Prices, countries and quotes are open to everyone and can be called without a key.

ProxyWorld servers never store the key itself, only a hash of it. If you lose a key, make a new one in the dashboard, and the old one is blocked right away. Put keys in server side code only. If a key ends up in code that runs in a browser or in a public repository, someone else can use it.

HTTP header
Authorization: Bearer pwk_your_api_key

Base URL and data format

Base URL
https://proxyworld.shop/api/v1
Request and response bodies
application/json
Amounts
USD as a number, for example 1058.50
Timestamps
ISO 8601 (UTC)

How many calls can I make?

Each API key can make 60 calls per minute. Public endpoints called without a key allow 60 calls per minute for each IP. Go over that and you get HTTP 429. Wait about a minute, then try again.

What comes back when something fails?

You get an HTTP status code and a JSON body holding a short error code and an explanation.

Example
{
  "error": {
    "code": "insufficient_balance",
    "message": "Your balance is too low for this order. Top up in the dashboard."
  }
}
code
bad_requestHTTP 400A required value is missing, or a value was sent that this product does not accept.
unauthorizedHTTP 401The API key is missing or is not a valid key.
insufficient_balanceHTTP 402Your balance is less than the order total. No money left your balance.
not_foundHTTP 404Your account has no order with this number.
rate_limitedHTTP 429You went over the number of calls allowed per minute.
server_errorHTTP 500The server could not finish the request. No money left your balance.

Endpoints

View your account

GET/api/v1/accountAPI key needed

Returns how you sign in (login: email or token), your email, balance, proxy host and ports, proxy username and password, and Allowed IPs. For accounts created with a token, email is null.

Request
curl https://proxyworld.shop/api/v1/account \
  -H "Authorization: Bearer pwk_your_api_key"
Response
{
  "login": "email",
  "email": "you@example.com",
  "balance_usd": 1300,
  "proxy": {
    "host": "gate.proxyworld.shop",
    "http_port": 6100,
    "socks5_port": 6200,
    "username": "pwexample1",
    "password": "your_password"
  },
  "allowed_ips": [
    "203.0.113.10"
  ]
}

View products and prices

GET/api/v1/productsWorks without a key

Returns the order range for each product, the unit price for each quantity tier and the period discounts. It uses the same price table as the pricing page.

Request
curl https://proxyworld.shop/api/v1/products
Response
{
  "currency": "USD",
  "prices_as_of": "2026-10-31",
  "products": [
    {
      "id": "unlimited",
      "unit": "day",
      "quantity": {
        "meaning": "days",
        "min": 1,
        "max": 365
      },
      "...": "..."
    },
    {
      "id": "residential",
      "unit": "gb",
      "...": "..."
    }
  ]
}

Countries and cities

GET/api/v1/countriesWorks without a key

Returns the countries you can pick for each product, along with the city values to use in the -city- username option.

NameMeaning
productOptionalOne of unlimited, residential, isp, datacenter. If omitted, residential is used.
Request
curl "https://proxyworld.shop/api/v1/countries?product=datacenter"
Response
{
  "product": "datacenter",
  "countries": [
    {
      "code": "us",
      "name": "United States",
      "region": "americas",
      "datacenter": true,
      "cities": [
        {
          "name": "New York",
          "value": "new_york"
        },
        {
          "name": "Los Angeles",
          "value": "los_angeles"
        }
      ]
    }
  ]
}

Get a quote

POST/api/v1/quoteWorks without a key

Works out the order total without touching your balance. Send the same body you would send to place the order.

NameMeaning
productRequiredOne of unlimited, residential, isp, datacenter.
quantityRequiredHow much to order: days for unlimited (1~365), GB for residential (5~5,000), number of IPs for isp (1~1,000) or datacenter (5~5,000).
concurrencyOptionalUnlimited only. Pick one of 200, 500, 1000, 2000.
bandwidthOptionalUnlimited only, in Mbps. One of 100, 200, 500, 1000.
monthsOptionalisp and datacenter only. One of 1, 3, 6, 12.
countryOptionalisp and datacenter only. A two-letter country code such as jp. The accepted values are listed in /countries.
Request
curl -X POST https://proxyworld.shop/api/v1/quote \
  -H "Content-Type: application/json" \
  -d '{"product":"unlimited","quantity":30,"concurrency":1000,"bandwidth":200}'
Response
{
  "product": "unlimited",
  "quantity": 30,
  "unit_price_usd": 8.05,
  "unit": "day",
  "total_usd": 241.5
}

Place an order

POST/api/v1/ordersAPI key needed

Deducts the total from your balance and creates the order. It starts as pending (activating) and turns active once it is ready. An order that cannot be activated becomes refunded, and everything you paid goes back to your balance. If your balance is too low, you get 402.

NameMeaning
productRequiredOne of unlimited, residential, isp, datacenter.
quantityRequiredHow much to order: days for unlimited (1~365), GB for residential (5~5,000), number of IPs for isp (1~1,000) or datacenter (5~5,000).
concurrencyOptionalUnlimited only. Pick one of 200, 500, 1000, 2000.
bandwidthOptionalUnlimited only, in Mbps. One of 100, 200, 500, 1000.
monthsOptionalisp and datacenter only. One of 1, 3, 6, 12.
countryOptionalisp and datacenter only. A two-letter country code such as jp. The accepted values are listed in /countries.
Request
curl -X POST https://proxyworld.shop/api/v1/orders \
  -H "Authorization: Bearer pwk_your_api_key" \
  -H "Content-Type: application/json" \
  -d '{"product":"unlimited","quantity":30,"concurrency":1000,"bandwidth":200}'
Response
{
  "order": {
    "id": "PW-7KQ2M-X4HTD",
    "product": "unlimited",
    "quantity": 30,
    "months": null,
    "concurrency": 1000,
    "bandwidth_mbps": 200,
    "country": null,
    "unit_price_usd": 8.05,
    "total_usd": 241.5,
    "status": "pending",
    "created_at": "2026-10-31T09:12:44.120Z",
    "updated_at": "2026-10-31T09:12:44.120Z"
  },
  "balance_usd": 1058.5
}

View your orders

GET/api/v1/ordersAPI key needed

Shows up to 100 orders, starting with the most recent.

NameMeaning
statusOptionalOne of pending, active, refunded. Leave it out to get orders in any status.
Request
curl "https://proxyworld.shop/api/v1/orders?status=pending" \
  -H "Authorization: Bearer pwk_your_api_key"
Response
{
  "orders": [
    {
      "id": "PW-7KQ2M-X4HTD",
      "product": "unlimited",
      "quantity": 30,
      "months": null,
      "concurrency": 1000,
      "bandwidth_mbps": 200,
      "country": null,
      "unit_price_usd": 8.05,
      "total_usd": 241.5,
      "status": "pending",
      "created_at": "2026-10-31T09:12:44.120Z",
      "updated_at": "2026-10-31T09:12:44.120Z"
    }
  ]
}

View one order

GET/api/v1/orders/{id}API key needed

Returns the order that matches an order number. Handy for checking whether activation has finished.

NameMeaning
idRequiredThe order number, for example PW-7KQ2M-X4HTD.
Request
curl https://proxyworld.shop/api/v1/orders/PW-7KQ2M-X4HTD \
  -H "Authorization: Bearer pwk_your_api_key"
Response
{
  "order": {
    "id": "PW-7KQ2M-X4HTD",
    "product": "unlimited",
    "quantity": 30,
    "months": null,
    "concurrency": 1000,
    "bandwidth_mbps": 200,
    "country": null,
    "unit_price_usd": 8.05,
    "total_usd": 241.5,
    "status": "active",
    "created_at": "2026-10-31T09:12:44.120Z",
    "updated_at": "2026-10-31T09:40:02.511Z"
  }
}

Build a proxy username

GET/api/v1/proxy-userAPI key needed

Returns a proxy username with your options attached, plus HTTP and SOCKS5 URLs you can paste as they are. If you do not send session, the IP changes on every request.

NameMeaning
productOptionalOne of unlimited, residential, isp, datacenter. If omitted, unlimited is used.
countryOptionalA two-letter country code, for example jp.
cityOptionalA city value listed in /countries, for example tokyo. Send country along with it.
sessionOptional1~32 letters and digits. Requests with the same session use the same IP.
ttlOptionalHow long the session holds its IP, 1~60 minutes. If omitted, 30 minutes.
Request
curl "https://proxyworld.shop/api/v1/proxy-user?product=residential&country=jp&city=tokyo&session=job42&ttl=30" \
  -H "Authorization: Bearer pwk_your_api_key"
Response
{
  "username": "pwexample1-zone-res-cc-jp-city-tokyo-sid-job42-ttl-30",
  "password": "your_password",
  "http": "http://pwexample1-zone-res-cc-jp-city-tokyo-sid-job42-ttl-30:your_password@gate.proxyworld.shop:6100",
  "socks5": "socks5h://pwexample1-zone-res-cc-jp-city-tokyo-sid-job42-ttl-30:your_password@gate.proxyworld.shop:6200"
}

End to end example

A single script that gets a quote, orders from your balance and then connects through an IP in Japan.

Python (requests)
import requests

API = "https://proxyworld.shop/api/v1"
HEAD = {"Authorization": "Bearer pwk_your_api_key"}

# 1) Check the price first
plan = {"product": "residential", "quantity": 100}
print(requests.post(f"{API}/quote", json=plan).json())

# 2) Order from your balance
r = requests.post(f"{API}/orders", json=plan, headers=HEAD)
order = r.json()["order"]
print(order["id"], order["status"])

# 3) Get a username for Japanese IPs
u = requests.get(f"{API}/proxy-user", headers=HEAD,
                 params={"product": "residential", "country": "jp"}).json()
proxies = {"http": u["http"], "https": u["http"]}
print(requests.get("https://ipinfo.io/json", proxies=proxies, timeout=30).json())
Node.js 18+
const API = "https://proxyworld.shop/api/v1";
const HEAD = { Authorization: "Bearer pwk_your_api_key", "Content-Type": "application/json" };

// Check the balance
const acc = await fetch(`${API}/account`, { headers: HEAD }).then((r) => r.json());
console.log(acc.balance_usd);

// Order 7 days of unlimited
const res = await fetch(`${API}/orders`, {
  method: "POST",
  headers: HEAD,
  body: JSON.stringify({ product: "unlimited", quantity: 7, concurrency: 500, bandwidth: 100 }),
});
if (res.status === 402) console.log("Top up first");
else console.log((await res.json()).order.id);

Orders placed through the API are handled just like dashboard orders and show up on the History tab with the rest. Swap pwk_your_api_key in the examples for your own API key.

Connect ProxyWorld to your code

Sign up with an email or a token, create an API key in the dashboard, and you can start calling right away.