Skip to content
Translated page. The English version is the source of truth.

POST /apiv2/order5m ​

Tạo đơn thuê Energy trong 5 phút thông qua các pool Energy nội bộ của Netts.

URL của Endpoint ​

POST https://netts.io/apiv2/order5m

Headers của yêu cầu ​

HeaderBắt buộcMô tả
Content-TypeCóapplication/json
X-API-KEYCóAPI key của bạn từ bảng điều khiển Netts
X-Real-IPCóĐịa chỉ IP từ danh sách trắng của bạn

Body của yêu cầu ​

json
{
    "amount": 65000,
    "receiveAddress": "TQn9Y2khEsLJW1ChVWFMSMeRDow5KcbLSE"
}

Tham số yêu cầu ​

Tham sốLoạiBắt buộcMô tả
amountintegerCóSố lượng Energy cần thuê (tối thiểu: 61.000, tối đa: 650.000)
receiveAddressstringCóĐịa chỉ TRON sẽ nhận Energy (định dạng TRC-20)

Giới hạn Energy

Endpoint 5 phút chấp nhận số lượng Energy từ 61.000 đến 650.000 đơn vị cho mỗi đơn hàng. Các yêu cầu ngoài phạm vi này sẽ bị từ chối với lỗi HTTP 400.

Thông tin nhà cung cấp ​

Các đơn hàng Energy 5 phút được xử lý độc quyền thông qua các pool Energy nội bộ của Netts. Không giống như endpoint 1 giờ, nhà cung cấp bên ngoài không được sử dụng.

Tính khả dụng & Chiến lược thử lại

Vì việc ủy quyền chỉ đến từ các pool nội bộ, tình trạng tạm thời không khả dụng có thể xảy ra trong các khoảng thời gian nhu cầu cao. Nếu bạn nhận được lỗi 503, hãy thử lại yêu cầu sau một khoảng thời gian ngắn hoặc chuyển sang dùng endpoint 1 giờ vốn có quyền truy cập vào nhiều nhà cung cấp bên ngoài.

Ví dụ ​

cURL ​

bash
curl -X POST https://netts.io/apiv2/order5m \
  -H "Content-Type: application/json" \
  -H "X-API-KEY: your_api_key" \
  -H "X-Real-IP: your_whitelisted_ip" \
  -d '{
    "amount": 65000,
    "receiveAddress": "TQn9Y2khEsLJW1ChVWFMSMeRDow5KcbLSE"
  }'

Python ​

python
import requests

url = "https://netts.io/apiv2/order5m"
headers = {
    "Content-Type": "application/json",
    "X-API-KEY": "your_api_key",
    "X-Real-IP": "your_whitelisted_ip"
}

payload = {
    "amount": 65000,
    "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')}")
elif response.status_code == 503:
    # Pool temporarily unavailable - retry or fallback to 1h
    print("Pool busy, retrying in 2 seconds...")
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) ​

json
{
    "detail": {
        "code": 10000,
        "msg": "Successful, 1.430 TRX deducted",
        "data": {
            "orderId": "5Mb4ee11ef86",
            "paidTRX": 1.43,
            "hash": "3636f97dde244fca17cdc0b2cf7fd1572a9b4c6d8e0f1a3b5c7d9e1f3a5b7c9d",
            "delegateAddress": "TNp5gsJhBmZFXgCdgjMgr8pEZ8fHgXUHDq",
            "energy": 65050
        }
    }
}

Thành công kèm kích hoạt địa chỉ (200 OK) ​

Khi địa chỉ người nhận chưa được kích hoạt trên mạng lưới TRON, Netts sẽ tự động kích hoạt. Chi phí kích hoạt được cộng vào tổng số tiền:

json
{
    "detail": {
        "code": 10000,
        "msg": "Successful, 1.430 TRX for energy + 1.100 TRX for address activation",
        "data": {
            "orderId": "5Mb4ee11ef86",
            "paidTRX": 2.53,
            "hash": "3636f97dde244fca17cdc0b2cf7fd1572a9b4c6d8e0f1a3b5c7d9e1f3a5b7c9d",
            "delegateAddress": "TNp5gsJhBmZFXgCdgjMgr8pEZ8fHgXUHDq",
            "energy": 65050,
            "activationHash": "bab38070a64b237acc9110ecf5135acc4d6e8f0a2b4c6d8e0f2a4b6c8d0e2f4a"
        }
    }
}

Các trường phản hồi ​

TrườngLoạiMô tả
detail.codeintegerLuôn là 10000 cho các đơn hàng thành công
detail.msgstringThông báo thành công kèm số tiền bị trừ
detail.data.orderIdstringID đơn hàng hợp nhất (định dạng: 5M{id})
detail.data.paidTRXnumberTổng chi phí bằng TRX (bao gồm phí kích hoạt nếu có)
detail.data.hashstringHash giao dịch ủy quyền
detail.data.delegateAddressstringĐịa chỉ pool đã ủy quyền Energy
detail.data.energyintegerSố lượng Energy + phần đệm (thường là +50)
detail.data.activationHashstringChỉ xuất hiện nếu việc kích hoạt địa chỉ được thực hiện

Phản hồi lỗi ​

Số lượng Energy không hợp lệ (400) ​

json
{
    "code": 1003,
    "msg": "Energy amount must be between 61000 and 650000. Requested: 50000"
}

Lỗi xác thực (401) ​

json
{
    "detail": "Invalid API key or IP not in whitelist"
}

Số dư không đủ (403) ​

json
{
    "code": 1004,
    "msg": "Insufficient funds. Required: 1.43 TRX, Available: 0.50 TRX"
}

Dịch vụ không khả dụng (503) ​

json
{
    "code": 5003,
    "msg": "Service temporarily unavailable. Energy delegation failed after retries."
}

Xử lý lỗi 503

Phản hồi 503 có nghĩa là các pool nội bộ tạm thời đạt công suất tối đa. Chiến lược đề xuất:

  1. Đợi 2-3 giây và thử lại đơn hàng 5 phút
  2. Nếu vẫn không khả dụng, hãy chuyển sang dùng endpoint 1 giờ vốn sử dụng nhiều nhà cung cấp

Lỗi máy chủ nội bộ (500) ​

json
{
    "code": 5000,
    "msg": "Internal server error occurred"
}

Tra cứu mã lỗi ​

MãMô tảTrạng thái HTTP
10000Thành công200
10000Thành công (phản hồi được lưu trong bộ nhớ đệm)208
-Yêu cầu trùng lặp vẫn đang được xử lý409
1003Số lượng Energy nằm ngoài phạm vi400
1004Số dư không đủ403
1005Địa chỉ thanh toán của người dùng chưa được cấu hình400
5000Lỗi máy chủ nội bộ500
5003Dịch vụ Energy không khả dụng503

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 gianGiới hạnMô tả
1 giây50 yêu cầuTối đa 50 yêu cầu mỗi giây

Các Header giới hạn tốc độ ​

http
RateLimit-Limit: 50
RateLimit-Remaining: 49
RateLimit-Reset: 1
X-RateLimit-Limit-Second: 50
X-RateLimit-Remaining-Second: 49

Vượt quá giới hạn tốc độ (429) ​

json
{
    "message": "API rate limit exceeded"
}

Tính bình đẳng (Idempotency) ​

API hỗ trợ tính bình đẳng để 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ế hoạt động của tính bình đẳng ​

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 (khung thời gian 2 giây)
  • Số lượng Energy
  • Địa chỉ người nhận
  • API key

Mỗi yêu cầu được cấp một khung thời gian duy nhất 2 giây. Các yêu cầu có thông số giống hệt nhau trong khung thời gian này được coi là trùng lặp.

Cung cấp khóa của riêng bạn ​

Bạn có thể chủ động kiểm soát tính bình đẳng bằng cách gửi header X-Idempotency-Key. Khi header này xuất hiện, giá trị đó sẽ là yếu tố duy nhất quyết định liệu một yêu cầu có phải là lặp lại hay không, và việc 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.

Các quy tắc tương tự như trên /apiv2/order1h:

HeaderX-Idempotency-Key
Định dạngChính xác 64 ký tự thập lục phân viết thường — một chuỗi băm SHA-256
Thời hạn24 giờ kể từ yêu cầu đầu tiên mang khóa đó
Phạm viTài khoản của bạn. Cùng một giá trị được gửi bởi một tài khoản khác sẽ không bao giờ trả về kết quả của bạn

Khóa có bất kỳ định dạng nào khác — một UUID có dấu gạch ngang, base64, hex 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ị tính phí:

json
{
    "detail": "Invalid idempotency key format. Must be 64-character hexadecimal string."
}

Hãy tạo khóa bắt nguồn từ API key của bạn để đảm bảo tính duy nhất cho tài khoản và có thể tái tạo khi thử lại — ví dụ chi tiết có trên trang 1 giờ. Bao gồm cả thời gian thuê vào thông điệp bạn băm: thuê cùng một địa chỉ trong 5 phút và trong 1 giờ là các đơn hàng khác nhau, và việc dùng lại một khóa cho cả hai sẽ trả về phản hồi của đơn hàng đầu tiên cho yêu cầu thứ hai.

Đặt hai đơn hàng giống hệt nhau ​

Cùng một cạm bẫy như trên endpoint theo giờ, với một khung thời gian rộng hơn. Hai đơn hàng giống hệt nhau — cùng một số lượng đến cùng một địa chỉ — không thể phân biệt được với một lần thử lại, và chỉ có thời điểm đến mới tách biệt chúng.

Nếu không có khóa của riêng bạn:

Khoảng cách giữa hai yêu cầuĐiều gì xảy ra
Trong cùng khung thời gian 2 giâyYêu cầu thứ hai được coi là lặp lại. Nó không được thực thi: bạn nhận được mã 208 và phản hồi của đơn hàng đầu tiên. Không có khoản phí nào bị trừ cho yêu cầu này
Cách nhau hơn hai giâyHai khóa khác nhau — cả hai đơn hàng đều được tạo và cả hai đều bị tính phí

Vì vậy hãy để cách nhau hơn hai 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 đã không được tạo.

Tạm dừng chỉ là giải pháp tạm thời, không phải là cách khắc phục triệt để — nó cũng tách biệt các yêu cầu mà bạn chưa bao giờ có ý định lặp lại, chẳng hạn như lần thử lại sau khi hết thời gian chờ hoặc một tin nhắn được gửi lại bởi hàng đợi của bạn, và mỗi yêu cầu đó sẽ trở thành một đơn hàng riêng biệt với một khoản phí riêng biệt. Việc gửi khóa của riêng bạn mới thực sự giải quyết dứt điểm vấn đề: một nonce mới cho một đơn hàng mới, nonce của lần thử đầu tiên cho một lần thử lại. Lập luận đầy đủ có trên trang 1 giờ.

Mã trạng thái HTTP cho các yêu cầu trùng lặp ​

Mã trạng tháiTênMô tả
200OKĐơn hàng được xử lý thành công (yêu cầu đầu tiên)
208Already ReportedĐơn hàng đã được xử lý, trả về phản hồi được lưu trong bộ nhớ đệm
409ConflictYê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) ​

json
{
    "detail": {
        "code": 10000,
        "msg": "Successful, 1.430 TRX deducted",
        "data": {
            "hash": "3636f97dde244fca17cdc0b2cf7fd1572a9b4c6d8e0f1a3b5c7d9e1f3a5b7c9d",
            "energy": 65050,
            "orderId": "5Mb4ee11ef86",
            "paidTRX": 1.43,
            "delegateAddress": "TNp5gsJhBmZFXgCdgjMgr8pEZ8fHgXUHDq"
        }
    },
    "idempotency": {
        "status": "completed",
        "cached": true,
        "original_created_at": "2026-03-21T08:53:52.498000"
    }
}

Yêu cầu trùng lặp - Đang xử lý (409) ​

json
{
    "success": false,
    "error": "duplicate_request_processing",
    "message": "This request is currently being processed. Please wait and do not retry.",
    "retry_after_seconds": 3
}

Thực hành tốt nhất ​

  • Không gửi các yêu cầu song song với các tham số giống nhau - hãy đợi từng phản hồ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 trong bộ nhớ đệm

So sánh: Đơn hàng 5 phút với 1 giờ ​

Tính năngĐơn hàng 5 phútĐơn hàng 1 giờ
Endpoint/apiv2/order5m/apiv2/order1h
Thời hạn5 phút1 giờ
Phạm vi Energy61.000 - 650.00061.000 - 3.000.000
Nhà cung cấpChỉ các pool nội bộ của NettsCác pool nội bộ + nhà cung cấp bên ngoài
GiáThấp hơn (giá 5 phút)Giá tiêu chuẩn theo giờ
Tính khả dụngCó thể bị hạn chế trong giờ cao điểmCao (có nhiều nhà cung cấp dự phòng)
Tốt nhất choGiao dịch nhỏ thường xuyênGiao dịch lớn hoặc giao hàng đảm bảo

Tài khoản trả sau ​

Các tài khoản sử dụng thanh toán trả sau dùng cùng endpoint, URL, headers và request body như những người khác. Sự khác biệt là cách thức thanh toán cho đơn hàng:

  • Không có khoản nào bị trừ từ tiền gửi của bạn. Mỗi đơn hàng thành công được thêm vào số dư nợ tài khoản của bạn theo loại tiền thanh toán được thỏa thuận trong hợp đồng của bạn. Bạn thanh toán qua hóa đơn, theo thỏa thuận của bạn.
  • Tài khoản của bạn có một hạn mức tín dụng. Trong khi số tiền đến hạn vẫn nằm trong hạn mức, các đơn hàng vẫn được chấp nhận ngay cả khi số tiền gửi bằng 0.
  • Chỉ các dịch vụ đã được bàn giao mới được thanh toán. Một đơn hàng bị từ chối hoặc không được thực hiện sẽ không tốn chi phí.
  • Nếu địa chỉ nhận phải được kích hoạt, việc kích hoạt là một phần của cùng một đơ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 sẽ 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ạiBắt buộcMô tả
testbooleanKhôngtrue — chỉ tính giá. Không có gì được đặt hàng, bàn giao hoặc tính phí
freezePricebooleanKhôngtrue — cố định giá theo hợp đồng của bạn trong 60 giây. Không có gì được đặt hàng hoặc tính phí
quoteIdstringKhôngĐặt hàng theo giá của một báo giá được tạo bởi freezePrice
priceCurrencystringKhôngTRX (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 các tài khoản trả sau, các số tiền theo loại tiền tệ hợp đồng của bạn luôn được bao gồm

quoteId không thể kết hợp với test hoặc freezePrice. Bất kỳ trường nào khác trong request body đều bị từ chối.

Kiểm tra giá (test: true) ​

json
{
    "amount": 65000,
    "receiveAddress": "TQn9Y2khEsLJW1ChVWFMSMeRDow5KcbLSE",
    "test": true
}
json
{
    "detail": {
        "code": 10010,
        "msg": "Test calculation",
        "data": {
            "amount": 65000,
            "unitPriceSun": "19",
            "discount": null,
            "energyTRX": "1.235000",
            "activationTRX": "1.100000",
            "wouldCostTRX": "2.335000",
            "paidTRX": 0,
            "paymentMode": "postpaid",
            "activationCheck": "inactive",
            "alt": {"USDC": {"energy": "0.409088", "activation": "0.364370", "total": "0.773458"}},
            "fxAt": "2026-10-19T07:16:12.548894+00:00"
        }
    }
}
TrườngMô tả
unitPriceSunGiá cho mỗi đơn vị Energy tính bằng SUN, bao gồm giảm giá cá nhân nếu bạn có
discountGiảm giá cá nhân của bạn (type, value) hoặc null
energyTRX / activationTRX / wouldCostTRXEnergy, kích hoạt (nếu địa chỉ cần) và tổng cộng, tính bằng TRX
activationCheckinactive — đị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 số tiền bằng đơn vị tiền tệ trong hợp đồng của bạn
fxAtThời điểm của tỷ giá hối đoái được áp dụng cho các số tiền bằng đơn vị tiền tệ hợp đồng của bạn

Báo giá cố định giá (freezePrice: true) ​

Sử dụng báo giá để cố định giá theo hợp đồng của bạn trước khi bạn đặt hàng.

  1. Gửi đơn hàng với "freezePrice": true. Phản hồi có mã 10011 (Quote issued), các trường giống như kiểm tra giá, cộng thêm quoteId và expiresAt.
  2. Trong vòng 60 giây gửi đơn hàng với "quoteId": "<quoteId>" cùng với amount và receiveAddress giống hệt nhau.
  3. Đơn hàng được thanh toán theo giá được 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 giá thay đổi trong khoảng thời gian đó.

Một báo giá chỉ có thể được sử dụng một lần và chỉ cho cùng một sản phẩm: một báo giá 5 phút không thể dùng để thanh toán cho đơn hàng 1 giờ. Báo giá đã hết hạn hoặc đã sử dụng sẽ bị từ chối và không có gì được đặt hàng.

json
{
    "amount": 65000,
    "receiveAddress": "TQn9Y2khEsLJW1ChVWFMSMeRDow5KcbLSE",
    "quoteId": "q_4f540f16a2c94b7f8e3d1a6b5c0e9d72"
}

Đơn hàng thành công ​

json
{
    "detail": {
        "code": 10000,
        "msg": "Successful, 1.24 TRX service cost, postpaid",
        "data": {
            "orderId": "5M5f557d2fba",
            "paidTRX": 1.235,
            "hash": "c1fafd8ef7fb6b7fb8a729120756b26e611f401275cb4f7a04fe2bafd75b13da",
            "delegateAddress": "TR3qZsdmkFcvP729Md3PwXzktFQkMoUzjg",
            "energy": 65000,
            "paymentMode": "postpaid",
            "energyTRX": "1.235000",
            "activationTRX": "0.000000",
            "totalTRX": "1.235000"
        }
    }
}
TrườngMô tả
paidTRXChi phí của dịch vụ bằng TRX. Đối với các tài khoản trả sau số tiền này không bị trừ từ tiền gửi
paymentModepostpaid
energyTRX / activationTRX / totalTRXSố tiền chính xác, 6 chữ số thập phân
quoteId, altXuấ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

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) ​

json
{
    "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 tăng lên.

Mã lỗi trả sau ​

MãHTTPMô tả
10010200Kết quả kiểm tra giá (test)
10011200Báo giá đã được tạo (freezePrice)
1004402Đạt hạn mức tín dụng trả sau
4100400Yêu cầu không hợp lệ
4101400Không hỗ trợ priceCurrency
4102400quoteId được kết hợp với test hoặc freezePrice
4103409Báo giá đã được sử dụng
4104409Báo giá đã hết hạn
4105409Khóa idempotency đã được dùng cho một yêu cầu khác
4106404Không tìm thấy báo giá
4107409Các thông số đơn hàng khác với báo giá
4108400Định dạng quoteId không hợp lệ
4109422Không khả dụng cho tài khoản phụ
5032503Giá tạm thời không khả dụng
5033503Tỷ giá hối đoái tạm thời không khả dụng
5034503Hệ thống thanh toán tạm thời không khả dụng — đơn hàng không được chấp nhận
5036503Kiể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ó gì được đặt hàng và không có gì bị tính phí.

Ghi chú ​

  • Energy được bàn giao ngay lập tức khi đặt hàng thành công (thường trong vòng 0,5-2 giây)
  • Thời gian chờ phản hồi API: Tối đa 10 giây (bao gồm cả các lần thử lại nội bộ)
  • Kích hoạt địa chỉ: Nếu địa chỉ người nhận chưa được kích hoạt, Netts sẽ kích hoạt theo giá gốc. Chi phí kích hoạt chỉ được tính một lần cho mỗi địa chỉ
  • Thời hạn: Cố định 5 phút (300 giây)
  • Số lượng Energy tối thiểu: 61.000 đơn vị
  • Số lượng Energy tối đa: 650.000 đơn vị mỗi đơn hàng
  • Đệm Energy: Tự động cộng thêm +50 đơn vị (miễn phí)
  • Định dạng ID đơn hàng: 5M{id} để theo dõi hợp nhất
  • Định giá: Năng động dựa trên thời gian trong ngày thông qua Pricing API
  • Giới hạn tốc độ: 50 yêu cầu mỗi giây trên mỗi địa chỉ IP
  • Chỉ dùng pool nội bộ: Nếu các pool đạt công suất tối đa, hãy thử lại sau một khoảng thời gian ngắn hoặc sử dụng endpoint 1 giờ để dự phòng