Kết nối và tích hợp API vào hệ thống của bạn.
Bạn thao tác với tư cách chính tài khoản ProxyZing.Com của mình: dùng chung số dư ví, giá, chiết khấu Cấp bậc, cùng luồng mua và gia hạn như trên website ProxyZing.Com
https://api.proxyzing.com/api/v1/X-API-Key: ...pxyThông tin chung
Làm theo các bước sau để gọi API lần đầu, mua một gói proxy và gia hạn. Lưu ý: không có môi trường thử (sandbox), mọi request chạy trên hệ thống thật và trừ tiền thật.
GET /me/. Nếu nhận về thông tin tài khoản thì key hợp lệ.GET /public/proxy-plans/, rồi xem chi tiết gói muốn mua bằng GET /public/proxy-plans/{slug}/ để biết configuration (lựa chọn, kỳ hạn, số lượng, giá).POST /public/proxy-plans/{slug}/purchase/. Gửi kèm Idempotency-Key để retry an toàn, và tạo body từ configuration theo bảng bên dưới.proxies[] của phản hồi, hoặc xem lại bằng GET /proxies/.GET /proxies/{id}/renew-options/ để biết số ngày và giá, rồi POST /proxies/{id}/renew/. Proxy đã hết hạn (expires_at nhỏ hơn thời điểm hiện tại) không gia hạn được.curl "https://api.proxyzing.com/api/v1/me/" \
-H "X-API-Key: ...pxy"Mọi giá trị gửi lên đều lấy từ configuration của gói (chi tiết gói). Tên option nào cũng thêm hậu tố _code, riêng protocol giữ nguyên.
| Trong cấu hình gói | Trong body mua |
|---|---|
periods[].code (ví dụ daily) | period_code: "daily" |
quantity.min đến quantity.max | quantity: số lượng nằm trong khoảng này |
options.location.values[].code (ví dụ 17) | selected_options.location_code: "17" |
options.protocol.values[].code (ví dụ http) | selected_options.protocol: "http" |
pricing.price_table[].unit_total | Không gửi. Server tự tính tổng = unit_total × quantity |
curl -X POST "https://api.proxyzing.com/api/v1/public/proxy-plans/proxy-dan-cu-viettel/purchase/" \
-H "X-API-Key: ...pxy" \
-H "Idempotency-Key: 7f3c9a2e-4b1d-4c8e-9a51-2d6f0b8e1c33" \
-H "Content-Type: application/json" \
-d '{"period_code":"daily","quantity":1,"selected_options":{"location_code":"17","protocol":"http"}}'curl -X POST "https://api.proxyzing.com/api/v1/proxies/<proxy_id>/renew/" \
-H "X-API-Key: ...pxy" \
-H "Idempotency-Key: 0c5e8a1b-6d24-4f7a-8b39-91e2a4c7d5f0" \
-H "Content-Type: application/json" \
-d '{"days":30}'Tạo API key. Sau đó gửi key trong header của mọi request:
X-API-Key: ...pxyAuthorization: Bearer cho API key.customer dùng được API key. Key tạo bởi tài khoản staff hoặc admin bị từ chối khi gọi API (401).| Tình huống | Kết quả |
|---|---|
| Thiếu header trên endpoint cần đăng nhập | 401 not_authenticated |
| Key sai, đã thu hồi hoặc tài khoản bị khóa | 401 authentication_failed |
| Gọi endpoint không nằm trong tài liệu này bằng key | 403 permission_denied |
Content-Type: application/json."240000.00" (đơn vị VND).?page=1&page_size=50 (page_size mặc định 20, tối đa 100).error.code và các key trong error.details, không so khớp error.message (có thể thay đổi). details luôn là object, mỗi giá trị là mảng chuỗi.next cho đến khi next là null, thay vì tự tăng số trang (xem Ví dụ mã nguồn).Quy ước: id là UUID, tiền là chuỗi số thập phân 2 chữ số, thời gian theo ISO 8601 UTC. Cột Null là "Không" nghĩa là luôn có giá trị (chuỗi có thể là "", khác null). Phần tử trong danh sách có cấu trúc giống hệt response chi tiết của cùng loại dữ liệu.
| Trường | Kiểu | Null | Ghi chú |
|---|---|---|---|
email | string | Không | |
full_name | string | Không | Tối đa 255 ký tự |
phone | string | Không | Tối đa 20 ký tự |
role | string | Không | Vai trò của tài khoản |
email_verification, is_active | boolean | Không | |
balance, balance_affiliate | decimal string | Không | |
partner_affiliate | object | Có | null nếu không có người giới thiệu |
partner_code | string | Không | |
accumulated_points | integer | Không | ≥ 0 |
rank.current_rank | object | Không | id, code, name, min_points, deposit_bonus_percent, created_at |
rank.next_rank | object | Có | null khi đã đạt cấp bậc cao nhất |
last_login | datetime | Có | null nếu chưa từng đăng nhập |
created_at | datetime | Không |
| Trường | Kiểu | Null | Ghi chú |
|---|---|---|---|
slug, title_vi, title_en | string | Không | |
description_vi, description_en | string | Không | Có thể là "" |
kind | string | Không | Các giá trị ở tham số kind của danh sách gói |
priority | integer | Không | Duy nhất, > 0 |
provider | object | Không | {id, name} |
configuration | object | Không | Rỗng (options: {}, periods: [], quantity: {}, pricing: {}) khi gói lỗi cấu hình |
configuration.quantity.max | integer | Có | null nghĩa là không giới hạn |
| Trường | Kiểu | Null | Ghi chú |
|---|---|---|---|
plan | object | Không | {id, kind, title_vi, title_en} |
status | string | Không | pending, processing, completed, failed, cancelled. Khi mua qua API chỉ gặp completed hoặc failed |
period_code | string | Không | "" với gói tính theo băng thông |
days | integer | Có | null với gói tính theo băng thông, nếu có giá trị thì > 0 |
selected_options | object | Không | Có thể là {} |
quantity | integer | Không | ≥ 1 |
unit_price, total_amount | decimal string | Không | ≥ 0, là ảnh chụp lúc mua |
proxies | array | Không | Rỗng khi đơn chưa có proxy hoặc failed |
| Trường | Kiểu | Null | Ghi chú |
|---|---|---|---|
provider_order_id | string | Không | Có thể là "" |
ip_address | string | Không* | IPv4 hoặc IPv6 |
http_port, socks5_port | integer | Có | Từ 1 đến 65535, null nếu proxy không hỗ trợ giao thức đó |
country | string | Không* | Mã quốc gia viết thường, có thể là "" |
username, password | string | Không* | Có thể là "" |
expires_at | datetime | Không | Proxy hết hạn khi thời điểm này nhỏ hơn thời điểm hiện tại |
status | string | Không | active, revoked, die. Hết hạn xác định bằng expires_at |
replaced_proxy, replaced_by | object | Có | {id, ip_address, replaced_at}, xem chi tiết proxy |
order | object | Không | Chỉ có ở GET /proxies/ và GET /proxies/{id}/, xem chi tiết proxy |
can_rotate_ip, can_auto_rotate_ip, can_auto_renew | boolean | Không | Chỉ có ở GET /proxies/, GET /proxies/{id}/ và response gia hạn |
rotate_min_seconds | integer | Có | Số giây tối thiểu, null khi gói không hỗ trợ. Có cùng các endpoint trên |
* Proxy revoked: các trường ip_address, http_port, socks5_port, country, username, password đều là null. Hãy xử lý null cho cả nhóm này.
| Trường | Kiểu | Null | Ghi chú |
|---|---|---|---|
wallet | string | Không | main, affiliate |
transaction_type | string | Không | Các giá trị ở tham số transaction_type của lịch sử số dư |
status | string | Không | Các giá trị ở tham số status của lịch sử số dư |
balance_before, balance_after, amount, rank_bonus, event_bonus | decimal string | Không | |
note | string | Có | |
payout_details | object | Có | Chỉ có giá trị với giao dịch rút tiền affiliate, mua và gia hạn là null |
| HTTP | error.code | Ý nghĩa | Cách xử lý |
|---|---|---|---|
| 400 | validation_error | Dữ liệu gửi lên sai hoặc vi phạm nghiệp vụ (xem details) | Sửa dữ liệu theo error.details rồi gửi lại. Không gửi lại y nguyên request. |
| 400 | parse_error | Body không phải JSON hợp lệ | Kiểm tra lại body, gửi JSON hợp lệ. |
| 401 | not_authenticated | Thiếu API key | Kiểm tra đã gửi header X-API-Key chưa. |
| 401 | authentication_failed | Key sai, đã thu hồi hoặc tài khoản bị khóa | Kiểm tra key còn hiệu lực. Tạo key mới nếu key đã bị thu hồi. |
| 403 | permission_denied | Endpoint không dùng được với API key | Chỉ dùng các endpoint có trong tài liệu này. |
| 404 | not_found | Không tồn tại hoặc không thuộc về bạn | Kiểm tra lại ID hoặc slug. |
| 405 | method_not_allowed | Sai method | Dùng đúng method của endpoint. |
| 406 | not_acceptable | Header Accept không được hỗ trợ | Bỏ header Accept hoặc dùng Accept: application/json. |
| 409 | request_in_progress | Request cùng Idempotency-Key đang được xử lý | Đợi 2 đến 3 giây rồi gửi lại với cùng Idempotency-Key. |
| 415 | unsupported_media_type | Không gửi JSON | Gửi body dạng JSON kèm Content-Type: application/json. |
| 429 | throttled | Gọi quá nhanh, thử lại sau | Chờ đúng số giây trong header Retry-After rồi gọi lại, không retry ngay. |
| 502 | provider_error | Lỗi xử lý phía hệ thống (ví dụ khi đổi IP) | Đợi vài giây rồi thử lại. Với mua và gia hạn, dùng lại cùng Idempotency-Key. |
| 500 | internal_error | Lỗi hệ thống | Thử lại sau. Với mua và gia hạn, giữ nguyên Idempotency-Key và kiểm tra đơn hàng trước khi mua lại. |
Khi request mua hoặc gia hạn bị timeout hay đứt kết nối, bạn không biết server đã xử lý chưa. Gửi lại mà không có bảo vệ có thể bị mua hoặc gia hạn (và trừ tiền) hai lần. Header Idempotency-Key giải quyết việc này cho hai endpoint mua proxy và gia hạn proxy.
Idempotency-Key.| Tình huống | Kết quả |
|---|---|
| Mã mới, lần đầu | Xử lý bình thường |
| Gửi lại mã cũ, request trước đã thành công | Trả lại kết quả cũ (cùng status và nội dung, đơn hàng hoặc proxy hiện tại), kèm header Idempotent-Replayed: true. Không mua, không trừ tiền lần nữa |
| Gửi lại mã cũ trong khi request trước vẫn đang chạy | 409 request_in_progress. Đợi vài giây rồi gửi lại cùng mã |
| Dùng lại mã cũ nhưng URL hoặc body khác | 400 validation_error, details.idempotency_key |
| Mã rỗng hoặc dài quá 255 ký tự | 400 validation_error, details.idempotency_key |
| Request trước bị lỗi (số dư không đủ, dữ liệu sai, xử lý thất bại đã hoàn tiền) | Mã không bị dùng hết, bạn sửa lỗi rồi gửi lại với cùng mã được |
409 nhiều lần liên tiếp (vài phút), request gốc có thể đã bị gián đoạn giữa chừng. Hãy kiểm tra GET /proxy-orders/?ordering=-created_at hoặc GET /proxies/{id}/ để xem đơn hoặc hạn đã cập nhật chưa, đừng đổi mã và mua lại khi chưa kiểm tra.Idempotency-Key, server không chống trùng và mỗi request là một lần mua hoặc gia hạn mới.crypto.randomUUID() trong JavaScript hoặc uuid.uuid4() trong Python. Mã phải có trước khi gửi request thì mới dùng lại được khi request bị timeout.| Phản hồi | Nên làm |
|---|---|
201 (mua) hoặc 200 (gia hạn), có hoặc không có Idempotent-Replayed: true | Thành công. Replay là kết quả của lần gửi trước, xử lý như bình thường |
| Timeout hoặc lỗi mạng | Gửi lại với cùng mã và cùng body, vài lần cách nhau vài giây. Vẫn lỗi thì báo người dùng kiểm tra danh sách đơn hàng trước khi mua lại |
409 request_in_progress | Đợi 2 đến 3 giây rồi gửi lại cùng mã |
400 có details.idempotency_key | Mã bị dùng lại cho request khác. Sinh mã mới, chỉ gửi lại khi đã chắc lần trước không thành công (kiểm tra đơn hàng) |
400 lỗi nghiệp vụ khác | Mã chưa bị dùng hết. Sửa lỗi rồi gửi lại với cùng mã được |
Với ứng dụng web gọi API từ phía server (ví dụ Next.js server action), mã phải được sinh ở phía giao diện khi mở form rồi truyền xuống server để chuyển tiếp thành header. Nếu server action tự sinh mã mỗi lần được gọi thì không có tác dụng chống trùng.
POST /public/proxy-check/: 10 lần mỗi giờ, tính theo tài khoản nếu request có X-API-Key hợp lệ, theo IP nếu không có key.POST /proxies/{id}/rotate-ip/: 30 lần mỗi giờ cho mỗi tài khoản, tính chung mọi proxy.429 throttled, kèm header Retry-After là số giây phải chờ. Hãy chờ đúng số giây này rồi gọi lại, không retry ngay.429 theo Retry-After.Ví dụ dùng Node.js (18 trở lên, lưu file .mjs) và Python (thư viện requests). Đặt API key trong biến môi trường PROXYZING_API_KEY, không ghi thẳng vào mã nguồn.
import { randomUUID } from "node:crypto";
const API_BASE = "https://api.proxyzing.com/api/v1/";
const API_KEY = process.env.PROXYZING_API_KEY;
async function api(path, { method = "GET", body, idempotencyKey } = {}) {
const headers = { "X-API-Key": API_KEY };
if (body) headers["Content-Type"] = "application/json";
if (idempotencyKey) headers["Idempotency-Key"] = idempotencyKey;
const response = await fetch(API_BASE + path, {
method,
headers,
body: body ? JSON.stringify(body) : undefined,
signal: AbortSignal.timeout(90_000),
});
const data = await response.json();
if (!response.ok) {
throw Object.assign(new Error(data.error.message), {
status: response.status,
code: data.error.code,
details: data.error.details,
});
}
return data;
}
async function purchase(slug, body) {
const idempotencyKey = randomUUID();
for (let attempt = 1; attempt <= 3; attempt++) {
try {
return await api("public/proxy-plans/" + slug + "/purchase/", {
method: "POST",
body,
idempotencyKey,
});
} catch (error) {
const retryable =
error.status === undefined || error.code === "request_in_progress";
if (!retryable || attempt === 3) throw error;
await new Promise((resolve) => setTimeout(resolve, 3000));
}
}
}
console.log(await api("me/"));
console.log(
await purchase("proxy-dan-cu-viettel", {
period_code: "daily",
quantity: 1,
selected_options: { location_code: "17", protocol: "http" },
}),
);import os
import time
import uuid
import requests
API_BASE = "https://api.proxyzing.com/api/v1/"
HEADERS = {"X-API-Key": os.environ["PROXYZING_API_KEY"]}
def get_me():
response = requests.get(API_BASE + "me/", headers=HEADERS, timeout=30)
response.raise_for_status()
return response.json()
def purchase(slug, body):
headers = {**HEADERS, "Idempotency-Key": str(uuid.uuid4())}
for attempt in range(1, 4):
try:
response = requests.post(
API_BASE + "public/proxy-plans/" + slug + "/purchase/",
json=body,
headers=headers,
timeout=90,
)
except requests.RequestException:
if attempt == 3:
raise
time.sleep(3)
continue
if response.status_code == 409 and attempt < 3:
time.sleep(3)
continue
response.raise_for_status()
return response.json()
print(get_me())
print(
purchase(
"proxy-dan-cu-viettel",
{
"period_code": "daily",
"quantity": 1,
"selected_options": {"location_code": "17", "protocol": "http"},
},
)
)Ví dụ gửi lại tối đa 3 lần, cách nhau 3 giây, khi lỗi mạng hoặc 409. Mọi lần gửi lại dùng cùng Idempotency-Key và cùng body. Vẫn lỗi thì kiểm tra GET /proxy-orders/?ordering=-created_at trước khi mua lại.
const API_BASE = "https://api.proxyzing.com/api/v1/";
const API_KEY = process.env.PROXYZING_API_KEY;
let url = API_BASE + "proxy-orders/?page_size=100";
while (url) {
const response = await fetch(url, { headers: { "X-API-Key": API_KEY } });
const page = await response.json();
for (const order of page.results) {
console.log(order.id);
}
url = page.next;
}import os
import requests
API_BASE = "https://api.proxyzing.com/api/v1/"
HEADERS = {"X-API-Key": os.environ["PROXYZING_API_KEY"]}
url = API_BASE + "proxy-orders/?page_size=100"
while url:
page = requests.get(url, headers=HEADERS, timeout=30).json()
for order in page["results"]:
print(order["id"])
url = page["next"]Đi theo URL trong next cho đến khi next là null, thay vì tự tăng số trang.
configuration của gói thay vì hard-code danh sách quốc gia, kỳ hạn, giá hay giới hạn số lượng, vì các giá trị này thay đổi theo thời gian./api/v1/. Chưa có chính sách phiên bản hay thông báo thay đổi. Client nên bỏ qua trường lạ trong response và dựa vào configuration của gói thay vì hard-code.Key đầy đủ chỉ hiển thị một lần lúc tạo và không xem lại được. Hãy xóa key cũ và tạo key mới.
Không. Chỉ dùng key ở phía server của bạn, không đưa vào ứng dụng web hoặc mobile.
Giá do server tự tính, bạn không gửi giá. Tổng tiền = unit_total × quantity (gói tính theo băng thông: price_per_gb × bandwidth_gb).
Số dư không đủ hoặc dữ liệu sai thì không trừ tiền và không tạo đơn. Nếu xử lý đơn thất bại sau khi đã trừ tiền, hệ thống tự hoàn đúng số tiền đã trừ và đơn chuyển sang failed.
Có, gửi lại đúng request đó với cùng Idempotency-Key. Server không mua hoặc trừ tiền lần nữa. Nếu vẫn lỗi, kiểm tra GET /proxy-orders/?ordering=-created_at trước khi mua lại.
Không. Proxy có expires_at nhỏ hơn thời điểm hiện tại không gia hạn được. API trả lỗi 400 với details.expires_at và không trừ tiền.
Danh sách endpoint
Tài khoản
Trả về thông tin tài khoản và số dư. balance là số dư dùng để mua và gia hạn Proxy, nên kiểm tra trước khi mua số lượng lớn.
Không có tham số.
curl "https://api.proxyzing.com/api/v1/me/" \
-H "X-API-Key: ...pxy"| HTTP | Mã lỗi | error.details | Khi nào |
|---|---|---|---|
| 401 | not_authenticated / authentication_failed | Thiếu hoặc sai API key. |
Cộng/Trừ tiền tài khoản là loại credit/debit, ví main.
Nạp tiền vào tài khoản là loại deposit, ví main.
Mua và gia hạn Proxy là loại payment, ví main.
Hoàn tiền khi lỗi là loại refund, ví main.
Rút tiền Affiliate là loại withdraw, ví affiliate.
Cộng/Trừ tiền Affiliate là loại affiliate_credit/affiliate_debit, ví affiliate.
transaction_typestringQueryTùy chọnLọc theo loại giao dịch.
Giá trị hợp lệ:creditdebitpaymentrefunddepositwithdrawaffiliate_creditaffiliate_debit
statusstringQueryTùy chọnLọc theo trạng thái.
Giá trị hợp lệ:pendingcompletedrejectedcancelledfailed
walletstringQueryTùy chọnLọc theo ví. Mua và gia hạn Proxy dùng ví main. Rút tiền Affiliate dùng ví affiliate.
Giá trị hợp lệ:mainaffiliate
orderingstringQueryTùy chọnSắp xếp theo trường, thêm - phía trước để giảm dần.
Giá trị hợp lệ:balance_beforebalance_afteramountrank_bonusevent_bonus
pageintegerQueryTùy chọnSố trang, bắt đầu từ 1.
page_sizeintegerQueryTùy chọnSố kết quả mỗi trang, mặc định 20, tối đa 100.
curl "https://api.proxyzing.com/api/v1/balance-transactions/?page=1&page_size=20" \
-H "X-API-Key: ...pxy"| HTTP | Mã lỗi | error.details | Khi nào |
|---|---|---|---|
| 401 | not_authenticated / authentication_failed | Thiếu hoặc sai API key. |
Chỉ trả giao dịch của bạn.
idstringPathBắt buộcID giao dịch.
curl "https://api.proxyzing.com/api/v1/balance-transactions/<id>/" \
-H "X-API-Key: ...pxy"| HTTP | Mã lỗi | error.details | Khi nào |
|---|---|---|---|
| 401 | not_authenticated / authentication_failed | Thiếu hoặc sai API key. | |
| 404 | not_found | Không tồn tại hoặc không thuộc về bạn. |
Gói proxy
Danh sách gói đang bán. Endpoint này không cần key (có gửi key vẫn được).
kindstringQueryTùy chọnLọc theo loại proxy.
Giá trị hợp lệ:ipv4_shareipv4_ispipv4_privateipv6_shareipv6_ispipv6_privateipv4_rotatingipv6_rotatingmobile_rotating
orderingstringQueryTùy chọnSắp xếp theo trường, thêm - phía trước để giảm dần.
Giá trị hợp lệ:prioritycreated_at
pageintegerQueryTùy chọnSố trang, bắt đầu từ 1.
page_sizeintegerQueryTùy chọnSố kết quả mỗi trang, mặc định 20, tối đa 100.
curl "https://api.proxyzing.com/api/v1/public/proxy-plans/?page=1&page_size=20"Trả chi tiết gói, cấu hình và giá. Endpoint này không cần key.
configuration.options: các lựa chọn (quốc gia, địa điểm, giao thức...). Mỗi option có values[].code hợp lệ và required.configuration.periods: kỳ hạn mua. code dùng cho period_code khi mua.configuration.quantity: giới hạn số lượng mỗi lần mua (max có thể null nếu không giới hạn).pricing.price_table[].unit_total: giá bán cuối cùng cho đúng kỳ hạn đó (đã gồm chiết khấu), tính cho 1 proxy. Không cần tự tính lại. Tổng tiền đơn hàng = unit_total × quantity.pricing.price_table_by_option: giá phụ thuộc option đã chọn, là object có key là tên option, value là map {giá trị option: [dòng giá như price_table]}.pricing.strategy = "bandwidth" và pricing.price_per_gb, không có periods.configuration trả rỗng (options: {}, periods: [], quantity: {}, pricing: {}). Hãy bỏ qua gói đó.slugstringPathBắt buộcSlug của gói.
curl "https://api.proxyzing.com/api/v1/public/proxy-plans/<slug>/"| HTTP | Mã lỗi | error.details | Khi nào |
|---|---|---|---|
| 404 | not_found | Slug không tồn tại hoặc gói đang ngừng bán. |
Mua proxy
Mua proxy bằng số dư ví. Giá do server tự tính lại, bạn không gửi giá.
Nên gửi header Idempotency-Key để retry an toàn, xem mục Retry an toàn (Idempotency-Key) ở phần Thông tin chung.
selected_options: với mỗi option trong configuration.options, thêm hậu tố _code vào tên key (riêng protocol giữ nguyên tên). Giá trị phải là một values[].code của option đó. Ví dụ country thành country_code, location thành location_code, protocol giữ nguyên. Option có required: true mà thiếu sẽ báo lỗi.selected_options, gửi nguyên tên, không thêm _code): isp_id (bắt buộc với gói dân cư IP tĩnh, lấy từ options.country.values[].isp[].id của quốc gia đã chọn), auto_renew (boolean, tùy chọn), city_code (gói dân cư xoay IP theo băng thông, tùy chọn), stick_ip_minutes (số phút giữ nguyên IP, tùy chọn), bandwidth_gb (bắt buộc với gói tính theo băng thông, lớn hơn 0).pricing.strategy = "bandwidth") không có period_code. Tổng tiền = price_per_gb × bandwidth_gb.proxies[] trong response. http_port và socks5_port độc lập nhau, có thể null nếu proxy chỉ hỗ trợ một giao thức.proxies[] không có order và các field can_*, các field này chỉ có ở GET /proxies/ và GET /proxies/{id}/.processing; (3) xử lý đơn, thành công thì tạo proxy và đơn chuyển completed; (4) thất bại thì hoàn đúng số tiền đã trừ và đơn chuyển failed.slugstringPathBắt buộcSlug của gói.
Idempotency-KeystringHeaderTùy chọnMã chống gửi trùng do bạn tự sinh (UUID v4, tối đa 255 ký tự). Tùy chọn nhưng nên gửi.
period_codestringBodyTùy chọnKỳ hạn, lấy từ configuration.periods[].code. Bắt buộc, trừ gói tính theo băng thông.
quantityintegerBodyTùy chọnSố lượng, mặc định 1, nằm trong configuration.quantity.min và max.
selected_optionsobjectBodyTùy chọnCác lựa chọn của gói (JSON object), xem phần Ghi chú.
notestringBodyTùy chọnGhi chú tự do.
curl -X POST "https://api.proxyzing.com/api/v1/public/proxy-plans/<slug>/purchase/" \
-H "X-API-Key: ...pxy" \
-H "Idempotency-Key: 7f3c9a2e-4b1d-4c8e-9a51-2d6f0b8e1c33" \
-H "Content-Type: application/json" \
-d '{"period_code":"daily","quantity":1,"selected_options":{"location_code":"17","protocol":"http"}}'| HTTP | Mã lỗi | error.details | Khi nào |
|---|---|---|---|
| 400 | validation_error | {"balance": ["Insufficient balance to complete this purchase."]} | Số dư không đủ. Không trừ tiền, không tạo đơn. |
| 400 | validation_error | {"plan": ["This plan is not available for purchase."]} | Gói không khớp cấu hình bán. |
| 400 | validation_error | {"period_code": ["This field is required."]} | ["Invalid period for this plan."] | Thiếu hoặc sai kỳ hạn. |
| 400 | validation_error | {"quantity": ["Quantity must be at least N."]} | ["Quantity must be at most N."] | Sai số lượng. |
| 400 | validation_error | {"<option>_code": ["This field is required."]} | Thiếu option bắt buộc. |
| 400 | validation_error | {"<option>_code": ["'<value>' is not a valid option."]} | Giá trị option không hợp lệ. |
| 400 | validation_error | {"country_code": ["Invalid or unsupported country for this plan."]} | Quốc gia không có giá cho gói này. |
| 400 | validation_error | {"bandwidth_gb": ["This field is required and must be greater than 0."]} | Gói băng thông thiếu hoặc sai bandwidth_gb. |
| 400 | validation_error | {"provider": ["This provider does not support purchase."]} | Gói chưa mua được qua hệ thống. Không trừ tiền. |
| 400 | validation_error | {"provider": ["Failed to create the proxy with the provider. Your balance has been refunded."]} | Xử lý đơn thất bại. Tiền đã hoàn tự động, đơn ở trạng thái failed. Có thể thử lại. |
| 409 | request_in_progress | Request cùng Idempotency-Key đang được xử lý. Đợi vài giây rồi gửi lại cùng mã. | |
| 400 | validation_error | {"idempotency_key": ["..."]} | Mã bị dùng lại cho request khác (URL hoặc body khác), hoặc mã rỗng, dài quá 255 ký tự. |
| 401 | not_authenticated / authentication_failed | Thiếu hoặc sai API key. | |
| 404 | not_found | Slug không tồn tại hoặc gói đang ngừng bán. |
Đơn hàng
Danh sách đơn hàng của bạn.
statusstringQueryTùy chọnLọc theo trạng thái đơn.
Giá trị hợp lệ:pendingprocessingcompletedfailedcancelled
kindstringQueryTùy chọnLọc theo loại proxy của gói.
Giá trị hợp lệ:ipv4_shareipv4_ispipv4_privateipv6_shareipv6_ispipv6_privateipv4_rotatingipv6_rotatingmobile_rotating
orderingstringQueryTùy chọnSắp xếp theo trường, thêm - phía trước để giảm dần.
Giá trị hợp lệ:created_attotal_amount
pageintegerQueryTùy chọnSố trang, bắt đầu từ 1.
page_sizeintegerQueryTùy chọnSố kết quả mỗi trang, mặc định 20, tối đa 100.
curl "https://api.proxyzing.com/api/v1/proxy-orders/?page=1&page_size=20" \
-H "X-API-Key: ...pxy"| HTTP | Mã lỗi | error.details | Khi nào |
|---|---|---|---|
| 401 | not_authenticated / authentication_failed | Thiếu hoặc sai API key. |
Trả object đơn hàng giống response của mua proxy, gồm danh sách proxies trong đơn.
period_code, days, selected_options, unit_price, total_amount là ảnh chụp tại thời điểm mua, không đổi khi giá gói thay đổi sau này.pending → processing → completed hoặc failed. Đơn failed không có proxy và đã được hoàn tiền.idstringPathBắt buộcID đơn hàng.
curl "https://api.proxyzing.com/api/v1/proxy-orders/<id>/" \
-H "X-API-Key: ...pxy"| HTTP | Mã lỗi | error.details | Khi nào |
|---|---|---|---|
| 401 | not_authenticated / authentication_failed | Thiếu hoặc sai API key. | |
| 404 | not_found | Không tồn tại hoặc không thuộc về bạn. |
Proxy
Thấy danh sách Proxy của bạn.
statusstringQueryTùy chọnLọc theo trạng thái proxy. Proxy hết hạn không đổi status, xác định bằng expires_at.
Giá trị hợp lệ:activerevokeddie
orderstringQueryTùy chọnLọc theo ID đơn hàng.
kindstringQueryTùy chọnLọc theo loại proxy.
Giá trị hợp lệ:ipv4_shareipv4_ispipv4_privateipv6_shareipv6_ispipv6_privateipv4_rotatingipv6_rotatingmobile_rotating
searchstringQueryTùy chọnTìm theo IP, provider_order_id, ID proxy hoặc ID đơn.
orderingstringQueryTùy chọnSắp xếp theo trường, thêm - phía trước để giảm dần.
Giá trị hợp lệ:created_atexpires_at
pageintegerQueryTùy chọnSố trang, bắt đầu từ 1.
page_sizeintegerQueryTùy chọnSố kết quả mỗi trang, mặc định 20, tối đa 100.
curl "https://api.proxyzing.com/api/v1/proxies/?page=1&page_size=20" \
-H "X-API-Key: ...pxy"| HTTP | Mã lỗi | error.details | Khi nào |
|---|---|---|---|
| 401 | not_authenticated / authentication_failed | Thiếu hoặc sai API key. |
Trả chi tiết một proxy của bạn, kèm thông tin đơn hàng.
status: active (Hoạt động), revoked (Đã thu hồi) hoặc die (đã bị thay bằng proxy khác).expires_at nhỏ hơn thời điểm hiện tại, và không thể gia hạn.replaced_proxy: có giá trị ở proxy thay thế, trỏ về proxy die mà nó thay cho. replaced_by: có giá trị ở proxy die, trỏ sang proxy thay thế. Cả hai là null nếu không có lần đổi nào, nếu có thì dạng { "id": "...", "ip_address": "...", "replaced_at": "..." }.id mới, nên hãy lưu lại liên kết này nếu hệ thống của bạn quản lý proxy theo id.can_rotate_ip, can_auto_rotate_ip, rotate_min_seconds, can_auto_renew: khả năng của gói. Đổi IP thủ công xem nhóm Đổi IP.revoked: các field ip_address, http_port, socks5_port, country, username, password trả null.country: mã quốc gia viết thường, có thể rỗng nếu không xác định được.idstringPathBắt buộcID proxy.
curl "https://api.proxyzing.com/api/v1/proxies/<id>/" \
-H "X-API-Key: ...pxy"| HTTP | Mã lỗi | error.details | Khi nào |
|---|---|---|---|
| 401 | not_authenticated / authentication_failed | Thiếu hoặc sai API key. | |
| 404 | not_found | Không tồn tại hoặc không thuộc về bạn. |
Đổi IP
Kiểm tra proxy có đổi IP được không. Không phải gói nào cũng hỗ trợ đổi IP, có thể kiểm tra trước bằng can_rotate_ip hoặc endpoint này.
supports_rotate_ip: false (kèm locations: []) nghĩa là proxy không đổi IP được: proxy không active, đã hết hạn, hoặc gói không hỗ trợ.locations có thể rỗng và chỉ để tham khảo.idstringPathBắt buộcID proxy.
curl "https://api.proxyzing.com/api/v1/proxies/<id>/rotate-ip-options/" \
-H "X-API-Key: ...pxy"| HTTP | Mã lỗi | error.details | Khi nào |
|---|---|---|---|
| 401 | not_authenticated / authentication_failed | Thiếu hoặc sai API key. | |
| 404 | not_found | Không tồn tại hoặc không thuộc về bạn. |
Yêu cầu đổi IP đầu ra của proxy. Đổi IP không mất phí.
200 là object proxy như chi tiết Proxy. ip_address, port, username, password giữ nguyên, chỉ IP đi ra thực tế thay đổi.real_ip của endpoint kiểm tra proxy.idstringPathBắt buộcID proxy.
locationstringBodyTùy chọnVị trí IP mới, tối đa 100 ký tự. Không gửi thì hệ thống tự chọn.
curl -X POST "https://api.proxyzing.com/api/v1/proxies/<id>/rotate-ip/" \
-H "X-API-Key: ...pxy" \
-H "Content-Type: application/json" \
-d '{"location":"Random"}'| HTTP | Mã lỗi | error.details | Khi nào |
|---|---|---|---|
| 400 | validation_error | {"status": ["Only an active proxy can rotate its IP."]} | Proxy không ở trạng thái active. |
| 400 | validation_error | {"expires_at": ["An expired proxy cannot rotate its IP."]} | Proxy đã hết hạn. |
| 400 | validation_error | {"plan": ["This plan does not support IP rotation."]} | Gói không hỗ trợ đổi IP. |
| 400 | validation_error | {"provider": ["This provider does not support IP rotation."]} | Proxy này không hỗ trợ đổi IP. |
| 401 | not_authenticated / authentication_failed | Thiếu hoặc sai API key. | |
| 404 | not_found | Không tồn tại hoặc không thuộc về bạn. | |
| 429 | throttled | Vượt giới hạn 30 lần đổi IP mỗi giờ, tính chung mọi proxy của tài khoản. | |
| 502 | provider_error | Lỗi xử lý khi đổi IP, có thể thử lại sau. |
Gia hạn
Lấy số ngày được phép gia hạn và giá. Không phải Proxy nào cũng gia hạn được, tùy thuộc vào gói.
supports_renewal: false (kèm options: []) nghĩa là proxy này không gia hạn được: gói không hỗ trợ, proxy đang die, hoặc proxy đã hết hạn (expires_at đã qua). Đừng gọi renew.unit_price là giá cho đúng số days đó (đã gồm chiết khấu), không phải giá theo ngày.days có trong options[] mới được chấp nhận khi gia hạn.idstringPathBắt buộcID proxy.
curl "https://api.proxyzing.com/api/v1/proxies/<id>/renew-options/" \
-H "X-API-Key: ...pxy"| HTTP | Mã lỗi | error.details | Khi nào |
|---|---|---|---|
| 401 | not_authenticated / authentication_failed | Thiếu hoặc sai API key. | |
| 404 | not_found | Không tồn tại hoặc không thuộc về bạn. |
Gia hạn proxy. Tiền gia hạn trừ vào số dư của bạn, cùng cơ chế với mua. Proxy đã hết hạn (expires_at nhỏ hơn thời điểm hiện tại) không thể gia hạn.
Nên gửi header Idempotency-Key để retry an toàn, xem mục Retry an toàn (Idempotency-Key) ở phần Thông tin chung.
200 là object proxy như chi tiết Proxy, với expires_at mới và status: active. Giá trị expires_at do hệ thống tính nên có thể lệch vài giây so với phép cộng đơn giản.idstringPathBắt buộcID proxy.
Idempotency-KeystringHeaderTùy chọnMã chống gửi trùng do bạn tự sinh (UUID v4, tối đa 255 ký tự). Tùy chọn nhưng nên gửi.
daysintegerBodyBắt buộcSố ngày gia hạn, phải là một giá trị days trong options[] của renew-options.
curl -X POST "https://api.proxyzing.com/api/v1/proxies/<id>/renew/" \
-H "X-API-Key: ...pxy" \
-H "Idempotency-Key: 7f3c9a2e-4b1d-4c8e-9a51-2d6f0b8e1c33" \
-H "Content-Type: application/json" \
-d '{"days":30}'| HTTP | Mã lỗi | error.details | Khi nào |
|---|---|---|---|
| 400 | validation_error | {"status": ["A revoked proxy cannot be renewed."]} | Proxy đã bị thu hồi. |
| 400 | validation_error | {"status": ["A dead proxy cannot be renewed."]} | Proxy đang die, hãy gia hạn proxy thay thế trong replaced_by. |
| 400 | validation_error | {"expires_at": ["An expired proxy cannot be renewed."]} | Proxy đã hết hạn (expires_at nhỏ hơn thời điểm hiện tại) nên không gia hạn được. Không trừ tiền. |
| 400 | validation_error | {"provider": ["This provider does not support renewal."]} | Proxy này không hỗ trợ gia hạn. Không trừ tiền. |
| 400 | validation_error | {"plan": ["This plan does not support renewal."]} | Gói không có bảng giá gia hạn. |
| 400 | validation_error | {"plan": ["This plan's catalog data is outdated. Please contact support."]} | Dữ liệu gói lỗi thời, liên hệ hỗ trợ. |
| 400 | validation_error | {"days": ["This field is required."]} | Thiếu days. |
| 400 | validation_error | {"days": ["Invalid days for this plan."]} | days không nằm trong options[] của renew-options. |
| 400 | validation_error | {"balance": ["Insufficient balance to complete this renewal."]} | Số dư không đủ. Không trừ tiền. |
| 400 | validation_error | {"provider": ["Failed to renew the proxy with the provider. Your balance has been refunded."]} | Gia hạn thất bại. Tiền đã hoàn tự động, expires_at và status giữ nguyên, có thể thử lại. |
| 409 | request_in_progress | Request cùng Idempotency-Key đang được xử lý. Đợi vài giây rồi gửi lại cùng mã. | |
| 400 | validation_error | {"idempotency_key": ["..."]} | Mã bị dùng lại cho request khác (URL hoặc body khác), hoặc mã rỗng, dài quá 255 ký tự. |
| 401 | not_authenticated / authentication_failed | Thiếu hoặc sai API key. | |
| 404 | not_found | Không tồn tại hoặc không thuộc về bạn. |