GET /apiv2/compliance/
Tek bir TRON adresi için açık, anahtarsız uyumluluk sorgulaması. Tamamen bellek içi bir engellenenler listesi (deny-list) önbelleğinden sunulan bir karar döndürür — adres engellendi mi ve hangi kategoride. API anahtarı yok, bakiye yok, ücret yok. Amaç, herkesin tek bir HTTP GET ile uyumluluk katmanını entegre etmesini sağlamaktır.
Uç nokta yalnızca bir önbelleği okur, asla veritabanına veya bir zincir düğümüne başvurmaz; bu nedenle bir sorgulama milisaniyenin çok küçük bir kısmını alır. Ağ geçidi tarafından IP başına istek sınırlaması uygulanır.
Uç Nokta URL'si
GET https://netts.io/apiv2/compliance/{address}Kimlik doğrulama başlıkları gerekli değildir.
İstek Parametreleri
| Parameter | Type | Required | Description |
|---|---|---|---|
| address | string | Yes | TRON base58 adresi — T ve ardından gelen 33 karakter |
Örnekler
cURL
curl https://netts.io/apiv2/compliance/TTVUvAWUZafeHqQP82sYnfk4jNFPEHCRpLPython
import requests
address = "TTVUvAWUZafeHqQP82sYnfk4jNFPEHCRpL"
r = requests.get(f"https://netts.io/apiv2/compliance/{address}")
data = r.json()
if r.status_code == 200:
d = data["data"]
print(f"blocked : {d['blocked']}")
print(f"category: {d['category']}")
if d["category"] == "aml_risk":
print(f"reason : {d.get('reason_code')} — {d.get('label')}")
else:
print(f"Error: {data}")JavaScript
const address = "TTVUvAWUZafeHqQP82sYnfk4jNFPEHCRpL";
const res = await fetch(`https://netts.io/apiv2/compliance/${address}`);
const { data } = await res.json();
console.log(data.blocked, data.category, data.label);Yanıt
Engellendi — merkezi engellenenler listesinde (200 OK)
{
"code": 0,
"status": "ok",
"data": {
"address": "TTVUvAWUZafeHqQP82sYnfk4jNFPEHCRpL",
"blocked": true,
"category": "aml_risk",
"severity": "BLOCK",
"reason_code": "SANCTIONS_SCREENING",
"label": "DPRK Bitget Exploit - September 2026",
"subtype": null,
"subtype_status": "not_found",
"matches": ["aml_risk"],
"checks_complete": true,
"checked_at": "2026-09-27T12:00:00+00:00"
}
}GasFree cüzdanı — USDT alabilen bir akıllı sözleşme (200 OK)
{
"code": 0,
"status": "ok",
"data": {
"address": "TZEMF5vmSABaWjeUPty8kFpUsquMAKhGFp",
"blocked": true,
"category": "smart_contract",
"subtype": "gasfree_wallet",
"subtype_status": "confirmed",
"matches": ["smart_contract"],
"checks_complete": true,
"checked_at": "2026-10-23T12:00:00+00:00"
}
}Silinmiş sözleşme — adres hala akıllı sözleşme olarak sayılır (200 OK)
{
"code": 0,
"status": "ok",
"data": {
"address": "TBtrogXC58EAvE7vod56ZnzRY4y5jrwtbN",
"blocked": true,
"category": "smart_contract",
"subtype": "selfdestructed_contract",
"subtype_status": "confirmed",
"matches": ["smart_contract"],
"checks_complete": true,
"checked_at": "2026-10-23T21:40:00+00:00"
}
}Temiz — kümelerin hiçbirinde yok (200 OK)
{
"code": 0,
"status": "ok",
"data": {
"address": "TWaGxHZ9pFCFwUyzKtDsGNb6hEJ7tSjxEC",
"blocked": false,
"category": "clean",
"subtype": null,
"subtype_status": "not_found",
"matches": [],
"checks_complete": true,
"checked_at": "2026-09-27T12:00:00+00:00"
}
}Yanıt Alanları
| Field | Type | Description |
|---|---|---|
| data.address | string | Kontrol edilen adres |
| data.blocked | boolean | Adres herhangi bir engelleme kümesindeyse true |
| data.category | string | aml_risk, usdt_frozen, smart_contract, spam_sender veya clean (aşağıya bakın); toplu uç nokta ayrıca invalid veya unavailable döndürebilir |
| data.severity | string | Yalnızca aml_risk için. Örn. BLOCK, REVIEW |
| data.reason_code | string | Yalnızca aml_risk için. Makine kodu, örn. SANCTIONS_OFAC_SDN |
| data.label | string | Yalnızca aml_risk için. İnsan tarafından okunabilir etiket |
| data.subtype | string | null | smart_contract durumunu detaylandırır. gasfree_wallet — aktif bir GasFree cüzdanı (GasFree cüzdanları bölümüne bakın); selfdestructed_contract — bu adresteki sözleşme silinmiştir (Silinmiş sözleşmeler bölümüne bakın); aksi takdirde null |
| data.subtype_status | string | confirmed — alt tür en son onaylanan duruma göre bilinmektedir; not_found — hiçbir alt tür geçerli değildir; unavailable — şu anda bir alt tür listesine başvurulamadı, bu nedenle subtype alanı null değerindedir ve bir şey belirtmez |
| data.matches | string[] | Adresin bulunduğu tüm kümeler, öncelik sırasına göre (örn. ["usdt_frozen", "smart_contract", "spam_sender"]). category yalnızca bunlardan ilkidir |
| data.checks_complete | boolean | Sorgulama sırasında dört kümenin tümü yüklenmiş ve güncelse true. false, bir clean yanıtının eksik bir kontrole dayandığı anlamına gelir |
| data.checked_at | string | Sorgulamanın UTC ISO-8601 zaman damgası |
Kategoriler
category bir risk puanı değil, kesin bir karardır. Bir adres birden fazla kümede yer aldığında, en kritik kategori kazanır, sıra şu şekildedir (tümü matches içinde listelenir):
| Category | blocked | Meaning |
|---|---|---|
aml_risk | true | Merkezi engellenenler listesinde: yaptırımlar, dolandırıcılıklar, fidye yazılımları, çalınan varlıklar, sahtekarlık, kanun yaptırımı veya dahili kötüye kullanım tespitleri. Düzenlenmiş bir neden eklenir |
usdt_frozen | true | Adres USDT ihraççısı (Tether) tarafından dondurulmuştur. USDT transfer edemez, bu nedenle adrese kaynak delegasyonu reddedilir |
smart_contract | true | Bilinen bir akıllı sözleşme adresi, daha sonra silinen sözleşmeler dahil. Aşağıdaki nota bakın |
spam_sender | true | Doğrulanmış toplu spam göndericisi |
clean | false | Kümelerin hiçbirinde yok |
unavailable | null | Merkezi engellenenler listesine başvurulamadı, bu nedenle adres ne onaylanmış şekilde temiz ne de engellenmiştir. Yalnızca toplu sorguda; tek adresli uç nokta bunun yerine code 5004 ile 503 döndürür. Bkz. Merkezi engellenenler listesi kullanılamıyor |
Akıllı sözleşmeler AML nedeniyle değil, teknik bir nedenle engellenir
Bir smart_contract kararı, adresin bir kullanıcı cüzdanına değil, bir sözleşmeye ait olduğu anlamına gelir; bu nedenle enerji delege edilmez ve henüz bir sipariş oluşturulmadan önce adres reddedilir. Bu küme, bir sözleşmenin başarıyla oluşturulduğu her adresi içerir, daha sonra silinen sözleşmeler dahil — silinmiş bir sözleşme adresini bir kullanıcı cüzdanına dönüştürmez. Bu durum, sözleşmenin güvenliğinin ihlal edildiği, şüpheli olduğu veya AML kapsamında yüksek riskli olduğu anlamına gelmez. Bu kümedeki çoğu sözleşme tamamen sıradandır. smart_contract kararını bir risk uyarısı olarak değil, "delegasyon hedefi değil" olarak değerlendirin.
GasFree cüzdanları
Bir GasFree cüzdanı, sahibinin token alıp göndermesini ve ağ ücretini bu token'larla ödemesini sağlayan bir sözleşmedir. Her biri TFFAMQLZybALaLb4uxHA9RBE7pxhUAjF3U GasFree denetleyicisi tarafından oluşturulur. Böyle bir adres category: "smart_contract" ve subtype: "gasfree_wallet" olarak bildirilir.
Fonları yönlendirirken bu ayrım önem taşır:
| Sıradan akıllı sözleşme | GasFree cüzdanı | |
|---|---|---|
| Oraya USDT gönderme | normal bir alıcı değil | evet — bir kullanıcının cüzdanıdır |
| Oraya enerji delege etme | hayır | hayır — GasFree cüzdanlarına enerji delege etmiyoruz |
category / subtype | smart_contract / null | smart_contract / gasfree_wallet |
Kapsam ve dikkat edilmesi gerekenler:
- Yalnızca dağıtılmış (deployed) cüzdanlar bilinir. USDT almış ancak hiç işlem göndermemiş bir GasFree adresi henüz dağıtılmamıştır, bu nedenle hiçbir kümede yer almaz ve
cleanolarak döner. - Alt tür, adresin nereden fon alabileceğini tanımlar. GasFree cüzdanından yapılan transferler hakkında hiçbir şey söylemez; gönderen adresi ayrıca tarayın.
subtype_status: "unavailable", GasFree listesine başvurulamadığı anlamına gelir. Kararın geri kalanı (blocked,category,matches) hala geçerlidir.- Denetleyicinin kendisi ve diğer sözleşmeler GasFree cüzdanı değildir:
subtype: nullolarak dönerler.
Silinmiş sözleşmeler
Bir sözleşme kendini silebilir (self-destruct). Adres smart_contract kümesinde kalır: bir kullanıcı cüzdanı değil, bir sözleşme adresiydi ve Netts buraya kaynak delegasyonu yapmaz veya ödeme göndermez. Böyle bir adres category: "smart_contract" ve subtype: "selfdestructed_contract" olarak bildirilir.
confirmed, bir TRON düğümü tarafından onaylanan en son duruma göre silindiği anlamına gelir. Bu geleceğe dair bir taahhüt değildir: aynı adrese tekrar bir sözleşme dağıtılabilir ve bu durumda adres birsmart_contractolarak kalırken alt tür kaldırılır.- Tek başına bir self-destruct çağrısı silinme anlamına gelmez: TRON üzerinde önceki bir işlemde oluşturulan bir sözleşme, bundan sonra da kodunu korur. Yalnızca düğüm durumu geçerlidir.
- Bir adres hem silinmiş bir sözleşme hem de bir GasFree listesinde yer alıyorsa,
selfdestructed_contractöncelik kazanır — adres çalışan bir GasFree cüzdanı olarak bildirilmez. subtype_status: "unavailable", silinen sözleşmeler listesine başvurulamadığı anlamına gelir; kararın geri kalanı hala geçerlidir ve tekrar başvurulana kadar hiçbir adres bir GasFree cüzdanı olarak onaylanmaz.
Neden kodları ve veri sağlayıcısı
aml_risk için, reason_code ve label adresin neden listelendiğini açıklar. Kamuya açık yaptırım makamları olduğu gibi saklanır — SANCTIONS_OFAC_SDN, SANCTIONS_EU_FSF, SANCTIONS_UK_FCDO ve benzeri. Bir bulgunun arkasındaki ticari tarama sağlayıcısının adı asla ifşa edilmez: bu tür kodlar SANCTIONS_SCREENING olarak standartlaştırılır ve herhangi bir sağlayıcı adı label alanından temizlenir.
Engellenenler listesi boyutu
GET https://netts.io/apiv2/compliance/statsAynı önbellekten, kararın arkasındaki kümelerin toplu boyutları. Açık ve anahtarsız.
{
"code": 0,
"status": "ok",
"data": {
"aml_risk": 1079,
"usdt_frozen": 8022,
"smart_contract": 7581686,
"spam_sender": 27039018,
"gasfree_wallets_subset": 512487,
"selfdestructed_contracts_subset": 4065766,
"total": 34629805,
"revision": 1117,
"checked_at": "2026-10-23T21:40:00+00:00"
}
}smart_contract, toplamın AML açısından nötr olan en büyük bölümüdür — yukarıdaki sözleşmelerle ilgili nota bakın. gasfree_wallets_subset (aktif GasFree cüzdanları) ve selfdestructed_contracts_subset (silinmiş sözleşmeler), smart_contract kümesinin alt parçalarıdır; total değerine eklenmezler. Bu iki sayaçtan biri şu anda okunamıyorsa null döner ve diğer sayılar sunulmaya devam eder.
Toplu sorgulama (API anahtarı)
Aynı anda birçok adresi kontrol etmek için kimlik doğrulamalı toplu uç noktayı kullanın. Ağ gidiş-dönüşlerinden tasarruf etmek için tasarlanmıştır: N adet ayrı GET yerine tek bir istek ve tek bir dahili işlem hattı. Tek bir adres sadece tek elemanlı bir dizidir.
POST https://netts.io/apiv2/compliance/batch
x-api-key: YOUR_KEY
Content-Type: application/json
{ "addresses": ["TTVUvAWUZafeHqQP82sYnfk4jNFPEHCRpL", "TWaGxHZ9pFCFwUyzKtDsGNb6hEJ7tSjxEC"] }İstek başına en fazla 1000 adres. Kararlar aynı sırayla döner, her biri tek adres yanıtındaki alanların aynısına (subtype, subtype_status, matches ve checks_complete dahil) sahiptir; ayrıca hatalı biçimlendirilmiş herhangi bir girdi için category: "invalid" (bir error alanı ile birlikte) eklenir — tek bir hatalı girdi tüm toplu işlemi başarısız kılmaz. Merkezi engellenenler listesi yüklenmemişse, normalde temiz olan bir adres clean yerine category: "unavailable" (blocked: null, bir error alanı ile birlikte) olarak döner — bkz. Merkezi engellenenler listesi kullanılamıyor.
{
"code": 0,
"status": "ok",
"data": {
"count": 2,
"checked_at": "2026-09-27T12:00:00+00:00",
"results": [
{ "address": "TTVUvAWUZafeHqQP82sYnfk4jNFPEHCRpL", "blocked": true, "category": "aml_risk", "subtype": null, "subtype_status": "not_found", "matches": ["aml_risk"], "checks_complete": true, "severity": "BLOCK", "reason_code": "SANCTIONS_SCREENING", "label": "DPRK Bitget Exploit - September 2026" },
{ "address": "TWaGxHZ9pFCFwUyzKtDsGNb6hEJ7tSjxEC", "blocked": false, "category": "clean", "subtype": null, "subtype_status": "not_found", "matches": [], "checks_complete": true }
]
}
}Toplu uç nokta bir API anahtarı gerektirir (x-api-key başlığı) ve anahtar isteğe bağlı olarak bir IP beyaz listesine bağlanabilir. Anahtar almak için bizimle iletişime geçin.
İstek limiti anahtar başınadır ve halka açık tek adres uç noktasından daha yüksektir:
| Period | Limit |
|---|---|
| 1 saniye | 200 istek |
| 1 dakika | 12.000 istek |
Her istek 1000 adrese kadar taşıyabilir, bu nedenle tek bir anahtar bu limit dahilinde saniyede yüz binin üzerinde adresi kolayca tarayabilir.
Hata Yanıtları
Geçersiz adres biçimi (400)
{
"code": 1001,
"status": "error",
"msg": "Invalid TRON address format (expected base58, 'T' + 33 chars)"
}Hizmet geçici olarak kullanılamıyor (503)
{
"code": 5003,
"status": "error",
"msg": "compliance service temporarily unavailable"
}Merkezi engellenenler listesi kullanılamıyor (503, code 5004)
Karar bir bellek içi önbellekten sunulur. Bu önbelleğe erişilebiliyor ancak merkezi AML engellenenler listesi şu anda yüklenmemişse ya da mevcut revizyonu bir bütünlük denetiminden geçemezse, uç nokta clean sonucuna geri dönmez — bu, kontrol edilmemiş bir adresi güvenli olarak bildirmek anlamına gelirdi. Bunun yerine bir karar üretemediğini açıkça belirtir:
{
"code": 5004,
"status": "error",
"msg": "compliance deny-list temporarily unavailable, verdict cannot be produced"
}Bunun anlamı: adres ne temiz ne de engellenmiş olarak onaylanmıştır. Hizmet şu anda adresi yaptırım/AML listesine göre tarayamadı. Adresi temiz olarak kabul etmeyin — kısa bir süre sonra tekrar deneyin.
Kesin bir engelleme normal şekilde döndürülmeye devam eder: adres dondurulmuş USDT, akıllı sözleşme veya spam göndericisi eşleşmesiyse (merkezi listeye bağlı olmayan kümeler), bu durumda bile her zamanki blocked: true kararını alırsınız. Yalnızca normalde clean olacak bir yanıt 5004 haline gelir.
Toplu uç noktada aynı durum adres başına category: "unavailable" (blocked: null, bir error alanı ile birlikte) olarak bildirilir; toplu işlemin geri kalanı etkilenmez. Bu nadir görülen, geçici bir durumdur.
Kayıt defteri kullanılamıyor (503, code 5005)
Kümeler yerinde güncellenir ve güncellenirken okunabilir kalır, bu nedenle rutin bir güncelleme kararı asla etkilemez. Yalnızca bir kümenin uygulanması başarısız olduysa normalde temiz olan bir adres temiz olarak doğrulanamaz. Tek adresli uç nokta bu durumda şunu döndürür:
{
"code": 5005,
"status": "error",
"msg": "address registry temporarily unavailable, verdict cannot be produced, retry shortly"
}5004 durumunda olduğu gibi, kesin bir engelleme yine normal şekilde döndürülür ve toplu uç nokta bu durumu adres başına category: "unavailable" olarak bildirir. Daha sonra tekrar deneyin.
Hata Kodu Referansı
| Code | Description | HTTP Status |
|---|---|---|
0 | Başarılı | 200 |
1001 | Geçersiz TRON adres biçimi | 400 |
5003 | Önbellek arka ucu geçici olarak kullanılamıyor | 503 |
5004 | Merkezi engellenenler listesi yüklenmedi — karar üretilemiyor (tekrar deneyin) | 503 |
5005 | Bir küme uygulanamadı — karar üretilemiyor (tekrar deneyin) | 503 |
İstek Hızı Sınırları
Ağ geçidinde uygulanan iki kademe mevcuttur:
| Endpoint | Auth | Limited by | 1 saniye | 1 dakika |
|---|---|---|---|---|
GET /apiv2/compliance/{address} | açık, anahtarsız | IP | 10 | 300 |
GET /apiv2/compliance/stats | açık, anahtarsız | IP | 10 | 300 |
POST /apiv2/compliance/batch | API anahtarı | anahtar | 200 | 12.000 |
Açık tek adres uç noktası, etkileşimli ve hafif programatik kullanım için tasarlanmıştır. Toplu tarama için toplu uç noktayı kullanın: istek başına 1000 adrese kadar ve anahtar başına saniyede 200 istek ile tek bir anahtar saniyede yüz binin üzerinde adresi kolayca tarar. Daha fazlasına mı ihtiyacınız var? Anahtar başına limit teknik bir tavan değil, bir politika ayarıdır — bizimle iletişime geçin.
İstek Limiti Aşıldı (429)
{
"message": "API rate limit exceeded"
}Notlar
- Kimlik doğrulama yok ve ücret yok. Herkes çağırabilir; imzalanacak hiçbir şey yoktur.
- Yalnızca önbellek. Karar asla veritabanına veya bir düğüme temas etmez, bu nedenle hızlıdır ve istek limiti dahilinde sorgulamak güvenlidir.
- Tam bir AML raporu değildir. Bir risk puanı, risk dağılımı dökümü ve imzalı bir rapor için kimlik doğrulamalı tarama API'sini kullanın (POST /apiv2/screening). Bu uç nokta daha dar kapsamlı tek bir soruyu yanıtlar: adres engellenenler listemizde mi ve neden.