API ตรวจสอบสถานะตามเวลา (Time Status API)
รับข้อมูลสถานะสำหรับที่อยู่ใน Host Mode — ทั้งหมดในบัญชีของคุณ หรือเฉพาะที่อยู่เดียว
มีสอง endpoint:
- POST /apiv2/time/status — สถานะสำหรับทุกที่อยู่ของคุณ (พร้อมการแบ่งหน้าและสรุปข้อมูลระดับบัญชีแบบไม่บังคับ)
- GET /apiv2/time/status/{address} — สถานะสำหรับหนึ่งที่อยู่ที่ระบุเจาะจง
POST /apiv2/time/status
URL ของ Endpoint
POST https://netts.io/apiv2/time/statusการยืนยันตัวตน
ระบุ API key ของคุณในเนื้อหาคำขอ (api_key) หรือในส่วนหัว X-API-KEY โดย IP ของคำขอต้องอยู่ใน whitelist ที่กำหนดค่าไว้สำหรับ API key ของคุณ
เนื้อหาคำขอ
{
"api_key": "your_api_key",
"page": 1,
"page_size": 50
}| พารามิเตอร์ | ชนิด | จำเป็น | คำอธิบาย |
|---|---|---|---|
| api_key | string | ใช่ | API key (หรือส่วนหัว X-API-KEY) |
| page | integer | ไม่ | หมายเลขหน้า, ≥ 1 จำเป็นต้องใช้คู่กับ page_size |
| page_size | integer | ไม่ | จำนวนที่อยู่ต่อหน้า, 1–100 จำเป็นต้องใช้คู่กับ page |
การแบ่งหน้า: หากระบุทั้ง page และ page_size ผลลัพธ์จะถูกแบ่งหน้าและมีออบเจกต์ pagination แนบมาด้วย หากไม่มีพารามิเตอร์เหล่านี้ ระบบจะส่งคืนที่อยู่ทั้งหมด (สูงสุด 1000 รายการ) โดยเรียงลำดับตามเวลาที่สร้าง (ใหม่ที่สุดขึ้นก่อน)
ตัวอย่างคำขอ
cURL (ทุกที่อยู่):
curl -X POST https://netts.io/apiv2/time/status \
-H "Content-Type: application/json" \
-d '{ "api_key": "YOUR_API_KEY_HERE" }'cURL (แบบแบ่งหน้า):
curl -X POST https://netts.io/apiv2/time/status \
-H "Content-Type: application/json" \
-d '{ "api_key": "YOUR_API_KEY_HERE", "page": 1, "page_size": 50 }'Python:
import requests
resp = requests.post(
"https://netts.io/apiv2/time/status",
json={"api_key": "YOUR_API_KEY_HERE"}, # add "page"/"page_size" to paginate
timeout=30,
)
result = resp.json()
if result["code"] == 0:
for a in result["data"]["addresses"]:
# cycles_remaining is None in infinity mode — no limit to count down
left = "unlimited" if a["cycles_remaining"] is None else f"{a['cycles_remaining']} left"
print(a["address"], a["mode"], a["status"], left,
f"spent {a['total_spent']} TRX")
else:
print("Error:", result["msg"])Node.js:
const axios = require('axios');
axios.post('https://netts.io/apiv2/time/status', { api_key: 'YOUR_API_KEY_HERE' })
.then(({ data: result }) => {
if (result.code === 0) {
result.data.addresses.forEach(a => {
// cycles_remaining is null in infinity mode — no limit to count down
const left = a.cycles_remaining === null ? 'unlimited' : `${a.cycles_remaining} left`;
console.log(a.address, a.mode, a.status, left, `spent ${a.total_spent} TRX`);
});
} else {
console.error('Error:', result.msg);
}
})
.catch(err => console.error('Request failed:', err.response?.data || err.message));การตอบกลับ
{
"code": 0,
"msg": "Status retrieved successfully",
"data": {
"summary": {
"total_addresses": 3,
"active_addresses": 2,
"infinity_mode_count": 1,
"total_cycles_ordered": 25,
"total_open_orders": 3
},
"order_statistics": {
"total_orders": 12,
"open_orders": 3,
"closed_orders": 9,
"total_cycles_in_open_orders": 25,
"total_delegations": 340,
"total_amount_spent": 1502.4471
},
"addresses": [
{
"address": "TQn9Y2khEsLJW1ChVWFMSMeRDow5KcbLSE",
"status": "active",
"mode": "normal",
"cycles_ordered": 25,
"cycle_set": 25,
"cycles_completed": 10,
"cycles_remaining": 15,
"cycles_total_lifetime": 214,
"current_cycle_no": 3,
"open_orders": 1,
"total_spent": 962.1184,
"bandwidth_delegated": true,
"created_at": "2026-07-08T12:00:00.000000",
"updated_at": "2026-07-09T10:00:00.000000"
},
{
"address": "TYn8Y3khEsLJW2ChVWFMSMeRDow6KcbMTF",
"status": "active",
"mode": "infinity",
"cycles_ordered": null,
"cycle_set": 0,
"cycles_completed": 83,
"cycles_remaining": null,
"cycles_total_lifetime": 115,
"current_cycle_no": 5,
"open_orders": 1,
"total_spent": 519.1234,
"bandwidth_delegated": true,
"created_at": "2026-07-08T08:00:00.000000",
"updated_at": "2026-07-09T09:30:00.000000"
}
],
"timestamp": "2026-07-09T12:34:50.123456"
}
}เมื่อมีการแบ่งหน้า ฟิลด์ data จะประกอบด้วย:
"pagination": {
"page": 1,
"page_size": 50,
"total_items": 150,
"total_pages": 3,
"has_next": true,
"has_prev": false
}ฟิลด์ใน summary
| ฟิลด์ | คำอธิบาย |
|---|---|
| total_addresses | จำนวนที่อยู่ทั้งหมดภายใต้บัญชีของคุณ |
| active_addresses | ที่อยู่ที่กำลังใช้งานอยู่ในปัจจุบัน |
| infinity_mode_count | ที่อยู่ที่เปิดใช้งานซึ่งทำงานใน infinity mode |
| total_cycles_ordered | ผลรวมของรอบที่สั่งซื้อในคำสั่งซื้อที่ยังเปิดอยู่ (ไม่รวมคำสั่งซื้อ infinity) |
| total_open_orders | จำนวนคำสั่งซื้อที่ยังเปิดอยู่จากทุกที่อยู่ |
ฟิลด์ใน order_statistics
| ฟิลด์ | คำอธิบาย |
|---|---|
| total_orders | คำสั่งซื้อทั้งหมดที่เคยสร้างขึ้น |
| open_orders | คำสั่งซื้อที่กำลังเปิดอยู่ในปัจจุบัน |
| closed_orders | คำสั่งซื้อที่ปิดไปแล้ว |
| total_cycles_in_open_orders | รอบทั้งหมดในคำสั่งซื้อที่ยังเปิดอยู่ (ไม่รวม infinity) |
| total_delegations | การมอบสิทธิ์ที่เกิดขึ้นจริงจากทุกที่อยู่ของคุณ |
| total_amount_spent | ยอดที่ถูกเรียกเก็บจริง ในหน่วย TRX — ยอดรวมที่หักออกจากยอดคงเหลือของคุณจริง ๆ |
ฟิลด์ในออบเจกต์ Address
| ฟิลด์ | ชนิด | คำอธิบาย |
|---|---|---|
| address | string | ที่อยู่ TRON |
| status | string | "active" หรือ "inactive" |
| mode | string | "normal", "infinity", หรือ "off" (เมื่อไม่ได้ใช้งาน) |
| cycles_ordered | integer | null | รอบที่สั่งซื้อในคำสั่งซื้อที่ยังเปิดอยู่ เป็น null ใน infinity mode |
| cycle_set | integer | ค่า cycle_set ที่บันทึกไว้สำหรับที่อยู่ |
| cycles_completed | integer | รอบที่ใช้ไปนับตั้งแต่ที่อยู่เริ่มทำงานครั้งล่าสุด รีเซ็ตเมื่อคุณหยุดโหมดหรือเมื่อรอบที่สั่งซื้อหมดลง |
| cycles_remaining | integer | null | cycles_ordered − cycles_completed เป็น null ใน infinity mode |
| cycles_total_lifetime | integer | การมอบสิทธิ์ทั้งหมดสำหรับที่อยู่นี้ตลอดประวัติการใช้งาน ไม่มีการรีเซ็ต |
| current_cycle_no | integer | null | ลำดับของการมอบสิทธิ์ปัจจุบันนับตั้งแต่ที่อยู่เริ่มทำงานครั้งล่าสุด เป็น null เมื่อไม่มีการมอบสิทธิ์ที่กำลังทำงาน |
| open_orders | integer | จำนวนคำสั่งซื้อที่ยังเปิดอยู่สำหรับที่อยู่นี้ |
| total_spent | number | ยอดที่ถูกเรียกเก็บจริงสำหรับที่อยู่นี้ ในหน่วย TRX |
| bandwidth_delegated | boolean | แสดงว่ามีการมอบสิทธิ์ Bandwidth อยู่หรือไม่ Bandwidth ให้บริการฟรีและรวมอยู่ในราคารอบแล้ว |
| created_at | string | ISO timestamp เมื่อตอนที่เพิ่ม |
| updated_at | string | ISO timestamp ของการอัปเดตล่าสุด |
Infinity mode.
cycles_orderedและcycles_remainingจะเป็นnullไม่ใช่0— เนื่องจากไม่มีขีดจำกัดให้นับถอยหลัง ให้ถือว่าnullคือ "ไม่จำกัด" และอย่าตีความว่าเป็น "ไม่มีรอบเหลืออยู่" โดยที่cycles_completedยังคงรายงานตัวเลขจริงตามปกติ
ตัวนับรอบสามตัว กับสามความหมายที่ต่างกัน
cycles_completedนับเฉพาะตั้งแต่ที่อยู่เริ่มทำงานครั้งล่าสุด,cycles_total_lifetimeนับตลอดประวัติการใช้งานทั้งหมด และcurrent_cycle_noคือลำดับของการมอบสิทธิ์ปัจจุบัน ค่าเหล่านี้อาจแตกต่างกันได้ตามปกติ — สำหรับที่อยู่หนึ่ง คุณอาจเห็นค่า83,115และ5ในเวลาเดียวกัน
ข้อผิดพลาด
ข้อผิดพลาดทั้งหมดจะใช้ code = -1:
| msg | สาเหตุ |
|---|---|
API key required in body or X-API-KEY header | ไม่ได้ระบุ API key |
Invalid API key or IP not in whitelist | การยืนยันตัวตนล้มเหลว |
Page number must be >= 1 | page มีค่าน้อยกว่า 1 |
Page size must be >= 1 | page_size มีค่าน้อยกว่า 1 |
Page size must be <= 100 | page_size มีค่ามากกว่า 100 |
Database error getting status | ข้อผิดพลาดชั่วคราวทางฝั่งเซิร์ฟเวอร์ — ให้ลองใหม่อีกครั้ง |
Internal server error | ข้อผิดพลาดที่ไม่คาดคิด — ให้ลองใหม่อีกครั้งหรือติดต่อฝ่ายสนับสนุน |
GET /apiv2/time/status/
สถานะสำหรับที่อยู่รายการเดียว
URL ของ Endpoint
GET https://netts.io/apiv2/time/status/{address}การยืนยันตัวตน
ส่ง API key ของคุณในส่วนหัว X-API-KEY โดย IP ของคำขอต้องอยู่ใน whitelist
ตัวอย่างคำขอ
curl -X GET "https://netts.io/apiv2/time/status/TQn9Y2khEsLJW1ChVWFMSMeRDow5KcbLSE" \
-H "X-API-KEY: YOUR_API_KEY_HERE"import requests
address = "TQn9Y2khEsLJW1ChVWFMSMeRDow5KcbLSE"
resp = requests.get(
f"https://netts.io/apiv2/time/status/{address}",
headers={"X-API-KEY": "YOUR_API_KEY_HERE"},
timeout=30,
)
print(resp.json())การตอบกลับ
{
"code": 0,
"msg": "Address status retrieved successfully",
"data": {
"address_info": {
"address": "TQn9Y2khEsLJW1ChVWFMSMeRDow5KcbLSE",
"status": "active",
"mode": "normal",
"cycles_ordered": 25,
"cycle_set": 25,
"cycles_completed": 10,
"cycles_remaining": 15,
"cycles_total_lifetime": 214,
"current_cycle_no": 3,
"open_orders": 1,
"total_spent": 962.1184,
"bandwidth_delegated": true,
"created_at": "2026-07-08T12:00:00.000000",
"updated_at": "2026-07-09T10:00:00.000000"
},
"timestamp": "2026-07-09T12:34:50.123456"
}
}address_info ใช้ฟิลด์เดียวกันกับออบเจกต์ที่อยู่ด้านบน
ข้อผิดพลาด
code = -1 ตัวอย่างเช่น:
| msg | สาเหตุ |
|---|---|
API key required in X-API-KEY header | ขาดส่วนหัวที่จำเป็น |
Invalid API key or IP not in whitelist | การยืนยันตัวตนล้มเหลว |
Address not found or doesn't belong to user | ไม่พบที่อยู่หรือไม่ใช่ที่อยู่ของบัญชีนี้ |
Database error getting address status | ข้อผิดพลาดชั่วคราวทางฝั่งเซิร์ฟเวอร์ — ให้ลองใหม่อีกครั้ง |
Internal server error | ข้อผิดพลาดที่ไม่คาดคิด — ให้ลองใหม่อีกครั้งหรือติดต่อฝ่ายสนับสนุน |
รหัสสถานะ HTTP
ทั้งสอง endpoint จะส่งคืนข้อผิดพลาดด้วย HTTP 200 พร้อมค่า code ที่เป็นลบ — ให้ตรวจสอบที่ code ไม่ใช่สถานะ HTTP โดยเนื้อหาข้อผิดพลาดจะมี "data": null รวมอยู่ด้วยเสมอ
ข้อผิดพลาดบางประการจะถูกส่งคืนก่อนที่คำขอจะไปถึง endpoint ซึ่งจะใช้สถานะที่ไม่ใช่ 200 และมีรูปแบบเนื้อหาที่แตกต่างกัน:
| HTTP | เนื้อหา | สาเหตุ |
|---|---|---|
| 402 | {"detail": {"code": 1004, "msg": "Insufficient funds. Minimum balance is 4 TRX. Please top up your account."}} | ยอดเงินคงเหลือในบัญชีต่ำเกินไป |
| 403 | {"detail": {"code": 1005, "msg": "API key is blocked. Contact support."}} | API key ถูกระงับการใช้งาน — โปรดติดต่อฝ่ายสนับสนุน |
| 422 | {"detail": [ … ]} | เฉพาะ POST เท่านั้น — การตรวจสอบความถูกต้องของเนื้อหาคำขอล้มเหลว: ฟิลด์มีชนิดข้อมูลไม่ถูกต้อง หรือมีการส่ง page/page_size โดยไม่มี api_key โปรดทราบว่าจะไม่มีฟิลด์ code ในการตอบกลับนี้ |
Endpoint ที่เกี่ยวข้อง
- POST /apiv2/time/add — เพิ่มที่อยู่
- POST /apiv2/time/order — ซื้อรอบ
- POST /apiv2/time/infinitystart — เปิดใช้งาน infinity mode
- POST /apiv2/time/stop — หยุดการทำงานของที่อยู่
- POST /apiv2/time/delete — ลบที่อยู่
หมายเหตุ
- endpoint สำหรับตรวจสอบสถานะเป็นแบบอ่านอย่างเดียว (read-only)
- จะส่งคืนเฉพาะที่อยู่ที่เป็นของบัญชีของคุณเท่านั้น
- การประทับเวลา (Timestamps) เป็นสตริงรูปแบบ ISO 8601