Appearance
POST /apiv2/order5m
Buat pesanan sewa energy 5 menit melalui pool energy internal Netts.
URL Endpoint
POST https://netts.io/apiv2/order5mHeader Permintaan
| Header | Diperlukan | Deskripsi |
|---|---|---|
| Content-Type | Ya | application/json |
| X-API-KEY | Ya | Kunci API Anda dari dasbor Netts |
| X-Real-IP | Ya | Alamat IP dari whitelist Anda |
Isi Permintaan
json
{
"amount": 65000,
"receiveAddress": "TQn9Y2khEsLJW1ChVWFMSMeRDow5KcbLSE"
}Parameter Permintaan
| Parameter | Tipe | Diperlukan | Deskripsi |
|---|---|---|---|
| amount | integer | Ya | Jumlah energy yang disewa (minimum: 61.000, maksimum: 650.000) |
| receiveAddress | string | Ya | Alamat TRON yang akan menerima energy (format TRC-20) |
Batas Energy
Endpoint 5 menit menerima jumlah energy antara 61.000 dan 650.000 unit per pesanan. Permintaan di luar rentang ini akan ditolak dengan HTTP 400.
Informasi Penyedia
Pesanan energy 5 menit dipenuhi secara eksklusif melalui pool energy internal Netts. Berbeda dengan endpoint 1 jam, penyedia eksternal tidak digunakan.
Ketersediaan & Strategi Percobaan Ulang
Karena delegasi hanya berasal dari pool internal, ketidaktersediaan sementara mungkin terjadi selama periode permintaan tinggi. Jika Anda menerima kesalahan 503, coba lagi permintaan setelah jeda singkat atau beralihlah ke endpoint 1 jam yang memiliki akses ke beberapa penyedia eksternal.
Contoh
cURL
bash
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
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)}")Respons
Respons Sukses (200 OK)
json
{
"detail": {
"code": 10000,
"msg": "Successful, 1.430 TRX deducted",
"data": {
"orderId": "5Mb4ee11ef86",
"paidTRX": 1.43,
"hash": "3636f97dde244fca17cdc0b2cf7fd157...",
"delegateAddress": "TNp5gsJhBmZFXgCdgjMgr8pEZ8fHgXUHDq",
"energy": 65050
}
}
}Sukses dengan Aktivasi Alamat (200 OK)
Ketika alamat penerima belum diaktifkan di jaringan TRON, Netts mengaktifkannya secara otomatis. Biaya aktivasi ditambahkan ke total:
json
{
"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..."
}
}
}Bidang Respons
| Bidang | Tipe | Deskripsi |
|---|---|---|
| detail.code | integer | Selalu 10000 untuk pesanan yang berhasil |
| detail.msg | string | Pesan sukses dengan jumlah yang dipotong |
| detail.data.orderId | string | ID pesanan terpadu (format: 5M{id}) |
| detail.data.paidTRX | number | Total biaya dalam TRX (termasuk biaya aktivasi jika berlaku) |
| detail.data.hash | string | Hash transaksi delegasi |
| detail.data.delegateAddress | string | Alamat pool yang mendelegasikan energy |
| detail.data.energy | integer | Jumlah energy + buffer (biasanya +50) |
| detail.data.activationHash | string | Hanya ada jika aktivasi alamat dilakukan |
Respons Kesalahan
Jumlah Energy Tidak Valid (400)
json
{
"code": 1003,
"msg": "Energy amount must be between 61000 and 650000. Requested: 50000"
}Kesalahan Autentikasi (401)
json
{
"detail": "Invalid API key or IP not in whitelist"
}Saldo Tidak Cukup (403)
json
{
"code": 1004,
"msg": "Insufficient funds. Required: 1.43 TRX, Available: 0.50 TRX"
}Layanan Tidak Tersedia (503)
json
{
"code": 5003,
"msg": "Service temporarily unavailable. Energy delegation failed after retries."
}Menangani Kesalahan 503
Respons 503 berarti pool internal sedang penuh untuk sementara. Strategi yang disarankan:
- Tunggu 2-3 detik dan coba lagi pesanan 5 menit
- Jika masih tidak tersedia, beralihlah ke endpoint 1 jam yang menggunakan beberapa penyedia
Kesalahan Server Internal (500)
json
{
"code": 5000,
"msg": "Internal server error occurred"
}Referensi Kode Kesalahan
| Kode | Deskripsi | Status HTTP |
|---|---|---|
10000 | Sukses | 200 |
10000 | Sukses (respons dari cache) | 208 |
- | Permintaan duplikat masih diproses | 409 |
1003 | Jumlah energy di luar rentang | 400 |
1004 | Saldo tidak cukup | 403 |
1005 | Alamat pembayar pengguna belum dikonfigurasi | 400 |
5000 | Kesalahan server internal | 500 |
5003 | Layanan energy tidak tersedia | 503 |
Batas Frekuensi
Batas laju berikut berlaku untuk endpoint ini (per alamat IP):
| Periode | Batas | Deskripsi |
|---|---|---|
| 1 detik | 50 permintaan | Maksimum 50 permintaan per detik |
Header Batas Laju
http
RateLimit-Limit: 50
RateLimit-Remaining: 49
RateLimit-Reset: 1
X-RateLimit-Limit-Second: 50
X-RateLimit-Remaining-Second: 49Batas Laju Terlampaui (429)
json
{
"message": "API rate limit exceeded"
}Idempotensi
API mendukung idempotensi untuk mencegah pemrosesan pesanan ganda. Saat Anda mengirim beberapa permintaan yang identik, sistem memastikan pesanan hanya diproses satu kali.
Cara Kerja Idempotensi
Keunikan permintaan ditentukan oleh kombinasi dari:
- Timestamp permintaan (jendela 2 detik)
- Jumlah energy
- Alamat penerima
- Kunci API
Setiap permintaan diberikan jendela keunikan 2 detik. Permintaan dengan parameter identik dalam jendela ini diperlakukan sebagai duplikat.
Menyediakan Kunci Anda Sendiri
Anda dapat mengelola idempotensi secara mandiri dengan mengirimkan header X-Idempotency-Key. Saat header ini ada, nilai tersebut saja yang menentukan apakah suatu permintaan merupakan pengulangan, dan kombinasi otomatis di atas tidak digunakan. Jika header ini tidak ada, tidak ada yang berubah — server menghasilkan kuncinya untuk Anda.
Aturannya sama seperti pada /apiv2/order1h:
| Header | X-Idempotency-Key |
| Format | Tepat 64 karakter heksadesimal huruf kecil — sebuah digest SHA-256 |
| Masa berlaku | 24 jam sejak permintaan pertama yang membawa kunci tersebut |
| Cakupan | Akun Anda. Nilai yang sama yang dikirim oleh akun berbeda tidak akan pernah mengembalikan hasil Anda |
Kunci dengan bentuk lain — UUID dengan tanda hubung, base64, heksadesimal huruf besar — akan ditolak dengan 400 sebelum pesanan dibuat dan sebelum biaya apa pun dipotong:
json
{
"detail": "Invalid idempotency key format. Must be 64-character hexadecimal string."
}Hasilkan kunci dari kunci API Anda agar unik untuk akun Anda dan dapat direproduksi pada percobaan ulang — contoh penggunaannya ada di halaman 1 jam. Sertakan periode sewa dalam pesan yang Anda hash: menyewa alamat yang sama untuk 5 menit dan untuk 1 jam adalah pesanan yang berbeda, dan menggunakan kembali satu kunci untuk keduanya akan mengembalikan respons pesanan pertama untuk permintaan kedua.
Membuat Dua Pesanan Identik
Jebakan yang sama seperti pada endpoint per jam, dengan jendela yang lebih lebar. Dua pesanan identik — jumlah yang sama ke alamat yang sama — tidak dapat dibedakan dari percobaan ulang, dan hanya waktu kedatangan yang membedakannya.
Tanpa kunci Anda sendiri:
| Jeda antara kedua permintaan | Apa yang terjadi |
|---|---|
| Di dalam jendela 2 detik yang sama | Permintaan kedua dianggap sebagai pengulangan. Permintaan tersebut tidak dieksekusi: Anda mendapatkan 208 dan respons dari pesanan pertama. Tidak ada biaya yang dipotong untuk itu |
| Terpaut lebih dari dua detik | Dua kunci berbeda — kedua pesanan dibuat dan keduanya dikenakan biaya |
Jadi, berikan jeda lebih dari dua detik antara dua pesanan identik, dan baca kode statusnya: 208 berarti pesanan yang baru saja Anda kirim tidak dibuat.
Jeda hanyalah solusi sementara, bukan solusi tuntas — jeda tersebut juga memisahkan permintaan yang tidak pernah Anda maksudkan untuk diulang, seperti percobaan ulang setelah timeout atau pesan yang dikirim ulang oleh antrean Anda, dan masing-masing menjadi pesanan terpisah dengan biaya terpisah. Mengirimkan kunci Anda sendiri adalah solusi yang sebenarnya: gunakan nonce baru untuk pesanan baru, dan nonce dari percobaan pertama untuk percobaan ulang. Penjelasan lengkapnya ada di halaman 1 jam.
Kode Status HTTP untuk Permintaan Duplikat
| Kode Status | Nama | Deskripsi |
|---|---|---|
| 200 | OK | Pesanan berhasil diproses (permintaan pertama) |
| 208 | Already Reported | Pesanan sudah diproses, mengembalikan respons dari cache |
| 409 | Conflict | Permintaan sedang diproses, jangan coba lagi |
Permintaan Duplikat - Sudah Diproses (208)
json
{
"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"
}
}Permintaan Duplikat - Masih Diproses (409)
json
{
"success": false,
"error": "duplicate_request_processing",
"message": "This request is currently being processed. Please wait and do not retry.",
"retry_after_seconds": 3
}Praktik Terbaik
- Jangan mengirim permintaan paralel dengan parameter yang sama - tunggu setiap respons
- Tangani respons 409 dengan menunggu, bukan dengan segera mencoba ulang
- Periksa bidang
idempotency.cacheduntuk mengidentifikasi respons dari cache
Perbandingan: Pesanan 5 Menit vs 1 Jam
| Fitur | Pesanan 5 Menit | Pesanan 1 Jam |
|---|---|---|
| Endpoint | /apiv2/order5m | /apiv2/order1h |
| Durasi | 5 menit | 1 jam |
| Rentang energy | 61.000 - 650.000 | 61.000 - 3.000.000 |
| Penyedia | Hanya pool internal Netts | Pool internal + penyedia eksternal |
| Harga | Lebih rendah (tarif 5 menit) | Tarif standar per jam |
| Ketersediaan | Mungkin terbatas pada jam sibuk | Tinggi (fallback ke beberapa penyedia) |
| Terbaik untuk | Transaksi kecil yang sering | Pengiriman dalam jumlah besar atau terjamin |
Catatan
- Energy dikirim secara instan setelah pesanan berhasil (biasanya dalam 0,5-2 detik)
- Batas waktu respons API: Maksimum 10 detik (termasuk upaya percobaan ulang internal)
- Aktivasi alamat: Jika alamat penerima belum diaktifkan, Netts mengaktifkannya dengan harga pokok. Biaya aktivasi hanya dikenakan sekali per alamat
- Durasi: Tetap 5 menit (300 detik)
- Jumlah energy minimum: 61.000 unit
- Jumlah energy maksimum: 650.000 unit per pesanan
- Buffer energy: +50 unit ditambahkan secara otomatis (gratis)
- Format ID pesanan:
5M{id}untuk pelacakan terpadu - Harga: Dinamis berdasarkan waktu dalam sehari melalui Pricing API
- Rate limiting: 50 permintaan per detik per alamat IP
- Hanya pool internal: Jika pool sedang penuh, coba lagi setelah jeda singkat atau gunakan endpoint 1 jam sebagai cadangan