Skip to content
This translation is behind the English original, updated 2026-09-15. Read the English version for the current text.

POST /apiv2/time/add

Tambahkan alamat TRON ke Host Mode dan, secara opsional, daftarkan URL callback untuk notifikasi delegasi.

URL Endpoint

POST https://netts.io/apiv2/time/add

Autentikasi

Sediakan API key Anda di dalam body permintaan (api_key) atau header X-API-KEY. IP permintaan harus berada di dalam whitelist yang dikonfigurasikan untuk API key Anda.

Body Permintaan

json
{
    "api_key": "your_api_key",
    "address": "TQn9Y2khEsLJW1ChVWFMSMeRDow5KcbLSE",
    "callback_url": "https://your-server.com/webhook",
    "infinity": true
}

Parameter

ParameterTipeWajibDeskripsi
api_keystringYa*API key. Dapat juga dikirimkan di header X-API-KEY.
addressstringYaAlamat TRON (TRC-20), harus cocok dengan ^T[1-9A-HJ-NP-Za-km-z]{33}$ (dimulai dengan T, 34 karakter).
callback_urlstringTidakURL HTTP/HTTPS publik untuk diberitahu ketika energy didelegasikan ke alamat tersebut. Maksimal 2048 karakter.
infinitybooleanTidaktrue — juga langsung mengalihkan alamat ke mode infinity, menghemat pemanggilan terpisah ke /apiv2/time/infinitystart. Default-nya adalah false.

* Wajib diisi dalam body kecuali jika header X-API-KEY digunakan.

Validasi callback_url: harus berupa http/https, hanya host publik (localhost, rentang privat RFC1918, link-local 169.254.0.0/16, IPv6 privat/link-local, alamat yang dicadangkan dan multicast akan ditolak), serta maksimal 2048 karakter.

Perilaku

  • Jika alamat tersebut baru, alamat akan ditambahkan ke Host Mode dengan status tidak aktif (status = 0, cycle_set = 0). Aktifkan nanti dengan /apiv2/time/order atau /apiv2/time/infinitystart.
  • Jika alamat tersebut sudah ada di akun Anda, pemanggilan ini akan memperbarui URL callback-nya.
  • Jika callback_url disediakan, URL tersebut akan disimpan (atau diperbarui) untuk alamat tersebut.

infinity

Dengan "infinity": true, alamat ditambahkan dan diaktifkan dalam mode infinity dalam satu pemanggilan — hasil yang sama seperti memanggil /apiv2/time/add lalu /apiv2/time/infinitystart. Penagihannya identik dengan pemanggilan terpisah: tidak ada biaya yang ditagihkan pada tahap ini, dan siklus ditagihkan satu per satu saat energy didelegasikan. Lihat Host Mode → Siklus dan Penetapan Harga.

Menambahkan alamat dan mengaktifkannya adalah dua langkah terpisah, dan hanya langkah pertama yang dijamin. Respons melaporkan hasil penambahan. Jika alamat berhasil ditambahkan tetapi tidak dapat diaktifkan, pemanggilan tetap mengembalikan code: 0 dengan pesan biasa — alamat tersebut dibiarkan tidak aktif, persis seperti jika Anda tidak menyertakan flag tersebut. Pengaktifan dilewati ketika:

  • saldo Anda tidak mencukupi untuk satu siklus pada harga saat ini;
  • alamat sudah aktif;
  • alamat sudah memiliki pesanan yang terbuka.

Responsnya sama baik dengan maupun tanpa flag tersebut — tidak ada field tambahan, tidak ada kode kesalahan tambahan, dan ini tidak memberi tahu Anda apakah mode infinity benar-benar telah diaktifkan. Konfirmasikan hal ini dengan Time Status: alamat melaporkan status: "active" dan mode: "infinity", dan id pesanan ada di dalam respons tersebut. Jangan menganggap code: 0 dari endpoint ini sebagai bukti bahwa mode tersebut sedang berjalan.

Contoh Permintaan

cURL

bash
curl -X POST https://netts.io/apiv2/time/add \
  -H "Content-Type: application/json" \
  -d '{
    "api_key": "YOUR_API_KEY_HERE",
    "address": "TQn9Y2khEsLJW1ChVWFMSMeRDow5KcbLSE",
    "callback_url": "https://your-server.com/webhook"
  }'

Python

python
import requests

url = "https://netts.io/apiv2/time/add"
data = {
    "api_key": "YOUR_API_KEY_HERE",
    "address": "TQn9Y2khEsLJW1ChVWFMSMeRDow5KcbLSE",
    "callback_url": "https://your-server.com/webhook",  # opsional
    # "infinity": True,  # opsional: juga alihkan alamat ke mode infinity
}

resp = requests.post(url, json=data, timeout=30)
result = resp.json()

if result["code"] == 0:
    print("Added:", result["data"]["address"])
else:
    print("Error:", result["msg"])

Node.js

javascript
const axios = require('axios');

const data = {
    api_key: 'YOUR_API_KEY_HERE',
    address: 'TQn9Y2khEsLJW1ChVWFMSMeRDow5KcbLSE',
    // callback_url: 'https://your-server.com/webhook', // opsional
    // infinity: true, // opsional: juga alihkan alamat ke mode infinity
};

axios.post('https://netts.io/apiv2/time/add', data)
    .then(({ data: result }) => {
        if (result.code === 0) console.log('Added:', result.data.address);
        else console.error('Error:', result.msg);
    })
    .catch(err => console.error('Request failed:', err.response?.data || err.message));

Respons

Berhasil (alamat baru)

json
{
    "code": 0,
    "msg": "Address added to Host Mode successfully",
    "data": {
        "address": "TQn9Y2khEsLJW1ChVWFMSMeRDow5KcbLSE",
        "callback_url": "https://your-server.com/webhook",
        "timestamp": "2026-07-13T05:30:15.123456"
    }
}

Berhasil (URL callback diperbarui untuk alamat yang sudah ada)

json
{
    "code": 0,
    "msg": "Address callback URL updated successfully",
    "data": {
        "address": "TQn9Y2khEsLJW1ChVWFMSMeRDow5KcbLSE",
        "callback_url": "https://new-webhook.com/endpoint",
        "timestamp": "2026-07-13T05:35:20.789012"
    }
}

Field Respons

FieldTipeDeskripsi
codeinteger0 = berhasil, negatif = kesalahan
msgstringPesan yang dapat dibaca manusia
data.addressstringAlamat yang ditambahkan/diperbarui
data.callback_urlstring | nullURL callback yang terdaftar (null jika tidak ada)
data.timestampstringTimestamp ISO dari operasi

Respons Kesalahan

Semua kesalahan menggunakan code = -1 dan menjelaskan masalahnya di msg:

msgPenyebab
API key required in X-API-KEY header or request bodyTidak ada API key yang diberikan
Invalid API key or IP not in whitelistAutentikasi gagal
Invalid TRC-20 address formatAlamat tidak cocok dengan format yang diperlukan
Invalid callback URL. Only public HTTP/HTTPS URLs are allowedURL callback ditolak oleh validasi
Address belongs to another userAlamat terdaftar di bawah akun yang berbeda
Database error adding/updating addressKesalahan sementara di sisi server — coba lagi
Internal server errorKesalahan yang tidak terduga — coba lagi atau hubungi dukungan
json
{ "code": -1, "msg": "Invalid API key or IP not in whitelist", "data": null }

Kode status HTTP

Kesalahan endpoint dikembalikan dengan HTTP 200 dan code bernilai negatif — periksa code, bukan status HTTP. Body kesalahan selalu menyertakan "data": null.

Beberapa kesalahan dikembalikan sebelum permintaan mencapai endpoint. Kesalahan ini menggunakan status non-200 dan bentuk body yang berbeda:

HTTPBodyPenyebab
402{"detail": {"code": 1004, "msg": "Insufficient funds. Minimum balance is 4 TRX. Please top up your account."}}Saldo akun terlalu rendah
403{"detail": {"code": 1005, "msg": "API key is blocked. Contact support."}}API key diblokir — hubungi dukungan
422{"detail": [ … ]}Body permintaan gagal divalidasi: field yang wajib diisi tidak ada atau memiliki tipe yang salah. Perhatikan bahwa tidak ada field code dalam respons ini

Callback (webhook)

Jika Anda mendaftarkan callback_url, sistem akan memanggilnya setiap kali energy didelegasikan ke alamat tersebut (yaitu sekali per siklus delegasi saat diproses).

Format permintaan

Sistem mengirimkan permintaan HTTP GET dengan parameter kueri:

Siklus yang dihasilkan dari transfer USDT — energy_used ada:

GET https://your-server.com/webhook?address=TQn9Y2khEsLJW1ChVWFMSMeRDow5KcbLSE&order_id=T149936&hash=97b4eb0257088aefcb286229aa42ec750f27554390dd4e186f55efe273666577&balance_after=142.3500&idle_cycle=0&energy_used=65k&charged=2.0000

Siklus tanpa transfer sebelumnya — energy_used dihilangkan:

GET https://your-server.com/webhook?address=TQn9Y2khEsLJW1ChVWFMSMeRDow5KcbLSE&order_id=T149937&hash=97b4eb0257088aefcb286229aa42ec750f27554390dd4e186f55efe273666577&balance_after=138.3500&idle_cycle=0&charged=4.0000
ParameterDeskripsi
addressAlamat TRON yang menerima delegasi energy
order_idPengidentifikasi delegasi (T + id delegasi internal) — unik per delegasi
hashHash transaksi on-chain dari delegasi energy
balance_afterSaldo akun Anda dalam TRX tepat setelah penagihan ini (snapshot pada saat penagihan; mungkin telah berubah saat callback tiba)
idle_cycle1 — delegasi ini diterbitkan setelah 24 jam tanpa transfer (delegasi ulang idle), 0 — siklus reguler yang dihasilkan dari transfer atau aktivasi Anda
energy_usedKategori tarif dari energy yang dikonsumsi oleh transfer yang menghasilkan siklus ini: 65k (65.000 energy atau kurang → 2 TRX) atau 131k (lebih dari 65.000 → 4 TRX). Opsional — key ini dihilangkan sama sekali dari string kueri (tidak dikirim dalam keadaan kosong) ketika tidak ada transfer sebelumnya untuk diukur: delegasi pertama dari suatu aktivasi, setiap delegasi ulang idle, dan alamat yang belum memiliki riwayat konsumsi. Semuanya dikenakan biaya dengan tarif 4 TRX
chargedJumlah dalam TRX yang ditagihkan untuk siklus ini — 2.0000 atau 4.0000, sesuai dengan tarif di energy_used. Selalu ada, termasuk ketika energy_used dihilangkan. Lihat Host Mode → Siklus dan Penetapan Harga

Gunakan order_id dan hash untuk membedakan satu delegasi dari yang lain dan untuk mencocokkan dengan catatan Anda sendiri — dua callback untuk alamat yang sama berbeda berdasarkan nilai-nilai ini. Gunakan charged untuk melacak pengeluaran per siklus tanpa perlu melakukan polling ke /apiv2/time/status, dan energy_used untuk melihat tarif mana yang dikenakan pada transfer sebelumnya. Perlakukan energy_used sebagai parameter opsional — key yang hilang berarti "tidak ada transfer untuk diukur", bukan kesalahan, dan jangan pernah mengasumsikan nilai default untuknya.

Contoh handler (Python / Flask)

python
from flask import Flask, request, jsonify

app = Flask(__name__)

@app.route('/webhook', methods=['GET'])
def energy_delegation_webhook():
    address = request.args.get('address')
    order_id = request.args.get('order_id')
    tx_hash = request.args.get('hash')
    charged = request.args.get('charged')          # TRX yang ditagihkan untuk siklus ini
    energy_used = request.args.get('energy_used')  # '65k' | '131k' | None (key mungkin tidak ada)

    if not address:
        return jsonify({"error": "Missing address parameter"}), 400

    # Logika bisnis Anda (idempoten berdasarkan order_id / hash)
    print(f"Energy delegated: address={address} order_id={order_id} hash={tx_hash} "
          f"charged={charged} energy_used={energy_used}")
    return jsonify({"status": "success"}), 200

Perilaku pengiriman

  • Metode: GET, batas waktu (timeout) ~10 detik. Kembalikan HTTP 200 sebagai konfirmasi.
  • Percobaan ulang: hingga 3 kali percobaan dilakukan jika permintaan gagal; jika semuanya gagal, callback akan dibatalkan (delegasi energy tetap terjadi).
  • Tanpa tanda tangan: permintaan tidak ditandatangani oleh Netts. Rahasianya (jika ada) adalah apa pun yang Anda sematkan di callback_url Anda sendiri.
  • Rekonsiliasi: karena callback bisa terlewat, lakukan juga polling ke /apiv2/time/status dan pastikan handler Anda bersifat idempoten.

Memperbarui / menghapus callback

  • Perbarui: panggil /apiv2/time/add lagi dengan alamat yang sama dan callback_url yang baru.
  • Hapus: panggil /apiv2/time/delete untuk menghapus alamat (ini juga menghapus callback-nya); tambahkan kembali tanpa callback_url jika diperlukan.

Endpoint Terkait

Catatan

  • Alamat baru dimulai dengan status tidak aktif; aktifkan dengan pesanan, dengan infinity start, atau dengan meneruskan "infinity": true di sini.
  • Alamat yang sama tidak dapat didaftarkan di bawah dua akun yang berbeda.
  • Alamat harus sudah diaktifkan di jaringan TRON sebelum menambahkannya.