POST /apiv2/order5m
สร้างคำสั่งเช่า Energy ระยะเวลา 5 นาทีผ่านพูล Energy ภายในของ Netts
URL ของ Endpoint
POST https://netts.io/apiv2/order5mHeaders ของคำขอ
| ส่วนหัว | จำเป็น | คำอธิบาย |
|---|---|---|
| Content-Type | ใช่ | application/json |
| X-API-KEY | ใช่ | คีย์ API ของคุณจากแดชบอร์ด Netts |
| X-Real-IP | ใช่ | ที่อยู่ IP จากไวท์ลิสต์ของคุณ |
เนื้อหาของคำขอ
{
"amount": 65000,
"receiveAddress": "TQn9Y2khEsLJW1ChVWFMSMeRDow5KcbLSE"
}พารามิเตอร์
| พารามิเตอร์ | ประเภท | จำเป็น | คำอธิบาย |
|---|---|---|---|
| amount | ตัวเลขจำนวนเต็ม | ใช่ | ปริมาณ Energy ที่ต้องการเช่า (ขั้นต่ำ: 61,000, สูงสุด: 650,000) |
| receiveAddress | ข้อความ | ใช่ | ที่อยู่ TRON ที่จะรับ Energy (รูปแบบ TRC-20) |
ขีดจำกัด Energy
ปลายทางแบบ 5 นาทีรับปริมาณ Energy ระหว่าง 61,000 ถึง 650,000 หน่วยต่อหนึ่งคำสั่งซื้อ คำขอที่อยู่นอกเหนือช่วงนี้จะถูกปฏิเสธด้วย HTTP 400
ข้อมูลผู้ให้บริการ
คำสั่งซื้อ Energy แบบ 5 นาทีจะดำเนินการผ่าน พูล Energy ภายในของ Netts โดยเฉพาะ ซึ่งแตกต่างจากปลายทางแบบ 1 ชั่วโมงตรงที่ไม่มีการใช้งานผู้ให้บริการภายนอก
ความพร้อมใช้งานและกลยุทธ์การลองใหม่
เนื่องจากการมอบสิทธิ์ (Delegation) มาจากพูลภายในเท่านั้น จึงอาจเกิดภาวะไม่พร้อมให้บริการชั่วคราวในช่วงเวลาที่มีความต้องการสูง หากคุณได้รับข้อผิดพลาด 503 ให้ ลองส่งคำขอใหม่อีกครั้งหลังจากหน่วงเวลาสั้นๆ หรือเปลี่ยนไปใช้ ปลายทางแบบ 1 ชั่วโมง ซึ่งสามารถเข้าถึงผู้ให้บริการภายนอกได้หลายราย
ตัวอย่างคำขอ
cURL
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
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)}")การตอบกลับ
การตอบกลับเมื่อสำเร็จ (200 OK)
{
"detail": {
"code": 10000,
"msg": "Successful, 1.430 TRX deducted",
"data": {
"orderId": "5Mb4ee11ef86",
"paidTRX": 1.43,
"hash": "3636f97dde244fca17cdc0b2cf7fd157...",
"delegateAddress": "TNp5gsJhBmZFXgCdgjMgr8pEZ8fHgXUHDq",
"energy": 65050
}
}
}สำเร็จพร้อมการเปิดใช้งานที่อยู่ (200 OK)
เมื่อที่อยู่ผู้รับยังไม่เคยถูกเปิดใช้งานบนเครือข่าย TRON ทาง Netts จะทำการเปิดใช้งานให้โดยอัตโนมัติ โดยค่าใช้จ่ายในการเปิดใช้งานจะถูกบวกเพิ่มเข้าไปในยอดรวม:
{
"detail": {
"code": 10000,
"msg": "Successful, 1.430 TRX for energy + 1.100 TRX for address activation",
"data": {
"orderId": "5Mb4ee11ef86",
"paidTRX": 2.53,
"hash": "3636f97dde244fca17cdc0b2cf7fd157...",
"delegateAddress": "TNp5gsJhBmZFXgCdgjMgr8pEZ8fHgXUHDq",
"energy": 65050,
"activationHash": "bab38070a64b237acc9110ecf5135acc..."
}
}
}ฟิลด์การตอบกลับ
| ฟิลด์ | ประเภท | คำอธิบาย |
|---|---|---|
| detail.code | ตัวเลขจำนวนเต็ม | เป็น 10000 เสมอสำหรับคำสั่งซื้อที่สำเร็จ |
| detail.msg | ข้อความ | ข้อความแจ้งความสำเร็จพร้อมจำนวนเงินที่ถูกหัก |
| detail.data.orderId | ข้อความ | รหัสคำสั่งซื้อแบบรวมศูนย์ (รูปแบบ: 5M{id}) |
| detail.data.paidTRX | ตัวเลข | ค่าใช้จ่ายรวมในหน่วย TRX (รวมค่าธรรมเนียมการเปิดใช้งานหากมี) |
| detail.data.hash | ข้อความ | แฮชของธุรกรรมการมอบสิทธิ์ (Delegation) |
| detail.data.delegateAddress | ข้อความ | ที่อยู่ของพูลที่ทำการมอบสิทธิ์ Energy |
| detail.data.energy | ตัวเลขจำนวนเต็ม | ปริมาณ Energy + ส่วนเผื่อบัฟเฟอร์ (โดยทั่วไปคือ +50) |
| detail.data.activationHash | ข้อความ | จะปรากฏเฉพาะเมื่อมีการเปิดใช้งานที่อยู่เท่านั้น |
การตอบกลับเมื่อเกิดข้อผิดพลาด
ปริมาณ Energy ไม่ถูกต้อง (400)
{
"code": 1003,
"msg": "Energy amount must be between 61000 and 650000. Requested: 50000"
}ข้อผิดพลาดในการยืนยันตัวตน (401)
{
"detail": "Invalid API key or IP not in whitelist"
}ยอดเงินคงเหลือไม่เพียงพอ (403)
{
"code": 1004,
"msg": "Insufficient funds. Required: 1.43 TRX, Available: 0.50 TRX"
}ไม่พร้อมให้บริการ (503)
{
"code": 5003,
"msg": "Service temporarily unavailable. Energy delegation failed after retries."
}การจัดการข้อผิดพลาด 503
การตอบกลับ 503 หมายความว่าพูลภายในมีความจุเต็มชั่วคราว กลยุทธ์ที่แนะนำ:
- รอประมาณ 2-3 วินาทีแล้วลองส่งคำสั่งซื้อแบบ 5 นาทีใหม่อีกครั้ง
- หากยังคงไม่พร้อมใช้งาน ให้สลับไปใช้ ปลายทางแบบ 1 ชั่วโมง ซึ่งใช้งานผู้ให้บริการหลายราย
ข้อผิดพลาดภายในเซิร์ฟเวอร์ (500)
{
"code": 5000,
"msg": "Internal server error occurred"
}ข้อมูลอ้างอิงรหัสข้อผิดพลาด
| รหัส | คำอธิบาย | สถานะ HTTP |
|---|---|---|
10000 | สำเร็จ | 200 |
10000 | สำเร็จ (การตอบกลับจากแคช) | 208 |
- | คำขอซ้ำซ้อนกำลังอยู่ระหว่างดำเนินการ | 409 |
1003 | ปริมาณ Energy อยู่นอกช่วงที่กำหนด | 400 |
1004 | ยอดเงินคงเหลือไม่เพียงพอ | 403 |
1005 | ยังไม่ได้กำหนดค่าที่อยู่ผู้ชำระเงินของผู้ใช้ | 400 |
5000 | ข้อผิดพลาดภายในเซิร์ฟเวอร์ | 500 |
5003 | บริการ Energy ไม่พร้อมใช้งาน | 503 |
ขีดจำกัดอัตราการเรียกใช้
ขีดจำกัดอัตราต่อไปนี้มีผลกับปลายทางนี้ (ต่อที่อยู่ IP):
| ช่วงเวลา | ขีดจำกัด | คำอธิบาย |
|---|---|---|
| 1 วินาที | 50 คำขอ | สูงสุด 50 คำขอต่อวินาที |
ส่วนหัวขีดจำกัดอัตราการเรียกใช้
RateLimit-Limit: 50
RateLimit-Remaining: 49
RateLimit-Reset: 1
X-RateLimit-Limit-Second: 50
X-RateLimit-Remaining-Second: 49เกินขีดจำกัดอัตราการเรียกใช้ (429)
{
"message": "API rate limit exceeded"
}การทำงานแบบ Idempotency
API รองรับ Idempotency เพื่อป้องกันการประมวลผลคำสั่งซื้อซ้ำ เมื่อคุณส่งคำขอที่เหมือนกันหลายรายการ ระบบจะทำให้มั่นใจว่าคำสั่งซื้อจะถูกประมวลผลเพียงครั้งเดียวเท่านั้น
หลักการทำงานของ Idempotency
ความซ้ำซ้อนของคำขอจะพิจารณาจากชุดข้อมูลร่วมดังต่อไปนี้:
- การประทับเวลาของคำขอ (หน้าต่างเวลา 2 วินาที)
- ปริมาณ Energy
- ที่อยู่ผู้รับ
- คีย์ API
แต่ละคำขอจะได้รับ หน้าต่างเวลาความเฉพาะตัว 2 วินาที คำขอที่มีพารามิเตอร์เหมือนกันทั้งหมดภายในหน้าต่างเวลานี้จะถือว่าเป็นรายการซ้ำ
การระบุคีย์ของคุณเอง
คุณสามารถควบคุม Idempotency ได้ด้วยตนเองโดยการส่งส่วนหัว X-Idempotency-Key เมื่อมีส่วนหัวนี้ ค่าดังกล่าวจะถูกใช้เป็นเกณฑ์ตัดสินแต่เพียงผู้เดียวว่าคำขอนั้นเป็นรายการซ้ำหรือไม่ และจะไม่มีการใช้ชุดข้อมูลร่วมอัตโนมัติตามด้านบน ในกรณีที่ไม่มีส่วนหัวนี้ ทุกอย่างจะทำงานตามปกติ โดยเซิร์ฟเวอร์จะสร้างคีย์ขึ้นมาให้คุณโดยอัตโนมัติ
กฎเกณฑ์จะเหมือนกันกับบน /apiv2/order1h:
| ส่วนหัว | X-Idempotency-Key |
| รูปแบบ | อักขระเลขฐานสิบหกพิมพ์เล็ก 64 ตัว เท่านั้น — ค่าสรุปย่อยแบบ SHA-256 |
| อายุการใช้งาน | 24 ชั่วโมง นับจากคำขอแรกที่มีคีย์ดังกล่าว |
| ขอบเขต | บัญชีของคุณ ค่าเดียวกันที่ส่งโดยบัญชีอื่นจะไม่มีวันส่งคืนผลลัพธ์ของคุณ |
คีย์ที่มีรูปแบบอื่นใด — เช่น UUID ที่มีเครื่องหมายขีดคั่น, base64, เลขฐานสิบหกตัวพิมพ์ใหญ่ — จะถูกปฏิเสธด้วย 400 ก่อนที่คำสั่งซื้อจะถูกสร้างและก่อนที่จะมีการเรียกเก็บเงิน:
{
"detail": "Invalid idempotency key format. Must be 64-character hexadecimal string."
}สร้างคีย์ขึ้นจากคีย์ API ของคุณเพื่อให้มีความเฉพาะเจาะจงสำหรับบัญชีของคุณและสามารถสร้างซ้ำได้เมื่อทำการลองใหม่ — ดูตัวอย่างการทำงานได้ที่ หน้าคำสั่งซื้อ 1 ชั่วโมง ระบุระยะเวลาการเช่าเข้าไปในข้อความที่คุณนำไปทำแฮชด้วย: การเช่าไปยังที่อยู่เดียวกันเป็นเวลา 5 นาทีและการเช่าเป็นเวลา 1 ชั่วโมงถือเป็นคำสั่งซื้อที่ต่างกัน และการนำคีย์เดียวกันมาใช้ซ้ำสำหรับทั้งสองรายการจะส่งผลให้การตอบกลับของคำสั่งซื้อแรกถูกส่งคืนสำหรับคำขอที่สอง
การสร้างคำสั่งซื้อที่เหมือนกันสองรายการ
ข้อควรระวังเช่นเดียวกันกับปลายทางรายชั่วโมง โดยมีหน้าต่างเวลาที่กว้างกว่า คำสั่งซื้อที่เหมือนกันสองรายการ — ปริมาณเท่ากันไปยังที่อยู่เดียวกัน — จะแยกไม่ออกจากการลองส่งใหม่ และมีเพียงเวลาที่มาถึงเท่านั้นที่แยกความแตกต่างได้
ในกรณีที่ไม่มีคีย์ที่คุณกำหนดเอง:
| ช่องว่างระหว่างคำขอทั้งสอง | สิ่งที่จะเกิดขึ้น |
|---|---|
| ภายในหน้าต่างเวลา 2 วินาทีเดียวกัน | คำขอที่สองจะถือเป็นการส่งซ้ำ คำขอดังกล่าวจะ ไม่ถูกดำเนินการ: คุณจะได้รับ 208 และการตอบกลับของคำสั่งซื้อแรก และจะไม่มีการคิดค่าบริการสำหรับคำขอนั้น |
| ห่างกันมากกว่าสองวินาที | ถือเป็นคนละคีย์ — คำสั่งซื้อทั้งสองจะถูกสร้างขึ้นและถูกคิดค่าบริการทั้งคู่ |
ดังนั้นควรเว้นระยะห่าง มากกว่าสองวินาที ระหว่างคำสั่งซื้อที่เหมือนกันสองรายการ และตรวจสอบรหัสสถานะ: 208 หมายความว่าคำสั่งซื้อที่คุณเพิ่งส่งไปนั้นไม่ได้ถูกสร้างขึ้น
การหยุดรอเป็นเพียงวิธีแก้ปัญหาชั่วคราว ไม่ใช่การแก้ไขที่ต้นเหตุ — นอกจากนี้ยังคั่นคำขอที่คุณไม่เคยตั้งใจจะส่งซ้ำด้วย เช่น การลองใหม่หลังจากหมดเวลา หรือข้อความที่ถูกส่งซ้ำโดยคิวของคุณ ซึ่งแต่ละกรณีจะกลายเป็นคำสั่งซื้อแยกต่างหากพร้อมค่าบริการแยกกัน การส่งคีย์ของคุณเองคือสิ่งที่จะช่วยจัดการปัญหานี้ได้อย่างแท้จริง: ใช้ nonce ใหม่สำหรับคำสั่งซื้อใหม่ และใช้ nonce ของความพยายามครั้งแรกสำหรับการลองใหม่ คำอธิบายเหตุผลโดยละเอียดอยู่ที่ หน้าคำสั่งซื้อ 1 ชั่วโมง
รหัสสถานะ HTTP สำหรับคำขอซ้ำซ้อน
| รหัสสถานะ | ชื่อ | คำอธิบาย |
|---|---|---|
| 200 | OK | ประมวลผลคำสั่งซื้อสำเร็จ (คำขอแรก) |
| 208 | Already Reported | คำสั่งซื้อได้รับการประมวลผลแล้ว ส่งคืนการตอบกลับจากแคช |
| 409 | Conflict | คำขอกำลังอยู่ระหว่างการประมวลผล ห้ามลองส่งใหม่ |
คำขอซ้ำซ้อน - ประมวลผลแล้ว (208)
{
"detail": {
"code": 10000,
"msg": "Successful, 1.430 TRX deducted",
"data": {
"hash": "3636f97dde244fca17cdc0b2cf7fd157...",
"energy": 65050,
"orderId": "5Mb4ee11ef86",
"paidTRX": 1.43,
"delegateAddress": "TNp5gsJhBmZFXgCdgjMgr8pEZ8fHgXUHDq"
}
},
"idempotency": {
"status": "completed",
"cached": true,
"original_created_at": "2026-03-21T08:53:52.498000"
}
}คำขอซ้ำซ้อน - กำลังประมวลผล (409)
{
"success": false,
"error": "duplicate_request_processing",
"message": "This request is currently being processed. Please wait and do not retry.",
"retry_after_seconds": 3
}แนวทางปฏิบัติที่ดีที่สุด
- อย่าส่งคำขอพร้อมกันแบบคู่ขนาน ด้วยพารามิเตอร์เดียวกัน - ให้รอการตอบกลับของแต่ละคำขอ
- จัดการการตอบกลับ 409 โดยการรอ ไม่ใช่การลองส่งใหม่ในทันที
- ตรวจสอบฟิลด์
idempotency.cachedเพื่อระบุการตอบกลับที่มาจากแคช
การเปรียบเทียบ: คำสั่งซื้อแบบ 5 นาที กับ 1 ชั่วโมง
| ฟีเจอร์ | คำสั่งซื้อแบบ 5 นาที | คำสั่งซื้อแบบ 1 ชั่วโมง |
|---|---|---|
| ปลายทาง | /apiv2/order5m | /apiv2/order1h |
| ระยะเวลา | 5 นาที | 1 ชั่วโมง |
| ช่วง Energy | 61,000 - 650,000 | 61,000 - 3,000,000 |
| ผู้ให้บริการ | พูลภายในของ Netts เท่านั้น | พูลภายใน + ผู้ให้บริการภายนอก |
| ราคา | ต่ำกว่า (อัตรา 5 นาที) | อัตรามาตรฐานรายชั่วโมง |
| ความพร้อมใช้งาน | อาจมีจำกัดในช่วงที่มีการใช้งานสูง | สูง (มีระบบสำรองจากผู้ให้บริการหลายราย) |
| เหมาะสำหรับ | ธุรกรรมย่อยที่เกิดขึ้นบ่อยครั้ง | ธุรกรรมขนาดใหญ่หรือต้องการการส่งมอบที่แน่นอน |
หมายเหตุ
- Energy จะถูกส่งมอบทันทีเมื่อคำสั่งซื้อสำเร็จ (โดยทั่วไปภายใน 0.5-2 วินาที)
- การหมดเวลาตอบกลับของ API: สูงสุด 10 วินาที (รวมการพยายามลองใหม่ภายในระบบแล้ว)
- การเปิดใช้งานที่อยู่: หากที่อยู่ผู้รับยังไม่ได้เปิดใช้งาน Netts จะเปิดใช้งานให้ตามราคาทุน ค่าใช้จ่ายในการเปิดใช้งานจะถูกเรียกเก็บเพียงครั้งเดียวต่อหนึ่งที่อยู่
- ระยะเวลา: คงที่ 5 นาที (300 วินาที)
- ปริมาณ Energy ขั้นต่ำ: 61,000 หน่วย
- ปริมาณ Energy สูงสุด: 650,000 หน่วยต่อคำสั่งซื้อ
- ส่วนเผื่อ Energy: เพิ่มให้อัตโนมัติ +50 หน่วย (ไม่มีค่าใช้จ่าย)
- รูปแบบรหัสคำสั่งซื้อ:
5M{id}สำหรับการติดตามแบบรวมศูนย์ - การกำหนดราคา: ปรับเปลี่ยนตามช่วงเวลาของวันผ่าน Pricing API
- การจำกัดอัตราการเรียกใช้: 50 คำขอต่อวินาทีต่อที่อยู่ IP
- พูลภายในเท่านั้น: หากพูลมีความจุเต็ม ให้ลองใหม่หลังจากหน่วงเวลาสั้นๆ หรือใช้ ปลายทางแบบ 1 ชั่วโมง เป็นระบบสำรอง