How do I get started?
- 1Sign up with a username and log in to the dashboard.
- 2Issue an API key on the Connect tab. The full key appears only once, so save it somewhere safe right away.
- 3Put the key in the Authorization header of every request that needs it.
- 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.
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.
{
"error": {
"code": "insufficient_balance",
"message": "Your balance is too low for this order. Top up in the dashboard."
}
}| HTTP | code | What it means |
|---|---|---|
| bad_requestHTTP 400A required value is missing, or this product doesn't accept the value. | A required value is missing, or this product doesn't accept the value. | |
| unauthorizedHTTP 401No API key was sent, or the key is wrong. | No API key was sent, or the key is wrong. | |
| insufficient_balanceHTTP 402Your balance is below the order total. Your balance was not touched. | Your balance is below the order total. Your balance was not touched. | |
| not_foundHTTP 404Your account has no order with this id. | Your account has no order with this id. | |
| rate_limitedHTTP 429You went over the per-minute request limit. | You went over the per-minute request limit. | |
| server_errorHTTP 500The server could not finish the request. Your balance was not touched. | The 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.
curl https://hiproxy.shop/api/v1/account \ -H "Authorization: Bearer hpk_your_api_key"
{
"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.
curl https://hiproxy.shop/api/v1/products
{
"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.
| Field | Type | What it means |
|---|---|---|
productOptional | string | One of unlimited, residential, isp, datacenter. Empty means residential. |
curl "https://hiproxy.shop/api/v1/countries?product=datacenter"
{
"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.
| Field | Type | What it means |
|---|---|---|
productRequired | string | One of unlimited, residential, isp, datacenter. |
quantityRequired | integer | Days for unlimited (1~365), GB for residential (5~5,000), number of IPs for isp (1~1,000) or datacenter (5~5,000). |
concurrencyOptional | integer | Unlimited only. Pick 200, 500, 1000 or 2000. |
bandwidthOptional | integer | Unlimited only, in Mbps. Pick 100, 200, 500 or 1000. |
monthsOptional | integer | isp and datacenter only. Pick 1, 3, 6 or 12. |
countryOptional | string | isp and datacenter only. A two-letter country code such as jp. Valid values are listed in /countries. |
curl -X POST https://hiproxy.shop/api/v1/quote \
-H "Content-Type: application/json" \
-d '{"product":"unlimited","quantity":30,"concurrency":1000,"bandwidth":200}'{
"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.
| Field | Type | What it means |
|---|---|---|
productRequired | string | One of unlimited, residential, isp, datacenter. |
quantityRequired | integer | Days for unlimited (1~365), GB for residential (5~5,000), number of IPs for isp (1~1,000) or datacenter (5~5,000). |
concurrencyOptional | integer | Unlimited only. Pick 200, 500, 1000 or 2000. |
bandwidthOptional | integer | Unlimited only, in Mbps. Pick 100, 200, 500 or 1000. |
monthsOptional | integer | isp and datacenter only. Pick 1, 3, 6 or 12. |
countryOptional | string | isp and datacenter only. A two-letter country code such as jp. Valid values are listed in /countries. |
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}'{
"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.
| Field | Type | What it means |
|---|---|---|
statusOptional | string | One of pending, active, refunded. Empty returns orders in any status. |
curl "https://hiproxy.shop/api/v1/orders?status=pending" \ -H "Authorization: Bearer hpk_your_api_key"
{
"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.
| Field | Type | What it means |
|---|---|---|
idRequired | string | The order id, such as HP-7KQ2M-X4HTD. |
curl https://hiproxy.shop/api/v1/orders/HP-7KQ2M-X4HTD \ -H "Authorization: Bearer hpk_your_api_key"
{
"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.
| Field | Type | What it means |
|---|---|---|
productOptional | string | One of unlimited, residential, isp, datacenter. Empty means unlimited. |
countryOptional | string | A two-letter country code such as jp. |
cityOptional | string | A city value from /countries such as tokyo. Only works together with country. |
sessionOptional | string | 1~32 letters or numbers. Requests with the same session use the same IP. |
ttlOptional | integer | How many minutes to hold the session IP, 1~60. Empty means 30. |
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"
{
"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.
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())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.