처음이라면 이 순서로 해 보세요
- 1이메일과 비밀번호, 또는 토큰으로 가입하고 대시보드에 들어가요.
- 2접속 설정 탭에서 API 키를 발급해요. 키 전체는 발급하는 순간 한 번만 보이니, 그 자리에서 바로 저장해 두세요.
- 3키가 필요한 요청에는 매번 Authorization 헤더에 키를 담아 보내요.
- 4먼저 /account를 호출해서 키가 제대로 통하는지 보고, 이어서 /orders로 주문을 넣어요.
인증은 어떻게 하나요?
내 계정 정보를 다루는 요청(account, orders, proxy-user)에는 API 키가 필요해요. 헤더에 Authorization: Bearer pwk_... 형태로 넣어 주세요. 가격, 나라 목록, 견적은 누구나 볼 수 있는 정보라서 키 없이 호출해도 돼요.
키 원문은 ProxyWorld 서버에 저장되지 않고, 해시 값만 남아요. 키를 잃어버렸다면 대시보드에서 새 키를 만들면 되고, 이때 예전 키는 곧바로 막혀요. 키는 서버 쪽 코드에만 넣어 주세요. 브라우저에서 돌아가는 코드나 공개 저장소에 올리면 다른 사람이 쓸 수 있어요.
Authorization: Bearer pwk_your_api_key
기본 주소와 데이터 형식
- 기본 주소
- https://proxyworld.shop/api/v1
- 요청과 응답 본문
- application/json
- 금액
- USD 숫자(예: 1058.50)
- 시각
- ISO 8601 (UTC)
호출 횟수에 제한이 있나요?
API 키 하나당 1분에 60번까지 호출할 수 있어요. 키 없이 부르는 공개 주소는 IP 하나당 1분에 60번이에요. 이 횟수를 넘으면 HTTP 429가 돌아오니, 1분 정도 기다렸다가 다시 보내 주세요.
오류가 나면 어떤 응답이 오나요?
HTTP 상태 코드가 오고, 본문에는 짧은 오류 코드와 설명이 JSON으로 담겨 있어요.
{
"error": {
"code": "insufficient_balance",
"message": "Your balance is too low for this order. Top up in the dashboard."
}
}| HTTP | code | 의미 |
|---|---|---|
| bad_requestHTTP 400꼭 필요한 값이 빠졌거나, 이 상품에서 받지 않는 값이 들어왔어요. | 꼭 필요한 값이 빠졌거나, 이 상품에서 받지 않는 값이 들어왔어요. | |
| unauthorizedHTTP 401API 키가 빠졌거나 올바른 키가 아니에요. | API 키가 빠졌거나 올바른 키가 아니에요. | |
| insufficient_balanceHTTP 402주문 금액보다 잔액이 적어요. 잔액에서 빠져나간 돈은 없어요. | 주문 금액보다 잔액이 적어요. 잔액에서 빠져나간 돈은 없어요. | |
| not_foundHTTP 404이 번호로 된 주문이 내 계정에 없어요. | 이 번호로 된 주문이 내 계정에 없어요. | |
| rate_limitedHTTP 4291분에 보낼 수 있는 횟수를 넘었어요. | 1분에 보낼 수 있는 횟수를 넘었어요. | |
| server_errorHTTP 500서버에서 요청을 끝내지 못했어요. 잔액에서 빠져나간 돈은 없어요. | 서버에서 요청을 끝내지 못했어요. 잔액에서 빠져나간 돈은 없어요. |
엔드포인트
내 계정 보기
GET/api/v1/accountAPI 키 필요
가입 방식(login: email 또는 token)과 이메일, 잔액, 프록시 호스트와 포트, 프록시 사용자 이름과 비밀번호, 허용 IP 목록을 알려줘요. 토큰으로 가입한 계정은 email 값이 null이에요.
curl https://proxyworld.shop/api/v1/account \ -H "Authorization: Bearer pwk_your_api_key"
{
"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"
]
}상품과 가격 보기
GET/api/v1/products키 없이 사용
상품별 주문 가능 범위, 수량 구간에 따른 단가, 기간 할인율을 알려줘요. 요금 페이지와 똑같은 가격표를 써요.
curl https://proxyworld.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",
"...": "..."
}
]
}나라와 도시 목록
GET/api/v1/countries키 없이 사용
상품마다 고를 수 있는 나라와, 사용자 이름의 -city- 옵션에 넣을 도시 값을 알려줘요.
| 이름 | 형식 | 의미 |
|---|---|---|
product선택 | string | unlimited, residential, isp, datacenter 가운데 하나예요. 보내지 않으면 residential로 봐요. |
curl "https://proxyworld.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"
}
]
}
]
}견적 받기
POST/api/v1/quote키 없이 사용
잔액은 건드리지 않고 주문 금액만 계산해 줘요. 주문할 때 보낼 본문을 그대로 보내면 돼요.
| 이름 | 형식 | 의미 |
|---|---|---|
product필수 | string | unlimited, residential, isp, datacenter 가운데 하나예요. |
quantity필수 | integer | 주문 수량이에요. 무제한은 일수(1~365), 주거용은 GB(5~5,000), 고정 ISP는 IP 개수(1~1,000), 데이터센터는 IP 개수(5~5,000)로 적어요. |
concurrency선택 | integer | 무제한 상품에서만 써요. 200, 500, 1000, 2000 가운데 하나를 골라요. |
bandwidth선택 | integer | 무제한 상품에서만 써요. Mbps 기준으로 100, 200, 500, 1000 가운데 하나예요. |
months선택 | integer | 고정 ISP와 데이터센터에서만 써요. 1, 3, 6, 12 가운데 하나예요. |
country선택 | string | 고정 ISP와 데이터센터에서만 써요. 영문 두 글자 나라 코드(예: jp)로 적고, 받을 수 있는 값은 /countries에서 확인해요. |
curl -X POST https://proxyworld.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.05,
"unit": "day",
"total_usd": 241.5
}주문하기
POST/api/v1/ordersAPI 키 필요
잔액에서 주문 금액을 빼고 주문을 만들어요. 처음에는 pending(개통 진행) 상태이고, 준비가 끝나면 active로 바뀌어요. 개통하지 못한 주문은 refunded가 되고, 낸 금액이 전부 잔액으로 돌아와요. 잔액이 부족하면 402를 돌려줘요.
| 이름 | 형식 | 의미 |
|---|---|---|
product필수 | string | unlimited, residential, isp, datacenter 가운데 하나예요. |
quantity필수 | integer | 주문 수량이에요. 무제한은 일수(1~365), 주거용은 GB(5~5,000), 고정 ISP는 IP 개수(1~1,000), 데이터센터는 IP 개수(5~5,000)로 적어요. |
concurrency선택 | integer | 무제한 상품에서만 써요. 200, 500, 1000, 2000 가운데 하나를 골라요. |
bandwidth선택 | integer | 무제한 상품에서만 써요. Mbps 기준으로 100, 200, 500, 1000 가운데 하나예요. |
months선택 | integer | 고정 ISP와 데이터센터에서만 써요. 1, 3, 6, 12 가운데 하나예요. |
country선택 | string | 고정 ISP와 데이터센터에서만 써요. 영문 두 글자 나라 코드(예: jp)로 적고, 받을 수 있는 값은 /countries에서 확인해요. |
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}'{
"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
}주문 목록 보기
GET/api/v1/ordersAPI 키 필요
가장 최근 주문부터 100건까지 보여줘요.
| 이름 | 형식 | 의미 |
|---|---|---|
status선택 | string | pending, active, refunded 가운데 하나예요. 비워 두면 상태와 관계없이 전부 나와요. |
curl "https://proxyworld.shop/api/v1/orders?status=pending" \ -H "Authorization: Bearer pwk_your_api_key"
{
"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"
}
]
}주문 한 건 보기
GET/api/v1/orders/{id}API 키 필요
주문 번호에 해당하는 주문 하나를 알려줘요. 개통이 끝났는지 볼 때 쓰면 편해요.
| 이름 | 형식 | 의미 |
|---|---|---|
id필수 | string | 조회할 주문 번호예요(예: PW-7KQ2M-X4HTD). |
curl https://proxyworld.shop/api/v1/orders/PW-7KQ2M-X4HTD \ -H "Authorization: Bearer pwk_your_api_key"
{
"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"
}
}프록시 사용자 이름 만들기
GET/api/v1/proxy-userAPI 키 필요
옵션이 붙은 프록시 사용자 이름과, 그대로 붙여 넣을 수 있는 HTTP, SOCKS5 주소를 알려줘요. session을 보내지 않으면 요청할 때마다 IP가 달라져요.
| 이름 | 형식 | 의미 |
|---|---|---|
product선택 | string | unlimited, residential, isp, datacenter 가운데 하나예요. 보내지 않으면 unlimited로 봐요. |
country선택 | string | 영문 두 글자 나라 코드예요(예: jp). |
city선택 | string | /countries에 나오는 도시 값이에요(예: tokyo). country도 함께 보내야 해요. |
session선택 | string | 영문자와 숫자로 1~32자예요. session이 같은 요청끼리는 같은 IP를 써요. |
ttl선택 | integer | 세션 IP를 붙잡아 두는 시간이에요. 1~60분 사이로 적고, 비워 두면 30분이에요. |
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"
{
"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"
}처음부터 끝까지 예시
견적을 받고, 잔액으로 주문하고, 일본 IP로 접속하는 과정을 스크립트 하나로 묶었어요.
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())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);API로 넣은 주문도 대시보드에서 넣은 주문과 똑같이 처리되고, 내역 탭에 함께 쌓여요. 예시에 있는 pwk_your_api_key는 내 API 키로 바꿔서 써 주세요.