Skip to content

HiProxy API guide

What you do in the dashboard, you can also do from your own code. Read your balance and connection details, check prices, order from your balance and build proxy usernames with options, all over a REST API.

How do I get started?

  1. 1Sign up with a username and log in to the dashboard.
  2. 2Issue an API key on the Connect tab. The full key appears only once, so save it somewhere safe right away.
  3. 3Put the key in the Authorization header of every request that needs it.
  4. 4Call /account first to confirm the key works, then order with /orders.

How does authentication work?

Requests about your own account (account, orders, proxy-user) need an API key. Send it in the header as Authorization: Bearer hpk_... Prices, countries and quotes are open to anyone and need no key.

HiProxy stores only a hash of your key, never the key itself. If you lose it, issue a new one in the dashboard and the old key is blocked at that moment. Keep the key in server-side code only, never in code that runs in a browser or in a public repository.

HTTP header
Authorization: Bearer hpk_your_api_key

Base URL and data format

Base URL
https://hiproxy.shop/api/v1
Request and response body
application/json
Amounts
USD as a number, e.g. 1036.60
Timestamps
ISO 8601 (UTC)

Are there rate limits?

Each API key can make up to 60 calls per minute. Public endpoints called without a key allow 60 calls per minute per IP. Go over the limit and you get HTTP 429. Wait a minute, then send again.

What does an error response look like?

You get an HTTP status code plus a JSON body with a short error code and a message.

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 this product doesn't accept the value.
unauthorizedHTTP 401No API key was sent, or the key is wrong.
insufficient_balanceHTTP 402Your balance is below the order total. Your balance was not touched.
not_foundHTTP 404Your account has no order with this id.
rate_limitedHTTP 429You went over the per-minute request limit.
server_errorHTTP 500The server could not finish the request. Your balance was not touched.

Endpoints

Read your account

GET/api/v1/accountNeeds API key

Shows your balance, proxy host and ports, proxy username and password, and the Allowed IPs list.

Request
curl https://hiproxy.shop/api/v1/account \
  -H "Authorization: Bearer hpk_your_api_key"
Response
{
  "username": "hi_user01",
  "balance_usd": 1300,
  "proxy": {
    "host": "gate.hiproxy.shop",
    "http_port": 6100,
    "socks5_port": 6200,
    "username": "hpexample1",
    "password": "your_password"
  },
  "allowed_ips": [
    "203.0.113.10"
  ]
}

Read products and prices

GET/api/v1/productsNo key

Shows each product's order limits, price per tier and period discounts. It uses the same price table as the pricing page.

Request
curl https://hiproxy.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",
      "...": "..."
    }
  ]
}

List countries and cities

GET/api/v1/countriesNo key

Shows the countries each product supports and the city values to use in the -city- username option.

FieldWhat it means
productOptionalOne of unlimited, residential, isp, datacenter. Empty means residential.
Request
curl "https://hiproxy.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/quoteNo key

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

FieldWhat it means
productRequiredOne of unlimited, residential, isp, datacenter.
quantityRequiredDays 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 200, 500, 1000 or 2000.
bandwidthOptionalUnlimited only, in Mbps. Pick 100, 200, 500 or 1000.
monthsOptionalisp and datacenter only. Pick 1, 3, 6 or 12.
countryOptionalisp and datacenter only. A two-letter country code such as jp. Valid values are listed in /countries.
Request
curl -X POST https://hiproxy.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.78,
  "unit": "day",
  "total_usd": 263.4
}

Place an order

POST/api/v1/ordersNeeds API key

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 can't be activated becomes refunded, and everything you paid returns to your balance. If your balance is too low you get 402.

FieldWhat it means
productRequiredOne of unlimited, residential, isp, datacenter.
quantityRequiredDays 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 200, 500, 1000 or 2000.
bandwidthOptionalUnlimited only, in Mbps. Pick 100, 200, 500 or 1000.
monthsOptionalisp and datacenter only. Pick 1, 3, 6 or 12.
countryOptionalisp and datacenter only. A two-letter country code such as jp. Valid values are listed in /countries.
Request
curl -X POST https://hiproxy.shop/api/v1/orders \
  -H "Authorization: Bearer hpk_your_api_key" \
  -H "Content-Type: application/json" \
  -d '{"product":"unlimited","quantity":30,"concurrency":1000,"bandwidth":200}'
Response
{
  "order": {
    "id": "HP-7KQ2M-X4HTD",
    "product": "unlimited",
    "quantity": 30,
    "months": null,
    "concurrency": 1000,
    "bandwidth_mbps": 200,
    "country": null,
    "unit_price_usd": 8.78,
    "total_usd": 263.4,
    "status": "pending",
    "created_at": "2026-10-31T09:12:44.120Z",
    "updated_at": "2026-10-31T09:12:44.120Z"
  },
  "balance_usd": 1036.6
}

List orders

GET/api/v1/ordersNeeds API key

Shows up to 100 of your orders, most recent first.

FieldWhat it means
statusOptionalOne of pending, active, refunded. Empty returns orders in any status.
Request
curl "https://hiproxy.shop/api/v1/orders?status=pending" \
  -H "Authorization: Bearer hpk_your_api_key"
Response
{
  "orders": [
    {
      "id": "HP-7KQ2M-X4HTD",
      "product": "unlimited",
      "quantity": 30,
      "months": null,
      "concurrency": 1000,
      "bandwidth_mbps": 200,
      "country": null,
      "unit_price_usd": 8.78,
      "total_usd": 263.4,
      "status": "pending",
      "created_at": "2026-10-31T09:12:44.120Z",
      "updated_at": "2026-10-31T09:12:44.120Z"
    }
  ]
}

Read one order

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

Shows a single order by its id. Handy for checking whether activation has finished.

FieldWhat it means
idRequiredThe order id, such as HP-7KQ2M-X4HTD.
Request
curl https://hiproxy.shop/api/v1/orders/HP-7KQ2M-X4HTD \
  -H "Authorization: Bearer hpk_your_api_key"
Response
{
  "order": {
    "id": "HP-7KQ2M-X4HTD",
    "product": "unlimited",
    "quantity": 30,
    "months": null,
    "concurrency": 1000,
    "bandwidth_mbps": 200,
    "country": null,
    "unit_price_usd": 8.78,
    "total_usd": 263.4,
    "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-userNeeds API key

Gives you a proxy username with your options in it, plus HTTP and SOCKS5 URLs you can paste straight in. Without session, the IP changes on every request.

FieldWhat it means
productOptionalOne of unlimited, residential, isp, datacenter. Empty means unlimited.
countryOptionalA two-letter country code such as jp.
cityOptionalA city value from /countries such as tokyo. Only works together with country.
sessionOptional1~32 letters or numbers. Requests with the same session use the same IP.
ttlOptionalHow many minutes to hold the session IP, 1~60. Empty means 30.
Request
curl "https://hiproxy.shop/api/v1/proxy-user?product=residential&country=jp&city=tokyo&session=job42&ttl=30" \
  -H "Authorization: Bearer hpk_your_api_key"
Response
{
  "username": "hpexample1-zone-res-cc-jp-city-tokyo-sid-job42-ttl-30",
  "password": "your_password",
  "http": "http://hpexample1-zone-res-cc-jp-city-tokyo-sid-job42-ttl-30:your_password@gate.hiproxy.shop:6100",
  "socks5": "socks5h://hpexample1-zone-res-cc-jp-city-tokyo-sid-job42-ttl-30:your_password@gate.hiproxy.shop:6200"
}

Step by step example

One script that checks the price, orders from your balance and connects through a Japanese IP.

Python (requests)
import requests

API = "https://hiproxy.shop/api/v1"
HEAD = {"Authorization": "Bearer hpk_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://hiproxy.shop/api/v1";
const HEAD = { Authorization: "Bearer hpk_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. Replace hpk_your_api_key in the examples with your own API key.

Call HiProxy from your own code

Sign up with a username, issue an API key in the dashboard and you are ready.