GET /apiv2/usdt/{sender}&
TRON USDT transfer maliyetini hesaplayın (herkese açık uç nokta, API anahtarı gerekmez).
Gönderici ve alıcı hesaplarının ayrıntılı bir analizini, kaynak gereksinimlerini (energy/bandwidth) ve önerilen maliyet yöntemini döndürür.
Düşük istek sınırı — ara sıra / test amaçlı kullanım içindir
Bu uç nokta genel kullanıma açıktır ve 1 istek/sn ile 60 istek/dk şeklinde sınırlandırılmıştır. Uygulamanız Cloudflare veya başka bir ters proxy arkasında olduğunda, bu sınır aynı uç nokta üzerinden Netts'e erişen tüm istemciler arasında etkin olarak paylaşılabilir; bu nedenle tek bir kullanıcıdan 60 istek/dakika dolmadan 429 Too Many Requests hatasıyla karşılaşabilirsiniz.
Seyrek çağrıların ötesindeki her durum için kimlik doğrulamalı POST /apiv2/usdt/analyze uç noktasını kullanın — anahtar başına çok daha yüksek bir sınıra (50 istek/sn) sahiptir.
Uç Nokta URL'si
GET https://netts.io/apiv2/usdt/{sender}&{receiver}URL parametreleri
| Parametre | Tür | Zorunlu | Açıklama |
|---|---|---|---|
| sender | string | Evet | Göndericinin TRON adresi |
| receiver | string | Evet | Alıcının TRON adresi |
Adresler yolda ve işareti (&) ile ayrılarak iletilir. Her ikisi de geçerli base58 TRON adresleri olmalıdır (34 karakter, T ile başlayan, geçerli sağlama toplamı).
İstek örnekleri
cURL
curl "https://netts.io/apiv2/usdt/TFLit1TFohBtT2f8UVCLFVPmZxawxqByYe&TTKR9aQdJWTgXLK9cmzaDitT5VXE497thL"Python
import requests
sender = "TFLit1TFohBtT2f8UVCLFVPmZxawxqByYe"
receiver = "TTKR9aQdJWTgXLK9cmzaDitT5VXE497thL"
url = f"https://netts.io/apiv2/usdt/{sender}&{receiver}"
response = requests.get(url, timeout=15)
if response.status_code == 200:
payload = response.json()
data = payload["data"]
print(f"Can transfer: {data['can_transfer']}")
print(f"Energy needed: {data['requirements']['energy_needed']}")
print(f"Bandwidth needed: {data['requirements']['bandwidth_needed']}")
print(f"Total cost (TRX): {data['costs']['total_cost_trx']}")
print(f"Recommended method: {data['costs']['recommended_method']}")
elif response.status_code == 429:
print("Rate-limited — retry after:", response.headers.get("Retry-After"), "s")
else:
print("Error:", response.json())Yanıt
Başarılı (200 OK)
Üst düzey zarf:
{
"status": "success",
"data": { /* TransferAnalysis — see below */ },
"current_utc_time": "2026-04-23 11:54:13",
"processing_time_ms": 19.27
}data (TransferAnalysis)
| Alan | Tür | Açıklama |
|---|---|---|
sender | AddressInfo | Gönderici için eksiksiz hesap bilgileri (bakiye, staking, delegasyon, etkinleştirme). |
receiver | AddressInfo | Alıcı için eksiksiz hesap bilgileri. |
requirements | Requirements | Transferin ihtiyaç duyacağı Energy / bandwidth (ham + güvenlik payı ile). |
costs | Costs | Yakma (burn) ve kiralama (rent) maliyet dökümü ve önerilen yöntem. |
can_transfer | boolean | Transfer mevcut kaynaklar/fiyatlar ile yürütülebiliyorsa true. |
issues | string[] | Analiz sırasında tespit edilen sorunlar (örn. yetersiz bandwidth). |
recommendations | string[] | İstemci için insan tarafından okunabilir öneriler. |
variation_id | string | null | Dahili varyasyon kataloğundan eşleşen senaryo kimliği (örn. "CUSTOM"). |
AddressInfo
Entegrasyonlarda kullanacağınız tipik alanlar: address, is_activated, trx_balance, usdt_balance, has_usdt, energy_balance, bandwidth_balance. İleri düzey kullanım için ek alt düzey alanlar: trx_balance_sun, energy_total, bandwidth_total, bandwidth_free, bandwidth_staked, energy_used, bandwidth_used, create_time, latest_operation_time, staked_for_energy, staked_for_bandwidth, delegated_for_energy, delegated_for_bandwidth, delegated_out_energy, delegated_out_bandwidth, votes.
Requirements
| Alan | Tür | Açıklama |
|---|---|---|
energy_needed | int | Transfer için gereken ham energy birimleri. |
bandwidth_needed | int | Gereken ham bandwidth birimleri. |
energy_with_buffer | int | Güvenli bir kiralama kademesine yuvarlanmış energy (örn. 131 000). |
bandwidth_with_buffer | int | Küçük bir güvenlik payı içeren bandwidth. |
receiver_has_usdt | boolean | Alıcının halihazırda USDT tutup tutmadığı (energy'yi etkiler). |
Costs
| Alan | Tür | Açıklama |
|---|---|---|
energy_burn_trx | decimal | Energy doğrudan yakma yoluyla ödenirse yakılan TRX. |
bandwidth_burn_trx | decimal | Ücretsiz olarak mevcut değilse, bandwidth'i karşılamak için yakılan TRX. |
total_burn_trx | decimal | energy_burn_trx + bandwidth_burn_trx. |
total_burn_sun | int | SUN (10⁻⁶ TRX) cinsinden ifade edilen total_burn_trx. |
energy_rental_trx | decimal | Gerekli energy'yi aşağıdaki süre boyunca Netts üzerinden kiralamak için maliyet. |
energy_rental_sun | int | Yukarıdakinin aynısı ancak SUN cinsinden. |
rental_time_period | string | örn. "1h", "5m" veya kiralama en iyi yol olmadığında "not_needed". |
rental_price_per_unit | int | Seçilen dönem için SUN cinsinden energy birimi başına kiralama fiyatı. |
savings_trx | decimal | rent seçeneğinin burn seçeneğine kıyasla ne kadar ucuz olduğu (yakma en iyisiyse negatif olabilir). |
savings_percentage | float | Yüzde olarak aynısı. |
recommended_method | string | "burn" veya "rent" — geçerli istek için daha ucuz olan seçenek. |
total_cost_trx | decimal | null | recommended_method izlendiğinde oluşacak gerçek maliyet. |
sender_activation_cost | decimal | null | Gönderici hesabının etkinleştirilmesi gerekiyorsa ek maliyet, aksi halde null. |
Gerçek yanıt örneği (kısaltılmış)
{
"status": "success",
"data": {
"sender": { "address": "TFLit1...", "is_activated": true, "trx_balance": 191.943, "usdt_balance": 24410.499, "energy_balance": 195297, "bandwidth_balance": 148, "has_usdt": true, "...": "..." },
"receiver": { "address": "TTKR9a...", "is_activated": true, "trx_balance": 18.656, "usdt_balance": 0.0, "energy_balance": 0, "bandwidth_balance": 263, "has_usdt": false, "...": "..." },
"requirements": {
"energy_needed": 130285,
"bandwidth_needed": 345,
"energy_with_buffer": 131000,
"bandwidth_with_buffer": 360,
"receiver_has_usdt": false
},
"costs": {
"energy_burn_trx": 0.0,
"bandwidth_burn_trx": 0.345,
"total_burn_trx": 0.345,
"total_burn_sun": 345000,
"energy_rental_trx": 0.0,
"energy_rental_sun": 0,
"rental_time_period": "not_needed",
"rental_price_per_unit": 0,
"savings_trx": 0.0,
"savings_percentage": 0.0,
"recommended_method": "burn",
"total_cost_trx": 0.345,
"sender_activation_cost": null
},
"can_transfer": true,
"issues": [
"Insufficient bandwidth: have 148, need 345. Network will burn 0.345 TRX for full amount"
],
"recommendations": [
"Insufficient bandwidth: have 148, need 345. Full amount of 0.345 TRX will be burned",
"💰 Total cost: 0.345 TRX (burn for all resources)"
],
"variation_id": "CUSTOM"
},
"current_utc_time": "2026-04-23 11:54:13",
"processing_time_ms": 19.27
}Hatalar
| HTTP | Gövde (örnek) | Durum |
|---|---|---|
| 400 | {"code": -1, "msg": "Invalid sender address format: Txyz..."} | Adres TRON base58 / uzunluk / sağlama toplamı doğrulamasını geçemez. |
| 400 | {"code": -1, "msg": "Expected at least 2 parameters: sender&receiver"} | URL, & ile ayrılmış iki adres içermez. |
| 400 | {"code": -1, "msg": "Sender and receiver cannot be the same address"} | Gönderici ve alıcı adresleri aynıdır. |
| 429 | {"message": "API rate limit exceeded"} | İstek sınırı aşıldı (bu sayfanın başındaki uyarıya bakın). |
| 500 | {"code": -1, "msg": "Internal server error"} | Beklenmeyen sunucu tarafı hatası. |
İstek sınırı başlıkları
Her yanıtta (429 dahil) aşağıdaki başlıklar döndürülür:
| Başlık | Anlamı |
|---|---|
X-RateLimit-Limit-Second | Saniye başına izin verilen maksimum istek (şu anda 1). |
X-RateLimit-Remaining-Second | Bu saniye içinde hâlâ gönderebileceğiniz istek sayısı. |
X-RateLimit-Limit-Minute | Dakika başına izin verilen maksimum istek (şu anda 60). |
X-RateLimit-Remaining-Minute | Bu dakika içinde hâlâ gönderebileceğiniz istek sayısı. |
Retry-After | 429 durumunda — yeniden denemeden önce beklenecek saniye. |
Hata ayıklama başlıkları
Her yanıt ayrıca bir destek talebi açarken yararlı olan tanımlayıcıları da taşır — isteği günlüklerimizde saniyeler içinde bulabilmemiz için lütfen bunları olduğu gibi ekleyin:
| Başlık | Anlamı |
|---|---|
X-Request-ID | Uygulama tarafı istek kimliği (hesaplayıcı tarafından oluşturulur). |
X-Process-Time | Milisaniye cinsinden uygulama işlem süresi (Kong hariç, kaynak sunucu). |
X-Kong-Request-Id | Kong tarafı istek kimliği (Kong erişim günlüklerinde bulunur). |
İstemci tarafı zaman aşımı ve yeniden deneme
Hesaplayıcı her istek için TRON düğümlerine canlı zincir üstü sorgular yürütür; bu nedenle yük altında veya yavaş kaynak düğümlerinde tek bir çağrı birkaç saniye sürebilir. Kısa istemci zaman aşımları, başarılı yanıtlarda bile başarısızlığa neden olur.
Önerilen ayarlar:
- Zaman aşımı ≥ 15 saniye (30 sn daha güvenlidir). Birçok HTTP istemcisi tarafından kullanılan varsayılan 10 sn çok kısadır.
- HTTP 429 durumunda,
Retry-Afterbaşlığını (saniye) dikkate alın. Yeniden denemeden önce küçük bir gecikme dalgalanması (jitter, örn. 0–200 ms) ekleyin, ardından sınıra takılmaya devam ederseniz üstel geri çekilme (exponential backoff) uygulayın. - HTTP 5xx veya ağ hatalarında, üstel geri çekilme ile en fazla 2–3 kez yeniden deneyin; uç noktayı aşırı istek yağmuruna tutmayın.
- Sonucu
(sender, receiver)çifti başına istemci tarafında 30–60 saniye boyunca önbelleğe alın — temel kaynak fiyatları ve zincir üstü durum, daha sık yeniden hesaplamayı gerektirecek kadar nadiren hızlı değişir.
Örnek 429 yanıtı
HTTP/1.1 429 Too Many Requests
Content-Type: application/json; charset=utf-8
RateLimit-Limit: 1
RateLimit-Remaining: 0
RateLimit-Reset: 1
Retry-After: 1
X-RateLimit-Limit-Second: 1
X-RateLimit-Remaining-Second: 0
X-RateLimit-Limit-Minute: 60
X-RateLimit-Remaining-Minute: 0
{"message":"API rate limit exceeded"}Notlar
- Anonim erişim:
X-API-KEYyok,Authorizationbaşlığı yok, IP beyaz listesi yok. - Yanıt her zaman
{status, data, current_utc_time, processing_time_ms}içinde sarmalanır — entegrasyonlar fiyatlandırmayıdata.costsalanından ve gereksinimleridata.requirementsalanından okumalıdır. - Yanıt gerçek zamanlı olarak hesaplanır — Netts'in güncel TRON kaynak fiyatlarını ve her iki adresin mevcut zincir üstü durumunu yansıtır, bu nedenle ardışık çağrılar arasında küçük farklılıklar bekleyebilirsiniz.
- Uygulamanızın hesaplayıcıyı dakikada birkaç kereden fazla çağırması gerekiyorsa (IP başına / CF uç noktası başına), API anahtarınız ile
POST /apiv2/usdt/analyzeuç noktasına geçin.