POST /apiv2/usdt/analyze
TRON USDT transfer maliyetini hesaplayın (özel uç nokta — kimlik doğrulamalı).
Genel GET varyantı ile tamamen aynı TransferAnalysis yükünü döndürür, ancak çok daha yüksek bir hız sınırına sahiptir (1/sn yerine Kong düğümü başına 50 istek/sn) ve istek verileri URL yerine bir JSON gövdesi içinde iletilir. Tüm üretim ortamı entegrasyonları için bu uç noktayı kullanın.
Uç Nokta URL'si
POST https://netts.io/apiv2/usdt/analyzeKimlik Doğrulama
Aşağıdaki iki başlıktan biri kabul edilir (her ikisi de aynı anda desteklenir; Netts /apiv2/* API yüzeyinin geri kalanıyla eşleştiği için X-API-KEY tercih edilir):
| Başlık | Zorunlu | Açıklama |
|---|---|---|
Content-Type | Evet | application/json olmalıdır. |
X-API-KEY | Tercih edilen | Netts API anahtarınız — /apiv2/order1h ve diğer kimlik doğrulamalı Netts uç noktaları için kullanılan formatın aynısı. |
Authorization | Bir alternatif olarak kabul edilir | Bearer {key} veya yalnızca {key} (ön ek olmadan). HTTP istemcinizin yerleşik bir bearer/kimlik doğrulama akışı varsa bunu kullanın. |
Her iki başlık da gönderilirse X-API-KEY önceliklidir.
IP beyaz listesi: İsteğin uç noktamıza ulaştığı IP adresi, API anahtarınız için yapılandırılmış beyaz listede yer almalıdır (diğer /apiv2/* uç noktalarıyla aynı mekanizma). Beyaz listede olmayan bir IP'den gelen istekler "Invalid API key or IP not in whitelist" mesajıyla 401 Unauthorized döndürür.
order1h başlıklarınızı yeniden kullanma
Zaten X-API-KEY: {key} ile /apiv2/order1h çağrısı yapıyorsanız, tamamen aynı X-API-KEY başlığını /apiv2/usdt/analyze uç noktasına gönderebilirsiniz — hesaplayıcı artık bunu birincil kimlik doğrulama başlığı olarak tanımaktadır.
İstek gövdesi
{
"sender_address": "TFLit1TFohBtT2f8UVCLFVPmZxawxqByYe",
"receiver_address": "TTKR9aQdJWTgXLK9cmzaDitT5VXE497thL"
}Alanlar
| Alan | Tür | Zorunlu | Kısıtlamalar |
|---|---|---|---|
sender_address | string | Evet | Geçerli TRON adresi — 34 karakter, T ile başlar, geçerli base58 sağlama toplamı. |
receiver_address | string | Evet | Geçerli TRON adresi; sender_address değerinden farklı olmalıdır. |
TIP
amount alanı yoktur. Hesaplayıcı, iki adres arasındaki tek bir USDT transferi için maliyet ve kaynak gereksinimlerini döndürür; belirli bir USDT miktarı için döküme ihtiyacınız varsa önerilen Energy miktarını kendi tarafınızdaki transfer sayısıyla çarpın — tek bir TRC-20 USDT transferi, miktara bakılmaksızın aynı ~130 k Energy miktarını tüketir.
İstek örnekleri
cURL (tercih edilen — X-API-KEY)
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)
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
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())Yanıt
Başarılı (200 OK)
Genel uç nokta ile aynı zarf yapısı:
{
"status": "success",
"data": { /* TransferAnalysis — see the public-endpoint page */ },
"current_utc_time": "2026-04-23 11:54:13",
"processing_time_ms": 20.14
}data alanının tüm alan bazlı açıklaması genel uç nokta sayfasında bulunmaktadır — bkz. TransferAnalysis, AddressInfo, Requirements ve Costs.
Hatalar
Kontrol sırası
Kimlik doğrulama, gövde doğrulamasından önce doğrulanır. Eğer Authorization başlığı eksik/geçersizse veya IP adresiniz beyaz listede değilse, JSON gövdesi hatalı biçimlendirilmiş olsa bile her zaman 401 görürsünüz. Önce kimlik doğrulamayı düzeltin, ardından geçerli bir anahtarla yeniden test edin; Pydantic gövde doğrulama hataları (422) yalnızca bundan sonra ortaya çıkacaktır.
| HTTP | Gövde | Durum |
|---|---|---|
| 401 | {"code": -1, "msg": "API key not provided (expected X-API-KEY or Authorization header)"} | Ne X-API-KEY ne de Authorization başlığı mevcut. |
| 401 | {"code": -1, "msg": "Invalid API key or IP not in whitelist"} | Bilinmeyen anahtar veya istek IP'si beyaz listenizde yok. |
| 404 | {"code": -1, "msg": "User not found"} | Anahtar geçerli ancak kullanıcı kaydı bulunamadı (nadir). |
| 422 | {"detail": [{"loc": ["body","sender_address"], "msg": "Invalid TRON address length", "type": "value_error"}]} | FastAPI/Pydantic gövde doğrulaması başarısız oldu. Durum 400 değil, 422 Unprocessable Entity şeklindedir. |
| 422 | {"detail": [{..., "msg": "Sender and receiver cannot be the same address", "type": "value_error"}]} | sender_address == receiver_address. |
| 429 | {"message": "API rate limit exceeded"} | Bir Kong düğümünde 50 req/sec sınırını aşan sürekli trafik. |
| 500 | {"code": -1, "msg": "Internal server error"} | Beklenmeyen sunucu tarafı hatası. |
Hız sınırı
- Kong düğümü başına 50 istek / saniye (
limit_by = ip, ilkelocal). minute/hoursınırları ayarlanmamıştır — yalnızca saniye başına sınır geçerlidir.- Her yanıt standart Kong başlıklarını taşır:
RateLimit-Limit,RateLimit-Remaining,RateLimit-Reset,X-RateLimit-Limit-Second,X-RateLimit-Remaining-Secondve429durumundaRetry-After.
Örnek 429 yanıtı
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
Tek bir API anahtarıyla 50 istek/sn sınırına ulaşıyorsanız ve daha fazlasına ihtiyacınız varsa destek ile iletişime geçin — sınır anahtar başına artırılabilir veya tüketicinize özel bir hız sınırı eklentisi bağlanabilir.
Hata ayıklama başlıkları
Her yanıt, 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ı aynen 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şleme süresi (Kong hariç, yukarı akış). |
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 yapar, bu nedenle yük altında veya yavaş yukarı akış düğümlerinde tek bir çağrı birkaç saniye sürebilir. Kısa istemci zaman aşımları, sağlıklı yanıtlarda bile başarısız olur — bu durum, entegratörlerden gelen çoğu cURL error 28 (Connection timed out) bildiriminin temel nedenidir.
Ö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) (ör. 0–200 ms) ekleyin, ardından 50 istek/sn sınırına takılmaya devam ederseniz üstel geri çekilme (exponential backoff) kullanın. - HTTP 5xx veya ağ hatalarında, üstel geri çekilme ile en fazla 2–3 kez yeniden deneyin; uç noktayı istek yağmuruna tutmayın.
- Sonucu her
(sender_address, receiver_address)çifti için istemci tarafında 30–60 saniye önbelleğe alın — temel kaynak fiyatları ve zincir üstü durum, daha sık yeniden hesaplamayı gerektirecek kadar hızlı nadiren değişir.
Tarayıcı / CORS desteği
Bu uç nokta sunucudan sunucuya entegrasyonlar için tasarlanmıştır ve şu anda bir tarayıcıdan doğrudan çağrıları desteklemez: yukarı akış FastAPI uygulaması yalnızca Access-Control-Allow-Methods: GET bildirir, bu nedenle kaynaklar arası bir POST için ön kontrol (preflight) OPTIONS çağrısı tarayıcılarda başarısız olur.
Hesaplayıcıyı bir tarayıcı ön ucundan çağırmanız gerekiyorsa, anahtarı istemciye ifşa etmek yerine isteği kendi arka ucunuz (API anahtarını tutan) üzerinden yönlendirin.
TIP
Kullanım senaryonuz meşru olarak bir API anahtarıyla tarayıcı tarafında POST gerektiriyorsa (ör. bilinen bir kaynakta güvenilen bir dahili gösterge paneli), destek ile iletişime geçin — rotanız için Kong düzeyinde bir CORS eklentisi eklenebilir.
Notlar
- Yanıt formatı kasıtlı olarak genel uç nokta ile aynıdır, böylece genel yanıtı ayrıştıran istemci kodu, kimlik doğrulamalı varyanta geçtikten sonra da çalışmaya devam eder — yalnızca çağrının kendisi değişir.
- Hem
X-API-KEY: {key}(tercih edilen,/apiv2/order1hile tutarlı) hem deAuthorization: Bearer {key}/Authorization: {key}kabul edilir; her ikisi de gönderilirseX-API-KEYönceliklidir. - Kimlik doğrulamalı trafik Kong düğümü başına sınırlandırıldığından ve talep üzerine tüketici başına anlambilim etkinleştirilebildiğinden, Cloudflare / ters proxy araya girmesi bu uç noktayı genel uç noktayı etkilediği gibi etkilemez.