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

GET /apiv2/usdt/{sender}&

คำนวณต้นทุนการโอน TRON USDT (endpoint แบบสาธารณะ ไม่ต้องใช้ API key)

ส่งคืนการวิเคราะห์โดยละเอียดของบัญชีผู้ส่งและผู้รับ ความต้องการทรัพยากร (Energy/Bandwidth) และแนวทางต้นทุนที่แนะนำ

ขีดจำกัดอัตราการเรียกใช้ต่ำ — มีไว้สำหรับการใช้งานเป็นครั้งคราว / การทดสอบ

endpoint นี้ถูกแชร์ร่วมกันทั่วโลก และถูกจำกัดอัตราการเรียกใช้ไว้ที่ 1 คำขอ/วินาที และ 60 คำขอ/นาที เมื่อแอปพลิเคชันของคุณอยู่เบื้องหลัง Cloudflare หรือ reverse proxy อื่น ๆ ขีดจำกัดนี้อาจถูกแชร์ร่วมกันระหว่างไคลเอนต์ทั้งหมดที่เข้าถึง Netts ผ่านโหนดเดียวกัน ดังนั้นคุณอาจพบข้อผิดพลาด 429 Too Many Requests เร็วกว่า 60 คำขอ/นาทีจากผู้ใช้รายเดียว

สำหรับการใช้งานที่มากกว่าการเรียกดูเป็นครั้งคราว ให้ใช้ endpoint ที่ต้องยืนยันตัวตน POST /apiv2/usdt/analyze — ซึ่งมีขีดจำกัดต่อ key ที่สูงกว่ามาก (50 คำขอ/วินาที)

URL ของ Endpoint

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

พารามิเตอร์ใน URL

พารามิเตอร์ชนิดจำเป็นคำอธิบาย
senderstringใช่ที่อยู่ TRON ของผู้ส่ง
receiverstringใช่ที่อยู่ TRON ของผู้รับ

ที่อยู่จะถูกส่งในพาธ โดยคั่นด้วย เครื่องหมายแอมเพอร์แซนด์ (&) ทั้งสองที่อยู่ต้องเป็นที่อยู่ TRON แบบ base58 ที่ถูกต้อง (ความยาว 34 ตัวอักษร, ขึ้นต้นด้วย T, และมี checksum ที่ถูกต้อง)

ตัวอย่างคำขอ

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

การตอบกลับ

สำเร็จ (200 OK)

โครงสร้างระดับบนสุด:

json
{
    "status": "success",
    "data": { /* TransferAnalysis — ดูด้านล่าง */ },
    "current_utc_time": "2026-04-23 11:54:13",
    "processing_time_ms": 19.27
}

data (TransferAnalysis)

ฟิลด์ชนิดคำอธิบาย
senderAddressInfoข้อมูลบัญชีฉบับเต็มสำหรับผู้ส่ง (ยอดคงเหลือ, การ stake, การ delegate, การเปิดใช้งาน)
receiverAddressInfoข้อมูลบัญชีฉบับเต็มสำหรับผู้รับ
requirementsRequirementsEnergy / Bandwidth ที่การโอนจะต้องใช้ (ค่าจริง + บัฟเฟอร์ความปลอดภัย)
costsCostsรายละเอียดเปรียบเทียบต้นทุนระหว่าง Burn กับ Rent และวิธีการที่แนะนำ
can_transferbooleantrue หากสามารถทำการโอนได้ด้วยทรัพยากร/ราคาปัจจุบัน
issuesstring[]ปัญหาที่ตรวจพบระหว่างการวิเคราะห์ (เช่น Bandwidth ไม่เพียงพอ)
recommendationsstring[]คำแนะนำที่อ่านเข้าใจได้ง่ายสำหรับไคลเอนต์
variation_idstring | nullID ของสถานการณ์ที่ตรงกัน (เช่น "CUSTOM") จากแค็ตตาล็อกรูปแบบภายใน
AddressInfo

ฟิลด์ทั่วไปที่คุณจะใช้ในการรวมระบบ: address, is_activated, trx_balance, usdt_balance, has_usdt, energy_balance, bandwidth_balance ฟิลด์ระดับต่ำเพิ่มเติมสำหรับการใช้งานขั้นสูง: 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
ฟิลด์ชนิดคำอธิบาย
energy_neededintหน่วย Energy พื้นฐานที่จำเป็นสำหรับการโอน
bandwidth_neededintหน่วย Bandwidth พื้นฐานที่จำเป็น
energy_with_bufferintEnergy ที่ปัดเศษขึ้นเป็นระดับการเช่าที่ปลอดภัย (เช่น 131 000)
bandwidth_with_bufferintBandwidth ที่รวมบัฟเฟอร์ความปลอดภัยเล็กน้อยแล้ว
receiver_has_usdtbooleanผู้รับมี USDT อยู่แล้วหรือไม่ (ส่งผลต่อ Energy)
Costs
ฟิลด์ชนิดคำอธิบาย
energy_burn_trxdecimalTRX ที่ถูกเผาหากชำระค่า Energy ด้วยการเผาโดยตรง
bandwidth_burn_trxdecimalTRX ที่ถูกเผาเพื่อให้ครอบคลุม Bandwidth หากไม่มีเหลือให้ใช้ฟรี
total_burn_trxdecimalenergy_burn_trx + bandwidth_burn_trx
total_burn_suninttotal_burn_trx ในหน่วย SUN (10⁻⁶ TRX)
energy_rental_trxdecimalต้นทุนในการเช่า Energy ที่จำเป็นจาก Netts สำหรับช่วงเวลาด้านล่าง
energy_rental_sunintเหมือนกับด้านบนแต่แสดงในหน่วย SUN
rental_time_periodstringเช่น "1h", "5m" หรือ "not_needed" เมื่อการเช่าไม่ใช่แนวทางที่ดีที่สุด
rental_price_per_unitintราคาค่าเช่าต่อหน่วย Energy ในหน่วย SUN สำหรับช่วงเวลาที่เลือก
savings_trxdecimalความประหยัดเมื่อเลือก rent เทียบกับ burn (อาจติดลบได้หากการเผาคุ้มค่าที่สุด)
savings_percentagefloatเหมือนข้างต้นแต่แสดงเป็นเปอร์เซ็นต์
recommended_methodstring"burn" หรือ "rent" — ตัวเลือกที่ถูกกว่าสำหรับคำขอปัจจุบัน
total_cost_trxdecimal | nullต้นทุนจริงหากคุณทำตาม recommended_method
sender_activation_costdecimal | nullต้นทุนเพิ่มเติมหากบัญชีผู้ส่งจำเป็นต้องเปิดใช้งาน มิฉะนั้นจะเป็น null

ตัวอย่างการตอบกลับจริง (แบบย่อ)

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
}

ข้อผิดพลาด

HTTPเนื้อหา (ตัวอย่าง)กรณีที่เกิด
400{"code": -1, "msg": "Invalid sender address format: Txyz..."}ที่อยู่ไม่ผ่านการตรวจสอบความถูกต้องของ TRON base58 / ความยาว / checksum
400{"code": -1, "msg": "Expected at least 2 parameters: sender&receiver"}URL ไม่ได้มีสองที่อยู่ที่คั่นด้วย &
400{"code": -1, "msg": "Sender and receiver cannot be the same address"}ที่อยู่ผู้ส่งและผู้รับเป็นที่อยู่เดียวกัน
429{"message": "API rate limit exceeded"}เกินขีดจำกัดอัตราการเรียกใช้ (ดูคำเตือนที่ด้านบนสุดของหน้านี้)
500{"code": -1, "msg": "Internal server error"}ความล้มเหลวที่ไม่คาดคิดจากฝั่งเซิร์ฟเวอร์

ส่วนหัวจำกัดอัตราการเรียกใช้

ในการตอบกลับทุกครั้ง (รวมถึง 429) ส่วนหัวต่อไปนี้จะถูกส่งกลับมาด้วย:

ส่วนหัวความหมาย
X-RateLimit-Limit-Secondจำนวนคำขอสูงสุดที่อนุญาตต่อวินาที (ปัจจุบันคือ 1)
X-RateLimit-Remaining-Secondจำนวนคำขอที่ยังสามารถส่งได้ในวินาทีนี้
X-RateLimit-Limit-Minuteจำนวนคำขอสูงสุดที่อนุญาตต่อนาที (ปัจจุบันคือ 60)
X-RateLimit-Remaining-Minuteจำนวนคำขอที่ยังสามารถส่งได้ในนาทีนี้
Retry-Afterเมื่อเกิดข้อผิดพลาด 429 — จำนวนวินาทีที่ต้องรอก่อนลองใหม่อีกครั้ง

ส่วนหัวสำหรับการดีบัก

ทุกการตอบกลับจะมีตัวระบุที่สะดวกต่อการใช้งานเมื่อต้องการเปิดคำร้องแจ้งปัญหา (support ticket) — โปรดระบุค่าเหล่านี้โดยไม่แก้ไข เพื่อให้เราสามารถค้นหาคำขอดังกล่าวในบันทึกข้อมูล (logs) ของเราได้ภายในไม่กี่วินาที:

ส่วนหัวความหมาย
X-Request-IDRequest ID ฝั่งแอปพลิเคชัน (สร้างขึ้นโดยโปรแกรมคำนวณ)
X-Process-Timeเวลาประมวลผลของแอปพลิเคชันในหน่วยมิลลิวินาที (ฝั่งต้นทาง ไม่รวม Kong)
X-Kong-Request-IdRequest ID ฝั่ง Kong (มีอยู่ในบันทึกการเข้าถึงของ Kong)

การตั้งค่าไทม์เอาต์และการลองใหม่ฝั่งไคลเอนต์

ตัวคำนวณจะทำการสอบถามข้อมูลสดบนเชนไปยังโหนด TRON สำหรับแต่ละคำขอ ดังนั้นภายใต้สภาวะที่มีภาระงานสูงหรือโหนดต้นทางทำงานช้า การเรียกใช้ครั้งเดียวอาจใช้เวลา หลายวินาที การตั้งค่าไทม์เอาต์ฝั่งไคลเอนต์ที่สั้นเกินไปจะทำให้ล้มเหลว แม้ว่าการตอบกลับจะปกติสมบูรณ์ก็ตาม

การตั้งค่าที่แนะนำ:

  • ตั้งเวลา Timeout ≥ 15 วินาที (30 วินาทีจะปลอดภัยยิ่งขึ้น) ค่าเริ่มต้น 10 วินาทีที่ใช้ใน ไคลเอนต์ HTTP หลายตัวนั้นสั้นเกินไป
  • เมื่อพบ HTTP 429 ให้ปฏิบัติตามส่วนหัว Retry-After (วินาที) และเพิ่ม jitter เล็กน้อย (เช่น 0–200 มิลลิวินาที) ก่อนลองใหม่ จากนั้นใช้ exponential backoff หากคุณยังคงชนขีดจำกัด
  • เมื่อพบ HTTP 5xx หรือข้อผิดพลาดของเครือข่าย ให้ลองใหม่ได้มากที่สุด 2–3 ครั้งด้วย exponential backoff และอย่าส่งคำขอถี่จนเป็นการระดมยิง endpoint
  • แคชผลลัพธ์ไว้ที่ฝั่งไคลเอนต์เป็นเวลา 30–60 วินาที สำหรับแต่ละคู่ (sender, receiver) — เนื่องจากราคาของทรัพยากรและสถานะบนเชน แทบจะไม่มีการเปลี่ยนแปลงเร็วพอที่จะต้องคำนวณใหม่ถี่ขนาดนั้น

ตัวอย่างการตอบกลับ 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"}

หมายเหตุ

  • การเข้าถึงแบบไม่ระบุตัวตน: ไม่ต้องใช้ X-API-KEY, ไม่ต้องมีส่วนหัว Authorization, ไม่มีการจำกัด IP whitelist
  • การตอบกลับจะถูกห่อหุ้มใน {status, data, current_utc_time, processing_time_ms} เสมอ — การรวมระบบควรอ่านราคาจาก data.costs และอ่านความต้องการทรัพยากรจาก data.requirements
  • การตอบกลับถูกคำนวณแบบเรียลไทม์ — ซึ่งสะท้อนถึงราคาปัจจุบันของทรัพยากร TRON จาก Netts และสถานะบนเชนล่าสุดของทั้งสองที่อยู่ ดังนั้นอาจพบความแตกต่างเล็กน้อยระหว่างการเรียกใช้งานที่ต่อเนื่องกัน
  • หากแอปพลิเคชันของคุณจำเป็นต้องเรียกใช้ตัวคำนวณมากกว่าสองสามครั้ง ต่อนาที (ต่อ IP / ต่อ CF edge) ให้เปลี่ยนไปใช้ POST /apiv2/usdt/analyze พร้อมระบุ API key ของคุณ