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

Orchestrator — pesanan massal dalam satu panggilan ​

Kirim hingga 100 alamat dalam satu permintaan dan biarkan Netts menjalankan seluruh rangkaian untuk setiap alamat: mengaktifkan alamat jika diperlukan, mengisi bandwidth jika kurang, lalu menyewa energy — membagi jumlah besar menjadi beberapa bagian secara otomatis.

Anda langsung mendapatkan 202 Accepted dengan kunci pelacakan dan tidak perlu menunggu koneksi. Progres kemudian dibaca dari endpoint status.

Mengapa menggunakannya ​

Memesan energy untuk alamat baru biasanya memerlukan tiga panggilan terpisah, dalam urutan yang tepat, dengan logika percobaan ulang (retry) Anda sendiri di antaranya. Orchestrator menyederhanakan hal tersebut menjadi satu permintaan dan menjalankan rangkaian proses per alamat:

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

Kegagalan dalam aktivasi atau bandwidth tidak menghentikan pesanan energy untuk alamat tersebut, dan satu alamat yang gagal tidak akan pernah memengaruhi alamat lainnya.

URL dasar endpoint ​

https://netts.io/apiv2/orchestrator

Header Permintaan ​

HeaderDiperlukanDeskripsi
Content-TypeYaapplication/json
X-API-KEYYaKunci API Anda dari dashboard Netts
X-Real-IPYaAlamat IP dari daftar putih (whitelist) Anda
X-Idempotency-KeyYa*Kunci Anda untuk pesanan ini, 12–128 karakter berupa A-Z a-z 0-9 . _ : -

* Salah satu dari header X-Idempotency-Key atau bidang clientRequestId di dalam body wajib diisi. Jika Anda tidak mengirimkan keduanya, permintaan akan ditolak dengan 5010.

Kunci tersebut mengidentifikasi seluruh pesanan. Mengulangi permintaan dengan kunci yang sama akan mengembalikan hasil asli alih-alih membuat pesanan kedua — lihat Idempotensi.


Membuat pesanan — POST /apiv2/orchestrator ​

Body permintaan ​

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 }
    ]
}

Bidang tingkat atas ​

BidangTipeDiperlukanDeskripsi
itemsarrayYa1 hingga 100 alamat. Duplikat dalam satu pesanan akan ditolak.
clientRequestIdstringTidakReferensi pesanan Anda, 8–128 karakter berupa A-Z a-z 0-9 . _ : -. Berfungsi ganda sebagai kunci idempotensi jika header tidak ada.
defaultsobjectTidakNilai yang diterapkan ke setiap item yang tidak menggantikannya.

Bidang item ​

Setiap bidang kecuali receiveAddress dan amount juga dapat diatur di defaults. Nilai pada item lebih diutamakan daripada nilai default.

BidangTipeDefaultDeskripsi
receiveAddressstring—Alamat TRON yang menerima energy
amountint—Energy untuk alamat ini, 61 000 … 50 000 000
bandwidthbooltruePesan bandwidth untuk alamat ini jika kurang
bandwidthAmountint400400 atau 5000
bandwidthPeriodstring1h5m atau 1h
checkboollihat di bawahPeriksa bandwidth gratis terlebih dahulu dan lewati pesanan jika sudah cukup
trx_sendboolfalseDiteruskan ke layanan bandwidth
activationbooltrueAktifkan alamat jika belum aktif. Atur ke false untuk melewati langkah ini bagi alamat yang Anda tahu sudah aktif.

check secara default bernilai true ketika bandwidthAmount adalah 400, dan false untuk nilai lainnya — memesan 5 000 unit biasanya berarti Anda menginginkannya terlepas dari apa yang sudah ada.

Jumlah dihitung per alamat. Satu permintaan dapat menggabungkan jumlah yang berbeda secara bebas; satu-satunya batas maksimal adalah total keseluruhan.

Batasan ​

BatasanNilai
Alamat per pesanan100
Energy per alamat61 000 … 50 000 000
Total energy per pesanan50 000 000
Pesanan yang sedang berjalan per akun3
Alamat yang sedang berjalan per akun300
Saldo minimum agar diterima4 TRX

Batas maksimal 50 000 000 berlaku untuk jumlah dari semua alamat dalam permintaan, bukan untuk masing-masing alamat.

Respons — diterima (202, kode 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 berarti dimasukkan ke antrean, belum dieksekusi. Belum ada biaya yang dipotong. Lakukan polling pada statusUrl untuk melihat hasilnya.

trackingId adalah pasangan idempotency key + address — identitas dari satu alamat di dalam pesanan Anda. Gunakan ini di log dan rekonsiliasi Anda sendiri.

Contoh ​

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}
        ]
      }'

Memeriksa progres — GET /apiv2/orchestrator/status/{idempotencyKey} ​

Tambahkan ?address=T… untuk mendapatkan satu alamat saja alih-alih seluruh pesanan.

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"
                }
            ]
        }
    }
}

Kunci yang tidak dikenal, atau kunci milik akun lain, akan mengembalikan 404.

Nilai status alamat ​

StatusArti
queuedMenunggu untuk diproses
processingSedang berlangsung
completedSemua energy yang diminta telah didelegasikan
partialBeberapa chunk terkirim, beberapa gagal
failedTidak ada yang terkirim
insufficient_balanceDihentikan — saldo Anda turun di bawah batas minimum
credentials_revokedKunci API Anda dihapus atau dinonaktifkan saat pesanan sedang berjalan
cancelledDihapus dari antrean atas permintaan pembatalan Anda

Nilai status langkah ​

LangkahNilai
activationnot_needed, done, failed, skipped, skipped_unavailable
bandwidthenough, done, failed, skipped
energydone, partial, failed

bandwidth.skipReason menjelaskan alasan skipped: option_off (Anda menonaktifkannya), energy_gt_600000 (pesanan energy dalam jumlah besar tidak memerlukan isi ulang bandwidth).

Hash delegasi ​

energy.hashes adalah bukti pengiriman Anda. Ketika energy berasal dari penyedia eksternal, hash tidak langsung diketahui pada saat pemesanan — hash akan diisi sekitar satu menit kemudian, dan alamat tidak dilaporkan sebagai selesai hingga hash terkumpul atau batas waktu tunggu berakhir. Alamat dengan status completed yang memiliki hash berarti telah diselesaikan sepenuhnya.


Membatalkan — POST /apiv2/orchestrator/cancel/{idempotencyKey} ​

Menghapus dari antrean setiap alamat yang belum mulai diproses.

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

Alamat yang sudah dalam status processing tidak dihentikan: sebagian dari energy mereka mungkin sudah dibayar. Pembatalan dilakukan dengan upaya terbaik (best-effort) pada alamat yang tersisa.


Idempotensi ​

Pesanan diidentifikasi oleh kunci Anda — header X-Idempotency-Key, atau clientRequestId jika header tidak ada.

Permintaan berulangHasil
Kunci sama, body sama208 dengan pesanan asli dan originalAcceptedAt — tidak ada pesanan kedua
Kunci sama, body berbeda409 4090 IDEMPOTENCY_CONFLICT

Jadi, jika terjadi batas waktu jaringan (timeout) di pihak Anda, permintaan aman untuk dicoba ulang persis sama. Mengubah muatan (payload) dengan kunci yang sudah digunakan akan ditolak, bukan diterapkan secara diam-diam.

Di dalam pesanan, setiap alamat memiliki kunci internalnya sendiri, sehingga pengulangan juga tidak akan pernah menagih ganda satu alamat pun.


Penagihan ​

Orchestrator itu sendiri tidak membebankan biaya apa pun. Setiap langkah ditagih oleh layanan yang menjalankannya, pada harga normalnya:

LangkahDitagih sebagai
Aktivasipemotongan terpisah, nomor pesanan A…
Bandwidthpemotongan terpisah, nomor pesanan B1H… — hanya jika benar-benar didelegasikan
Energysatu pemotongan per chunk, nomor pesanan 1H…

check: true dengan bandwidth gratis yang cukup tidak dikenakan biaya apa pun — statusnya adalah enough dan tidak ada pesanan yang dibuat. Jumlah energy yang besar akan melewati bandwidth sepenuhnya.

Jika saldo Anda habis di tengah proses batch, alamat yang tersisa akan berstatus insufficient_balance tanpa dicoba untuk diproses.


Referensi Kode Kesalahan ​

KodeDeskripsiStatus HTTP
10202Pesanan diterima / sudah diterima202 / 208
10000Status dikembalikan200
10005Pesanan dibatalkan200
5004Bidang tidak valid: format alamat, amount di luar rentang, bandwidthAmount bukan 400/5000, bandwidthPeriod bukan 5m/1h, body bukan objek JSON400
5005items tidak ada atau kosong400
5006Duplikat receiveAddress dalam satu pesanan400
5009X-Idempotency-Key atau clientRequestId salah format400
5010Baik X-Idempotency-Key maupun clientRequestId tidak disediakan400
5012Total energy dalam permintaan melebihi 50 000 000400
-1Kunci API tidak valid / IP tidak ada dalam whitelist401
1004Saldo di bawah minimum 4 TRX402
-1Pesanan tidak ditemukan (atau bukan milik Anda)404
4090IDEMPOTENCY_CONFLICT — kunci sama, body berbeda409
4220Validasi permintaan gagal (detail di data.errors)422
429 / 5011Terlalu banyak pesanan, alamat, atau chunk yang sedang berjalan429
5003Pesanan tidak diterima — layanan sementara tidak tersedia, aman untuk dicoba ulang503

Status 503 saat pembuatan bersifat fail-secure: tidak ada yang disimpan dan tidak ada biaya yang dikenakan.

Batas Laju (Rate Limits) ​

Dibatasi per IP sumber:

PeriodeBatasan
1 detik20 permintaan

Batas Laju Terlampaui (429) ​

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

Catatan ​

  • 202 bukan tanda terima pengiriman. Anggap sebagai "masuk antrean". Hasilnya ada di endpoint status.
  • Alamat diproses secara paralel, hingga 5 sekaligus dalam satu pesanan, sehingga batch yang besar tidak perlu menunggu satu alamat yang lambat. Urutan penyelesaian tidak dijamin.
  • Pembagian chunk dilakukan otomatis: jumlah di atas 1 000 000 dibagi menjadi chunk yang merata, masing-masing menjadi pesanan energy tersendiri. energy.orderIds dan energy.hashes mencantumkan semuanya.
  • Tidak ada webhook untuk pesanan orchestrator secara keseluruhan. Setiap delegasi energy tetap menghasilkan webhook delegation.confirmed seperti biasa, lihat Webhook.
  • Endpoint terkait: Activator, Bandwidth, Order 1H.