POST /apiv2/order1h
Tạo đơn thuê Energy trong 1 giờ thông qua nhiều nhà cung cấp Energy với cơ chế tự động chuyển đổi dự phòng (failover).
URL của Endpoint
POST https://netts.io/apiv2/order1hHeaders của yêu cầu
| Header | Bắt buộc | Mô tả |
|---|---|---|
| Content-Type | Có | application/json |
| X-API-KEY | Có | Khóa API của bạn từ bảng điều khiển Netts |
| X-Real-IP | Có | Địa chỉ IP từ danh sách trắng (whitelist) của bạn |
Body của yêu cầu
{
"amount": 131000,
"receiveAddress": "TQn9Y2khEsLJW1ChVWFMSMeRDow5KcbLSE"
}Các tham số
| Tham số | Loại | Bắt buộc | Mô tả |
|---|---|---|---|
| amount | số nguyên | Có | Lượng Energy cần thuê (tối thiểu: 61000, tối đa: 3000000) |
| receiveAddress | chuỗi | Có | Địa chỉ TRON sẽ nhận Energy (định dạng TRC-20) |
Lựa chọn nhà cung cấp
API sẽ tự động chọn nhà cung cấp Energy tối ưu dựa trên:
- Hiệu quả chi phí - Luôn tìm mức giá thấp nhất hiện có
- Khả dụng - Đảm bảo nguồn dự trữ Energy đầy đủ
- Độ tin cậy - Sử dụng các nhà cung cấp có tỷ lệ thành công cao
- Tốc độ - Ưu tiên thời gian phân phối nhanh nhất
Ví dụ yêu cầu
cURL
curl -X POST https://netts.io/apiv2/order1h \
-H "Content-Type: application/json" \
-H "X-API-KEY: your_api_key" \
-H "X-Real-IP: your_whitelisted_ip" \
-d '{
"amount": 131000,
"receiveAddress": "TQn9Y2khEsLJW1ChVWFMSMeRDow5KcbLSE"
}'Python
import requests
url = "https://netts.io/apiv2/order1h"
headers = {
"Content-Type": "application/json",
"X-API-KEY": "your_api_key",
"X-Real-IP": "your_whitelisted_ip"
}
payload = {
"amount": 131000,
"receiveAddress": "TQn9Y2khEsLJW1ChVWFMSMeRDow5KcbLSE"
}
response = requests.post(url, headers=headers, json=payload)
data = response.json()
if response.status_code == 200:
detail = data.get('detail', {})
order_data = detail.get('data', {})
print(f"Order ID: {order_data.get('orderId')}")
print(f"Transaction Hash: {order_data.get('hash')}")
print(f"Energy Delivered: {order_data.get('energy')}")
print(f"Cost: {order_data.get('paidTRX')} TRX")
print(f"Delegate Address: {order_data.get('delegateAddress')}")
else:
error_detail = data.get('detail', data)
print(f"Error Code: {error_detail.get('code', 'N/A')}")
print(f"Error Message: {error_detail.get('msg', error_detail)}")Phản hồi
Phản hồi thành công (200 OK)
{
"detail": {
"code": 10000,
"msg": "Successful, 2.23 TRX deducted",
"data": {
"orderId": "1H123456",
"paidTRX": 2.23,
"hash": "a1b2c3d4e5f6789012345678901234567890abcdef1234567890abcdef123456",
"delegateAddress": "TNp5gsJhBmZFXgCdgjMgr8pEZ8fHgXUHDq",
"energy": 131050
}
}
}Các trường phản hồi
| Trường | Loại | Mô tả |
|---|---|---|
| detail.code | số nguyên | Luôn là 10000 đối với các đơn hàng thành công |
| detail.msg | chuỗi | Thông báo thành công kèm theo số tiền đã trừ |
| detail.data.orderId | chuỗi | ID đơn hàng hợp nhất (định dạng: 1H{request_id}) |
| detail.data.paidTRX | số | Tổng chi phí bằng TRX (bao gồm phí kích hoạt nếu địa chỉ chưa được kích hoạt) |
| detail.data.hash | chuỗi | null | Mã băm giao dịch (hash). Trường này luôn xuất hiện nhưng có thể để trống - một số nhà cung cấp không trả về hash ngay lập tức. Hãy sử dụng /apiv2/order_check sau 1 phút để lấy hash |
| detail.data.delegateAddress | chuỗi | Địa chỉ pool đã ủy quyền Energy |
| detail.data.energy | số nguyên | Lượng Energy + phần dư bù (thường là +50) |
Phản hồi lỗi
Lỗi xác thực (401)
{
"detail": "Invalid API key or IP not in whitelist"
}Số dư không đủ (403)
{
"code": 1004,
"msg": "Insufficient funds. Required: 2.23 TRX, Available: 1.50 TRX"
}Dịch vụ không khả dụng (503)
{
"code": 5003,
"msg": "Service temporarily unavailable. All energy providers are currently unavailable."
}Lỗi nhà cung cấp (503)
{
"code": 5001,
"msg": "Energy provider temporarily unavailable"
}{
"code": 5002,
"msg": "Energy provider temporarily unavailable"
}{
"code": 5004,
"msg": "Energy provider requires higher minimum amount"
}Lỗi máy chủ nội bộ (500)
{
"code": 5000,
"msg": "Internal server error occurred"
}Bảng tra cứu mã lỗi
| Mã | Mô tả | Trạng thái HTTP |
|---|---|---|
10000 | Thành công | 200 |
10000 | Thành công (phản hồi được lưu trong bộ nhớ tạm) | 208 |
- | Yêu cầu trùng lặp vẫn đang được xử lý | 409 |
1004 | Số dư không đủ | 403 |
5000 | Lỗi máy chủ nội bộ | 500 |
5001 | Nhà cung cấp Energy không khả dụng | 503 |
5002 | Nhà cung cấp Energy không khả dụng | 503 |
5003 | Dịch vụ Energy không khả dụng | 503 |
5004 | Không đạt mức tối thiểu của nhà cung cấp Energy | 503 |
Giới hạn tốc độ
Các giới hạn tốc độ sau đây áp dụng cho endpoint này (trên mỗi địa chỉ IP):
| Khoảng thời gian | Giới hạn | Mô tả |
|---|---|---|
| 1 giây | 50 yêu cầu | Tối đa 50 yêu cầu mỗi giây |
Các header giới hạn tốc độ
RateLimit-Limit: 50
RateLimit-Remaining: 49
RateLimit-Reset: 1
X-RateLimit-Limit-Second: 50
X-RateLimit-Remaining-Second: 49Vượt quá giới hạn tốc độ (429)
{
"message": "API rate limit exceeded"
}Tính bất biến (Idempotency)
API hỗ trợ tính bất biến để ngăn chặn việc xử lý đơn hàng trùng lặp. Khi bạn gửi nhiều yêu cầu giống hệt nhau, hệ thống đảm bảo đơn hàng chỉ được xử lý một lần duy nhất.
Cách thức hoạt động của tính bất biến
Tính duy nhất của yêu cầu được xác định bởi sự kết hợp của:
- Dấu thời gian yêu cầu (khoảng thời gian 1 giây)
- Lượng Energy
- Địa chỉ nhận
- Khóa API
Mỗi yêu cầu được cấp một khoảng thời gian duy nhất là 1 giây. Để bảo vệ hệ thống khỏi hành vi lạm dụng và đảm bảo việc xử lý chính xác, các yêu cầu có tham số giống hệt nhau không thể gửi thường xuyên hơn một lần mỗi giây.
Hành vi hiện tại: Hệ thống tự động bảo vệ khách hàng khỏi các lần thử lại do nhầm lẫn đối với lượng Energy đã đặt. Nếu bạn vô tình gửi cùng một yêu cầu hai lần, bạn sẽ không bị tính phí hai lần.
Cung cấp khóa của riêng bạn
Bạn có thể chủ động kiểm soát tính bất biến bằng cách gửi header X-Idempotency-Key. Khi xuất hiện header này, chỉ riêng giá trị đó sẽ quyết định xem yêu cầu có phải là gửi lặp lại hay không, và cách kết hợp tự động ở trên sẽ không được sử dụng. Khi vắng mặt header này, mọi thứ giữ nguyên — máy chủ sẽ tự tạo khóa cho bạn.
| Header | X-Idempotency-Key |
| Định dạng | Chính xác 64 ký tự thập lục phân viết thường — mã băm SHA-256 |
| Vòng đời | 24 giờ kể từ yêu cầu đầu tiên mang khóa đó |
| Phạm vi | Tài khoản của bạn. Cùng một giá trị do một tài khoản khác gửi sẽ không bao giờ trả về kết quả của bạn |
Một khóa có bất kỳ định dạng nào khác — UUID có dấu gạch ngang, base64, chữ thập lục phân viết hoa — đều bị từ chối với mã 400 trước khi đơn hàng được tạo và trước khi bị trừ bất kỳ chi phí nào:
{
"detail": "Invalid idempotency key format. Must be 64-character hexadecimal string."
}Định dạng khác với các endpoint khác.
/apiv2/withdraw,/apiv2/bandwidthvà bộ điều phối chấp nhận khóa base64 dài từ 16–64 ký tự. Endpoint này chỉ chấp nhận chuỗi băm hex dài 64 ký tự, do đó đoạn mã tạo khóa sao chép từ các endpoint đó sẽ trả về lỗi 400 tại đây.
Cách tạo khóa
Hãy dẫn xuất khóa từ API key của bạn. Điều đó giúp giá trị này trở nên duy nhất cho tài khoản của bạn, có thể tái lập khi thử lại và không ai khác có thể đoán được:
import hashlib
import hmac
def make_idempotency_key(api_key: str, address: str, amount: int, nonce: str) -> str:
message = f"{address}:{amount}:{nonce}"
return hmac.new(api_key.encode(), message.encode(), hashlib.sha256).hexdigest()
noncegắn liền với đơn hàng, không phải với yêu cầu. Hãy chọn nó một lần khi đơn hàng được tạo ở phía bạn, và truyền cùng giá trị đó trong mỗi lần gửi đơn hàng — từ lần thử đầu tiên cũng như mọi lần thử lại. Việc tạo một giá trị mới bên trong hàm gửi (str(uuid.uuid4())trên mỗi lệnh gọi) sẽ cấp cho mỗi lần thử một khóa khác nhau, vì vậy việc thử lại sau khi hết thời gian chờ (timeout) sẽ bị coi là đơn hàng thứ hai và bị trừ tiền lần nữa. Cách chọn đơn giản và chính xác nhất là dùng luôn mã id đơn hàng bạn đã có: nó tồn tại trước lần thử đầu tiên và vẫn giữ nguyên sau khi khởi động lại tiến trình của bạn.
# một lần, khi đơn hàng xuất hiện trong hệ thống của bạn
order = create_order(address="TQn9Y2khEsLJW1ChVWFMSMeRDow5KcbLSE", amount=131000)
# ở lần thử đầu tiên và ở mọi lần thử lại — cùng ba giá trị đầu vào, cùng một khóa
key = make_idempotency_key(API_KEY, order.address, order.amount, order.id)
headers = {
"Content-Type": "application/json",
"X-API-KEY": API_KEY,
"X-Idempotency-Key": key,
}Khóa tồn tại trong 24 giờ. Sau khoảng thời gian đó, cùng một nonce sẽ tự do trở lại và bắt đầu một đơn hàng mới.
Không sử dụng giá trị mà bất kỳ ai khác cũng có thể dùng — 64 số không, chuỗi băm của một từ cố định. Các khóa dùng chung một không gian giữa các tài khoản. Sự xung đột như vậy không bao giờ làm lộ đơn hàng của tài khoản khác, nhưng yêu cầu của bạn sẽ bị từ chối với mã 409 cho đến khi khóa của họ hết hạn, đây không phải là câu trả lời bạn mong muốn giữa lúc đang thử lại.
Đặt hai đơn hàng giống hệt nhau
Đôi khi bạn thực sự muốn đặt hai đơn hàng giống nhau — cùng một lượng Energy đến cùng một địa chỉ, đơn này nối tiếp đơn kia. Khóa tự động không thể phân biệt trường hợp này với việc thử lại: hai yêu cầu giống hệt nhau từng byte, và điều duy nhất phân tách chúng là thời điểm chúng đến hệ thống.
Nếu không có khóa của riêng bạn, kết quả phụ thuộc vào khoảng cách giữa chúng:
| Khoảng cách giữa hai yêu cầu | Điều gì sẽ xảy ra |
|---|---|
| Trong cùng khoảng thời gian 1 giây | Yêu cầu thứ hai bị coi là lặp lại. Nó không được thực thi: bạn nhận được 208 và phản hồi của đơn hàng đầu tiên, bao gồm cả orderId. Bạn không bị tính phí cho yêu cầu này |
| Cách nhau hơn một giây | Hai khóa khác nhau — cả hai đơn hàng đều được đặt và cả hai đều bị tính phí |
Vì vậy, nếu bạn dựa vào khóa tự động, hãy để khoảng cách hơn một giây giữa hai đơn hàng giống hệt nhau, và đọc mã trạng thái: 208 có nghĩa là đơn hàng bạn vừa gửi chưa được đặt.
Việc tạm dừng chỉ là giải pháp tạm thời, không phải là cách xử lý tận gốc. Nó phân tách mọi yêu cầu, bao gồm cả những yêu cầu bạn không hề có ý định lặp lại — thử lại sau khi hết thời gian chờ, nhấp đúp chuột, tin nhắn được gửi lại từ hàng đợi của bạn. Những yêu cầu đó cũng đến muộn hơn khoảng thời gian 1 giây, vì vậy chúng được đặt thành các đơn hàng riêng biệt và bị tính phí riêng biệt. Thời gian chờ phản hồi của endpoint này là 10 giây, vốn đã nằm ngoài khoảng thời gian đó rất nhiều: khóa tự động không bảo vệ lần thử lại diễn ra sau một lần hết thời gian chờ.
Khóa của riêng bạn sẽ loại bỏ sự phỏng đoán, vì quyết định được chuyển về phía duy nhất nắm rõ câu trả lời:
| Việc bạn đang làm | Thứ bạn gửi | Kết quả |
|---|---|---|
| Đơn hàng thứ hai, thực sự mới | Một nonce mới | Một khóa mới — đơn hàng được đặt |
| Thử lại một đơn hàng mà bạn chưa biết kết quả | Giá trị nonce của lần thử đầu tiên | Cùng một khóa — 208, phản hồi gốc, không bị tính phí lần hai |
Hàng thứ hai là lý do header này tồn tại, và đây cũng là nơi các cách triển khai thường mắc lỗi: xem ghi chú trong phần Cách tạo khóa.
Các mã trạng thái HTTP cho các yêu cầu trùng lặp
| Mã trạng thái | Tên | Mô tả |
|---|---|---|
| 200 | OK | Đơn hàng được xử lý thành công (yêu cầu đầu tiên) |
| 208 | Already Reported | Đơn hàng đã được xử lý, trả về phản hồi từ bộ nhớ tạm |
| 409 | Conflict | Yêu cầu hiện đang được xử lý, không thử lại |
Yêu cầu trùng lặp - Đã được xử lý (208)
Khi nhận được một yêu cầu trùng lặp cho một đơn hàng đã hoàn thành:
{
"detail": {
"code": 10000,
"msg": "Successful, 2.54 TRX deducted",
"data": {
"hash": "9e4c20e21e01e4c39b21b670d1ea1fc1e4b0de94d8fbd4c190d5378ba911dfae",
"energy": 65050,
"orderId": "1H70bcc7962a",
"paidTRX": 2.535,
"delegateAddress": "TNp5gsJhBmZFXgCdgjMgr8pEZ8fHgXUHDq"
}
},
"idempotency": {
"status": "completed",
"cached": true,
"original_created_at": "2025-12-03T10:34:49.104896"
}
}Thân phản hồi giống hệt với phản hồi thành công ban đầu, bổ sung thêm một đối tượng idempotency cho biết đây là phản hồi được lưu trong bộ nhớ tạm.
Yêu cầu trùng lặp - Vẫn đang xử lý (409)
Khi một yêu cầu trùng lặp đến trong khi yêu cầu ban đầu vẫn đang được xử lý:
{
"success": false,
"error": "duplicate_request_processing",
"message": "This request is currently being processed. Please wait and do not retry.",
"idempotency_key": "b9e67b2412d33c92a4f0e1c3d5b7a9f2e4c6d8b0a2f4e6c8d0b2a4f6e8c0d2b4",
"retry_after_seconds": 3
}Khuyến nghị: Đợi trong khoảng thời gian retry_after_seconds được chỉ định trước khi kiểm tra trạng thái đơn hàng.
Các thực hành tốt nhất
- Không gửi các yêu cầu song song có cùng tham số - hãy đợi từng phản hồi
- Sử dụng một
noncemới cho mỗi đơn hàng mới, và dùng lạinoncecủa lần thử đầu tiên cho mọi lần thử lại của đơn hàng đó - Không bao giờ tạo lại
noncetại thời điểm gửi — một lần thử lại phải tái tạo lại khóa của lần thử đầu tiên, không phải là một khóa mới - Xử lý phản hồi 409 bằng cách chờ đợi, không thử lại ngay lập tức
- Kiểm tra trường
idempotency.cachedđể nhận diện các phản hồi được lưu tạm — mã208có nghĩa là đơn hàng bạn vừa gửi chưa được đặt
Tài khoản trả sau (Postpaid)
Các tài khoản dùng phương thức thanh toán trả sau sử dụng cùng endpoint, URL, các header và body yêu cầu như những tài khoản khác. Điểm khác biệt là cách thức thanh toán đơn hàng:
- Không có khoản tiền nào bị trừ khỏi tiền ký quỹ của bạn. Mỗi đơn hàng thành công được cộng dồn vào số dư nợ của tài khoản theo đồng tiền thanh toán đã thỏa thuận trong hợp đồng của bạn. Bạn thanh toán số tiền này theo hóa đơn, căn cứ vào thỏa thuận.
- Tài khoản của bạn có một hạn mức tín dụng. Chừng nào số tiền nợ còn nằm trong hạn mức, các đơn hàng vẫn được chấp nhận ngay cả khi số dư ký quỹ bằng 0.
- Chỉ những dịch vụ đã được phân phối mới được tính phí. Đơn hàng bị từ chối hoặc không được thực thi sẽ không tốn chi phí.
- Nếu địa chỉ nhận cần phải được kích hoạt, việc kích hoạt là một phần của cùng đơn hàng đó và được lập hóa đơn dưới dạng một khoản phí riêng biệt.
Thanh toán trả sau được Netts kích hoạt cho tài khoản theo yêu cầu. Mọi phản hồi đều cho bạn biết đơn hàng được thanh toán như thế nào: paymentMode là postpaid hoặc prepaid.
Các trường yêu cầu bổ sung
| Tham số | Loại | Bắt buộc | Mô tả |
|---|---|---|---|
| test | boolean | Không | true — chỉ tính toán giá. Không có gì được đặt hàng, phân phối hay tính phí |
| freezePrice | boolean | Không | true — cố định giá theo hợp đồng của bạn trong 60 giây. Không có gì được đặt hàng hay tính phí |
| quoteId | chuỗi | Không | Đặt đơn hàng theo mức giá của báo giá được tạo bởi freezePrice |
| priceCurrency | chuỗi | Không | TRX (mặc định) hoặc loại tiền tệ trong hợp đồng của bạn, như trong settlement.asset. Đối với tài khoản trả sau, số tiền theo loại tiền tệ trong hợp đồng của bạn luôn được bao gồm |
quoteId không thể kết hợp cùng với test hoặc freezePrice. Bất kỳ trường nào khác trong phần thân yêu cầu đều sẽ bị từ chối.
Kiểm tra giá (test: true)
{
"amount": 65000,
"receiveAddress": "TQn9Y2khEsLJW1ChVWFMSMeRDow5KcbLSE",
"test": true
}{
"detail": {
"code": 10010,
"msg": "Test calculation",
"data": {
"amount": 65000,
"unitPriceSun": "20",
"discount": null,
"energyTRX": "1.300000",
"activationTRX": "1.100000",
"wouldCostTRX": "2.400000",
"paidTRX": 0,
"paymentMode": "postpaid",
"activationCheck": "inactive",
"alt": {"USDC": {"energy": "0.430541", "activation": "0.364304", "total": "0.794845"}},
"fxAt": "2026-10-19T07:15:18.469870+00:00"
}
}
}| Trường | Mô tả |
|---|---|
| unitPriceSun | Giá cho mỗi đơn vị Energy tính bằng SUN, bao gồm chiết khấu cá nhân nếu bạn có |
| discount | Chiết khấu cá nhân của bạn (type, value) hoặc null |
| energyTRX / activationTRX / wouldCostTRX | Energy, kích hoạt (nếu địa chỉ cần kích hoạt) và tổng số, tính bằng TRX |
| activationCheck | inactive — địa chỉ sẽ được kích hoạt và tính phí; active — không cần kích hoạt; unknown — hiện tại không thể kiểm tra |
alt.<currency> | Cùng các khoản tiền đó theo đơn vị tiền tệ trong hợp đồng của bạn |
| fxAt | Thời điểm của tỷ giá hối đoái được áp dụng cho các số tiền theo tiền tệ trong hợp đồng của bạn |
Báo giá cố định giá (freezePrice: true)
Sử dụng báo giá để cố định mức giá theo hợp đồng trước khi bạn đặt hàng.
- Gửi đơn hàng với
"freezePrice": true. Phản hồi có mã10011(Quote issued), các trường tương tự như kiểm tra giá, kèm theoquoteIdvàexpiresAt. - Trong vòng 60 giây, gửi đơn hàng với
"quoteId": "<quoteId>"cùng chính xácamountvàreceiveAddressđó. - Đơn hàng được tính phí theo mức giá đã báo — mức giá theo hợp đồng của bạn tại thời điểm báo giá — ngay cả khi mức giá có thay đổi trong khoảng thời gian đó.
Một báo giá có thể được sử dụng một lần và chỉ cho cùng một sản phẩm: báo giá cho 1 giờ không thể thanh toán cho đơn hàng 5 phút. Báo giá đã hết hạn hoặc đã sử dụng sẽ bị từ chối và không có đơn hàng nào được tạo.
{
"amount": 65000,
"receiveAddress": "TQn9Y2khEsLJW1ChVWFMSMeRDow5KcbLSE",
"quoteId": "q_4f540f16a2c94b7f8e3d1a6b5c0e9d72"
}Đơn hàng thành công
{
"detail": {
"code": 10000,
"msg": "Successful, 1.30 TRX for energy + 1.10 TRX for address activation, postpaid",
"data": {
"orderId": "1Hf9544a1508",
"paidTRX": 2.4,
"hash": "032bda8fa6911b42c15a6d8d30520dc22bcc4077972a1503b6a3fae491967eb4",
"delegateAddress": "TVnkj2jHKgmea8DVJFo2teD7rRSpH51bne",
"energy": 65000,
"activationHash": "259e1ab276114ae717a6f62d7d25eb1f89a2dccb637cbe41be626df3c2a78519",
"paymentMode": "postpaid",
"energyTRX": "1.300000",
"activationTRX": "1.100000",
"totalTRX": "2.400000"
}
}
}| Trường | Mô tả |
|---|---|
| paidTRX | Chi phí của dịch vụ tính bằng TRX. Đối với tài khoản trả sau, khoản này không bị trừ khỏi số tiền ký quỹ |
| paymentMode | postpaid |
| energyTRX / activationTRX / totalTRX | Các số tiền chính xác, 6 chữ số thập phân |
| quoteId, alt | Xuất hiện khi đơn hàng được đặt kèm báo giá: ID báo giá và các số tiền được báo |
| activationFinal | Xuất hiện và mang giá trị false chỉ khi số tiền kích hoạt là mức tạm tính; số tiền cuối cùng sẽ hiển thị trên hóa đơn của bạn |
Tất cả các trường khác đều giống như các đơn hàng trả trước.
Đã đạt hạn mức tín dụng (402)
{
"detail": {
"code": 1004,
"msg": "Postpaid credit limit reached.",
"paymentMode": "postpaid",
"reason": "limit_reached"
}
}Đơn hàng không được thực thi và không có khoản nào bị tính phí. Các đơn hàng mới sẽ được chấp nhận trở lại khi thanh toán của bạn được ghi nhận hoặc hạn mức của bạn được nâng lên.
Mã lỗi trả sau
| Mã | HTTP | Mô tả |
|---|---|---|
10010 | 200 | Kết quả kiểm tra giá (test) |
10011 | 200 | Báo giá đã được cấp (freezePrice) |
1004 | 402 | Đã đạt hạn mức tín dụng trả sau |
4100 | 400 | Yêu cầu không hợp lệ |
4101 | 400 | priceCurrency không được hỗ trợ |
4102 | 400 | quoteId kết hợp với test hoặc freezePrice |
4103 | 409 | Báo giá đã được sử dụng |
4104 | 409 | Báo giá đã hết hạn |
4105 | 409 | Khóa bất biến đã được sử dụng cho một yêu cầu khác |
4106 | 404 | Không tìm thấy báo giá |
4107 | 409 | Các tham số đơn hàng khác với báo giá |
4108 | 400 | Định dạng quoteId không hợp lệ |
4109 | 422 | Không khả dụng cho các tài khoản phụ |
5032 | 503 | Mức giá tạm thời không khả dụng |
5033 | 503 | Tỷ giá hối đoái tạm thời không khả dụng |
5034 | 503 | Hệ thống thanh toán tạm thời không khả dụng — đơn hàng chưa được chấp nhận |
5036 | 503 | Kiểm tra tín dụng tạm thời không khả dụng — hãy thử lại sau |
Đối với tất cả các phản hồi 4xx và 503 ở trên, không có đơn hàng nào được tạo và không có khoản nào bị tính phí.
Ghi chú
- Energy được phân phối ngay lập tức sau khi đặt hàng thành công (thường trong vòng 0,5-10 giây)
- Thời gian chờ phản hồi của API: Tối đa 10 giây, thường phản hồi trong vòng tối đa 2 giây
- Kích hoạt địa chỉ: Nếu địa chỉ nhận chưa được kích hoạt, Netts sẽ kích hoạt địa chỉ đó theo giá gốc
- Độ trễ kích hoạt: Đối với các địa chỉ chưa được kích hoạt, phản hồi của API có thể mất tối đa 6 giây do quá trình kích hoạt
- Đơn hàng được xử lý 24/7 với cơ chế tự động chuyển đổi dự phòng nhà cung cấp
- Lượng Energy tối thiểu: 61.000 đơn vị
- Lượng Energy tối đa: 3.000.000 đơn vị cho mỗi đơn hàng
- Lượng Energy bù dự phòng: Tự động cộng thêm +50 đơn vị để bù đắp từ nhà cung cấp (miễn phí)
- Mã băm giao dịch (hash): Trường này luôn xuất hiện nhưng có thể để trống nếu nhà cung cấp không trả về ngay lập tức. Để lấy hash, hãy gọi /apiv2/order_check không sớm hơn 1 phút sau khi đặt hàng
- Lựa chọn nhà cung cấp: Tự động dựa trên chi phí và tính khả dụng
- Định dạng ID đơn hàng:
1H{request_id}để theo dõi hợp nhất - Định giá: Linh hoạt dựa trên thời gian trong ngày và lượng Energy
- Thời hạn: Cố định 1 giờ (3600 giây)
- Giới hạn tốc độ: 50 yêu cầu mỗi giây trên mỗi địa chỉ IP