Skip to content

Utwórz weryfikację AML ​

Tworzy nową weryfikację AML dla adresu portfela lub konkretnego hasha transakcji. Cena weryfikacji jest rezerwowana z twojego salda w momencie rozpoczęcia weryfikacji, a odpowiedź zwraca weryfikację.

POST /v1/aml-checks/new

Żądanie ​

Parametry ​

PoleTypWymaganeOpis
typestringTakTyp usługi AML: address lub hash
networkstringTakKod sieci blockchain (patrz tabela)
addressstringTakPrawidłowy adres dla wybranej sieci. Dla type = hash jest to adres uczestniczący w transakcji, którego strona jest weryfikowana (patrz direction).
hashstringWarunkowe*Hash transakcji w formacie wybranej sieci (TRX: 64 znaki szesnastkowe, bez prefiksu 0x; Ethereum i pozostałe sieci EVM: 0x i 64 znaki szesnastkowe; format każdej sieci pokazuje przykład w tabeli poniżej). Wymagany, gdy type = hash
directionstringWarunkowe**Która strona transakcji jest weryfikowana dla address: deposit — środki wpływające na ten adres, withdrawal — środki z niego wychodzące. Wymagany, gdy type = hash

* Dotyczy tylko weryfikacji hash.
** Dotyczy tylko weryfikacji hash. Brak wartości domyślnej: weryfikacja hash bez prawidłowego direction jest odrzucana.

Dostępne typy usług ​

TypOpis
addressWeryfikuje adres portfela i oblicza profil ryzyka
hashWeryfikuje pojedynczą transakcję od strony jednego z jej adresów (deposit lub withdrawal)

Obsługiwane sieci ​

KodSiećPrzykładowy adresPrzykładowy hash
TRXTRONTR7NHqjeKQxGTCi8q8ZY4pL8otSzgjLj6tfd4f300e12040089f624353cdfe7c2ae7ed2378fa65c7e5cce60f69cb1d43bab
BTCBitcoinbc1qar0srrr7xfkvy5l643lydnw9re59gtzzwf5mdq4a5e1e4baab89f3a32518a88c31bc87f618f76673e2cc77ab2127b7afdeda33b
ETHEthereum0x742d35Cc6634C0532925a3b844Bc454e4438f44e0x0f61ba2c923f4113a91eec9a9ce6145866e18b91dab5d2899dbe586a1847652b
BSCBNB Chain0x742d35Cc6634C0532925a3b844Bc454e4438f44e0x0f61ba2c923f4113a91eec9a9ce6145866e18b91dab5d2899dbe586a1847652b
SOLSolanaTokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA5VERv8NMvzbJMEkV8xnrLkEaWRtSz9CosKDYjCJjBRnbJLgp8uirBgmQpjKhoR4tjF3ZpRzrFmBV6UjKdiSZkQUW
TONTONEQCD39VS5jcptHL8vMjEXrzGaRcCVYto7HUn4bpAOg8xqB2Nfd4f300e12040089f624353cdfe7c2ae7ed2378fa65c7e5cce60f69cb1d43bab
MATICPolygon0x742d35Cc6634C0532925a3b844Bc454e4438f44e0x0f61ba2c923f4113a91eec9a9ce6145866e18b91dab5d2899dbe586a1847652b
ARBArbitrum0x742d35Cc6634C0532925a3b844Bc454e4438f44e0x0f61ba2c923f4113a91eec9a9ce6145866e18b91dab5d2899dbe586a1847652b
BASEBase0x742d35Cc6634C0532925a3b844Bc454e4438f44e0x0f61ba2c923f4113a91eec9a9ce6145866e18b91dab5d2899dbe586a1847652b
OPOptimism0x742d35Cc6634C0532925a3b844Bc454e4438f44e0x0f61ba2c923f4113a91eec9a9ce6145866e18b91dab5d2899dbe586a1847652b
AVAXAvalanche C-Chain0x742d35Cc6634C0532925a3b844Bc454e4438f44e0x0f61ba2c923f4113a91eec9a9ce6145866e18b91dab5d2899dbe586a1847652b
LTCLitecoinLQTpS3VaYTjCr4s9Y1t5zbeY26zevf7Fb34a5e1e4baab89f3a32518a88c31bc87f618f76673e2cc77ab2127b7afdeda33b
XRPRipplerHb9CJAWyB4rj91VRWn96DkukG4bwdtyThE3FE6EA3D48F0C2B639448020EA4F03D4F4F8FFDB243A852A0F59177921B4879
ALGOAlgorandVCMJKWOY5P5P7SKMZFFOCEROPJCZOTIJMNIYNUCKH7LRO45JMJP6UYBIJAUITN53MFMO6QHK6GCAUMF5MXBJG4OB6S3VCHTGFY5PQGHNWJ5NWQ
APTAptos0x00000000000000000000000000000000000000000000000000000000000000010x0f61ba2c923f4113a91eec9a9ce6145866e18b91dab5d2899dbe586a1847652b
BCHBitcoin Cashbitcoincash:qpm2qsznhks23z7629mms6s4cwef74vcwvy22gdx6a4a5e1e4baab89f3a32518a88c31bc87f618f76673e2cc77ab2127b7afdeda33b
BSVBitcoin SV1A1zP1eP5QGefi2DMPTfTL5SLmv7DivfNa4a5e1e4baab89f3a32518a88c31bc87f618f76673e2cc77ab2127b7afdeda33b
ADACardanoaddr1qx2fxv2umyhttkxyxp8x0dlpdt3k6cwng5pxj3jhsydzer3n0d3vllmyqwsx5wktcd8cc3sq835lu7drv2xwl2wywfgse35a3x8a5a6f0e9c5d7c4e1b62ef2b36d03b34f2b0b6f9f6c7e7a3d55b0f5c8a3b2c1d
CELOCelo0x742d35Cc6634C0532925a3b844Bc454e4438f44e0x0f61ba2c923f4113a91eec9a9ce6145866e18b91dab5d2899dbe586a1847652b
DOGEDogecoinDH5yaieqoZN36fDVciNyRueRGvGLR3mr7L4a5e1e4baab89f3a32518a88c31bc87f618f76673e2cc77ab2127b7afdeda33b
ETCEthereum Classic0x742d35Cc6634C0532925a3b844Bc454e4438f44e0x0f61ba2c923f4113a91eec9a9ce6145866e18b91dab5d2899dbe586a1847652b
NEARNEARalice.near6zgh2u9DqHHiXzdy9ouTP7oGky2T4nugqzqt9wJZwNFm
DOTPolkadot15oF4uVJwmo4TdGW7VfQxNLavjCXviqxT9S1MgbjMNHr6Sp50x0f61ba2c923f4113a91eec9a9ce6145866e18b91dab5d2899dbe586a1847652b
XLMStellarGAAZI4TCR3TY5OJHCTJC2A4QSY6CJWJH5IAJTGKIN2ER7LBNVKOCCWN73389e9f0f1a65f19736cacf544c2e825313e8447f569233bb8db39aa607c8889
TetherOMNITether (Omni)1A1zP1eP5QGefi2DMPTfTL5SLmv7DivfNa4a5e1e4baab89f3a32518a88c31bc87f618f76673e2cc77ab2127b7afdeda33b
XTZTezostz1VSUr8wwNhLAzempoch5d6hLRiTh8CjcjbonvsLP3JFZia2mzZKWaFuFkWg2L5p3BDUhzh5Kr6CiDDN3rtQ1D
ZECZcasht1Rv4exT7bqhZqi2j7xz8bUHDMxwosrjADU4a5e1e4baab89f3a32518a88c31bc87f618f76673e2cc77ab2127b7afdeda33b

TIP

Weryfikowane są wszystkie sieci z tej listy, po tej samej cenie za weryfikację niezależnie od sieci. W network wielkość liter nie ma znaczenia (btc to BTC); address i hash są sprawdzane według formatu wybranej sieci. Typ weryfikacji, który nie jest w sprzedaży dla twojego projektu (patrz Pobierz usługi AML), albo sieć, której usługa weryfikacji nie może teraz przyjąć, otrzymuje kod 35 i nic nie jest pobierane.

bash
#!/bin/bash
API_TOKEN="your_api_token"
API_SECRET="your_api_secret"
REQUEST_BODY='{
  "type": "address",
  "network": "TRX",
  "address": "TPY1Kb8cKAZQfm95gXQQs2Mh8Uygtos21D"
}'

# Oblicz sygnaturę
SIGNATURE=$(echo -n "${REQUEST_BODY}${API_SECRET}" | sha256sum | cut -d' ' -f1)

# Wyślij żądanie API
curl -X POST "https://api.trxup.com/v1/aml-checks/new" \
  -H "Authorization: Bearer ${API_TOKEN}" \
  -H "X-Signature: ${SIGNATURE}" \
  -H "Content-Type: application/json" \
  -d "${REQUEST_BODY}"
javascript
const crypto = require('crypto');
const axios = require('axios');

const apiToken = 'your_api_token';
const apiSecret = 'your_api_secret';
const requestBody = JSON.stringify({
  type: 'address',
  network: 'TRX',
  address: 'TPY1Kb8cKAZQfm95gXQQs2Mh8Uygtos21D'
});

// Oblicz sygnaturę
const signature = crypto
  .createHash('sha256')
  .update(requestBody + apiSecret)
  .digest('hex');

// Wyślij żądanie API
axios({
  method: 'post',
  url: 'https://api.trxup.com/v1/aml-checks/new',
  headers: {
    'Authorization': `Bearer ${apiToken}`,
    'X-Signature': signature,
    'Content-Type': 'application/json'
  },
  data: requestBody
})
.then(response => console.log(response.data))
.catch(error => console.error(error));
php
<?php
$apiToken = 'your_api_token';
$apiSecret = 'your_api_secret';
$requestBody = json_encode([
  'type' => 'address',
  'network' => 'TRX',
  'address' => 'TPY1Kb8cKAZQfm95gXQQs2Mh8Uygtos21D',
], JSON_UNESCAPED_SLASHES);

// Oblicz sygnaturę
$signature = hash('sha256', $requestBody . $apiSecret);

// Wyślij żądanie API
$ch = curl_init('https://api.trxup.com/v1/aml-checks/new');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, $requestBody);
curl_setopt($ch, CURLOPT_HTTPHEADER, [
  'Authorization: Bearer ' . $apiToken,
  'X-Signature: ' . $signature,
  'Content-Type: application/json'
]);

$response = curl_exec($ch);
curl_close($ch);

echo $response;
?>
python
import hashlib
import json
import requests

api_token = 'your_api_token'
api_secret = 'your_api_secret'
request_body = json.dumps({
  'type': 'address',
  'network': 'TRX',
  'address': 'TPY1Kb8cKAZQfm95gXQQs2Mh8Uygtos21D'
})

# Oblicz sygnaturę
signature = hashlib.sha256((request_body + api_secret).encode()).hexdigest()

# Wyślij żądanie API
headers = {
  'Authorization': f'Bearer {api_token}',
  'X-Signature': signature,
  'Content-Type': 'application/json'
}

response = requests.post(
  'https://api.trxup.com/v1/aml-checks/new',
  headers=headers,
  data=request_body
)

print(response.json())

Przykładowe żądanie dla hash ​

bash
#!/bin/bash
API_TOKEN="your_api_token"
API_SECRET="your_api_secret"
REQUEST_BODY='{
  "type": "hash",
  "network": "TRX",
  "address": "TPY1Kb8cKAZQfm95gXQQs2Mh8Uygtos21D",
  "hash": "E3F2A1B66DBB9F0B24C4125229163944A7D91EB3F1AC5E409FFCEE0C81A913F2",
  "direction": "withdrawal"
}'

# Oblicz sygnaturę
SIGNATURE=$(echo -n "${REQUEST_BODY}${API_SECRET}" | sha256sum | cut -d' ' -f1)

# Wyślij żądanie API
curl -X POST "https://api.trxup.com/v1/aml-checks/new" \
  -H "Authorization: Bearer ${API_TOKEN}" \
  -H "X-Signature: ${SIGNATURE}" \
  -H "Content-Type: application/json" \
  -d "${REQUEST_BODY}"
javascript
const crypto = require('crypto');
const axios = require('axios');

const apiToken = 'your_api_token';
const apiSecret = 'your_api_secret';
const requestBody = JSON.stringify({
  type: 'hash',
  network: 'TRX',
  address: 'TPY1Kb8cKAZQfm95gXQQs2Mh8Uygtos21D',
  hash: 'E3F2A1B66DBB9F0B24C4125229163944A7D91EB3F1AC5E409FFCEE0C81A913F2',
  direction: 'withdrawal'
});

// Oblicz sygnaturę
const signature = crypto
  .createHash('sha256')
  .update(requestBody + apiSecret)
  .digest('hex');

// Wyślij żądanie API
axios({
  method: 'post',
  url: 'https://api.trxup.com/v1/aml-checks/new',
  headers: {
    'Authorization': `Bearer ${apiToken}`,
    'X-Signature': signature,
    'Content-Type': 'application/json'
  },
  data: requestBody
})
.then(response => console.log(response.data))
.catch(error => console.error(error));
php
<?php
$apiToken = 'your_api_token';
$apiSecret = 'your_api_secret';
$requestBody = json_encode([
  'type' => 'hash',
  'network' => 'TRX',
  'address' => 'TPY1Kb8cKAZQfm95gXQQs2Mh8Uygtos21D',
  'hash' => 'E3F2A1B66DBB9F0B24C4125229163944A7D91EB3F1AC5E409FFCEE0C81A913F2',
  'direction' => 'withdrawal'
], JSON_UNESCAPED_SLASHES);

// Oblicz sygnaturę
$signature = hash('sha256', $requestBody . $apiSecret);

// Wyślij żądanie API
$ch = curl_init('https://api.trxup.com/v1/aml-checks/new');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, $requestBody);
curl_setopt($ch, CURLOPT_HTTPHEADER, [
  'Authorization: Bearer ' . $apiToken,
  'X-Signature: ' . $signature,
  'Content-Type: application/json'
]);

$response = curl_exec($ch);
curl_close($ch);

echo $response;
?>
python
import hashlib
import json
import requests

api_token = 'your_api_token'
api_secret = 'your_api_secret'
request_body = json.dumps({
  'type': 'hash',
  'network': 'TRX',
  'address': 'TPY1Kb8cKAZQfm95gXQQs2Mh8Uygtos21D',
  'hash': 'E3F2A1B66DBB9F0B24C4125229163944A7D91EB3F1AC5E409FFCEE0C81A913F2',
  'direction': 'withdrawal'
})

# Oblicz sygnaturę
signature = hashlib.sha256((request_body + api_secret).encode()).hexdigest()

# Wyślij żądanie API
headers = {
  'Authorization': f'Bearer {api_token}',
  'X-Signature': signature,
  'Content-Type': 'application/json'
}

response = requests.post(
  'https://api.trxup.com/v1/aml-checks/new',
  headers=headers,
  data=request_body
)

print(response.json())

Odpowiedź ​

Odpowiedź zwraca weryfikację AML. Jeśli wynik jest jeszcze finalizowany, status to pending: odpytuj Sprawdź status AML ze zwróconym id, aż status się zmieni.

Pola odpowiedzi ​

PoleTypOpis
codeintegerKod odpowiedzi (0 = sukces)
request_idstringUnikalny identyfikator żądania
resultobjectDane weryfikacji AML
result.idstringIdentyfikator weryfikacji AML
result.typestringTyp usługi AML (address lub hash)
result.addressstringWeryfikowany adres
result.networkstringKod sieci blockchain zapisany tak jak na liście obsługiwanych sieci (np. TRX, TetherOMNI)
result.statusstringStatus weryfikacji (pending, processing, completed, failed, expired, skipped)
result.risk_scorestring|nullOcena ryzyka jako ciąg z dwoma miejscami po przecinku (np. "12.50") lub null, gdy ocena nie jest jeszcze dostępna
result.risk_levelstring|nullPoziom ryzyka (low, medium, high)
result.blacklistbooleantrue, jeśli wykryto wpis na liście blokad
result.risk_factorsarrayKategorie ryzyka, z którymi powiązane są środki, posortowane malejąco według score, jeden wpis na kategorię; pusta [], gdy nie zgłoszono żadnej kategorii (np. dopóki weryfikacja nie została zakończona)
result.risk_factors[].namestringKlucz kategorii, jeden z wymienionych w sekcji Kategorie czynników ryzyka; kategoria spoza tej listy jest zgłaszana jako other
result.risk_factors[].labelstringAngielska nazwa kategorii (nietłumaczona)
result.risk_factors[].groupstringGrupa ryzyka kategorii: low, medium lub high
result.risk_factors[].scorenumberUdział środków powiązanych z tą kategorią, od 0 do 1, zaokrąglony do 3 miejsc po przecinku
result.checked_atstringZnacznik czasu utworzenia weryfikacji (ISO 8601)
result.hashstringWeryfikowany hash transakcji (tylko dla weryfikacji hash)
result.directionstringWeryfikowana strona transakcji, deposit lub withdrawal (tylko dla weryfikacji hash)

Pełna lista kluczy kategorii wraz z nazwami i grupami znajduje się w sekcji Kategorie czynników ryzyka.

Przykładowa odpowiedź ​

json
{
  "code": 0,
  "request_id": "bbf74bcd-fb36-4df8-adc8-25f2bacd087b",
  "result": {
    "id": "1041",
    "type": "address",
    "address": "TPY1Kb8cKAZQfm95gXQQs2Mh8Uygtos21D",
    "network": "TRX",
    "status": "completed",
    "risk_score": "12.50",
    "risk_level": "medium",
    "blacklist": false,
    "risk_factors": [
      {
        "name": "exchange",
        "label": "Exchange",
        "group": "low",
        "score": 0.9
      },
      {
        "name": "p2p_exchange_mlrisk_high",
        "label": "P2P Exchange (High Risk)",
        "group": "medium",
        "score": 0.1
      }
    ],
    "checked_at": "2024-03-25T10:40:05+00:00"
  }
}

W przypadku weryfikacji hash pola hash i direction następują po checked_at:

json
{
  "code": 0,
  "request_id": "bbf74bcd-fb36-4df8-adc8-25f2bacd087b",
  "result": {
    "id": "1042",
    "type": "hash",
    "address": "TPY1Kb8cKAZQfm95gXQQs2Mh8Uygtos21D",
    "network": "TRX",
    "status": "pending",
    "risk_score": null,
    "risk_level": null,
    "blacklist": false,
    "risk_factors": [],
    "checked_at": "2024-03-25T10:42:12+00:00",
    "hash": "E3F2A1B66DBB9F0B24C4125229163944A7D91EB3F1AC5E409FFCEE0C81A913F2",
    "direction": "withdrawal"
  }
}

Opłaty i powtarzane żądania ​

  • Cena weryfikacji jest rezerwowana w momencie jej rozpoczęcia. Jeśli weryfikacji nie można przeprowadzić — dane wejściowe zostały odrzucone lub błąd leży po naszej stronie — rezerwacja jest zwracana w całości.
  • W weryfikacji hash, jeśli address nie uczestniczy w transakcji, weryfikacja jest odrzucana z kodem 2 (The address was not found in this transaction) i nic nie jest pobierane.
  • W weryfikacji adresu, jeśli serwis weryfikujący odmówi sprawdzenia adresu, weryfikacja jest odrzucana z kodem 2 (The screening service could not check this address; nothing was charged, klucz invalid_service_or_params, bez detalu) i nic nie jest pobierane. Sprawdź adres i spróbuj ponownie później.
  • Powtórzenie tego samego zapytania w ciągu godziny — ten sam type, network i address, a dla weryfikacji hash także ten sam hash i direction — zwraca wcześniejszą weryfikację i nic nie jest pobierane.
  • Drugie identyczne żądanie wysłane, gdy pierwsze jest nadal w toku, jest odrzucane z HTTP 503 (temporarily_unavailable) i nic nie jest pobierane. Spróbuj ponownie za chwilę.

Możliwe błędy ​

Kod błęduKeyOpis
1authBłąd uwierzytelniania (nieprawidłowy token lub sygnatura)
2invalid_service_or_paramsNieprawidłowe parametry, sprawdzane w tej kolejności: type; network (Unsupported network); address (Invalid address provided); dla weryfikacji hash hash (Hash is required for hash checks) i direction (Invalid direction value); dla weryfikacji hash, w której address nie uczestniczy w transakcji, The address was not found in this transaction (klucz invalid_service_or_params.hash), nic nie jest pobierane; dla weryfikacji adresu, której serwis weryfikujący odmówił, The screening service could not check this address; nothing was charged (klucz invalid_service_or_params), nic nie jest pobierane
5wallet_not_foundPortfel nie znaleziony
6insufficient_fundsNiewystarczające środki na weryfikację
35service_unavailableTen typ weryfikacji lub ta sieć nie jest dostępna dla projektu (na przykład typ weryfikacji, który nie jest w sprzedaży dla projektu); nic nie jest pobierane
500internal_server_errorWewnętrzny błąd serwera
503temporarily_unavailableIdentyczna weryfikacja jest nadal w toku (HTTP 503); nic nie pobrano, spróbuj ponownie za chwilę

Tron Energy API Documentation