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

POST /apiv2/usdt/analyze

Hitung biaya transfer TRON USDT (endpoint privat — terautentikasi).

Mengembalikan muatan TransferAnalysis yang sama persis dengan varian GET publik, tetapi dengan batas laju yang jauh lebih tinggi (50 req/detik per node Kong alih-alih 1/detik) dan dengan data permintaan yang dikirimkan dalam badan JSON alih-alih URL. Gunakan endpoint ini untuk setiap integrasi produksi.

URL Endpoint

POST https://netts.io/apiv2/usdt/analyze

Autentikasi

Salah satu dari dua header berikut diterima (keduanya didukung secara bersamaan; X-API-KEY lebih disukai karena cocok dengan keseluruhan cakupan API Netts /apiv2/* lainnya):

HeaderDiperlukanDeskripsi
Content-TypeYaHarus application/json.
X-API-KEYLebih disukaiKunci API Netts Anda — format yang sama persis digunakan untuk /apiv2/order1h dan endpoint Netts terautentikasi lainnya.
AuthorizationDiterima sebagai alternatifBearer {key} atau cukup {key} (tanpa awalan). Gunakan ini jika klien HTTP Anda memiliki alur bearer/autentikasi bawaan.

Jika kedua header dikirimkan, X-API-KEY yang diutamakan.

Daftar putih IP: IP tempat permintaan mencapai edge kami harus berada dalam daftar putih yang dikonfigurasi untuk kunci API Anda (mekanisme yang sama dengan endpoint /apiv2/* lainnya). Permintaan dari IP yang tidak terdaftar putih mengembalikan 401 Unauthorized dengan "Invalid API key or IP not in whitelist".

Menggunakan kembali header order1h Anda

Jika Anda sudah memanggil /apiv2/order1h dengan X-API-KEY: {key}, Anda dapat mengirimkan header X-API-KEY yang persis sama ke /apiv2/usdt/analyze — kalkulator sekarang mengenalinya sebagai header autentikasi utama.

Badan permintaan

json
{
    "sender_address":   "TFLit1TFohBtT2f8UVCLFVPmZxawxqByYe",
    "receiver_address": "TTKR9aQdJWTgXLK9cmzaDitT5VXE497thL"
}

Bidang

BidangTipeDiperlukanBatasan
sender_addressstringYaAlamat TRON yang valid — 34 karakter, diawali dengan T, checksum base58 valid.
receiver_addressstringYaAlamat TRON yang valid; harus berbeda dari sender_address.

TIP

Tidak ada bidang amount. Kalkulator mengembalikan biaya dan kebutuhan sumber daya untuk satu transfer USDT antara dua alamat; jika Anda memerlukan rincian untuk jumlah USDT tertentu, kalikan rekomendasi energy dengan jumlah transfer di sisi Anda — satu transfer TRC-20 USDT mengonsumsi ~130 k energy yang sama berapa pun jumlahnya.

Contoh permintaan

cURL (lebih disukai — X-API-KEY)

bash
curl -X POST "https://netts.io/apiv2/usdt/analyze" \
  -H "Content-Type: application/json" \
  -H "X-API-KEY: YOUR_API_KEY" \
  -d '{
        "sender_address":   "TFLit1TFohBtT2f8UVCLFVPmZxawxqByYe",
        "receiver_address": "TTKR9aQdJWTgXLK9cmzaDitT5VXE497thL"
      }'

cURL (alternatif — Authorization)

bash
curl -X POST "https://netts.io/apiv2/usdt/analyze" \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -d '{
        "sender_address":   "TFLit1TFohBtT2f8UVCLFVPmZxawxqByYe",
        "receiver_address": "TTKR9aQdJWTgXLK9cmzaDitT5VXE497thL"
      }'

Python

python
import requests

API_KEY = "YOUR_API_KEY"

payload = {
    "sender_address":   "TFLit1TFohBtT2f8UVCLFVPmZxawxqByYe",
    "receiver_address": "TTKR9aQdJWTgXLK9cmzaDitT5VXE497thL",
}

r = requests.post(
    "https://netts.io/apiv2/usdt/analyze",
    headers={
        "Content-Type": "application/json",
        "X-API-KEY":    API_KEY,           # preferred; same header as /apiv2/order1h
        # or, equivalently:
        # "Authorization": f"Bearer {API_KEY}",
    },
    json=payload,
    timeout=15,
)

if r.status_code == 200:
    data = r.json()["data"]
    print("Energy needed:", data["requirements"]["energy_with_buffer"])
    print("Total cost:   ", data["costs"]["total_cost_trx"], "TRX")
    print("Method:       ", data["costs"]["recommended_method"])
elif r.status_code == 401:
    print("Auth failed:", r.json())
elif r.status_code == 429:
    print("Rate-limited — Retry-After:", r.headers.get("Retry-After"))
else:
    print("Error:", r.status_code, r.json())

Respons

Berhasil (200 OK)

Amplop identik dengan endpoint publik:

json
{
    "status": "success",
    "data": { /* TransferAnalysis — see the public-endpoint page */ },
    "current_utc_time": "2026-04-23 11:54:13",
    "processing_time_ms": 20.14
}

Deskripsi lengkap bidang demi bidang dari data ada di halaman endpoint publik — lihat TransferAnalysis, AddressInfo, Requirements dan Costs.

Kesalahan

Urutan pemeriksaan

Autentikasi divalidasi sebelum validasi badan. Jika header Authorization hilang/tidak valid atau IP Anda tidak terdaftar putih, Anda akan selalu melihat 401 — bahkan jika badan JSON juga salah format. Perbaiki autentikasi terlebih dahulu, lalu uji kembali dengan kunci yang valid; hanya setelah itu kesalahan validasi badan Pydantic (422) akan muncul.

HTTPBadanKapan
401{"code": -1, "msg": "API key not provided (expected X-API-KEY or Authorization header)"}Header X-API-KEY maupun Authorization tidak ada.
401{"code": -1, "msg": "Invalid API key or IP not in whitelist"}Kunci tidak dikenal, atau IP permintaan tidak ada di daftar putih Anda.
404{"code": -1, "msg": "User not found"}Kunci valid tetapi catatan pengguna tidak ditemukan (jarang).
422{"detail": [{"loc": ["body","sender_address"], "msg": "Invalid TRON address length", "type": "value_error"}]}Validasi badan FastAPI/Pydantic gagal. Statusnya adalah 422 Unprocessable Entity, bukan 400.
422{"detail": [{..., "msg": "Sender and receiver cannot be the same address", "type": "value_error"}]}sender_address == receiver_address.
429{"message": "API rate limit exceeded"}Lalu lintas berkelanjutan melampaui 50 req/sec pada sebuah node Kong.
500{"code": -1, "msg": "Internal server error"}Kegagalan sisi server yang tidak terduga.

Batas laju

  • 50 permintaan / detik per node Kong (limit_by = ip, kebijakan local).
  • Batas minute / hour tidak diatur — hanya batas per detik yang berlaku.
  • Setiap respons membawa header standar Kong: RateLimit-Limit, RateLimit-Remaining, RateLimit-Reset, X-RateLimit-Limit-Second, X-RateLimit-Remaining-Second, dan Retry-After pada status 429.

Contoh respons 429

http
HTTP/1.1 429 Too Many Requests
Content-Type: application/json; charset=utf-8
RateLimit-Limit: 50
RateLimit-Remaining: 0
RateLimit-Reset: 1
Retry-After: 1
X-RateLimit-Limit-Second: 50
X-RateLimit-Remaining-Second: 0

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

TIP

Jika Anda mencapai 50 req/detik dengan satu kunci API dan memerlukan lebih banyak, hubungi dukungan — batas tersebut dapat dinaikkan per kunci, atau plugin batas laju khusus dapat dipasang ke konsumen Anda.

Header debug

Setiap respons juga membawa pengidentifikasi yang berguna saat membuka tiket dukungan — harap sertakan secara persis agar kami dapat menemukan permintaan tersebut di log kami dalam hitungan detik:

HeaderArti
X-Request-IDID permintaan sisi aplikasi (dibuat oleh kalkulator).
X-Process-TimeWaktu pemrosesan aplikasi dalam milidetik (upstream, tidak termasuk Kong).
X-Kong-Request-IdID permintaan sisi Kong (ada di log akses Kong).

Batas waktu dan coba lagi sisi klien

Kalkulator melakukan kueri on-chain langsung ke node TRON untuk setiap permintaan, sehingga di bawah beban tinggi atau node upstream yang lambat, satu panggilan dapat memakan waktu beberapa detik. Batas waktu klien yang pendek akan gagal bahkan pada respons yang sehat — ini adalah akar penyebab sebagian besar laporan cURL error 28 (Connection timed out) dari para integrator.

Pengaturan yang disarankan:

  • Batas waktu ≥ 15 detik (30 detik lebih aman). Nilai default 10 detik yang digunakan oleh banyak klien HTTP terlalu singkat.
  • Pada HTTP 429, patuhi header Retry-After (detik). Tambahkan sedikit variasi acak (jitter, mis. 0–200 md) sebelum mencoba lagi, lalu gunakan backoff eksponensial jika Anda masih mencapai batas 50 req/detik.
  • Pada HTTP 5xx atau kesalahan jaringan, coba lagi paling banyak 2–3 kali dengan backoff eksponensial; jangan membanjiri endpoint.
  • Simpan hasil dalam cache sisi klien selama 30–60 detik per pasangan (sender_address, receiver_address) — harga sumber daya yang mendasarinya dan status on-chain jarang berubah cukup cepat untuk memerlukan penghitungan ulang yang lebih sering.

Dukungan browser / CORS

Endpoint ini dirancang untuk integrasi server-ke-server dan saat ini tidak mendukung panggilan langsung dari browser: aplikasi FastAPI upstream hanya mengiklankan Access-Control-Allow-Methods: GET, sehingga preflight OPTIONS untuk POST lintas-asal (cross-origin) akan gagal di browser.

Jika Anda perlu memanggil kalkulator dari front-end browser, teruskan permintaan melalui back-end Anda sendiri (yang menyimpan kunci API) alih-alih mengekspos kuncinya ke klien.

TIP

Jika kasus penggunaan Anda memang memerlukan POST sisi browser dengan kunci API (mis. dasbor internal tepercaya pada origin yang diketahui), hubungi dukungan — plugin CORS dapat dipasang di tingkat Kong untuk rute Anda.

Catatan

  • Format respons sengaja dibuat identik dengan endpoint publik, sehingga kode klien yang menguraikan respons publik tetap berfungsi setelah Anda bermigrasi ke varian terautentikasi — hanya pemanggilannya saja yang berubah.
  • Baik X-API-KEY: {key} (lebih disukai, konsisten dengan /apiv2/order1h) maupun Authorization: Bearer {key} / Authorization: {key} diterima; jika keduanya dikirimkan, X-API-KEY yang diutamakan.
  • Interposisi Cloudflare / reverse-proxy tidak memengaruhi endpoint ini dengan cara yang sama seperti memengaruhi endpoint publik, karena lalu lintas terautentikasi dibatasi lajunya per-node-Kong dan semantik per-konsumen dapat diaktifkan berdasarkan permintaan.