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

Orchestrator — คำสั่งซื้อแบบกลุ่มในครั้งเดียว ​

ส่งที่อยู่ได้สูงสุด 100 รายการในคำขอเดียว และให้ Netts จัดการลำดับขั้นตอนทั้งหมดสำหรับแต่ละรายการ: เปิดใช้งานที่อยู่หากจำเป็น, เติม Bandwidth หากไม่เพียงพอ, จากนั้นเช่า Energy — พร้อมแบ่ง จำนวนมากออกเป็นส่วนย่อยให้อัตโนมัติ

คุณจะได้รับ 202 Accepted พร้อมคีย์สำหรับติดตามผลทันทีโดยไม่ต้องรอค้างการเชื่อมต่อ จากนั้น สามารถอ่านความคืบหน้าได้จากเอนด์พอยต์แสดงสถานะ

เหตุผลที่ควรใช้ ​

โดยปกติแล้ว การสั่งซื้อ Energy สำหรับที่อยู่ใหม่ต้องใช้การเรียก API แยกกันสามครั้ง ตามลำดับที่ถูกต้อง และ ต้องมีลอจิกการลองใหม่ของคุณเองระหว่างขั้นตอน Orchestrator จะรวมขั้นตอนเหล่านั้นไว้ในคำขอเดียวและดำเนิน การตามลำดับสำหรับแต่ละที่อยู่:

probe → activation (if the address is not active) → bandwidth (if free < 400) → energy

ความล้มเหลวในการเปิดใช้งานหรือ Bandwidth จะไม่หยุดคำสั่งซื้อ Energy สำหรับที่อยู่นั้น และความล้มเหลวของ ที่อยู่รายการหนึ่งจะไม่ส่งผลกระทบต่อรายการอื่น

URL ฐานของเอนด์พอยต์ ​

https://netts.io/apiv2/orchestrator

ส่วนหัวของคำขอ ​

ส่วนหัวจำเป็นคำอธิบาย
Content-Typeใช่application/json
X-API-KEYใช่คีย์ API ของคุณจากแดชบอร์ด Netts
X-Real-IPใช่ที่อยู่ IP จากไวท์ลิสต์ของคุณ
X-Idempotency-Keyใช่*คีย์ของคุณสำหรับคำสั่งซื้อนี้ ความยาว 12–128 อักขระจาก A-Z a-z 0-9 . _ : -

* ต้องระบุส่วนหัว X-Idempotency-Key หรือฟิลด์ clientRequestId ในเนื้อหาคำขออย่างใดอย่างหนึ่ง หากคุณไม่ระบุทั้งสองอย่าง คำขอจะถูกปฏิเสธด้วยรหัส 5010

คีย์นี้ใช้ระบุคำสั่งซื้อทั้งหมด การส่งคำขอซ้ำด้วยคีย์เดิมจะส่งคืนผลลัพธ์เดิม แทนที่จะสร้างคำสั่งซื้อที่สอง — ดูที่ ความสามารถในการทำซ้ำ (Idempotency)


สร้างคำสั่งซื้อ — POST /apiv2/orchestrator ​

เนื้อหาคำขอ ​

json
{
    "clientRequestId": "my-batch-2026-01-01-001",
    "defaults": {
        "bandwidth": true,
        "bandwidthAmount": 400,
        "bandwidthPeriod": "1h",
        "check": true,
        "trx_send": false
    },
    "items": [
        { "receiveAddress": "TQn9Y2khEsLJW1ChVWFMSMeRDow5KcbLSE", "amount": 65000 },
        { "receiveAddress": "TXXxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", "amount": 131000 },
        { "receiveAddress": "TYYyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy", "amount": 61000, "bandwidth": false }
    ]
}

ฟิลด์ระดับบนสุด ​

ฟิลด์ประเภทจำเป็นคำอธิบาย
itemsarrayใช่1 ถึง 100 ที่อยู่ รายการที่ซ้ำกันในคำสั่งซื้อเดียวกันจะถูกปฏิเสธ
clientRequestIdstringไม่ข้อมูลอ้างอิงคำสั่งซื้อของคุณ ความยาว 8–128 อักขระจาก A-Z a-z 0-9 . _ : - ใช้เป็นคีย์ความสามารถในการทำซ้ำได้หากไม่มีส่วนหัว
defaultsobjectไม่ค่าที่นำไปใช้กับทุกรายการที่ไม่ได้เขียนทับค่าเหล่านี้

ฟิลด์ของแต่ละรายการ ​

ทุกฟิลด์ยกเว้น receiveAddress และ amount สามารถกำหนดใน defaults ได้เช่นกัน โดยค่าที่กำหนดในรายการ จะมีผลเหนือกว่าค่าเริ่มต้น

ฟิลด์ประเภทค่าเริ่มต้นคำอธิบาย
receiveAddressstring—ที่อยู่ TRON ที่รับ Energy
amountint—Energy สำหรับที่อยู่นี้, 61 000 … 50 000 000
bandwidthbooltrueสั่งซื้อ Bandwidth สำหรับที่อยู่นี้เมื่อมีไม่เพียงพอ
bandwidthAmountint400400 หรือ 5000
bandwidthPeriodstring1h5m หรือ 1h
checkboolดูด้านล่างตรวจสอบ Bandwidth ที่ฟรีก่อน และข้ามการสั่งซื้อหากมีเพียงพอแล้ว
trx_sendboolfalseส่งต่อไปยังบริการ Bandwidth
activationbooltrueเปิดใช้งานที่อยู่หากยังไม่ได้เปิดใช้งาน ตั้งค่าเป็น false เพื่อข้ามขั้นตอนนี้สำหรับที่อยู่ที่คุณทราบว่าเปิดใช้งานอยู่แล้ว

check มีค่าเริ่มต้นเป็น true เมื่อ bandwidthAmount คือ 400 และเป็น false ในกรณีอื่นๆ — การสั่งซื้อ 5 000 หน่วยมักหมายถึงคุณต้องการใช้งานโดยไม่คำนึงถึงสิ่งที่มีอยู่แล้ว

จำนวนจะคิดแยกตามที่อยู่ คำขอเดียวสามารถรวมจำนวนที่แตกต่างกันได้อย่างอิสระ โดยมีขีดจำกัดเพียงแค่ ยอดรวมทั้งหมด

ขีดจำกัด ​

ขีดจำกัดค่า
ที่อยู่ต่อคำสั่งซื้อ100
Energy ต่อที่อยู่61 000 … 50 000 000
Energy รวมต่อคำสั่งซื้อ50 000 000
คำสั่งซื้อที่กำลังดำเนินการต่อบัญชี3
ที่อยู่ที่กำลังดำเนินการต่อบัญชี300
ยอดคงเหลือขั้นต่ำที่ยอมรับได้4 TRX

เพดาน 50 000 000 จะใช้กับผลรวมของทุกที่อยู่ในคำขอ ไม่ใช่สำหรับแต่ละรายการ

การตอบกลับ — ยอมรับแล้ว (202, รหัส 10202) ​

json
{
    "detail": {
        "code": 10202,
        "status": "accepted",
        "msg": "Order accepted for processing",
        "data": {
            "idempotencyKey": "my-batch-2026-01-01-001",
            "requestId": 1234,
            "itemsAccepted": 3,
            "statusUrl": "/apiv2/orchestrator/status/my-batch-2026-01-01-001",
            "items": [
                {
                    "deliveryKey": 5001,
                    "trackingId": "my-batch-2026-01-01-001:TQn9Y2khEsLJW1ChVWFMSMeRDow5KcbLSE",
                    "receiveAddress": "TQn9Y2khEsLJW1ChVWFMSMeRDow5KcbLSE",
                    "amount": 65000,
                    "energyChunks": 1,
                    "activation": "planned",
                    "bandwidth": "planned",
                    "status": "queued"
                }
            ]
        }
    }
}

202 หมายถึง เข้าคิวแล้ว แต่ยังไม่ได้ดำเนินการ ยังไม่มีการเรียกเก็บเงิน ตรวจสอบ statusUrl เป็นระยะเพื่อดูผลลัพธ์

trackingId คือคู่ของ คีย์ความสามารถในการทำซ้ำ + ที่อยู่ — ข้อมูลระบุตัวตนของที่อยู่หนึ่งรายการภายใน คำสั่งซื้อของคุณ ใช้ค่านี้ในบันทึกและการตรวจสอบยอดของคุณเอง

ตัวอย่าง ​

bash
curl -X POST https://netts.io/apiv2/orchestrator \
  -H "Content-Type: application/json" \
  -H "X-API-KEY: your_api_key" \
  -H "X-Real-IP: your_whitelisted_ip" \
  -H "X-Idempotency-Key: my-batch-2026-01-01-001" \
  -d '{
        "items": [
          {"receiveAddress": "TQn9Y2khEsLJW1ChVWFMSMeRDow5KcbLSE", "amount": 65000}
        ]
      }'

ตรวจสอบความคืบหน้า — GET /apiv2/orchestrator/status/{idempotencyKey} ​

เพิ่ม ?address=T… เพื่อดูเฉพาะที่อยู่เดียวแทนที่จะเป็นทั้งคำสั่งซื้อ

json
{
    "detail": {
        "code": 10000,
        "status": "processing",
        "data": {
            "idempotencyKey": "my-batch-2026-01-01-001",
            "requestId": 1234,
            "clientRequestId": "my-batch-2026-01-01-001",
            "summary": {
                "total": 3, "queued": 1, "processing": 1, "completed": 1,
                "partial": 0, "failed": 0, "insufficient_balance": 0,
                "credentials_revoked": 0, "cancelled": 0
            },
            "items": [
                {
                    "deliveryKey": 5001,
                    "trackingId": "my-batch-2026-01-01-001:TQn9Y2khEsLJW1ChVWFMSMeRDow5KcbLSE",
                    "receiveAddress": "TQn9Y2khEsLJW1ChVWFMSMeRDow5KcbLSE",
                    "status": "completed",
                    "energy": {
                        "requested": 65000,
                        "delegated": 65000,
                        "status": "done",
                        "chunks": { "total": 1, "done": 1 },
                        "orderIds": ["1Hxxxxxxxxxx"],
                        "hashes": ["0000000000000000000000000000000000000000000000000000000000000000"]
                    },
                    "activation": { "status": "not_needed", "orderId": null, "hash": null },
                    "bandwidth": {
                        "status": "enough", "orderId": "B1Hxxxxxxxxxxxxxx",
                        "amount": 400, "period": "1h", "hashes": [], "skipReason": null
                    },
                    "attempts": 1,
                    "startedAt": "2026-01-01T00:00:00+00:00",
                    "finishedAt": "2026-01-01T00:00:03+00:00"
                }
            ]
        }
    }
}

หากไม่พบคีย์ หรือคีย์เป็นของบัญชีอื่น จะส่งคืนรหัส 404

ค่าสถานะของที่อยู่ ​

สถานะความหมาย
queuedกำลังรอการประมวลผล
processingอยู่ระหว่างดำเนินการ
completedมอบสิทธิ์ Energy ตามที่ขอทั้งหมดเรียบร้อยแล้ว
partialส่งมอบบางส่วนสำเร็จ และบางส่วนล้มเหลว
failedไม่มีการส่งมอบใดๆ สำเร็จ
insufficient_balanceหยุดการทำงาน — ยอดคงเหลือของคุณลดลงต่ำกว่าขั้นต่ำ
credentials_revokedคีย์ API ของคุณถูกลบหรือปิดใช้งานขณะที่คำสั่งซื้อกำลังทำงาน
cancelledนำออกจากคิวตามคำขอยกเลิกของคุณ

ค่าสถานะของขั้นตอน ​

ขั้นตอนค่า
activationnot_needed, done, failed, skipped, skipped_unavailable
bandwidthenough, done, failed, skipped
energydone, partial, failed

bandwidth.skipReason อธิบายเหตุผลของ skipped: option_off (คุณปิดใช้งานตัวเลือกนี้), energy_gt_600000 (คำสั่งซื้อ Energy จำนวนมากไม่จำเป็นต้องเติม Bandwidth)

แฮชการมอบสิทธิ์ ​

energy.hashes คือหลักฐานการส่งมอบของคุณ เมื่อ Energy มาจากผู้ให้บริการภายนอก จะยังไม่ทราบแฮช ในเวลาที่สั่งซื้อ — แฮชจะถูกกรอกข้อมูลในอีกประมาณหนึ่งนาทีต่อมา และจะยังไม่รายงานว่าที่อยู่นั้น เสร็จสิ้นจนกว่าจะรวบรวมแฮชได้หรือหมดเวลาการรอ ที่อยู่ในสถานะ completed ที่มีแฮชปรากฏอยู่ถือว่าดำเนินการเสร็จสมบูรณ์แล้ว


ยกเลิก — POST /apiv2/orchestrator/cancel/{idempotencyKey} ​

นำทุกที่อยู่ที่ยังไม่ถูกหยิบไปประมวลผลออกจากคิว

json
{
    "detail": {
        "code": 10005,
        "status": "cancelled",
        "msg": "Order cancelled: 7 addresses removed from queue",
        "data": { "cancelled": 7 }
    }
}

ที่อยู่อยู่ในสถานะ processing แล้วจะไม่ถูกขัดจังหวะ เนื่องจาก Energy บางส่วนของที่อยู่เหล่านั้นอาจได้รับการชำระเงิน ไปแล้ว การยกเลิกจะเป็นแบบพยายามทำให้ดีที่สุด (best-effort) สำหรับส่วนที่เหลือ


ความสามารถในการทำซ้ำ (Idempotency) ​

คำสั่งซื้อจะถูกระบุด้วยคีย์ของคุณ — ส่วนหัว X-Idempotency-Key หรือ clientRequestId เมื่อไม่มี ส่วนหัวดังกล่าว

คำขอซ้ำผลลัพธ์
คีย์เดิม, เนื้อหาเดิม208 พร้อมคำสั่งซื้อเดิมและ originalAcceptedAt — ไม่มีการสร้างคำสั่งซื้อที่สอง
คีย์เดิม, เนื้อหาต่างกัน409 4090 IDEMPOTENCY_CONFLICT

ดังนั้น การหมดเวลาของเครือข่าย (timeout) ฝั่งคุณจึงสามารถลองใหม่ด้วยข้อมูลเดิมได้อย่างปลอดภัย การเปลี่ยนแปลงเพย์โหลดภายใต้คีย์ ที่ใช้งานไปแล้วจะถูกปฏิเสธแทนที่จะนำไปปรับใช้เงียบๆ

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


การเรียกเก็บเงิน ​

ตัว Orchestrator เองไม่มีการคิดค่าบริการ แต่ละขั้นตอนจะถูกเรียกเก็บเงินโดยบริการที่ดำเนินการตาม ราคาปกติของบริการนั้นๆ:

ขั้นตอนเรียกเก็บเป็น
Activationหักเงินแยกต่างหาก, หมายเลขคำสั่งซื้อ A…
Bandwidthหักเงินแยกต่างหาก, หมายเลขคำสั่งซื้อ B1H… — เฉพาะเมื่อมีการมอบสิทธิ์จริงเท่านั้น
Energyหักเงินหนึ่งครั้งต่อหนึ่งส่วนย่อย, หมายเลขคำสั่งซื้อ 1H…

check: true ที่มี Bandwidth ฟรีเพียงพอจะไม่มีค่าใช้จ่าย — สถานะจะเป็น enough และไม่มีการส่งคำสั่งซื้อ จำนวน Energy ขนาดใหญ่จะข้าม Bandwidth โดยสิ้นเชิง

หากยอดคงเหลือของคุณหมดลงระหว่างการประมวลผลกลุ่ม ที่อยู่ที่เหลือจะจบลงด้วยสถานะ insufficient_balance โดย ไม่ถูกพยายามดำเนินการ


การอ้างอิงรหัสข้อผิดพลาด ​

รหัสคำอธิบายสถานะ HTTP
10202ยอมรับคำสั่งซื้อแล้ว / เคยยอมรับแล้ว202 / 208
10000ส่งคืนสถานะแล้ว200
10005ยกเลิกคำสั่งซื้อแล้ว200
5004ฟิลด์ไม่ถูกต้อง: รูปแบบที่อยู่, amount อยู่นอกช่วง, bandwidthAmount ไม่ใช่ 400/5000, bandwidthPeriod ไม่ใช่ 5m/1h, เนื้อหาคำขอไม่ใช่ออบเจกต์ JSON400
5005ไม่มี items หรือว่างเปล่า400
5006มี receiveAddress ซ้ำกันในคำสั่งซื้อเดียว400
5009รูปแบบ X-Idempotency-Key หรือ clientRequestId ไม่ถูกต้อง400
5010ไม่ได้ระบุทั้ง X-Idempotency-Key และ clientRequestId400
5012Energy รวมในคำขอเกิน 50 000 000400
-1คีย์ API ไม่ถูกต้อง / IP ไม่อยู่ในไวท์ลิสต์401
1004ยอดคงเหลือต่ำกว่าขั้นต่ำ 4 TRX402
-1ไม่พบคำสั่งซื้อ (หรือไม่ใช่ของคุณ)404
4090IDEMPOTENCY_CONFLICT — คีย์เดิม แต่เนื้อหาคำขอต่างกัน409
4220การตรวจสอบคำขอล้มเหลว (ดูรายละเอียดใน data.errors)422
429 / 5011มีคำสั่งซื้อ, ที่อยู่ หรือส่วนย่อยที่กำลังดำเนินการอยู่มากเกินไป429
5003คำสั่งซื้อไม่ได้รับการยอมรับ — บริการไม่พร้อมใช้งานชั่วคราว สามารถลองใหม่ได้อย่างปลอดภัย503

รหัส 503 เมื่อสร้างคำสั่งซื้อเป็นแบบปลอดภัยเมื่อล้มเหลว (fail-secure): ไม่มีการบันทึกข้อมูลและไม่มีการเรียกเก็บเงิน

ขีดจำกัดอัตราการเรียกใช้ ​

จำกัดต่อ IP ต้นทาง:

ช่วงเวลาขีดจำกัด
1 วินาที20 คำขอ

เกินขีดจำกัดอัตราการเรียกใช้ (429) ​

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

หมายเหตุ ​

  • 202 ไม่ใช่ใบเสร็จการส่งมอบ ให้ถือว่าอยู่ในสถานะ "เข้าคิวแล้ว" ผลลัพธ์จะแสดงในเอนด์พอยต์สถานะ
  • ที่อยู่จะประมวลผลแบบขนานกัน สูงสุด 5 รายการพร้อมกันภายในหนึ่งคำสั่งซื้อ ดังนั้นชุดข้อมูลขนาดใหญ่จึงไม่ต้องรอ ที่อยู่เดียวที่ประมวลผลช้า ไม่รับประกันลำดับการเสร็จสิ้น
  • การแบ่งส่วนย่อยเป็นไปโดยอัตโนมัติ: จำนวนที่มากกว่า 1 000 000 จะถูกแบ่งออกเป็นส่วนย่อยๆ เท่ากัน โดยแต่ละส่วนจะกลายเป็น คำสั่งซื้อ Energy ของตัวเอง energy.orderIds และ energy.hashes จะแสดงรายการทั้งหมดเหล่านั้น
  • ไม่มีเว็บฮุกสำหรับคำสั่งซื้อ Orchestrator ในภาพรวม การมอบสิทธิ์ Energy แต่ละรายการจะยังคงสร้างเว็บฮุก delegation.confirmed ตามปกติ โปรดดูที่ เว็บฮุก
  • เอนด์พอยต์ที่เกี่ยวข้อง: Activator, Bandwidth, Order 1H