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

GET /apiv2/usdt/{sender}&

Tính toán chi phí chuyển USDT trên TRON (endpoint công khai, không yêu cầu API key).

Trả về phân tích chi tiết về tài khoản người gửi và người nhận, yêu cầu tài nguyên (Energy/Bandwidth) và phương án chi phí được khuyến nghị.

Giới hạn tốc độ thấp — dành cho mục đích sử dụng không thường xuyên / thử nghiệm

Endpoint này được chia sẻ trên toàn cầu và bị giới hạn tốc độ ở mức 1 yêu cầu/giây60 yêu cầu/phút. Khi ứng dụng của bạn nằm sau Cloudflare hoặc một reverse proxy khác, giới hạn này có thể được chia sẻ giữa tất cả các client kết nối đến Netts qua cùng một edge, vì vậy bạn có thể gặp lỗi 429 Too Many Requests sớm hơn mức 60 yêu cầu/phút từ một người dùng đơn lẻ.

Đối với bất kỳ nhu cầu nào ngoài các lệnh gọi rời rạc, hãy sử dụng endpoint POST /apiv2/usdt/analyze có xác thực — endpoint này có giới hạn trên mỗi key cao hơn nhiều (50 yêu cầu/giây).

URL của endpoint

GET https://netts.io/apiv2/usdt/{sender}&{receiver}

Tham số URL

Tham sốLoạiBắt buộcMô tả
senderstringĐịa chỉ TRON của người gửi
receiverstringĐịa chỉ TRON của người nhận

Các địa chỉ được truyền trong đường dẫn, phân tách bằng dấu và (&). Cả hai phải là địa chỉ TRON base58 hợp lệ (34 ký tự, bắt đầu bằng chữ T, checksum hợp lệ).

Ví dụ yêu cầu

cURL

bash
curl "https://netts.io/apiv2/usdt/TFLit1TFohBtT2f8UVCLFVPmZxawxqByYe&TTKR9aQdJWTgXLK9cmzaDitT5VXE497thL"

Python

python
import requests

sender   = "TFLit1TFohBtT2f8UVCLFVPmZxawxqByYe"
receiver = "TTKR9aQdJWTgXLK9cmzaDitT5VXE497thL"

url = f"https://netts.io/apiv2/usdt/{sender}&{receiver}"
response = requests.get(url, timeout=15)

if response.status_code == 200:
    payload = response.json()
    data = payload["data"]
    print(f"Can transfer:        {data['can_transfer']}")
    print(f"Energy needed:       {data['requirements']['energy_needed']}")
    print(f"Bandwidth needed:    {data['requirements']['bandwidth_needed']}")
    print(f"Total cost (TRX):    {data['costs']['total_cost_trx']}")
    print(f"Recommended method:  {data['costs']['recommended_method']}")
elif response.status_code == 429:
    print("Rate-limited — retry after:", response.headers.get("Retry-After"), "s")
else:
    print("Error:", response.json())

Phản hồi

Thành công (200 OK)

Envelope cấp cao nhất:

json
{
    "status": "success",
    "data": { /* TransferAnalysis — xem bên dưới */ },
    "current_utc_time": "2026-04-23 11:54:13",
    "processing_time_ms": 19.27
}

data (TransferAnalysis)

TrườngLoạiMô tả
senderAddressInfoThông tin tài khoản đầy đủ của người gửi (số dư, staking, ủy quyền, kích hoạt).
receiverAddressInfoThông tin tài khoản đầy đủ của người nhận.
requirementsRequirementsEnergy / Bandwidth mà giao dịch chuyển tiền cần (gốc + kèm bộ đệm an toàn).
costsCostsChi tiết chi phí đốt so với thuê và phương thức được khuyến nghị.
can_transferbooleantrue nếu giao dịch chuyển tiền có thể thực hiện với tài nguyên/giá hiện tại.
issuesstring[]Các vấn đề phát hiện trong quá trình phân tích (ví dụ: không đủ Bandwidth).
recommendationsstring[]Các đề xuất dễ hiểu dành cho client.
variation_idstring | nullID kịch bản khớp (ví dụ: "CUSTOM") từ danh mục biến thể nội bộ.
AddressInfo

Các trường thông thường bạn sẽ sử dụng trong tích hợp: address, is_activated, trx_balance, usdt_balance, has_usdt, energy_balance, bandwidth_balance. Các trường cấp thấp bổ sung cho mục đích nâng cao: trx_balance_sun, energy_total, bandwidth_total, bandwidth_free, bandwidth_staked, energy_used, bandwidth_used, create_time, latest_operation_time, staked_for_energy, staked_for_bandwidth, delegated_for_energy, delegated_for_bandwidth, delegated_out_energy, delegated_out_bandwidth, votes.

Requirements
TrườngLoạiMô tả
energy_neededintSố đơn vị Energy gốc cần thiết cho giao dịch chuyển tiền.
bandwidth_neededintSố đơn vị Bandwidth gốc cần thiết.
energy_with_bufferintEnergy được làm tròn lên mức thuê an toàn (ví dụ: 131 000).
bandwidth_with_bufferintBandwidth có kèm theo một lượng đệm an toàn nhỏ.
receiver_has_usdtbooleanNgười nhận đã có sẵn USDT hay chưa (ảnh hưởng đến Energy).
Costs
TrườngLoạiMô tả
energy_burn_trxdecimalSố TRX bị đốt nếu chi trả Energy qua hình thức đốt trực tiếp.
bandwidth_burn_trxdecimalSố TRX bị đốt để bù Bandwidth nếu không có sẵn miễn phí.
total_burn_trxdecimalenergy_burn_trx + bandwidth_burn_trx.
total_burn_suninttotal_burn_trx được tính theo SUN (10⁻⁶ TRX).
energy_rental_trxdecimalChi phí thuê lượng Energy cần thiết từ Netts trong khoảng thời gian dưới đây.
energy_rental_sunintTương tự như trên nhưng tính bằng SUN.
rental_time_periodstringVí dụ: "1h", "5m", hoặc "not_needed" khi thuê không phải là phương án tối ưu.
rental_price_per_unitintGiá thuê mỗi đơn vị Energy tính bằng SUN cho khoảng thời gian đã chọn.
savings_trxdecimalMức tiết kiệm khi rent so với burn (có thể âm nếu đốt là tối ưu nhất).
savings_percentagefloatMức tiết kiệm tương tự tính theo phần trăm.
recommended_methodstring"burn" hoặc "rent" — tùy chọn rẻ hơn cho yêu cầu hiện tại.
total_cost_trxdecimal | nullChi phí thực tế nếu bạn làm theo recommended_method.
sender_activation_costdecimal | nullChi phí phụ nếu tài khoản người gửi cần kích hoạt, nếu không thì null.

Ví dụ phản hồi thực tế (rút gọn)

json
{
    "status": "success",
    "data": {
        "sender":   { "address": "TFLit1...", "is_activated": true,  "trx_balance": 191.943, "usdt_balance": 24410.499, "energy_balance": 195297, "bandwidth_balance": 148, "has_usdt": true,  "...": "..." },
        "receiver": { "address": "TTKR9a...", "is_activated": true,  "trx_balance":  18.656, "usdt_balance":     0.0,   "energy_balance":      0, "bandwidth_balance": 263, "has_usdt": false, "...": "..." },
        "requirements": {
            "energy_needed": 130285,
            "bandwidth_needed": 345,
            "energy_with_buffer": 131000,
            "bandwidth_with_buffer": 360,
            "receiver_has_usdt": false
        },
        "costs": {
            "energy_burn_trx": 0.0,
            "bandwidth_burn_trx": 0.345,
            "total_burn_trx": 0.345,
            "total_burn_sun": 345000,
            "energy_rental_trx": 0.0,
            "energy_rental_sun": 0,
            "rental_time_period": "not_needed",
            "rental_price_per_unit": 0,
            "savings_trx": 0.0,
            "savings_percentage": 0.0,
            "recommended_method": "burn",
            "total_cost_trx": 0.345,
            "sender_activation_cost": null
        },
        "can_transfer": true,
        "issues": [
            "Insufficient bandwidth: have 148, need 345. Network will burn 0.345 TRX for full amount"
        ],
        "recommendations": [
            "Insufficient bandwidth: have 148, need 345. Full amount of 0.345 TRX will be burned",
            "💰 Total cost: 0.345 TRX (burn for all resources)"
        ],
        "variation_id": "CUSTOM"
    },
    "current_utc_time": "2026-04-23 11:54:13",
    "processing_time_ms": 19.27
}

Lỗi

HTTPBody (ví dụ)Khi nào
400{"code": -1, "msg": "Invalid sender address format: Txyz..."}Địa chỉ không vượt qua bước kiểm tra base58 / độ dài / checksum của TRON.
400{"code": -1, "msg": "Expected at least 2 parameters: sender&receiver"}URL không chứa hai địa chỉ được phân tách bằng &.
400{"code": -1, "msg": "Sender and receiver cannot be the same address"}Địa chỉ người gửi và người nhận trùng nhau.
429{"message": "API rate limit exceeded"}Vượt quá giới hạn tốc độ (xem cảnh báo ở đầu trang này).
500{"code": -1, "msg": "Internal server error"}Lỗi phía máy chủ không mong muốn.

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

Trên mỗi phản hồi (bao gồm cả 429), các header sau sẽ được trả về:

HeaderÝ nghĩa
X-RateLimit-Limit-SecondSố yêu cầu tối đa được phép mỗi giây (hiện tại là 1).
X-RateLimit-Remaining-SecondSố yêu cầu bạn vẫn có thể gửi trong giây này.
X-RateLimit-Limit-MinuteSố yêu cầu tối đa được phép mỗi phút (hiện tại là 60).
X-RateLimit-Remaining-MinuteSố yêu cầu bạn vẫn có thể gửi trong phút này.
Retry-AfterKhi gặp mã 429 — số giây cần chờ trước khi thử lại.

Header gỡ lỗi

Mỗi phản hồi cũng mang các mã định danh hữu ích khi tạo phiếu hỗ trợ — vui lòng đính kèm chính xác nguyên văn để chúng tôi có thể tìm thấy yêu cầu trong nhật ký chỉ trong vài giây:

HeaderÝ nghĩa
X-Request-IDID yêu cầu phía ứng dụng (được tạo bởi bộ tính toán).
X-Process-TimeThời gian xử lý của ứng dụng tính bằng mili-giây (upstream, không bao gồm Kong).
X-Kong-Request-IdID yêu cầu phía Kong (có trong nhật ký truy cập Kong).

Thời gian chờ và thử lại phía client

Bộ tính toán thực hiện các truy vấn on-chain trực tiếp tới các node TRON cho mỗi yêu cầu, vì vậy khi hệ thống chịu tải hoặc node upstream phản hồi chậm, một lệnh gọi có thể mất vài giây. Thời gian chờ của client quá ngắn sẽ dẫn đến thất bại ngay cả đối với các phản hồi bình thường.

Cấu hình khuyến nghị:

  • Thời gian chờ (Timeout) ≥ 15 giây (30 giây sẽ an toàn hơn). Mức mặc định 10 giây được sử dụng bởi nhiều HTTP client là quá ngắn.
  • Khi gặp HTTP 429, hãy tuân thủ header Retry-After (giây). Thêm một khoảng biến thiên ngẫu nhiên nhỏ (ví dụ: 0–200 ms) trước khi thử lại, sau đó sử dụng thuật toán backoff theo cấp số nhân nếu bạn vẫn bị giới hạn.
  • Khi gặp HTTP 5xx hoặc lỗi mạng, thử lại tối đa 2–3 lần với thuật toán backoff theo cấp số nhân; không gửi dồn dập các yêu cầu đến endpoint.
  • Lưu cache kết quả phía client trong 30–60 giây cho mỗi cặp (sender, receiver) — giá tài nguyên và trạng thái on-chain cơ bản hiếm khi thay đổi đủ nhanh để cần phải tính toán lại thường xuyên hơn.

Ví dụ phản hồi 429

http
HTTP/1.1 429 Too Many Requests
Content-Type: application/json; charset=utf-8
RateLimit-Limit: 1
RateLimit-Remaining: 0
RateLimit-Reset: 1
Retry-After: 1
X-RateLimit-Limit-Second: 1
X-RateLimit-Remaining-Second: 0
X-RateLimit-Limit-Minute: 60
X-RateLimit-Remaining-Minute: 0

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

Ghi chú

  • Truy cập ẩn danh: không cần X-API-KEY, không cần header Authorization, không cần danh sách trắng IP.
  • Phản hồi luôn được đóng gói trong {status, data, current_utc_time, processing_time_ms} — các hệ thống tích hợp nên đọc biểu giá từ data.costs và các yêu cầu từ data.requirements.
  • Phản hồi được tính toán theo thời gian thực — nó phản ánh giá tài nguyên TRON hiện tại từ Netts và trạng thái on-chain hiện tại của cả hai địa chỉ, vì vậy có thể xuất hiện sai lệch nhỏ giữa các lệnh gọi liên tiếp.
  • Nếu ứng dụng của bạn cần gọi bộ tính toán nhiều hơn vài lần mỗi phút (trên mỗi IP / trên mỗi CF-edge), hãy chuyển sang POST /apiv2/usdt/analyze bằng API key của bạn.