Transaction Decision API
Integrasikan pemeriksaan TRON, Ethereum, dan TON, pahami cakupan serta aturan pengulangan.
Periksa transaksi sebelum mengonfirmasi pembayaran
ChainZap memeriksa transaksi blockchain sebelum aplikasi Anda mencatat pembayaran sebagai diterima. Satu respons menggabungkan fakta transaksi, sinyal risiko, dan, jika Anda meminta, perbandingan dengan penerima, token, dan jumlah yang Anda harapkan.
Apa yang dapat diperiksa
Adaptor TRON, Ethereum mainnet, dan TON mainnet telah diimplementasikan. Pemeriksaan TRON langsung tersedia untuk setiap organisasi baru. TON berstatus pratinjau dan pemeriksaannya atas transaksi yang sudah dieksekusi saat ini menghasilkan LIMITED_DATA; pemeriksaan Ethereum diaktifkan oleh dukungan atas permintaan. Masuk dengan akun ChainZap ke dasbor pengembang, buat kunci API, dan mulai dari quickstart transaksi kanonis.
POST /v1/transaction/check: respons terperinci kanonis kontrak 0.3. Jaringan wajib; rincian pembayaran yang diharapkan memungkinkan verifikasi.POST /v1/check: kirim hash transaksi. Jaringan dan rincian pembayaran yang diharapkan bersifat opsional. Respons berisi penilaian ringkas dengan bukti lengkap padadetails.POST /v1/wallet/check: kirim alamat dompet. Jaringan dikenali dari formatnya. Respons berisi status, tingkat cakupan, dan kode alasan dengan fakta per modul padadetails; lihat pemeriksaan dompet.GET /v1/usage: kuota dan statistik penggunaan organisasi Anda.
Panggil API dari server Anda dan kirim kunci API pada header X-API-Key.
Baca seluruh respons
Respons HTTP yang berhasil tidak berarti pembayaran sudah terkonfirmasi atau bebas risiko. Untuk /v1/check, baca state, risk_level, dan coverage bersama status transaksi, hasil pencocokan, waktu data, dan alasan pada details. Endpoint kanonis /v1/transaction/check mengembalikan kolom terperinci tersebut di tingkat teratas respons. Nilai null berarti tidak diketahui atau tidak diminta, bergantung pada kolomnya. Jangan pernah menganggap data yang hilang sebagai hasil bersih.
Lanjutkan ke panduan awal, lalu baca kelengkapan data dan idempotensi.
Pemeriksaan transaksi pertama Anda
Dapatkan akses
Masuk dengan akun ChainZap ke dasbor pengembang. Organisasi dibuat otomatis untuk Anda dan Anda menjadi pemiliknya; kode undangan hanya diperlukan untuk bergabung ke organisasi yang sudah ada. Buat kunci di halaman Kunci API dan simpan di penyimpanan rahasia server. Pemeriksaan TRON langsung tersedia: kunci sandbox memungkinkan pengujian gratis, dan paket untuk pemeriksaan live dibeli di halaman Paket dan pembayaran. Hubungi dukungan untuk mengundang rekan ke organisasi Anda.
Kirim permintaan pertama
Contoh ini menggunakan kunci dan hash transaksi fiktif. Ganti keduanya di server Anda. Semua jumlah berupa string desimal. Simpan kunci idempotensi bersama operasi pembayaran agar tetap ada setelah proses dimulai ulang.
curl --include --max-time 15 'https://api.chainzap.io/v1/transaction/check' \
-H 'Content-Type: application/json' \
-H 'X-API-Key: cz_live_000000000000.fictional_example_only' \
-H 'Idempotency-Key: merchant-order-1001-check-1' \
-H 'X-Request-ID: merchant-order-1001-attempt-1' \
--data '{"network":"tron","expected_recipient":"TJRabPrwbZy45sbavfcjinPJC18kjpRTv8","expected_token":"TR7NHqjeKQxGTCi8q8ZY4pL8otSzgjLj6t","expected_amount":"1250.000001","tx_hash":"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"}'
Baca X-Request-ID pada header respons dan request_id pada JSON. Simpan pengenal ini untuk dukungan. Endpoint kanonis ini memerlukan network. Baca sumbu status sebelum menggunakan hasil; POST /v1/check menyediakan respons ringkas opsional.
Cocokkan dengan rincian pembayaran
{
"network": "tron",
"tx_hash": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
"expected_recipient": "TJRabPrwbZy45sbavfcjinPJC18kjpRTv8",
"expected_token": "TR7NHqjeKQxGTCi8q8ZY4pL8otSzgjLj6t",
"expected_amount": "1250.000001"
}
Alamat dalam contoh adalah alamat publik untuk ilustrasi, bukan tujuan pengiriman dana. Cocokkan kontrak token yang tepat, bukan simbolnya. Baca ketiga hasil pencocokan; semuanya mengacu pada transfer terpilih yang sama. Lihat pencocokan pembayaran.
Gunakan kontrak 0.3
Gunakan verification_final dan integrity_status untuk verifikasi pembayaran, lalu nilai risk_status dan recommended_action secara terpisah. Pending bernilai NOT_EVALUATED, tidak pernah MATCH. MATCH final dengan risk_status: INSUFFICIENT mengonfirmasi perbandingan pembayaran tetapi memerlukan MANUAL_REVIEW, bukan kredit otomatis atau persetujuan pembayaran. Baca risk_retryable terpisah dari retryable. Contoh respons menampilkan cabang ini.
Menutup pembayaran keluar secara otomatis
Tanpa konteks dari sisi Anda, MATCH final dengan risk_status: NO_MATERIAL_SIGNAL dan tanpa alasan untuk ditinjau menghasilkan CONFIRM_INTERNAL_STATE: blockchain dan penyaringan risiko beres, tetapi ChainZap tidak dapat melihat apakah pembayaran ini memang yang wajib Anda bayar atau apakah sudah diselesaikan. Ini bukan penolakan: pastikan di catatan Anda sendiri bahwa pembayaran itu masih terutang dan belum ditandai lunas, lalu tutup. Tindakan yang sama tanpa MATCH (kolom yang diharapkan tidak dikirim) belum membandingkan pembayaran: jangan tutup pembayaran keluar berdasarkan itu.
Untuk mencapai PROCEED, beri tahu ChainZap untuk apa pembayaran ini: kirim direction: "OUTGOING", workflow_type: "PAYOUT", dan external_reference pembayaran bersama kolom yang diharapkan, atau catat kewajiban terlebih dahulu lalu kirim external_reference-nya dalam pemeriksaan. Kecocokan final yang bersih terhadap kewajiban keluar yang tercatat itu adalah PROCEED; tanpa external_reference jawaban terbaik tetap CONFIRM_INTERNAL_STATE, kecuali pemeriksaan juga mengirim customer_context.credit_status: "NOT_CREDITED", yang saja sudah cukup untuk PROCEED kecuali allocation_status bernilai UNKNOWN (lihat sumbu status). direction dan workflow_type diterima tanpa buku besar kewajiban, tetapi sendiri saja tidak pernah mencapai PROCEED; dengan direction: "OUTGOING", pembayaran yang tidak ditemukan juga membawa ATTEMPT_MAY_STILL_LAND: jangan bayar lagi. external_reference dan kolom kewajiban lainnya memerlukan buku besar kewajiban dan dijawab 403 ledger_not_enabled jika buku besar itu tidak aktif.
Tangani ketidakpastian
Jika koneksi terputus sebelum respons diterima, kirim ulang isi permintaan dan Idempotency-Key yang sama. Jangan membuat kunci baru untuk menghindari hasil yang belum pasti. Ulangi galat yang diterima hanya bila error.retryable bernilai true; patuhi Retry-After dan batasi jumlah percobaan. Galat yang sudah disimpan dapat dikembalikan tanpa perubahan: retryable tidak memaksa pemeriksaan penyedia yang baru.
Lihat contoh Python dan TypeScript untuk pengulangan terbatas, serta penggunaan untuk memeriksa kuota.
Periksa dompet juga
Kunci yang sama dapat menyaring alamat pihak lawan: POST /v1/wallet/check dengan {"address": "..."} mengembalikan status, cakupan, dan kode alasan dalam bentuk yang sama, dan ditagih saat status dihasilkan. Lihat pemeriksaan dompet.
Satu hash, satu pemeriksaan
POST /v1/check hanya memerlukan tx_hash. API melaporkan fakta, risiko, dan kekurangan data; keputusan pembayaran tetap berada pada aplikasi Anda. Masuk dengan akun ChainZap ke dasbor pengembang dan buat kunci server di halaman Kunci API.
Hasil pertama
Atur CHAINZAP_API_KEY, TX_HASH, dan ID operasi tersimpan CHECK_ID di server Anda. Contoh ini mengirim satu permintaan hanya saat dijalankan. Untuk data uji tanpa panggilan penyedia, gunakan kunci sandbox. Jangan pernah menempatkan kunci dalam kode browser. Permintaan membutuhkan kurang dari sepuluh baris kode aplikasi; periksa status HTTP sebelum menafsirkan hasilnya.
curl --include --max-time 15 https://api.chainzap.io/v1/check \
-H "X-API-Key: $CHAINZAP_API_KEY" -H "Idempotency-Key: $CHECK_ID" \
-H 'Content-Type: application/json' --data "{\"tx_hash\":\"$TX_HASH\"}"
const response = await fetch("https://api.chainzap.io/v1/check", {
method: "POST", signal: AbortSignal.timeout(15000),
headers: {"Content-Type": "application/json", "X-API-Key": process.env.CHAINZAP_API_KEY,
"Idempotency-Key": process.env.CHECK_ID},
body: JSON.stringify({tx_hash: process.env.TX_HASH})
});
const result = await response.json();
if (!response.ok) throw new Error(result.error.code);
import os, requests
response = requests.post("https://api.chainzap.io/v1/check", timeout=15,
headers={"X-API-Key": os.environ["CHAINZAP_API_KEY"],
"Idempotency-Key": os.environ["CHECK_ID"]},
json={"tx_hash": os.environ["TX_HASH"]})
result = response.json()
response.raise_for_status()
<?php
$ch = curl_init('https://api.chainzap.io/v1/check');
curl_setopt_array($ch, [CURLOPT_POST => true, CURLOPT_RETURNTRANSFER => true, CURLOPT_TIMEOUT => 15,
CURLOPT_HTTPHEADER => ['Content-Type: application/json', 'X-API-Key: '.getenv('CHAINZAP_API_KEY'), 'Idempotency-Key: '.getenv('CHECK_ID')],
CURLOPT_POSTFIELDS => json_encode(['tx_hash' => getenv('TX_HASH')])]);
$result = json_decode(curl_exec($ch), true);
if (curl_errno($ch) || curl_getinfo($ch, CURLINFO_HTTP_CODE) >= 400) throw new RuntimeException($result['error']['code'] ?? 'transport_error');
curl_close($ch);
Penentuan jaringan
Nama jaringan yang diterima adalah tron, eth, dan ton; alias ditolak. Jaringan eksplisit membatasi pencarian pada jaringan itu saja. Bentuk hash, awalan 0x, base64, dan urutan respons penyedia tidak pernah menentukan jaringan, termasuk di sandbox.
Tanpa network, fakta dibaca hanya pada jaringan yang didukung, diaktifkan, dan diizinkan untuk organisasi Anda. Lingkup pencarian dilaporkan di details.checked_networks; hasil unik dalam lingkup ini tidak membuktikan apa pun tentang jaringan lain. Pemeriksaan AML tidak dijalankan di semua jaringan. Semua jaringan lain yang diperiksa harus memastikan transaksi tidak ditemukan. Kegagalan penyedia, indeks yang belum lengkap, dan waktu habis tidak dihitung sebagai ketidakadaan. Satu hasil positif ditambah satu hasil tidak diketahui tetap memerlukan network.
Deteksi otomatis memakai batas panggilan penyedia yang sama dengan pemilihan jaringan secara eksplisit, baik untuk satu jaringan maupun beberapa. Penyedia tetap harus mengonfirmasi bahwa hash transaksi ditemukan di jaringan yang dilaporkan. Panggilan yang harganya belum dikonfigurasi dihitung sebagai biaya tidak diketahui, bukan nol.
NETWORK_AMBIGUOUS berarti transaksi ditemukan di beberapa jaringan. NETWORK_REQUIRED berarti konteks yang tersedia belum cukup untuk membuktikan satu hasil: misalnya satu jaringan menemukannya sementara jaringan lain tidak dapat menjawab, atau tidak ada jaringan aktif. Bila semua jaringan yang diperiksa memastikan transaksi tidak ada, jawabannya 404 transaction_not_found. Keduanya memakai HTTP 422, state: insufficient_input, network: null, error.retryable: false, error.required_field: network, error.candidates, dan error.checked_networks. Tentukan jaringan dan gunakan kunci idempotensi baru. Mengulang isi yang sama akan mengembalikan galat tersimpan yang sama.
Respons ringkas dan terperinci
| Kolom pada respons ringkas | Arti |
|---|---|
request_id, network |
ID korelasi dan jaringan kanonis yang ditentukan. |
state |
clear, review, high_risk, limited_data: hasil pemeriksaan, bukan instruksi pembayaran. |
risk_level |
low, moderate, high, severe, unknown. Kecocokan sanksi menaikkan tingkat ke severe; token palsu menaikkannya setidaknya ke high. |
coverage |
complete (cakupan lengkap) atau partial (cakupan parsial) dalam lingkup yang didokumentasikan. |
reason_codes |
Kode string stabil; aplikasi harus menerima kode baru yang belum dikenal. |
details |
Status/finalitas, indeks transfer terpilih, seluruh transfer dengan raw_amount berupa string, pencocokan, keaslian, AML/sanksi, waktu sumber, batasan, dan objek alasan lengkap. |
state adalah details.overall_state dalam huruf kecil. Objek alasan terperinci berada di details.reasons; string dan objek tidak pernah dicampur. Risiko tinggi yang diketahui tetap terlihat saat cakupan parsial. null pada perbandingan yang diminta berarti belum selesai. Semua kolom expected_* harus cocok dengan transfer yang sama; beberapa kecocokan lengkap berarti ambigu.
Endpoint kanonis /v1/transaction/check mempertahankan status huruf besar, coverage: complete atau partial, dan 2 sampai 5 objek alasan. /v1/usage dan X-API-Key tidak berubah. /v1/check mengembalikan HTTP 404 transaction_not_found untuk ketidakadaan yang terverifikasi pada jaringan eksplisit; endpoint kanonis tetap mengembalikan HTTP 200 transaction_state: not_found. Pemeriksaan yang tertunda menghasilkan HTTP 200 dengan review/limited_data, tidak pernah clear, dan tidak ditagih. Kedua endpoint memakai batas, kuota, dan biaya yang sama. Kunci idempotensi dibagi per organisasi: berganti endpoint atau mengubah isi menimbulkan konflik. Hasil tersimpan, termasuk jaringan yang ditentukan dan galat yang dijawab setelah pemeriksaan diterima, di-replay tanpa pemeriksaan penyedia baru; 429 dan 5xx tidak pernah disimpan. Replay memeriksa ulang akses.
Cakupan Ethereum dan TON
| Jaringan | Aset dengan pemetaan KYT | Fakta dan batasan |
|---|---|---|
| TRON | TRX; USDT, USDC, USDD resmi | Pemeriksaan transaksi dua sumber yang sudah ada dan kebijakan solidification 19 konfirmasi. |
| Ethereum mainnet | ETH; USDT, USDC, WETH ERC-20 resmi | Chain ID 1, receipt, keanggotaan blok kanonis, finalized head, dan rekonsiliasi dua sumber. Head latest atau blok apa pun sebelum head finalized tidak cukup. Log ERC-20 berurutan; Tidak ada pembayaran ERC-721 atau Approval. |
| TON mainnet | TON; jetton USDT resmi | Mainnet ID -239, dua indeks, hash transaksi, account/LT/shard, finalitas masterchain, dan tautan pesan lengkap. Verifikasi master/wallet/owner jetton dan isi pesan mentah. |
Transfer ETH native internal memerlukan trace eksekusi dan berada di luar lingkup versi ini. Log ERC-20 tidak menetapkan perubahan saldo bersih penerima untuk token fee-on-transfer atau rebasing. Mint, burn, dan transfer bernilai nol memerlukan review. Decimals yang tidak diketahui membuat amount: null; simbol tidak pernah membuktikan keaslian. Token lain dapat memiliki fakta transfer dengan cakupan keaslian/KYT yang belum lengkap.
TON hanya menerima hash transaksi: 64 digit hex dengan 0x opsional atau base64/base64url kanonis sepanjang 32 byte. Hash pesan atau BOC tidak ditafsirkan ulang secara diam-diam sebagai hash transaksi. Checksum alamat friendly diperiksa; bounceable/non-bounceable dinormalisasi ke workchain/account, sedangkan alamat test-only ditolak. expected_token berarti jetton master, expected_recipient berarti pemilik wallet. Satu transfer_notification tidak cukup. Bounce, kegagalan compute/action, keturunan yang hilang, dan emulasi tidak dapat menghasilkan clear. Hasil get-method terkini diperiksa silang dengan indeks kedua; perubahan identitas historis memerlukan pemeriksaan lanjutan. Finalitas berasal dari pernyataan penyedia, bukan verifikasi lokal tanda tangan validator.
Pemeriksaan Ethereum dan TON diaktifkan per organisasi oleh dukungan setelah pengujian langsung. Penyaringan AML mencakup aset yang didukung sumber AML pada tiap jaringan; hak akun tertentu, biaya aktual, dan cakupan masih perlu diverifikasi langsung. Bukti AML atau sanksi yang tidak tersedia tidak pernah menjadi low/clear. Lihat kelengkapan data.
Contoh respons deterministik
Ini fixture ilustratif, bukan pengamatan langsung. Buka JSON lengkap di bawah.
Lihat respons JSON lengkap
{
"coverage": "complete",
"details": {
"aml_risk_level": "low",
"amount": "1250.000001",
"amount_match": true,
"checked_networks": [
"tron"
],
"confirmations": 27,
"coverage": "complete",
"coverage_limitations": {
"product": [
"AML_TRANSACTION_LEVEL_ONLY",
"RISK_STATE_AS_OF_CHECK",
"SANCTIONS_CONFIGURED_LISTS_ONLY"
],
"runtime": []
},
"coverage_status": "OK",
"decimals": 6,
"decision_id": "0199a1b2-7c3d-7e4f-8a9b-0c1d2e3f4a5b",
"direct_sanctions_match": false,
"direction": "OUTGOING",
"environment": "live",
"evidence": {},
"evidence_items": [
{
"coverage": "checked",
"dependency": "required",
"disagreement": null,
"effective_at": "2026-09-03T11:59:00Z",
"evidence_id": "ev_3b9e1c7a5d2f8e61",
"evidence_version": "ev-1",
"freshness": {
"age_seconds": 2,
"stale": false,
"stale_after_seconds": null
},
"kind": "transaction_facts",
"observed_at": "2026-09-03T11:59:58Z",
"source": "chain_explorer",
"source_reference": "block:60000000",
"subject": {
"ref": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
"type": "transaction"
},
"temporal_scope": "TRANSACTION_TIME"
},
{
"coverage": "checked",
"dependency": "required",
"disagreement": null,
"effective_at": "2026-09-03T11:59:00Z",
"evidence_id": "ev_5f0c3a1d9b2e7f40",
"evidence_version": "ev-1",
"freshness": {
"age_seconds": 2,
"stale": false,
"stale_after_seconds": null
},
"kind": "transaction_facts",
"observed_at": "2026-09-03T11:59:58Z",
"source": "chain_node",
"source_reference": "block:60000000",
"subject": {
"ref": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
"type": "transaction"
},
"temporal_scope": "TRANSACTION_TIME"
},
{
"coverage": "checked_freshness_unknown",
"dependency": "required",
"disagreement": null,
"effective_at": null,
"evidence_id": "ev_8a4d2e6f1c9b3a75",
"evidence_version": "ev-1",
"freshness": {
"age_seconds": 0,
"stale": true,
"stale_after_seconds": null
},
"kind": "aml_risk",
"observed_at": "2026-09-03T12:00:00Z",
"source": "aml_provider",
"source_reference": "transaction_risk_score",
"subject": {
"ref": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
"type": "transaction"
},
"temporal_scope": "CHECK_TIME"
},
{
"coverage": "checked",
"dependency": "required",
"disagreement": null,
"effective_at": null,
"evidence_id": "ev_c27f5b0e9d4a1863",
"evidence_version": "ev-1",
"freshness": {
"age_seconds": 0,
"stale": false,
"stale_after_seconds": 172800
},
"kind": "sanctions_list",
"observed_at": "2026-09-03T12:00:00Z",
"source": "ofac",
"source_reference": "configured_address_index",
"subject": {
"ref": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
"type": "transaction_addresses"
},
"temporal_scope": "LIST_PUBLICATION"
},
{
"coverage": "checked",
"dependency": "required",
"disagreement": null,
"effective_at": "2026-08-28T00:00:00Z",
"evidence_id": "ev_4e18a9d3b6c07f52",
"evidence_version": "ev-1",
"freshness": {
"age_seconds": 0,
"stale": false,
"stale_after_seconds": 3024000
},
"kind": "sanctions_list",
"observed_at": "2026-09-03T12:00:00Z",
"source": "eu",
"source_reference": "configured_address_index",
"subject": {
"ref": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
"type": "transaction_addresses"
},
"temporal_scope": "LIST_PUBLICATION"
},
{
"coverage": "checked",
"dependency": "required",
"disagreement": null,
"effective_at": "2026-08-28T00:00:00Z",
"evidence_id": "ev_91d6f2a8c3e5b047",
"evidence_version": "ev-1",
"freshness": {
"age_seconds": 0,
"stale": false,
"stale_after_seconds": 3024000
},
"kind": "sanctions_list",
"observed_at": "2026-09-03T12:00:00Z",
"source": "uk",
"source_reference": "configured_address_index",
"subject": {
"ref": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
"type": "transaction_addresses"
},
"temporal_scope": "LIST_PUBLICATION"
},
{
"coverage": "not_applicable",
"dependency": "not_applicable",
"disagreement": null,
"effective_at": null,
"evidence_id": "ev_6b03e7c1f5a92d48",
"evidence_version": "ev-1",
"freshness": {
"age_seconds": null,
"stale": false,
"stale_after_seconds": null
},
"kind": "sanctions_list",
"observed_at": null,
"source": "un",
"source_reference": "configured_address_index",
"subject": {
"ref": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
"type": "transaction_addresses"
},
"temporal_scope": "LIST_PUBLICATION"
},
{
"coverage": "checked",
"dependency": "required",
"disagreement": null,
"effective_at": null,
"evidence_id": "ev_f0a5c8e2d7b41936",
"evidence_version": "ev-1",
"freshness": {
"age_seconds": 0,
"stale": false,
"stale_after_seconds": null
},
"kind": "token_authenticity",
"observed_at": "2026-09-03T12:00:00Z",
"source": "token_registry",
"source_reference": "official",
"subject": {
"ref": "TR7NHqjeKQxGTCi8q8ZY4pL8otSzgjLj6t",
"type": "token"
},
"temporal_scope": "CHECK_TIME"
}
],
"finality_policy": "tron_solidified_19_confirmations",
"finalized": true,
"freshness": {
"checked_at": "2026-09-03T12:00:00Z",
"max_source_age_seconds": 2,
"risk_data_at": "2026-09-03T12:00:00Z",
"token_data_at": "2026-09-03T12:00:00Z",
"transaction_at": "2026-09-03T11:59:00Z"
},
"indirect_sanctions_exposure": false,
"integrity": {
"comparisons": {
"amount": {
"actual": "1250.000001",
"delta": "0",
"delta_raw": "0",
"expected": "1250.000001",
"result": "EXACT",
"tolerance": null
},
"network": {
"actual": "tron",
"expected": null,
"result": "NOT_EVALUATED"
},
"recipient": {
"actual": "TJRabPrwbZy45sbavfcjinPJC18kjpRTv8",
"expected": "TJRabPrwbZy45sbavfcjinPJC18kjpRTv8",
"result": "MATCH"
},
"sender": {
"actual": "TJRabPrwbZy45sbavfcjinPJC18kjpRTv8",
"expected": null,
"result": "NOT_EVALUATED"
},
"token": {
"actual": "TR7NHqjeKQxGTCi8q8ZY4pL8otSzgjLj6t",
"expected": "TR7NHqjeKQxGTCi8q8ZY4pL8otSzgjLj6t",
"result": "MATCH"
}
},
"relevant_event_count": 1,
"selected_event_ref": "log:0",
"status": "MATCH"
},
"integrity_status": "MATCH",
"key_exposure": [],
"limitations": [],
"network": "tron",
"obligation": null,
"overall_state": "CLEAR",
"policy_version": "b2b-tx-2026-10.4",
"reasons": [
{
"category": "transaction",
"code": "TX_FACTS_VERIFIED",
"severity": "info"
},
{
"category": "transaction",
"code": "TX_FINALIZED",
"severity": "info"
},
{
"category": "risk",
"code": "AML_LOW",
"severity": "info"
},
{
"category": "sanctions",
"code": "NO_DIRECT_SANCTIONS_MATCH",
"severity": "info"
},
{
"category": "token",
"code": "TOKEN_OFFICIAL",
"severity": "info"
}
],
"recipient": "TJRabPrwbZy45sbavfcjinPJC18kjpRTv8",
"recipient_match": true,
"recommended_action": "CONFIRM_INTERNAL_STATE",
"request_id": "req-3f34a12f",
"required_confirmations": 19,
"result_final": true,
"retry_after_seconds": null,
"retryable": false,
"reuse": {
"first_seen_at": null,
"other_obligations": 0,
"prior_decisions": 0,
"status": "FIRST_SEEN"
},
"risk": {
"driver": null,
"driver_evidence_ids": [],
"status": "NO_MATERIAL_SIGNAL"
},
"risk_exposure": false,
"risk_final": true,
"risk_retry_after_seconds": null,
"risk_retryable": false,
"risk_status": "NO_MATERIAL_SIGNAL",
"sanctions_hit": false,
"schema_version": "0.3",
"selected_transfer_index": 0,
"sender": "TJRabPrwbZy45sbavfcjinPJC18kjpRTv8",
"source_coverage": {
"risk_sources": {
"aml_provider": {
"checked_at": "2026-09-03T12:00:00Z",
"data_updated_at": null,
"error_code": null,
"retrieved_at": "2026-09-03T12:00:00Z",
"scope": "transaction_risk_score",
"stale_after_seconds": null,
"status": "checked_freshness_unknown"
}
},
"sanctions_sources": {
"eu": {
"checked_at": "2026-09-03T12:00:00Z",
"data_updated_at": "2026-08-28T00:00:00Z",
"error_code": null,
"retrieved_at": "2026-09-01T09:00:00Z",
"scope": "configured_address_index",
"stale_after_seconds": 3024000,
"status": "checked"
},
"ofac": {
"checked_at": "2026-09-03T12:00:00Z",
"data_updated_at": null,
"error_code": null,
"retrieved_at": "2026-09-03T06:00:00Z",
"scope": "configured_address_index",
"stale_after_seconds": 172800,
"status": "checked"
},
"uk": {
"checked_at": "2026-09-03T12:00:00Z",
"data_updated_at": "2026-08-28T00:00:00Z",
"error_code": null,
"retrieved_at": "2026-09-01T09:00:00Z",
"scope": "configured_address_index",
"stale_after_seconds": 3024000,
"status": "checked"
},
"un": {
"checked_at": null,
"data_updated_at": null,
"error_code": null,
"retrieved_at": null,
"scope": "configured_address_index",
"stale_after_seconds": null,
"status": "not_applicable"
}
},
"transaction_sources": {
"chain_explorer": {
"checked_at": "2026-09-03T12:00:00Z",
"data_updated_at": null,
"error_code": null,
"retrieved_at": "2026-09-03T11:59:58Z",
"scope": "transaction_facts",
"stale_after_seconds": null,
"status": "checked"
},
"chain_node": {
"checked_at": "2026-09-03T12:00:00Z",
"data_updated_at": null,
"error_code": null,
"retrieved_at": "2026-09-03T11:59:58Z",
"scope": "transaction_facts",
"stale_after_seconds": null,
"status": "checked"
}
},
"universal_clearance": false
},
"status_drivers": {
"action": "CUSTOMER_STATE_UNKNOWN",
"coverage": null,
"integrity": null,
"risk": null,
"transaction": "TX_FINALIZED"
},
"token_authenticity": "official",
"token_contract": "TR7NHqjeKQxGTCi8q8ZY4pL8otSzgjLj6t",
"token_match": true,
"token_symbol": "USDT",
"trace_complete": null,
"transaction_category": "trc20_transfer",
"transaction_state": "confirmed",
"transaction_status": "CONFIRMED",
"transaction_type": "TriggerSmartContract",
"transfers": [
{
"amount": "1250.000001",
"asset_type": "trc20",
"decimals": 6,
"event_ref": "log:0",
"execution_status": "success",
"index": 0,
"raw_amount": "1250000001",
"recipient": "TJRabPrwbZy45sbavfcjinPJC18kjpRTv8",
"sender": "TJRabPrwbZy45sbavfcjinPJC18kjpRTv8",
"token_contract": "TR7NHqjeKQxGTCi8q8ZY4pL8otSzgjLj6t",
"token_id": null,
"token_symbol": "USDT"
}
],
"transfers_truncated": false,
"tx_hash": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
"verification_final": true,
"versions": {
"contract": "0.3",
"decision": "b2b-tx-2026-10.4",
"evidence_schema": "ev-1",
"reason_codes": "rc-1",
"rules": {
"allocation": "alloc-v1",
"billing": "final_answers_only",
"exposure": "b2b-exp-v2",
"integrity": "int-v3",
"reuse": "reuse-v1",
"sanctions_freshness": "sf-v1"
}
},
"workflow_coverage": "complete",
"workflow_type": "PAYOUT"
},
"network": "tron",
"reason_codes": [
"TX_FACTS_VERIFIED",
"TX_FINALIZED",
"AML_LOW",
"NO_DIRECT_SANCTIONS_MATCH",
"TOKEN_OFFICIAL"
],
"request_id": "req-3f34a12f",
"risk_level": "low",
"state": "clear"
}
Autentikasi
Satu akun ChainZap
Pilih Masuk dengan akun ChainZap dan gunakan akun yang sama dengan aplikasi. Dari Pengaturan → API pengembang → Dasbor, sesi aktif di browser yang sama dilanjutkan tanpa masuk lagi. Organisasi, kunci API, dan kuota API dikelola terpisah dari kredit pribadi di aplikasi. Akun portal Google yang sudah ada ditautkan melalui identitas Google yang terverifikasi, bukan kecocokan alamat email.
Anda tidak perlu kode undangan untuk masuk. Undangan hanya digunakan untuk bergabung dengan organisasi yang sudah ada. Jika Telegram membuka browser lain yang belum memiliki sesi ChainZap, masuk sekali dengan akun yang sama. Tautkan Google dan Telegram di pengaturan akun aplikasi sebelum menggunakannya secara bergantian.
Kunci API server
Kirim X-API-Key melalui HTTPS pada setiap permintaan ke API bisnis. Jangan pernah menempatkan kunci di URL, penyimpanan browser, analitik, pesan dukungan, atau kontrol sumber. Satu kunci memberikan akses ke satu organisasi; permintaan tidak dapat memilih organisasi lain.
Masuk ke dasbor pengembang terpisah dari kunci API. Kunci live diawali cz_live_; kunci sandbox diawali cz_test_.
Peran di portal:
- Anggota dengan peran owner, admin, dan developer membuat, mengganti, dan mencabut kunci API.
- Anggota dengan peran owner, admin, dan billing melihat riwayat pembayaran, membeli paket dan paket pemeriksaan tambahan, serta mengelola langganan.
- Anggota dengan peran viewer hanya melihat statistik dan metadata kunci.
Kunci API tidak dapat membeli apa pun.
Siklus hidup kunci
Beri setiap integrasi kuncinya sendiri dengan nama yang jelas. Kunci lengkap hanya ditampilkan satu kali, saat dibuat atau diganti; daftar kunci menampilkan awalannya saja. Penggantian mencabut kunci lama dan membuat penggantinya dalam satu operasi. Perbarui penyimpanan rahasia server segera setelah penggantian. Untuk perpindahan terencana tanpa gangguan, buat kunci terpisah terlebih dahulu, pindahkan integrasi ke kunci itu dan pastikan berfungsi, lalu cabut kunci sebelumnya.
Galat akses
401 invalid_api_key: kunci tidak valid atau sudah dicabut.403 tenant_suspended: organisasi ditangguhkan.403 network_not_enabled: jaringan yang diminta tidak diaktifkan untuk organisasi.
Perbaiki akses terlebih dahulu. Mengulang permintaan yang sama tanpa perubahan tidak membantu.
POST /v1/transaction/check
Permintaan
Permintaan JSON ketat ini memerlukan network dan tx_hash 32 byte. Kolom yang tidak dikenal ditolak. Alamat yang diharapkan divalidasi dan dinormalisasi sesuai jaringan terpilih. expected_amount berupa string desimal nonnegatif; angka JSON dan notasi eksponen ditolak. Untuk konteks jaringan opsional dan respons ringkas, gunakan POST /v1/check.
| Kolom | Nilai yang dikirim |
|---|---|
network |
"tron", "eth", atau "ton". Wajib. |
tx_hash |
64 digit heksadesimal dengan awalan 0x opsional. TON juga menerima base64/base64url kanonis yang mengodekan 32 byte. |
expected_recipient |
Opsional: alamat penerima pada jaringan terpilih. Untuk TON, pemilik dompet. |
expected_token |
Opsional: kontrak token pada jaringan terpilih. Untuk TON, jetton master. |
expected_amount |
Opsional: jumlah sebagai string, misalnya "10.25". |
Format alamat dan aturan perbandingan tepat ada di pencocokan pembayaran. Isi permintaan dibatasi 4 KiB; isi yang lebih besar ditolak dengan 413 payload_too_large. Organisasi dengan kontrak pilot wajib mengirim ketiga kolom expected_*.
Kirim Content-Type: application/json, X-API-Key dari server, dan Idempotency-Key untuk operasi pemeriksaan logis. X-Request-ID menghubungkan permintaan dengan catatan operasi Anda sendiri. Referensi API memuat kolom wajib, enum, dan skema respons yang tepat.
Respons
Baca transaction_state terpisah dari overall_state. Respons mencakup jumlah konfirmasi, transfer yang dinormalisasi, transfer terpilih, tingkat risiko, status sanksi, keaslian token, hasil pencocokan, cakupan, waktu data, dan 2 sampai 5 alasan yang diprioritaskan. Jumlah transfer dan paparan berupa string desimal. Tangani kolom bernilai null secara eksplisit.
transfers_truncated=true berarti daftar transfer dipersingkat. AMBIGUOUS_TRANSFER berarti beberapa transfer memenuhi syarat Anda. Keduanya perlu diperhatikan. Jangan menganggap daftar yang dipersingkat sudah lengkap dan jangan menggabungkan hasil pencocokan dari transfer yang berbeda.
Gunakan kontrak 0.3
Gunakan verification_final dan integrity_status untuk verifikasi pembayaran, lalu nilai risk_status dan recommended_action secara terpisah. Pending bernilai NOT_EVALUATED, tidak pernah MATCH. MATCH final dengan risk_status: INSUFFICIENT mengonfirmasi perbandingan pembayaran tetapi memerlukan MANUAL_REVIEW, bukan kredit otomatis atau persetujuan pembayaran. Baca risk_retryable terpisah dari retryable. Contoh respons menampilkan cabang ini.
Penagihan
Respons final dengan coverage: complete memakai satu pemeriksaan dari kuota, termasuk hasil lengkap yang berisiko tinggi: transaksi sudah terkonfirmasi melewati kebijakan finalitasnya, atau gagal secara permanen. Transaksi yang tertunda, transaksi yang tidak ditemukan, dan respons dengan coverage: partial tidak ditagih. Mengulang operasi idempoten yang sama tidak pernah ditagih dua kali.
expected_token adalah alamat kontrak, bukan simbol; nama lama expected_token_contract tetap diterima. Kirim hanya satu nama. Respons memuat schema_version: "0.3", policy_version (kebijakan keputusan yang menghasilkan respons; simpan bersama respons), tiga penanda risiko/sanksi terpisah, workflow_coverage, dan source_coverage. Baca cakupan sebelum menafsirkan hasil. Kunci idempotensi yang dipakai sebelum kontrak 0.2 menghasilkan 409 idempotency_conflict; gunakan kunci baru setelah menangani hasil lama.
Periksa dompet sebelum Anda menerimanya atau membayarnya
POST /v1/wallet/check menyaring satu alamat dengan cara yang sama seperti POST /v1/check menyaring satu transaksi: kunci yang sama, kuota yang sama, aturan idempotensi yang sama, dan bentuk jawaban yang sama. Kirim alamat, terima status, tingkat cakupan, dan kode alasan, lalu putuskan dalam alur kerja Anda sendiri apakah pihak lawan perlu diperiksa lebih lanjut.
Permintaan
| Kolom | Apa yang dikirim |
|---|---|
address |
Wajib. Alamat Ethereum (0x dan 40 digit heksadesimal), alamat TRON (T dan 33 karakter base58), atau alamat TON (bentuk ramah 48 karakter atau workchain:hash). |
network |
Opsional: "tron", "eth", atau "ton". Jika tidak dikirim, jaringan dikenali dari format alamat. Jika dikirim, nilainya harus sesuai dengan format; ketidaksesuaian menghasilkan 422 invalid_tron_address, invalid_eth_address, atau invalid_ton_address. |
Ketiga format tidak mungkin tertukar satu sama lain, sehingga pemeriksaan dompet tidak pernah menjawab NETWORK_REQUIRED atau NETWORK_AMBIGUOUS. String yang tidak cocok dengan format mana pun menghasilkan 422 invalid_address. Kolom yang tidak dikenal ditolak dan isi permintaan dibatasi 4 KiB. Kirim Content-Type: application/json, X-API-Key sisi server, dan Idempotency-Key untuk operasi logis; X-Request-ID menghubungkan permintaan dengan log Anda sendiri.
curl --include --max-time 35 'https://api.chainzap.io/v1/wallet/check' \
-H 'Content-Type: application/json' \
-H 'X-API-Key: cz_live_000000000000.fictional_example_only' \
-H 'Idempotency-Key: onboarding-4711-wallet-1' \
-H 'X-Request-ID: onboarding-4711-attempt-1' \
--data '{"address":"TJRabPrwbZy45sbavfcjinPJC18kjpRTv8"}'
Alamat dalam contoh adalah alamat publik untuk ilustrasi, bukan tujuan pembayaran. Respons mengembalikan address dalam ejaan kanonik: Ethereum dalam huruf kecil, TON sebagai workchain:hash, TRON tanpa perubahan.
Respons
Baca tingkat teratas lebih dulu, lalu details.
| Kolom | Arti |
|---|---|
state |
clear, review, high_risk, atau limited_data. Ini hasil penyaringan, bukan perintah untuk membayar atau menolak. |
coverage |
complete jika setiap modul yang berlaku disaring sepenuhnya, selain itu partial. Status clear hanya dikembalikan bersama cakupan complete. |
reason_codes |
String stabil, diurutkan menurut tingkat keparahan, paling banyak sepuluh. Kode yang sama muncul sebagai objek dengan category dan severity pada details.reasons. |
environment |
live atau sandbox. |
details menjelaskan dari mana status berasal:
overall_statedandata_coverage: status dalam huruf kapital dan istilah cakupan dari mesin analisis sendiri,FULL,PARTIAL, atauINSUFFICIENT.modules: tujuh baris dalam urutan tetap,sanctions_aml,wallet_behaviour,token_authenticity,contract_controls,address_security,counterparties_services,flows_connections. Setiap baris memilikistatus(RISK_DETECTED,NO_MATCHES_FOUND,PARTIALLY_CHECKED,INSUFFICIENT_DATA,NOT_SUPPORTED,NOT_CHECKED) dansource_coverage(complete,partial,none,not_applicable). Modul yang tidak disaring menyatakannya secara terbuka; modul itu tidak pernah dilaporkan bersih.sanctions:direct_matchterhadap indeks OFAC, EU, UK, dan UN yang dikonfigurasi (nulljika tidak ada indeks yang disaring), otoritas pencatatan padaauthorities, apakah pencatatan ituattributed, danindirect_exposureyang dilaporkan penyedia AML (nulljika penyedia tidak dijalankan).address_security: status dan kategori pada daftar hitam publik,provider_flagged(apakah penyedia keamanan alamat menandai alamat ini;nullbila penyedia tidak menjawab atau haknya tidak mengizinkan ChainZap menampilkannya), dan apakah penerbit stablecoin telah membekukan alamat. Label milik penyedia tidak pernah dikembalikan;provider_flagsyang usang berisi["PROVIDER_SECURITY_FLAG"]ketikaprovider_flaggedbernilai true dan kosong selain itu.behaviour: apakah alamat adalah kontrak, jumlah transaksi dan apakah jumlahnya dibatasi, usia dompet, aktivitas pertama dan terakhir, serta jumlah pihak lawan.counterpartiesdantoken_authenticity: berapa banyak pihak lawan yang disaring, belum terverifikasi, atau ditandai, dan berapa banyak token yang dipegang tergolong resmi, palsu, mencurigakan, atau tidak dikenal.freshnessdansource_coverage: kapan pemeriksaan berjalan, apakah analisis berasal dari cache analisis (5 menit di Ethereum, 30 menit di TRON dan TON; jawaban penyedia AML dipakai ulang hingga 24 jam), usia sumber tertua, dan satu pengamatan per sumber dengan kosakata status yang sama seperti pemeriksaan transaksi. Sumber dinamai menurut perannya:ofac,eu_sanctions,uk_sanctions,un_sanctions,denylist,issuer_restrictions,aml_provider,address_security_provider,onchain,chain_explorer,chain_node,graph_risk.limitations:analysis_from_cache,transaction_sample_capped,aml_provider_unavailable,aml_provider_skipped_dominant_local_hit,counterparty_attribution_partial,network_assumed_eth,address_security_provider_withheld,sandbox_partial_fixture.
Semua kode alasan dompet beserta artinya tercantum di kode alasan.
Apa yang bukan merupakan pemeriksaan dompet
Tidak ada skor numerik di mana pun dalam respons, dan itu disengaja. Angka mengundang ambang batas, dan tidak ada ambang batas yang jujur untuk tiga jaringan dengan sumber yang berbeda. Respons memberi tahu apa yang ditemukan, apa yang disaring, dan apa yang tidak dapat disaring. Ini bukan sertifikat kepatuhan dan tidak mengetahui aturan internal bursa atau bank mana pun. Pahami clear sebagai "tidak ada temuan kritis pada sumber yang disaring", review sebagai "periksa lebih lanjut sebelum melanjutkan", high_risk sebagai "ada temuan kritis yang harus diselesaikan", dan limited_data sebagai "kami tidak dapat memastikan".
Penagihan
Pemeriksaan dompet menggunakan satu pemeriksaan dari kuota Anda saat menghasilkan status: clear, review, atau high_risk, dengan cakupan lengkap maupun sebagian. limited_data gratis, begitu pula galat, batas waktu, dan replay idempoten. Ini berbeda dari pemeriksaan transaksi yang hanya ditagih pada cakupan lengkap: penyaringan dompet sering mencapai keputusan yang tegas meski satu dari lima puluh pihak lawan belum teratribusi, sementara sumber berbayar sudah menjawab. Kunci sandbox tidak pernah menggunakan pemeriksaan berbayar.
Anggaran waktu dan pengulangan
Pemeriksaan dompet yang belum di-cache membaca beberapa penyedia dan memiliki anggaran server 30 detik; gunakan batas waktu klien sekitar 35 detik. Jika server menjawab 504 request_timeout, ulangi dengan isi permintaan dan Idempotency-Key yang sama: analisis tetap berjalan sampai selesai di server dan masuk ke cache bersama, sehingga pengulangan biasanya dijawab seketika dan membawa freshness.served_from_analysis_cache: true. Aturan pengulangan umum berlaku tanpa perubahan.
Idempotensi antar jenis pemeriksaan
Kunci idempotensi dibagi per organisasi dan lingkungan di semua endpoint pemeriksaan. Memakai ulang kunci transaksi untuk isi permintaan dompet, atau kunci dompet untuk alamat lain, menghasilkan 409 idempotency_conflict. Satu operasi logis, satu kunci.
Contoh di sisi server
import os, requests
response = requests.post("https://api.chainzap.io/v1/wallet/check", timeout=35,
headers={"X-API-Key": os.environ["CHAINZAP_API_KEY"],
"Idempotency-Key": os.environ["CHECK_ID"]},
json={"address": os.environ["WALLET_ADDRESS"]})
result = response.json()
response.raise_for_status()
if result["state"] != "clear":
print(result["state"], result["reason_codes"])
const response = await fetch("https://api.chainzap.io/v1/wallet/check", {
method: "POST", signal: AbortSignal.timeout(35000),
headers: {"Content-Type": "application/json", "X-API-Key": process.env.CHAINZAP_API_KEY!,
"Idempotency-Key": process.env.CHECK_ID!},
body: JSON.stringify({address: process.env.WALLET_ADDRESS})
});
const result = await response.json();
if (!response.ok) throw new Error(result.error.code);
if (result.state !== "clear") console.info(result.state, result.reason_codes);
Contoh respons deterministik
Ini fixture ilustratif, bukan pengamatan langsung. Buka JSON lengkap di bawah.
Lihat respons JSON lengkap
{
"address": "TJRabPrwbZy45sbavfcjinPJC18kjpRTv8",
"coverage": "complete",
"details": {
"address_security": {
"denylist_category": null,
"denylisted": false,
"issuer_blocked": false,
"issuer_blocked_symbols": [],
"provider_flagged": false,
"provider_flags": []
},
"behaviour": {
"contract_verified": null,
"counterparties_count": 37,
"first_activity_at": "2024-09-20T10:15:00Z",
"is_contract": false,
"last_activity_at": "2026-09-19T08:02:11Z",
"transaction_count": 412,
"transaction_count_limited": false,
"wallet_age_days": 731
},
"counterparties": {
"flagged": 0,
"screened": 37,
"unverified": 0
},
"coverage_scope": "supported_deep_sources",
"data_coverage": "FULL",
"evidence": {
"live": true,
"source": "live"
},
"freshness": {
"analyzed_at": "2026-09-21T08:59:58Z",
"checked_at": "2026-09-21T09:00:00Z",
"oldest_source_age_seconds": 2,
"served_from_analysis_cache": false
},
"limitations": [],
"modules": [
{
"key": "sanctions_aml",
"source_coverage": "complete",
"status": "NO_MATCHES_FOUND"
},
{
"key": "wallet_behaviour",
"source_coverage": "complete",
"status": "NO_MATCHES_FOUND"
},
{
"key": "token_authenticity",
"source_coverage": "complete",
"status": "NO_MATCHES_FOUND"
},
{
"key": "contract_controls",
"source_coverage": "complete",
"status": "NO_MATCHES_FOUND"
},
{
"key": "address_security",
"source_coverage": "complete",
"status": "NO_MATCHES_FOUND"
},
{
"key": "counterparties_services",
"source_coverage": "complete",
"status": "NO_MATCHES_FOUND"
},
{
"key": "flows_connections",
"source_coverage": "complete",
"status": "NO_MATCHES_FOUND"
}
],
"overall_state": "CLEAR",
"reasons": [
{
"category": "sanctions",
"code": "NO_DIRECT_SANCTIONS_MATCH",
"severity": "info"
},
{
"category": "risk",
"code": "AML_LOW",
"severity": "info"
},
{
"category": "address",
"code": "NO_ADDRESS_SECURITY_FLAGS",
"severity": "info"
},
{
"category": "behaviour",
"code": "NO_BEHAVIOUR_FLAGS",
"severity": "info"
}
],
"sanctions": {
"attributed": false,
"authorities": [],
"direct_match": false,
"exposure_source": "aml_provider",
"indirect_exposure": false
},
"schema_version": "0.1",
"source_coverage": {
"ofac": {
"checked_at": "2026-09-21T09:00:00Z",
"data_updated_at": "2026-09-20T18:00:00Z",
"error_code": null,
"retrieved_at": "2026-09-21T09:00:00Z",
"scope": "sanctions_aml",
"stale_after_seconds": 172800,
"status": "checked"
}
},
"token_authenticity": {
"fake": 0,
"official": 3,
"suspicious": 0,
"total": 3,
"unknown": 0
},
"universal_clearance": false
},
"environment": "live",
"network": "tron",
"reason_codes": [
"NO_DIRECT_SANCTIONS_MATCH",
"AML_LOW",
"NO_ADDRESS_SECURITY_FLAGS",
"NO_BEHAVIOUR_FLAGS"
],
"request_id": "8a7f1c2e9d3b4f5a8c6d7e9f0a1b2c3d",
"state": "clear"
}
Cocokkan transfer dengan rincian pembayaran
Gunakan kolom expected_* untuk memverifikasi penerima, kontrak token, dan jumlah dari pembayaran tertentu. Kirim ketiga kolom atau hanya perbandingan yang Anda perlukan.
Perbandingan berikut berlaku setelah finalitas jaringan. Ketika transaction_status: PENDING, integritas dan setiap perbandingan yang diminta bernilai NOT_EVALUATED, dan semua penanda pencocokan null, meskipun transfer yang diamati memuat nilai yang diharapkan. MATCH final memverifikasi rincian pembayaran terpisah dari KYT; risiko tidak memadai tetap memerlukan MANUAL_REVIEW.
Satu transfer, tiga perbandingan
Satu transaksi dapat berisi beberapa transfer. ChainZap terlebih dahulu mencari transfer yang memenuhi setiap syarat yang Anda kirim. Jika tidak ada, layanan memilih transfer dengan kecocokan terbanyak. Jika hasilnya seri, indeks transfer menentukan pilihan secara konsisten.
recipient_match, token_match, dan amount_match selalu mengacu pada transfer terpilih tersebut. Jika beberapa transfer memenuhi seluruh syarat, respons memuat AMBIGUOUS_TRANSFER. Transfer yang tidak dieksekusi, misalnya transfer dalam transaksi yang dibatalkan (revert), tidak pernah dianggap cocok: ketiga kolomnya bernilai null, dan transaksi gagal yang di dalamnya tidak ada yang dieksekusi bernilai NOT_EVALUATED, tidak pernah LIMITED_DATA karena baris transfer yang tidak ada.
Kontrak 0.3 menyatakan perbandingan secara lengkap di integrity: status (lihat sumbu status), selected_event_ref, relevant_event_count (transfer yang dieksekusi ke penerima yang diharapkan dengan token yang diharapkan), dan comparisons dengan nilai expected dan actual serta result untuk recipient, sender, token, amount, dan network. Hasil untuk jumlah adalah EXACT, WITHIN_TOLERANCE, UNDERPAID, OVERPAID, NOT_EVALUATED, atau INSUFFICIENT, beserta delta dan delta_raw yang bertanda.
| Transfer yang relevan | Jawaban |
|---|---|
| Satu, jumlah cocok | MATCH. |
| Satu, jumlah berbeda | MISMATCH dengan UNDERPAID atau OVERPAID. |
| Beberapa, tepat satu jumlah yang cocok | MATCH dan ADDITIONAL_RELEVANT_TRANSFERS: transaksi mungkin membayar dua kali. |
| Beberapa dari satu aset, tidak ada yang cocok tetapi bila digabung sama dengan jumlahnya | MATCH dan SPLIT_WITHIN_TX. Pergerakan aset yang berbeda tidak pernah dijumlahkan. |
| Beberapa yang sama-sama sesuai | AMBIGUOUS; tidak ada yang dialokasikan. |
| Hasil | Arti |
|---|---|
true |
Nilai sesuai dengan yang Anda kirim. |
false |
Nilai dapat diperiksa, tetapi tidak sesuai. |
null |
Perbandingan tidak diminta atau datanya belum cukup. |
Cara nilai dibandingkan
Jika Anda memberikan nilai yang diharapkan tetapi data transfernya tidak tersedia, kolom perbandingan terkait bernilai null, cakupan menjadi parsial (partial), dan alasan menyertakan EXPECTED_DATA_UNAVAILABLE. Misalnya, tanpa jumlah desimal token, API tidak dapat menyatakan bahwa jumlahnya berbeda. Jangan menganggap null sebagai kecocokan yang terkonfirmasi.
Alamat divalidasi dan dinormalisasi sesuai jaringan yang dipilih:
| Jaringan | Alamat yang diterima dan cara perbandingan |
|---|---|
tron |
Alamat Base58Check dengan checksum yang valid. Alamat dibandingkan secara tepat. |
eth |
0x diikuti 40 digit heksadesimal. Huruf boleh seluruhnya kecil atau besar; campuran keduanya harus memenuhi EIP-55. Perbandingan menggunakan huruf kecil. |
ton |
Format mentah workchain:account atau alamat ramah pengguna dengan checksum yang valid. Hanya workchain 0 dan -1 yang diterima; alamat bertanda test-only ditolak. Bentuk bounceable dan non-bounceable dinormalisasi menjadi akun yang sama. |
Untuk TON, expected_recipient adalah pemilik dompet dan expected_token adalah jetton master, bukan jetton wallet.
Token dibandingkan berdasarkan kontrak yang tepat, tidak pernah berdasarkan nama atau simbol; simbol yang sama tidak membuktikan token yang sama. Jumlah dikonversi dari string desimal, misalnya "10.000001", menjadi bilangan bulat dalam satuan terkecil token menggunakan decimals yang diketahui, lalu dibandingkan secara tepat tanpa toleransi floating-point. Untuk menerima selisih kecil, kirim amount_tolerance: jumlah absolut dalam satuan token, simetris, bernilai bawaan 0. Selisih dalam batas itu menghasilkan WITHIN_TOLERANCE dan menambahkan AMOUNT_WITHIN_TOLERANCE; toleransi dengan angka desimal lebih banyak daripada decimals token dijawab 422 invalid_amount_tolerance. expected_sender membandingkan alamat pengirim dengan cara yang sama seperti penerima. Digit di luar decimals token diterima jika berupa nol: "10.0000000" sama dengan "10" untuk token dengan 6 decimals. Digit bukan nol di luar batas itu menghasilkan 422 invalid_expected_amount.
Contoh ketidakcocokan
Anda mengharapkan "10.000001", tetapi transfer terpilih berjumlah "10". Respons berisi amount_match=false dan EXPECTED_AMOUNT_MISMATCH.
Penerima yang berbeda menghasilkan EXPECTED_RECIPIENT_MISMATCH. Kontrak token yang berbeda menghasilkan EXPECTED_TOKEN_MISMATCH. Jumlah yang cocok tidak membuktikan bahwa penerima dan token juga cocok. Sebelum mengonfirmasi pembayaran, periksa seluruh perbandingan yang diperlukan, status transaksi, dan penilaian keseluruhan.
Kontrak pilot
Organisasi dengan kontrak pilot mitra desain wajib mengirim ketiga kolom pada setiap pemeriksaan: pemeriksaan tanpa expected_recipient, expected_token, atau expected_amount ditolak dengan 422 expected_fields_required, dan expected_token selain USDT resmi di TRON ditolak dengan 422 token_not_enabled. Penolakan terjadi sebelum pemeriksaan diterima: tidak ada yang ditagih atau disimpan, dan kunci sandbox mengikuti aturan yang sama.
Konteks jaringan
Perbandingan ini berlaku untuk kedua endpoint pemeriksaan. Jika jaringan pembayaran sudah diketahui, kirim secara eksplisit. API lalu memvalidasi alamat yang diharapkan sesuai jaringan tersebut dan tidak pernah beralih ke jaringan lain. Lihat penentuan jaringan untuk permintaan tanpa network.
Kewajiban, percobaan, dan alokasi
Satu pemeriksaan menjawab apakah satu transaksi membayar sesuai yang Anda harapkan. Buku besar kewajiban menjawab apakah sebuah kewajiban bisnis, yaitu pembayaran keluar atau setoran yang menjadi hak Anda, telah dibayar: sekali, penuh, oleh transaksi yang mana, dan apakah pembayaran yang sama diajukan untuk hal lain. Buku besar menyimpan instruksi Anda, percobaan eksekusi Anda, peristiwa pembayaran yang diverifikasi ChainZap, dan cara peristiwa itu dialokasikan, tanpa pernah menulis ulang satu pun.
Buku besar diaktifkan per deployment. Selama nonaktif, pemeriksaan dengan kolom buku besar apa pun dan setiap endpoint buku besar menjawab 403 ledger_not_enabled.
Model
| Catatan | Artinya |
|---|---|
| Kewajiban | Satu referensi bisnis (external_reference, unik per organisasi dan lingkungan) dengan workflow_type (PAYOUT, DEPOSIT, INVOICE, REFUND, SETTLEMENT, OTHER) dan direction (OUTGOING, INCOMING). |
| Versi instruksi | Apa yang terutang: jaringan, penerima, pengirim opsional, kontrak token, jumlah, dan amount_tolerance, beserta instruction_effective_at dan approval_reference. Hanya dapat ditambah. |
| Percobaan eksekusi | Satu upaya untuk membayarnya (attempt_reference), dengan channel, provider_reference, status, serta amount dan tx_hash opsional. Pengulangan atau pergantian penyedia pembayaran adalah percobaan baru. |
| Peristiwa pembayaran | Satu perpindahan dana on-chain yang terverifikasi, diidentifikasi dengan jaringan, transaksi, dan event_ref (misalnya log:3). Satu transaksi dapat memuat beberapa peristiwa. |
| Alokasi | Berapa bagian dari satu peristiwa yang menyelesaikan satu kewajiban, beserta status-nya (MATCHED, CUSTOMER_DECLARED, UNKNOWN, DISPUTED) dan source-nya (CHAINZAP_MATCH, CUSTOMER, BATCH; OPERATOR dicadangkan). Dibalik, tidak pernah dihapus. |
| Keputusan | Jawaban ChainZap atas satu pemeriksaan, disimpan persis seperti saat diberikan. Lihat keputusan. |
external_reference, attempt_reference, dan approval_reference berisi paling banyak 128 karakter ASCII yang dapat dicetak. Jangan memasukkan data pribadi ke dalamnya.
Periksa terhadap kewajiban
Tambahkan referensi kewajiban ke pemeriksaan transaksi biasa:
{
"tx_hash": "…",
"network": "tron",
"external_reference": "payout-2026-10-0001",
"attempt_reference": "attempt-1",
"direction": "OUTGOING",
"workflow_type": "PAYOUT",
"expected_recipient": "T…",
"expected_token": "TR7NHqjeKQxGTCi8q8ZY4pL8otSzgjLj6t",
"expected_amount": "100.00"
}
Pemeriksaan pertama atas referensi baru mencatat kewajiban dan instruksinya (versi 1, atau instruction_version yang Anda kirim). Pemeriksaan berikutnya boleh hanya mengirim referensi: transaksi dibandingkan dengan instruksi yang tercatat. Jawaban menambahkan blok obligation (status, expected_amount, allocated_amount, residual_amount, attempts, events, pending_events) dan blok reuse.
Ketika transaksi cocok, atau membayar penerima dan token yang benar dengan jumlah yang berbeda, peristiwanya dialokasikan ke kewajiban tersebut. Hanya peristiwa yang final dan telah dieksekusi yang dialokasikan; peristiwa yang tertunda dihitung dalam pending_events dan tidak pernah menutup kewajiban. Jika beberapa pergerakan sama-sama sesuai (integrity_status: AMBIGUOUS), masing-masing dikaitkan ke kewajiban sebagai UNKNOWN tanpa ada yang dialokasikan, sampai Anda menyatakan mana yang membayar. Pemeriksaan yang tidak menyertakan direction memakai arah yang tercatat pada kewajiban, atau jika tidak ada, menyimpulkannya dari workflow_type (PAYOUT dan REFUND adalah pembayaran keluar, DEPOSIT dan INVOICE pembayaran masuk); pembayaran yang arahnya tetap tidak diketahui tidak pernah bernilai PROCEED.
status kewajiban |
Arti |
|---|---|
OPEN |
Belum ada yang dialokasikan. |
PARTIALLY_ALLOCATED |
Yang dialokasikan kurang dari jumlah dikurangi toleransi. residual_amount adalah sisanya. |
ALLOCATED |
Jumlah sudah tertutup dalam batas toleransi. |
OVER_ALLOCATED |
Yang dialokasikan melebihi jumlah ditambah toleransi. Jika hal itu disebabkan oleh dua transaksi atau lebih, jawaban menambahkan DUPLICATE_EXECUTION. |
CANCELLED |
Dicadangkan untuk kewajiban yang dibatalkan; API belum menetapkannya. |
Instruksi tidak pernah diubah di tempat
Versi instruksi tidak dapat diubah. Mengirim versi yang sama dengan ketentuan berbeda ditolak dengan 409 instruction_conflict; mengirim ketentuan berbeda tanpa versi ditolak dengan 409 instruction_version_required. Instruksi yang berubah adalah versi baru, dicatat dengan POST /v1/obligations dan instruction_version yang lebih tinggi; versi sebelumnya tetap tercatat dan pemeriksaan dapat menyebutkan versi yang menjadi dasar pembayaran. Versi yang tidak pernah Anda catat tidak direkonstruksi: pemeriksaan menjawab integrity_status: INSUFFICIENT dengan INSTRUCTION_UNAVAILABLE. Pembayaran dalam blok sebelum instruction_effective_at menambahkan INSTRUCTION_NOT_EFFECTIVE.
Catat kewajiban dan percobaan sejak awal
| Endpoint | Kegunaan |
|---|---|
POST /v1/obligations |
Mencatat kewajiban, atau versi baru instruksinya. |
POST /v1/obligations/lookup |
Kewajiban beserta instruksi, percobaan, alokasi, dan keputusannya. Kirim {"external_reference": "…"} di isi permintaan: referensi tidak pernah dikirim melalui URL, tempat proxy mencatatnya di log. |
POST /v1/obligations/attempts |
Mencatat percobaan atau status barunya (CREATED, SUBMITTED, BROADCAST, TIMEOUT, FAILED, CANCELLED, PROVIDER_CONFIRMED, UNKNOWN). Setiap perubahan status disimpan di status_history. attempt_reference yang sama dengan channel, provider_reference, amount, atau transaksi lain ditolak dengan 409 attempt_conflict, begitu pula pemeriksaan yang menyebutnya dengan tx_hash lain: pengulangan atau pergantian penyedia adalah percobaan baru. |
Percobaan bukanlah eksekusi. execution_confirmed menjadi true hanya ketika peristiwa pembayaran dari transaksinya dialokasikan ke kewajiban; percobaan TIMEOUT yang diikuti pengulangan yang berhasil menghasilkan dua percobaan dan satu eksekusi. Jika percobaan membawa amount, pemeriksaan yang dibuat dengan attempt_reference tersebut membandingkan transaksi dengan jumlah pada percobaan itu, sehingga pembayaran keluar yang dipecah menjadi beberapa bagian dicocokkan bagian demi bagian.
Pembayaran bersama dan pemakaian ulang
Satu pembayaran dapat menyelesaikan beberapa kewajiban, dan satu kewajiban dapat dibayar oleh beberapa pembayaran.
- Beberapa kewajiban, satu pembayaran. ChainZap tidak pernah membagi pembayaran atas inisiatifnya sendiri. Nyatakan bagian-bagiannya dengan
POST /v1/allocations(network,tx_hash,event_ref,allocations: [{external_reference, amount}], danowneropsional yang dicap pada setiap alokasi sebelumnya yang digantikan oleh pernyataan ini). Peristiwa tersebut ada setelah pemeriksaan yang menyebut sebuah kewajiban mencatatnya dengan cakupan lengkap (jika tidak,404 payment_event_not_found); peristiwa itu harus sudah dieksekusi dan final (409 payment_event_not_settled), dalam token kewajiban (409 allocation_token_mismatch), dan jumlah bagian tidak boleh melebihinya (409 allocation_exceeds_event). Pemeriksaan atas satu bagian kemudian membandingkan bagian itu, bukan seluruh pembayaran, dengan yang terutang pada kewajiban. - Satu kewajiban, beberapa pembayaran. Setiap pemeriksaan dengan referensi yang sama menambahkan peristiwanya;
residual_amountberkurang hingga kewajiban menjadiALLOCATED. - Pembalikan.
POST /v1/allocations/{allocation_id}/reversaldenganreason(CUSTOMER_CORRECTION,DISPUTED,DUPLICATE_RECORD,OTHER) menandai alokasi sebagai dibalik, danDISPUTEDmenandainyaDISPUTED. Alokasi tetap tercatat, dan pemeriksaan berikutnya tidak pernah memulihkannya; hanya pernyataan yang dapat melakukannya.
reuse.status menyatakan apa yang sudah diketahui buku besar tentang peristiwa pembayaran tersebut:
| Status | Arti |
|---|---|
FIRST_SEEN |
Belum ada catatan apa pun tentang transaksi ini. |
REPEAT_CHECK |
Transaksi pernah diperiksa sebelumnya, tetapi tidak ada yang mengklaimnya untuk sebuah kewajiban. Bertanya lagi adalah hal yang wajar dan tidak pernah menjadi temuan. |
SAME_OBLIGATION |
Transaksi sudah dicocokkan dengan kewajiban ini. Pemeriksaan ulang tidak mengalokasikannya dua kali. |
DECLARED_SHARED |
Anda menyatakan bahwa transaksi ini menyelesaikan beberapa kewajiban, termasuk kewajiban ini. |
OTHER_OBLIGATION |
Transaksi sudah menyelesaikan kewajiban lain: TX_REUSED_ACROSS_OBLIGATIONS, REVIEW, dan tidak ada yang dialokasikan ke kewajiban ini. |
Replay idempoten (Idempotency-Key dan isi permintaan yang sama) mengembalikan jawaban yang tersimpan dan bukan pemakaian ulang.
Pembayaran masuk
Untuk setoran, kirim direction: "INCOMING" dan beri tahu ChainZap apa yang sudah dilakukan sistem Anda terhadapnya melalui customer_context: credit_status (NOT_CREDITED, CREDITED, PARTIALLY_CREDITED, UNKNOWN) dan allocation_status (NOT_ALLOCATED, PARTIALLY_ALLOCATED, ALLOCATED, UNKNOWN), yaitu sejauh mana pembukuan Anda sudah menerapkannya. ChainZap tidak dapat melihat pembukuan Anda: tanpa NOT_CREDITED, setoran yang bersih bernilai CONFIRM_INTERNAL_STATE, begitu pula alokasi UNKNOWN, dan pembayaran yang sudah dikreditkan atau diterapkan, meskipun sebagian, menghasilkan REVIEW dengan ALREADY_CREDITED. Aturan kewajiban, alokasi, dan pemakaian ulang yang sama berlaku untuk setoran maupun pembayaran keluar.
Masa penyimpanan
Referensi, alamat, dan hash transaksi dalam bentuk mentah disimpan selama 90 hari, lalu diganti dengan digest berkunci; pemilik dihapus. Jumlah, token, status, dan versi tetap tersimpan, sehingga totalnya tetap benar. Setelah itu, buku besar tetap mengenali pembayaran yang dipakai ulang dan referensi yang berulang melalui digest, dan API mengembalikan redacted: true jika nilai mentahnya sudah tidak ada. Digest dari jumlah dan waktu blok bersifat pseudonim, bukan anonim.
Pemeriksaan batch
Batch memeriksa satu file berisi 50 sampai 200 baris pembayaran dengan mesin yang sama seperti pemeriksaan tunggal: setiap baris mendapat jawaban, alasan, dan efek buku besar yang sama seperti jika diperiksa sendiri. File divalidasi dan diperkirakan biayanya terlebih dahulu; tidak ada yang dijalankan dan tidak ada yang ditagih sampai Anda mengonfirmasi. Batch memakai buku besar kewajiban, dan menjawab 403 batch_not_enabled selama buku besar nonaktif.
Anda dapat mengunggah, menjalankan, dan mengekspor batch di halaman Batch pada dasbor pengembang, atau melalui API di bawah ini. Keduanya memakai layanan dan batas yang sama.
File
CSV dalam UTF-8 (byte order mark diperbolehkan), dipisahkan koma atau titik koma, dengan baris header. Paling banyak 200 baris dan 256 KiB. Satu baris adalah satu pembayaran untuk satu kewajiban.
| Kolom | Wajib | Arti |
|---|---|---|
external_reference |
ya | Kewajiban yang dimaksud baris tersebut. |
network |
ya, atau sebagai nilai bawaan | tron, eth, atau ton (trx, trc20, ethereum, erc20 juga dikenali). |
tx_hash |
tidak | Transaksi yang diperiksa. Tanpa kolom ini, baris hanya mencatat kewajiban, yang kemudian muncul di antara kewajiban terbuka. |
expected_recipient, expected_token, expected_amount |
saat referensi pertama kali muncul | Apa yang terutang. expected_token adalah kontrak atau simbol dari registri, misalnya USDT. |
amount_tolerance, expected_sender |
tidak | Sama seperti pada pemeriksaan tunggal. |
direction, workflow_type |
tidak | OUTGOING atau INCOMING; PAYOUT, DEPOSIT, INVOICE, REFUND, SETTLEMENT, OTHER. |
instruction_version, instruction_effective_at, approval_reference |
tidak | Instruksi yang menjadi dasar pembayaran baris tersebut. |
attempt_reference, attempt_status, channel, provider_reference, attempt_amount |
tidak | Percobaan eksekusi di balik baris tersebut. |
allocated_amount |
tidak | Bagian Anda dari pembayaran yang menyelesaikan beberapa kewajiban. |
Nama header yang umum dikenali: order_id, payout_id, invoice_id, reference untuk referensi; txid, hash, transaction_hash untuk hash; to, recipient, address, wallet untuk penerima; token, contract, asset, currency untuk token; amount, tolerance, from, sender, chain, attempt, provider, status. Kolom yang tidak dikenal diabaikan dan dicantumkan di preflight.ignored_columns. Parameter kueri network, direction, dan workflow_type menetapkan nilai bawaan untuk baris yang mengosongkannya. Unduh templat dari dasbor.
Unggah dan preflight
curl --max-time 30 'https://api.chainzap.io/v1/batches?network=tron' \
-H 'X-API-Key: YOUR_SERVER_API_KEY' -H 'Content-Type: text/csv' \
-H 'Idempotency-Key: payouts-2026-10-05' --data-binary @payouts.csv
201 mengembalikan batch dalam status PREFLIGHTED dengan:
preflight:rows,checks,obligations_only,invalid, danduplicates, besertaerrorsdanwarningsyang dihitung per kode. Baris dengan galat dilewati (SKIPPED_INVALID) dan galatnya menyebutkan kolomnya, misalnyainvalid_tron_addressatauunknown_token_symbol; baris identik yang berulang dilewati sebagai duplikat. Jika beberapa baris memberi satu referensi ketentuan berbeda, baris pertama berlaku dan baris-baris berikutnya ditolak (conflicting_rows_for_obligation). Peringatan tidak membuat baris dilewati:tx_shared_across_references(satu transaksi di bawah beberapa referensi tanpaallocated_amount),declared_shared_payment,several_transactions_for_obligation, dantx_seen_for_other_obligationjika buku besar sudah mengaitkan transaksi itu dengan kewajiban lain.estimate: batas atas, tidak pernah janji.distinct_transactions,billable_checks_at_most,provider_calls_at_most,provider_usd_at_most(dihitung seolah-olah tidak ada yang tersimpan di cache),quota_available, danquota_sufficient.
File yang bukan UTF-8, kosong, tidak memiliki header atau baris data, atau memiliki baris yang rusak dijawab 422 invalid_csv; header tanpa kolom external_reference atau dengan kolom berulang dijawab 422 invalid_csv_header; lebih dari 200 baris dijawab 413 batch_too_large. Satu Idempotency-Key menunjuk satu file: kunci yang sama dengan file yang sama mengembalikan batch yang sama, dengan file lain 409 idempotency_conflict. Satu organisasi menjalankan paling banyak dua batch sekaligus; memulai batch ketiga dijawab 429 batch_limit_reached (mengunggah dan preflight tidak memakan biaya dan tidak dibatasi dengan cara ini).
Jalankan
POST /v1/batches/{batch_id}/execute dengan {"confirm": true} memasukkan batch ke antrean; tanpa confirm, API menjawab 422 confirmation_required. Jika kuota tidak dapat menutup setiap transaksi unik, API menjawab 409 insufficient_quota; kirim "allow_partial": true untuk tetap memulai.
Baris diperiksa oleh worker, tidak pernah lebih cepat dari separuh batas laju organisasi Anda, sehingga lalu lintas Anda sendiri tetap berjalan; batch dari semua organisasi bergiliran, sepotong demi sepotong. Baris dari satu transaksi dijalankan sesuai urutan dalam file. Setiap transaksi unik ditagih sekali per batch: setelah satu barisnya menghasilkan jawaban yang ditagih, baris berikutnya dari transaksi yang sama diperiksa terhadap kewajibannya sendiri secara gratis (baris yang ditolak tidak menagih apa pun, sehingga baris berikutnya yang ditagih). Jika kuota atau batas harian pemeriksaan yang tidak ditagih habis, batch dijeda (PAUSED, dengan pause_reason quota_exceeded atau daily_unbilled_ceiling); jalankan execute lagi untuk melanjutkan.
status batch |
Arti |
|---|---|
PREFLIGHTED |
Sudah divalidasi dan diperkirakan biayanya, menunggu konfirmasi Anda. |
QUEUED, RUNNING |
Sedang diperiksa. |
PAUSED |
Dihentikan oleh kuota atau batas pemeriksaan yang tidak ditagih; lanjutkan dengan execute. |
CANCELLING, CANCELLED |
Dihentikan oleh Anda; baris yang sudah diperiksa mempertahankan jawabannya. |
COMPLETED |
Setiap baris memiliki jawaban atau galat. |
FAILED |
Organisasi ditangguhkan saat batch berjalan. |
state baris |
Arti |
|---|---|
PENDING, CLAIMED |
Menunggu, atau sedang diperiksa. |
DONE |
Verifikasi pembayaran sudah final (verification_final: true), atau baris itu hanya mencatat kewajiban. Penilaian risiko masih dapat memiliki kekurangan sementara: baris seperti itu tetap membawa risk_retryable: true, biasanya dengan risk_status: INSUFFICIENT, dan tidak dijalankan ulang oleh retry. |
RETRYABLE |
Verifikasi belum final (tertunda, tidak ditemukan, kekurangan sumber rantai sementara) atau pemeriksaan gagal dengan 5xx. |
FAILED |
Pemeriksaan ditolak dengan 4xx; perbaiki baris dan unggah lagi. |
SKIPPED_INVALID, SKIPPED_DUPLICATE, CANCELLED |
Tidak diperiksa. |
POST /v1/batches/{batch_id}/retry menjalankan ulang hanya baris RETRYABLE dari batch yang selesai atau dijeda, hingga lima percobaan per baris; 409 nothing_to_retry jika tidak ada. POST /v1/batches/{batch_id}/cancel menghentikannya.
Baris yang kekurangannya hanya pada risiko (KYT tidak tersedia) berstatus DONE, bukan RETRYABLE: baca risk_retryable dan risk_retry_after_seconds-nya, lalu periksa transaksi itu lagi dengan Idempotency-Key baru bila perlu (lihat percobaan ulang).
Hasil
GET /v1/batchesmencantumkan batch terbaru Anda;GET /v1/batches/{batch_id}mengembalikan satu batch besertaprogressdan, setelah dijalankan,summary.GET /v1/batches/{batch_id}/rows?after=0&limit=100menampilkan baris per halaman beserta jawaban ringkasnya (keempat status,recommended_action, hasil dan selisih jumlah, status pemakaian ulang dan status kewajiban, kode alasan,decision_id). Saring denganstate=ataureview=true.GET /v1/batches/{batch_id}/export.csvmengembalikan setiap baris beserta jawabannya. Sel yang akan dibaca spreadsheet sebagai rumus diberi awalan', dan setiap sel diberi tanda kutip.
summary menghitung baris menurut state dan menurut overall_state, memberikan sebaran setiap sumbu status dan recommended_action, jumlah baris dengan analyst_review_required, galat, dan biaya: usd_total, usd_per_transaction, dan usd_per_exception (setiap jawaban selain CLEAR), beserta cost_complete. obligations mencantumkan kewajiban yang masih terbuka beserta jumlah yang sudah dialokasikan dan sisanya.
analyst_review_required menandai baris yang harus dilihat oleh seseorang: rekomendasi MANUAL_REVIEW atau HOLD_AND_ESCALATE. Baris yang jawabannya belum final (RECHECK_LATER) perlu diulang, bukan ditinjau seseorang.
Sandbox
Kunci sandbox menjalankan batch terhadap fixture sandbox dan memakai jatah sandbox; file yang sama dapat dijalankan tanpa perubahan dengan kunci live. Nilai baris mentah disimpan selama 90 hari, sama seperti pada buku besar, lalu dihapus; jumlah, status, dan digest tetap tersimpan.
Dokumen hukum dan cakupan hasil
Ketentuan Bisnis, Perjanjian Pilot, Lampiran Data dan Privasi tersedia melalui tautan portal. Templat sebelum pendirian badan hukum masih memerlukan rincian kontrak dan komersial sebelum ditandatangani. Profil pilot awal adalah USDT resmi di TRON.
Tidak ada sakelar integrity-only khusus: pemeriksaan memanggil lapisan risiko dan menampilkan cakupan tidak cukup/terdegradasi saat bukti risiko yang diperlukan tidak tersedia. Portal menampilkan baris ringkas, tanda review, sisa yang diketahui, dan CSV; bukti keputusan lengkap serta reversal/correction menggunakan API. Batch selesai merupakan snapshot saat keputusan dan tidak otomatis diperbarui setelah koreksi ledger. DONE berarti diproses, bukan dibayar atau hasil yang dikonfirmasi pelanggan.
Transaksi escrow
Transaksi escrow menahan USDT di TRON dalam kontraknya sendiri. Dana hanya bergerak jika pihak yang berhak bertindak: pembeli merilisnya, penjual mengembalikannya, salah satu pihak mengklaimnya setelah pihak lain melewatkan tenggat, kedua pihak mengusulkan pembagian yang sama dalam sengketa, atau resolver yang ditunjuk sebelum pendanaan memutuskan sengketa. Platform Anda membuat draf dan menampilkan transaksinya; pembeli dan penjual menandatangani ketentuan dan memindahkan dana dengan dompet mereka sendiri. ChainZap membuat kontrak setelah keduanya menandatangani dan memantau batas waktu, tetapi tidak pernah memegang kunci para pihak, tidak pernah menjadi resolver, dan tidak dapat memindahkan uangnya.
Transaksi escrow adalah pilot tertutup. Sampai organisasi Anda diaktifkan, setiap panggilan menjawab 403 escrow_not_enabled. Sandbox berjalan di jaringan uji TRON Nile dengan token uji yang tidak bernilai.
Dua mode
Setiap transaksi dapat disengketakan. Satu-satunya pilihan adalah apakah resolver juga boleh memutuskan sengketa.
| Tanpa resolver (bawaan) | Dengan resolver eksternal | |
|---|---|---|
| Permintaan | resolver_enabled tidak dikirim atau false |
"resolver_enabled": true, resolver_id, resolver_fee, timeline.resolve_period_seconds |
| Resolver | tidak ada: kontrak mencatat alamat nol, tanpa imbalan dan tanpa jendela waktu | resolver eksternal yang didaftarkan platform Anda, ditetapkan bersama imbalan dan jendela waktunya dalam ketentuan yang ditandatangani sebelum pendanaan; tidak pernah dapat ditunjuk atau diganti kemudian |
| Sengketa selesai | saat kedua pihak mengusulkan pembagian yang sama | sama, atau dengan putusan resolver dalam jendela waktunya |
| Tidak ada kesepakatan | jalan buntu: dana tetap terkunci sampai para pihak sepakat, pembeli merilis, atau penjual mengembalikan dana | sama, setelah jendela waktu resolver lewat |
| Imbalan resolver | tidak ada | dibayar dari escrow hanya jika resolver memutuskan sengketa |
Mulailah tanpa resolver: mode ini cocok untuk pengiriman dengan pemeriksaan objektif, dan kedua pihak selalu dapat mengakhiri sengketa sendiri.
Yang diizinkan kontrak
- Setiap transaksi adalah kontrak tersendiri yang dibuat oleh factory yang tidak dapat diubah: tanpa pemilik, tanpa upgrade, tanpa jeda, dan tanpa kunci admin.
- Dana hanya bergerak karena tindakan pihak itu sendiri, atau karena putusan resolver dalam jendela waktunya:
- pembeli merilis (
release) dan penjual mengembalikan dana (refund) kapan saja setelah pendanaan sampai transaksi selesai, termasuk selama sengketa; - pembeli mengklaim pengembalian dana (
claimRefund) setelah batas pengiriman lewat tanpa pengiriman; penjual mengklaim pembayaran (claimRelease) setelah pemeriksaan berakhir tanpa penerimaan maupun sengketa; - dalam sengketa, transaksi selesai begitu usulan kedua pihak sama (
proposeSettlement), atau saat resolver memutuskan (resolve).
- pembeli merilis (
- Tidak ada tenggat yang memutuskan sengketa, dan tenggat sendiri tidak memindahkan apa pun: tenggat hanya membuka hak klaim bagi satu pihak.
- Siapa pun, termasuk ChainZap, hanya dapat mengonfirmasi pendanaan (
confirmFunding), menutup transaksi yang tidak didanai setelah tenggatnya (expire), membayarkan dana yang sudah dikreditkan ke penerimanya yang tetap (withdraw), dan mengkreditkan token yang nyasar ke pembeli (sweepExcess). Semua ini bekerja langsung pada kontrak, tanpa ChainZap. - Pembayaran hanya ke pembeli, penjual, penerima biaya yang ditetapkan di factory, dan, setelah putusannya, resolver yang ditunjuk.
Siklus
| Langkah | Siapa | Hasil |
|---|---|---|
| Draf | platform Anda, POST /v1/escrow-deals |
status: DRAFT, tautan peserta |
| Persetujuan | pembeli dan penjual, masing-masing dengan dompetnya | teks yang ditandatangani keduanya mengikat setiap ketentuan |
| Kesepakatan | otomatis setelah keduanya menandatangani | AGREED, lalu CREATING selama kontrak dibuat |
| Pendanaan | pembeli: transfer token biasa sebesar jumlah transaksi ke escrow; lalu siapa pun memanggil confirmFunding |
state: FUNDED |
| Pengiriman | penjual: markDelivered dengan hash bukti |
DELIVERED, periode pemeriksaan dimulai |
| Penerimaan | pembeli: release, atau dispute dalam periode pemeriksaan |
RELEASED atau DISPUTED |
| Diam | pembeli: claimRefund setelah batas pengiriman; penjual: claimRelease setelah pemeriksaan |
REFUNDED atau RELEASED |
| Sengketa | kedua pihak: proposeSettlement; resolver, jika ada: resolve dalam jendela waktunya |
RELEASED, REFUNDED atau SPLIT |
status adalah status draf di luar jaringan (DRAFT, AGREED, CREATING, ON_CHAIN, CANCELLED, AGREEMENT_EXPIRED, CREATION_BLOCKED); setelah kontrak dibuat, state adalah status kontrak itu sendiri (AWAITING_FUNDS, FUNDED, DELIVERED, DISPUTED, RELEASED, REFUNDED, SPLIT, EXPIRED). Jalan buntu bukan status kontrak: itu adalah sengketa yang tidak dapat lagi diputuskan resolver mana pun, dilaporkan sebagai settlement.deadlocked. Sumber kebenaran adalah jaringan: API melaporkan apa yang dibacanya dari blok yang sudah solid dan menandai contract.out_of_sync saat tidak dapat memastikan status terbaru.
Pendanaan
Pendanaan adalah transfer biasa token transaksi ke alamat escrow, tanpa izin (allowance) dan tanpa transferFrom. Setelah escrow memegang setidaknya jumlah transaksi, siapa pun dapat memanggil confirmFunding sebelum batas pendanaan; ChainZap melakukannya begitu melihat saldonya. Sampai saat itu funding melaporkan berapa yang sudah received oleh escrow dan berapa yang masih remaining, menurut pembacaan terakhir dari jaringan.
- Kurang dari jumlah. Transaksi tetap
AWAITING_FUNDS; kirim sisanya sebelum batas pendanaan.confirmFundingmenolak escrow yang memegang kurang dari jumlah. - Lebih dari jumlah, atau transfer kedua. Setelah pendanaan, kelebihannya dikreditkan ke pembeli (
sweepExcess, peristiwaescrow_deal.excess_credited) dan ditarik seperti pembayaran lain. Kelebihan tidak pernah dikunci dalam transaksi dan tidak pernah ke ChainZap. - Terlambat. Setelah batas pendanaan transaksi hanya dapat ditutup (
expire, statusEXPIRED); apa pun yang dikirim ke sana dikreditkan ke pembeli dan dapat ditarik. - Dari alamat lain. Hanya saldo escrow yang dihitung, jadi transfer dari alamat mana pun mendanai transaksi, dan setiap pengembalian atau kelebihan dikirim ke alamat pembeli dalam ketentuan, bukan ke pengirimnya.
Halaman transaksi mengirim persis sisa jumlah ke escrow yang dibacanya dari factory, dan menolak penerima, token, atau nilai lain.
Batas waktu dan klaim
| Status | Batas waktu | Yang dibukanya | Siapa yang harus bertindak |
|---|---|---|---|
AWAITING_FUNDS |
batas pendanaan | transaksi ditutup tanpa dana (EXPIRED) |
siapa pun; ChainZap melakukannya |
FUNDED |
periode pengiriman setelah pendanaan | pengembalian penuh ke pembeli | pembeli (claimRefund) |
DELIVERED |
periode pemeriksaan setelah pengiriman | pembayaran ke penjual, dikurangi biaya | penjual (claimRelease) |
DISPUTED |
jendela waktu resolver, jika ada | tidak ada: jalan buntu sampai para pihak sepakat | para pihak |
Batas waktu memakai waktu blok. Sebuah tindakan diterima hanya sebelum batas waktunya dan sebuah klaim hanya sejak batas itu, sehingga keduanya tidak pernah tumpang tindih. Klaim tidak otomatis: sampai pihak itu mengklaim, pihak lain masih dapat bertindak, misalnya pembeli masih dapat merilis setelah batas pengiriman. timeline.if_nobody_acts di setiap respons menyebutkan apa yang dibuka batas waktu saat ini: at, outcome (EXPIRED, REFUNDED, RELEASED atau DEADLOCK) dan claim_by (BUYER, SELLER, ANYONE, atau null jika tidak ada yang terbuka).
Transaksi live memberi pembeli paling sedikit 72 jam untuk memeriksa (jika tidak, 422 inspection_period_below_policy). Karena diamnya pembeli membuat penjual dapat mengklaim pembayaran, ChainZap mengingatkan pembeli lewat Telegram segera setelah pengiriman, di tengah periode pemeriksaan, 12 jam dan 1 jam sebelum berakhir; penjual diingatkan 24 dan 2 jam sebelum batas pengiriman, dan setiap pihak diberi tahu saat hak klaimnya terbuka.
Sengketa, usulan, dan jalan buntu
Pembeli dapat membuka sengketa (dispute, dengan hash bukti) hanya selama pemeriksaan. Sejak itu penjual tidak dapat mengklaim pembayaran, dan tidak ada tenggat yang memutuskan hasilnya.
- Usulan. Setiap pihak mengusulkan
buyer_amount, yaitu jumlah yang kembali ke pembeli:0memberikan semuanya ke penjual (dikurangi biaya), jumlah penuh mengembalikan semuanya ke pembeli, nilai di antaranya adalah pembagian. Setiap pihak dapat mengubah usulannya kapan saja; transaksi selesai begitu keduanya sama (settlement_reason: MUTUAL_SETTLEMENT, peristiwaescrow_deal.settlement_proposeduntuk setiap usulan).settlement.buyer_proposaldansettlement.seller_proposalmenampilkan usulan saat ini. - Resolver. Pada transaksi yang menunjuknya, resolver dapat memutuskan dalam
resolve_periodsetelah sengketa dibuka (timeline.resolve_deadline):resolve(buyer_amount, ruling_hash), hanya berdasarkan kriteria yang ditandatangani. Imbalannya diambil lebih dulu, dan putusannya adalah jumlah yang didapat pembeli dari sisanya (settlement_reason: RESOLVER). - Jalan buntu. Tanpa resolver, atau setelah jendela waktunya lewat, sengketa tanpa usulan yang sama adalah jalan buntu (
settlement.deadlocked: true). Dana tetap terkunci sampai kedua pihak mengusulkan pembagian yang sama, pembeli merilis, atau penjual mengembalikan dana. Tenggat maupun ChainZap tidak dapat mengakhirinya.
Dana
Biaya layanan adalah jumlah tetap yang ditetapkan saat draf dibuat (fee_bps dari jumlah, menurut kebijakan pilot Anda) dan hanya diambil dari pembayaran penjual:
- rilis atau klaim penjual: penjual menerima jumlah dikurangi biaya;
- pembagian: biaya dipotong sebanding dengan bagian penjual;
- pengembalian, klaim pembeli, atau kedaluwarsa: tanpa biaya.
Imbalan resolver ditetapkan dalam ketentuan dan dibayar hanya jika resolver memutuskan sengketa. Contoh: jumlah 100, imbalan resolver 5, putusan "pembeli 40": pembeli mendapat 40, resolver 5, dan penjual 55 dikurangi biaya layanan atas 55 itu. Penyelesaian dengan usulan yang sama, rilis, atau pengembalian tidak membayar resolver apa pun.
balances memisahkan yang dikreditkan kontrak (accrued), yang belum ditarik (claimable), dan yang sudah keluar dari kontrak (withdrawn), masing-masing untuk buyer, seller, fee, dan resolver. Setiap pihak membayar biaya jaringan untuk transaksinya sendiri dalam TRX; ChainZap membayar konfirmasi pendanaan, penutupan transaksi yang tidak didanai, pengkreditan kelebihan, dan pengiriman pembayaran.
Membuat draf
curl --max-time 15 https://api.chainzap.io/v1/escrow-deals \
-H 'X-API-Key: YOUR_SERVER_API_KEY' -H 'Content-Type: application/json' \
-d '{
"external_reference": "order-2026-10-0042",
"buyer": "TAHXBmAAswvxo1fx7NzQeJe234766SHwG5",
"seller": "TTogA7AhPuChVpzUEePBhPyFi8VsStSAmn",
"amount": "1250.50",
"category": "DIGITAL_GOODS",
"title": "Annual licence key",
"delivery": {
"criteria": ["The key activates on the vendor site", "The licence covers 12 months"],
"method": "Key sent through the order chat",
"evidence_required": ["Screenshot of the activation page"]
},
"timeline": {
"delivery_period_seconds": 259200,
"inspection_period_seconds": 259200
}
}'
Draf ini tanpa resolver. Untuk menunjuk resolver, tambahkan "resolver_enabled": true, resolvernya ("resolver_id", atau bawaan kebijakan Anda), imbalannya dalam satuan token, dan jendela waktunya setelah sengketa:
{
"resolver_enabled": true,
"resolver_id": "0192f0c4-6f1e-7a3b-9c2d-4e5f60718293",
"resolver_fee": "12.50",
"timeline": {
"delivery_period_seconds": 259200,
"inspection_period_seconds": 259200,
"resolve_period_seconds": 259200
}
}
Transaksi dengan resolver tanpa pengaturan ini menjawab 422 resolver_settings_required; transaksi tanpa resolver yang mengirim salah satunya menjawab 422 resolver_settings_without_resolver. Imbalan resolver tidak boleh melebihi bagian dari jumlah yang diizinkan kebijakan Anda (422 invalid_resolver_fee).
external_reference yang sama dengan isi yang sama mengembalikan draf yang sama (replayed: true); dengan isi berbeda menjawab 409 escrow_reference_conflict. Temukan draf nanti dengan POST /v1/escrow-deals/lookup. Kriteria pengiriman adalah dua sampai lima pemeriksaan objektif: sengketa hanya dinilai berdasarkan baris ini. Kategori dibatasi pada pengiriman digital dengan uji penerimaan objektif, sesuai kebijakan pilot Anda.
POST /v1/escrow-deals/{ref}/versions mengganti ketentuan draf (kirim expected_version); tanda tangan pada versi sebelumnya tidak lagi dihitung. POST /v1/escrow-deals/{ref}/cancel menutup draf. Keduanya tidak mungkin lagi setelah kedua pihak menandatangani.
Resolver
Resolver bersifat opsional. Transaksi yang memilikinya menyebut resolver eksternal yang didaftarkan platform Anda. Resolver tidak pernah ChainZap: alamatnya dan setiap kunci akun TRON-nya tidak boleh berupa alamat atau kunci ChainZap, maupun kunci pembeli atau penjual transaksi.
curl --max-time 15 https://api.chainzap.io/v1/escrow-deals/resolvers \
-H 'X-API-Key: YOUR_SERVER_API_KEY' -H 'Content-Type: application/json' \
-d '{
"address": "TJRyWwFs9wTFGZg3JbrVriFbNfCug5tDeC",
"name": "Example dispute service",
"affiliation": "INDEPENDENT",
"rules_version": "dispute-rules/2026-10",
"rules_sha256": "5f0c…64 hex characters"
}'
affiliation adalah PLATFORM (dioperasikan platform Anda) atau INDEPENDENT; para pihak melihatnya, dan bahwa platform Anda yang mendaftarkan resolver. Di live, akun dibaca on-chain: akun harus menandatangani putusan dengan satu kunci (SINGLE_KEY) atau dua dari tiga kunci yang permission aktifnya hanya boleh memanggil kontrak (MULTISIG_2_OF_3); selain itu ditolak (resolver_scheme_unsupported, resolver_account_not_activated). Di sandbox pembacaan dilakukan sebisanya; resolver yang tidak dapat menandatangani tetap terdaftar tetapi eligible: false.
GET /v1/escrow-deals/resolvers menampilkan resolver Anda dan resolver bersama; masing-masing dengan key_scheme, signatures_required, eligible, dan ineligible_reason. POST …/resolvers/{id}/verify membaca akun lagi. POST …/resolvers/{id}/disable menghentikan transaksi baru yang menyebutnya (transaksi yang sudah menyebutnya tetap memakainya); …/enable mengizinkannya lagi setelah pembacaan baru di live. Pendaftaran tidak dapat diubah: identitas resolver termasuk dalam ketentuan yang ditandatangani kedua pihak, jadi resolver lain berarti pendaftaran baru. Imbalan tidak termasuk dalam pendaftaran: setiap transaksi menetapkannya sendiri. Paling banyak 20 resolver aktif per jaringan (dan 100 pendaftaran seluruhnya); resolver organisasi lain menjawab 404 resolver_not_found. Tab escrow di portal pengembang melakukan hal yang sama.
Persetujuan
Kirim tautan transaksi dari links ke para pihak. Di halaman transaksi setiap pihak masuk dengan dompet yang disebut dalam transaksi, melihat setiap ketentuan, dan menandatangani satu teks dengan TronLink (signMessageV2). Halaman menghitung ulang hash ketentuan, ID transaksi, dan teks dari ketentuan yang ditampilkan dan tidak menawarkan tanda tangan jika ada yang berbeda. Setiap transaksi yang ditawarkan sesudahnya juga dicocokkan dengan ketentuan yang sama: alamat escrow dibaca dari registri factory, transfer hanya ke escrow itu dan hanya sebesar sisa jumlah, dan penarikan hanya ke alamat pihak yang masuk.
Untuk mengumpulkan tanda tangan di antarmuka Anda sendiri, baca GET /v1/escrow-deals/{ref}/consent: message adalah teks persisnya, params parameter kontrak, dan terms dokumen (chainzap.escrow.terms/2) yang hash JSON kanoniknya adalah terms_hash. Teruskan tanda tangan dengan POST /v1/escrow-deals/{ref}/consents (version, role, signature). Pihak yang akunnya dikendalikan kunci lain (multisig melalui permission) menyetujui on-chain (approveTerms di actions).
Kedua tanda tangan diverifikasi dua kali: oleh API, dan oleh factory, yang menyusun teks yang sama sendiri sebelum membuat kontrak. Teks menyebut resolver atau Resolver: none, dan menjelaskan arti diam dan sengketa. Berikut barisnya untuk transaksi dengan resolver, lalu tanpa resolver:
Resolver: TJRyWwFs9wTFGZg3JbrVriFbNfCug5tDeC
Resolver fee: 12.500000 USDT, paid from the escrow only if the resolver decides a dispute
Resolver period after dispute: 3d 00h 00m
If delivery is not marked in time: the buyer can claim a refund
If the buyer neither accepts nor disputes during inspection: the seller can claim payment
In a dispute: no automatic outcome; it settles when buyer and seller propose the same split, or by the resolver within its period; otherwise the funds stay locked
Resolver: none
If delivery is not marked in time: the buyer can claim a refund
If the buyer neither accepts nor disputes during inspection: the seller can claim payment
In a dispute: no automatic outcome; it settles when buyer and seller propose the same split; otherwise the funds stay locked
Transaksi para pihak
GET /v1/escrow-deals/{ref}/actions?role=BUYER mencantumkan apa yang dapat ditandatangani pihak itu sekarang. Setiap tindakan berisi kontrak, fungsi, parameter berkode ABI, batas biaya, dan perkiraan energi:
| Tindakan | Siapa | Panggilan |
|---|---|---|
TRANSFER_FUNDS |
pembeli | transfer(address,uint256) pada token: escrow dan sisa jumlah |
CONFIRM_FUNDING |
siapa pun | confirmFunding() setelah escrow memegang jumlah penuh |
MARK_DELIVERED |
penjual | markDelivered(bytes32) dengan hash bukti |
RELEASE, REFUND |
pembeli, penjual | release(), refund() |
CLAIM_REFUND, CLAIM_RELEASE |
pembeli, penjual | claimRefund() setelah batas pengiriman, claimRelease() setelah pemeriksaan |
DISPUTE |
pembeli | dispute(bytes32) selama pemeriksaan |
PROPOSE_SETTLEMENT |
pembeli, penjual | proposeSettlement(uint96); parameters kosong: Anda sendiri yang mengodekan jumlah untuk pembeli, dari 0 sampai jumlah transaksi |
EXPIRE, SWEEP_EXCESS |
siapa pun | expire() setelah batas pendanaan, sweepExcess() saat escrow memegang lebih dari utangnya |
WITHDRAW |
penerima | withdraw(address) untuk pembayaran yang dikreditkan |
Tindakan yang dapat dipanggil siapa pun dicantumkan di setiap peran pihak selama masih terbuka. Jika antarmuka Anda sendiri yang menyusun transaksi ini, lakukan pemeriksaan yang sama sebelum pengguna menandatangani: escrow adalah escrowOf(deal_id) pada factory yang disebut dalam ketentuan yang ditandatangani, dan tokennya adalah token factory itu. Setelah Anda meneruskan transaksi, laporkan dengan POST /v1/escrow-deals/{ref}/transactions; transaksi dihitung hanya setelah jaringan mengonfirmasinya, dan laporan itu sendiri tidak mengubah transaksi escrow. Laporan diterima hanya selama transaksi escrow dapat memiliki transaksi tersebut (409 action_not_available) dan paling banyak lima yang menunggu per pihak (429 too_many_pending_transactions); transaksi terkonfirmasi yang bukan panggilan itu dari pihak itu diabaikan.
Telegram
links.telegram_invite adalah tautan t.me ke bot ChainZap untuk transaksi ini; bagikan kepada para pihak bersama tautan transaksi. Bot tidak menyebut detail transaksi: bot membuka halaman transaksi di peramban, tempat semua tanda tangan dan pembayaran dilakukan, dan status transaksi di Mini App Telegram. Layar status hanya menampilkan transaksi yang ditautkan pihak dari chat pribadi setelah masuk dengan dompetnya; dari Telegram tidak ada yang dapat ditandatangani atau dikirim. Web dan Telegram menampilkan transaksi yang sama dengan id yang sama.
Bukti
POST /v1/escrow-deals/{ref}/evidence menambahkan catatan teks dan PUT /v1/escrow-deals/{ref}/evidence/files?purpose=DELIVERY&file_name=log.pdf sebuah berkas (PDF, PNG, JPEG, WebP, atau teks biasa, hingga 10 MiB). Item yang Anda tambahkan diberi label sebagai kiriman platform: item itu menunjukkan pengirimnya, bukan bahwa pengiriman terjadi. Setiap item menyimpan SHA-256, penulis, dan waktunya; pengganti adalah item baru. Saat suatu pihak menandai pengiriman atau membuka sengketa, hash kumpulan buktinya dicatat on-chain. Isi berkas dihapus setelah masa simpan; hash-nya tetap.
GET /v1/escrow-deals/{ref}/dispute mengembalikan kriteria, bukti kedua pihak, dan batas waktu sengketa.
Peristiwa dan webhook
Setiap perubahan menjadi peristiwa: escrow_deal.created, terms_updated, consent_received, agreed, cancelled, agreement_expired, creation_blocked, contract_created, funded, delivered, disputed, settlement_proposed, settled, excess_credited, payout_withdrawn, dan evidence_added. Pengingat batas waktu dikirim ke para pihak lewat Telegram, bukan ke webhook.
Atur satu endpoint per lingkungan dengan PUT /v1/escrow-deals/webhook ({"url": "https://..."}); respons menampilkan rahasia penandatanganan satu kali. Endpoint harus HTTPS di port 443 pada alamat publik; pengalihan tidak diikuti. Setiap pengiriman adalah POST dengan:
| Header | Arti |
|---|---|
X-ChainZap-Event-Id |
peristiwanya, sama pada setiap percobaan ulang |
X-ChainZap-Delivery-Id |
rangkaian percobaan pengiriman ini |
X-ChainZap-Timestamp |
detik Unix saat ditandatangani |
X-ChainZap-Signature |
v1= HMAC-SHA256 dari {timestamp}.{delivery_id}.{body} dengan rahasia Anda |
import hashlib, hmac, time
def verify(secret: str, headers: dict, body: bytes) -> bool:
timestamp = int(headers["X-ChainZap-Timestamp"])
if abs(time.time() - timestamp) > 300:
return False
message = f"{timestamp}.{headers['X-ChainZap-Delivery-Id']}.".encode() + body
expected = "v1=" + hmac.new(secret.encode(), message, hashlib.sha256).hexdigest()
return hmac.compare_digest(expected, headers["X-ChainZap-Signature"])
Jawab 2xx dalam 10 detik. Pengiriman yang gagal diulang dengan jeda yang makin panjang (30 detik hingga 12 jam, 12 percobaan). Pengiriman terjadi setidaknya sekali dan tidak berurutan: hapus duplikat berdasarkan X-ChainZap-Event-Id dan urutkan dengan sequence. GET /v1/escrow-deals/events?after=<sequence> adalah feed lengkap untuk menyusul setelah gangguan; POST /v1/escrow-deals/events/{event_id}/redeliver mengirim satu peristiwa lagi, POST /v1/escrow-deals/webhook/test mengirim escrow.ping bertanda tangan, POST /v1/escrow-deals/webhook/rotate-secret mengganti rahasia, dan DELETE /v1/escrow-deals/webhook menghentikan pengiriman.
Yang berubah di protokol v2
Transaksi baru memakai kontrak dan ketentuan versi 2. Jika Anda sudah berintegrasi dengan versi pilot pertama:
- Permintaan draf.
dispute_enabledkini menjadiresolver_enabled: setiap transaksi dapat disengketakan, hanya resolver yang opsional. Dengan resolver, kirimresolver_id,resolver_fee, dantimeline.resolve_period_seconds.timeline.response_period_secondsdantimeout_outcomedihapus: tidak ada lagi jendela tanggapan penjual maupun hasil sengketa karena tenggat. - Respons transaksi. Baru:
protocol_version,resolver.fee,timeline.resolve_deadline,settlement(usulan dandeadlocked, selama sengketa),funding(selama menunggu dana), danresolverdibalances.accrued,claimable, danwithdrawn.timeline.if_nobody_actskini{at, outcome, claim_by}. Dihapus:dispute_enabled,timeline.response_period_seconds,timeline.seller_response_deadline, dantimeline.seller_responded.settlement_reasondapat bernilaiMUTUAL_SETTLEMENT;TIMEOUT_NO_RULINGhanya muncul pada transaksi arsip. - Pendanaan dan batas waktu. Pendanaan adalah transfer langsung dan
confirmFunding, bukan izin danfund. Setelah batas pengiriman atau pemeriksaan, pembeli atau penjual mengklaim dananya; tidak ada yang selesai karena tenggat. - Tindakan. Baru:
TRANSFER_FUNDS,CONFIRM_FUNDING,CLAIM_REFUND,CLAIM_RELEASE,PROPOSE_SETTLEMENT,EXPIRE, danSWEEP_EXCESS. Dihapus:APPROVE_TOKEN,FUND,RESPOND,PROCESS_TIMEOUT, danCREDIT_EXCESS. - Peristiwa. Baru:
escrow_deal.settlement_proposeddanescrow_deal.excess_credited. Dihapus:escrow_deal.seller_responded. - Ketentuan.
chainzap.escrow.terms/2menambahkanrules: "chainzap.escrow.rules/2"danresolver.fee, serta menghapustimeout_outcomedantimeline.response_period. - Kesalahan. Baru:
resolver_settings_required,resolver_settings_without_resolver,invalid_resolver_fee, daninvalid_buyer_amount. Dihapus:invalid_simple_deal,dispute_settings_required,dispute_settings_without_disputes,disputes_disabled, daninvalid_timeout_outcome.
Transaksi yang dibuat sebelum versi 2 tetap protocol_version: 1. Transaksi itu diarsipkan: API dan halaman transaksi menampilkannya hanya baca dari catatan ChainZap, dan tidak ada tindakan apa pun atasnya.
Kesalahan
| Kode | Kapan |
|---|---|
403 escrow_not_enabled |
transaksi escrow nonaktif untuk organisasi atau lingkungan ini |
403 participant_not_allowed |
pihak live tidak ada dalam daftar pilot Anda |
422 participant_screening_failed |
alamat salah satu pihak tidak lolos pemeriksaan; di live, 503 screening_unavailable saat daftar tidak dapat diperiksa |
422 deal_amount_above_pilot_cap, 409 pilot_volume_cap_reached |
transaksi melebihi batas pilot Anda |
422 category_not_enabled, 422 resolver_not_available, 422 resolver_not_verified |
kategori atau resolver tidak tersedia |
422 inspection_period_below_policy, 422 resolve_period_below_policy, 422 invalid_period |
suatu periode lebih pendek dari yang diizinkan kebijakan Anda atau di luar batas factory |
422 resolver_settings_required, 422 resolver_settings_without_resolver |
pengaturan resolver tidak sesuai dengan resolver_enabled |
422 invalid_resolver_fee |
imbalan resolver melebihi bagian yang diizinkan kebijakan Anda, atau diatur tanpa resolver |
422 resolver_is_chainzap, 422 resolver_is_party, 422 resolver_scheme_unsupported, 422 resolver_account_not_activated |
resolver tidak dapat didaftarkan atau disebut |
409 resolver_already_registered, 409 resolver_limit_reached, 404 resolver_not_found |
pendaftaran resolver |
422 invalid_consent_signature |
tanda tangan tidak cocok dengan pihak dan ketentuan ini |
409 terms_version_conflict, 409 escrow_terms_locked |
ketentuan berubah, atau tidak dapat diubah lagi |
409 agreement_expired |
waktu untuk menandatangani sudah habis |
409 action_not_available, 429 too_many_pending_transactions |
transaksi yang dilaporkan tidak mungkin saat ini, atau terlalu banyak yang masih menunggu |
404 escrow_not_found |
tidak ada transaksi seperti itu di organisasi dan lingkungan ini |
Semua kesalahan memakai format umum. Permintaan escrow dibatasi 16 KiB JSON; berkas bukti 10 MiB.
Sandbox
Kunci sandbox bekerja di jaringan uji TRON Nile dengan token uji berlabel "ChainZap TEST USD (NO VALUE)". Alur, halaman, dan webhook sama seperti live, dan kebijakan sandbox dapat mengizinkan periode pemeriksaan yang lebih pendek untuk mencoba alurnya; dana nyata tidak mungkin terlibat. Transaksi live memakai USDT di mainnet TRON hanya untuk organisasi pilot, dengan daftar peserta yang diizinkan serta batas per transaksi dan total.
GET /v1/usage
Permintaan
curl --include --max-time 15 'https://api.chainzap.io/v1/usage?days=30' \
-H 'X-API-Key: cz_live_000000000000.fictional_example_only' \
-H 'X-Request-ID: merchant-usage-1001'
days adalah bilangan bulat 1 sampai 90; nilai bawaannya 30. Pembacaan ini tidak memerlukan kunci idempotensi. Baca header respons X-Request-ID. Permintaan penggunaan terkena batas laju, tetapi tidak memakai pemeriksaan. Ulangi hanya galat bertanda retryable dan patuhi Retry-After.
Kuota periode berjalan
period.start dan period.end menandai periode penagihan saat ini: periode berbayar yang berjangkar pada pembayaran yang dikonfirmasi, atau bulan kalender UTC untuk organisasi tanpa paket berbayar.
| Kolom | Arti |
|---|---|
limit |
Pemeriksaan termasuk untuk periode ini. |
used |
Pemeriksaan selesai yang sudah ditagih. |
reserved |
Pemeriksaan yang masih berjalan dan menahan reservasi. |
remaining |
max(0, limit - used - reserved). |
Reservasi dilepaskan ketika permintaan selesai tanpa tagihan. balances menambahkan pemeriksaan tambahan dan total yang tersedia; subscription menjelaskan periode berbayar; status: "legacy" dengan plan: null berarti batas organisasi Anda ditetapkan melalui kesepakatan (misalnya kontrak pilot), bukan melalui paket swalayan, dan batas yang ditampilkan adalah yang berlaku. Lihat paket dan pembayaran. environment bernilai live atau sandbox, bergantung pada kuncinya. Semua kunci API organisasi dan permintaan dari dasbor pengembang memakai kuota yang sama.
Statistik jendela pilihan
recent menghitung pemeriksaan logis yang selesai dalam jendela bergulir sepanjang days hari. Replay HTTP idempoten bukan catatan pemeriksaan baru. Statistik ini mencakup jumlah pemeriksaan yang ditagih, galat, dan LIMITED_DATA, latensi rata-rata, jaringan, serta distribusi penilaian keseluruhan. Tidak ada hash transaksi atau rincian penyedia di dalamnya.
Dasbor pengembang menambahkan data harian UTC, penghitung 1/7/30 hari, dan latensi p50/p95 jika terdapat setidaknya 20 sampel latensi selesai dalam 30 hari terakhir. Jumlah respons berhasil mencakup respons dengan cakupan parsial; cakupan terbatas adalah bagian dari total, bukan tambahan terpisah.
Grafik penggunaan membandingkan permintaan selesai dengan pemeriksaan yang ditagih selama 7, 30, atau 90 hari. Arahkan penunjuk, sentuh grafik, atau pilih hari dengan penggeser dan tombol panah untuk melihat angka pastinya. Hari tanpa pemeriksaan ditampilkan sebagai nol; hari UTC pertama dan terakhir mungkin belum penuh. Live dan Sandbox ditampilkan terpisah. Tabel harian dapat dibuka di bawah grafik. Bilah kuota menampilkan pemeriksaan yang termasuk dalam periode penagihan saat ini; paket tambahan tercantum di Paket dan pembayaran.
Dasbor pengembang dan paket
Setelah masuk ke dasbor pengembang, buka /dashboard/usage/ untuk penghitung kuota, tabel harian, distribusi hasil, dan statistik latensi. /dashboard/plan/ menampilkan paket saat ini, kuota bulanan, permintaan per menit, dan batas permintaan bersamaan. Jaringan yang tercakup paket ditampilkan terpisah dari jaringan yang saat ini diaktifkan untuk pemeriksaan; status aktif bukan pemeriksaan kesehatan penyedia secara langsung.
Bagian Uji API menerima deteksi jaringan otomatis atau pilihan eksplisit TRON, Ethereum, atau TON dari jaringan yang tersedia bagi Anda. Pemeriksaannya memakai kuota organisasi dan aturan idempotensi yang sama dengan API server.
Paket dan paket pemeriksaan tambahan dibeli di halaman Paket dan pembayaran; lihat paket dan pembayaran. Perpanjangan dilakukan manual: tidak ada penagihan otomatis, faktur, atau dompet API. Langganan konsumen Mini App tidak memberikan kuota B2B API. Dokumentasi publik tersedia tanpa perlu masuk.
Paket, pemeriksaan, dan pembayaran (beta)
Apa yang ditagih
Pemeriksaan adalah satu pemeriksaan transaksi melalui API. Anda hanya membayar pemeriksaan yang lengkap dan final: respons dengan coverage: complete dan status CLEAR, REVIEW, atau HIGH_RISK untuk transaksi yang sudah terkonfirmasi melewati kebijakan finalitasnya atau gagal secara permanen. Hasil berisiko tetap hasil yang berguna dan ditagih. Transaksi yang tertunda, transaksi yang tidak ditemukan, LIMITED_DATA, galat transport, waktu habis, galat kuota, dan replay idempoten tidak ditagih di kedua endpoint; reservasinya dilepaskan. Respons HTTP yang berhasil tidak sama dengan pemeriksaan yang ditagih.
Paket beta (kebijakan harga BETA_PRICING_V0)
Paket memberi organisasi Anda sejumlah pemeriksaan termasuk per periode penagihan.
| Paket | Per bulan | Pemeriksaan termasuk | Pemeriksaan tambahan |
|---|---|---|---|
| Sandbox | gratis | 50 pemeriksaan uji per bulan UTC | tidak dijual |
| Starter | $99 | 250 | $0,40 |
| Growth | $299 | 1.000 | $0,30 |
| Business | $999 | 5.000 | $0,20 |
| Scale | individual | individual | individual |
Harga dalam dolar AS. GET /v1/catalog memublikasikannya dalam satuan terkecil bulat (sen). Ini ketentuan beta sementara dan dapat berubah untuk periode penagihan mendatang; pesanan atau periode penagihan yang sudah dibayar mempertahankan ketentuan saat dijual. Batas laju permintaan dan konkurensi bersifat sementara sampai peluncuran umum. Scale disepakati secara individual dan tidak dijual online.
curl --max-time 15 https://api.chainzap.io/v1/catalog \
-H 'X-API-Key: cz_live_000000000000.fictional_example_only'
Periode penagihan dan perpanjangan
Periode penagihan berbayar dimulai saat pembayaran dikonfirmasi di server dan berlangsung satu bulan kalender (31 Januari berakhir 28 atau 29 Februari; tanggal jangkar kembali setelahnya). Perpanjangan dilakukan manual: tidak ada penagihan otomatis. Membayar lebih awal menjadwalkan periode penagihan berikutnya mulai saat periode berjalan berakhir; membayar setelah jeda memulai periode penagihan baru segera. Paket yang berbeda berlaku mulai periode penagihan berikutnya; periode berbayar yang berjalan tidak pernah direset. Pemeriksaan termasuk tidak dibawa ke periode berikutnya.
Paket pemeriksaan tambahan
Paket pemeriksaan tambahan menambah pemeriksaan di atas pemeriksaan termasuk. Satu paket berisi 100 sampai 10.000 pemeriksaan dengan kelipatan 50 dan dihargai sesuai harga pemeriksaan tambahan paket Anda saat ini. Pemeriksaan tambahan berlaku 12 bulan sejak pembelian, dipakai hanya setelah pemeriksaan termasuk, dan hanya dapat dipakai selama paket berbayar aktif. Saat paket tidak aktif, pemeriksaan tambahan dibekukan, bukan hilang. Harga tetap saat pembelian dan tidak dihitung ulang oleh perubahan katalog di kemudian hari.
Pembayaran
Pembelian dilakukan di dasbor pengembang oleh anggota dengan peran owner, admin, dan billing, tidak pernah dengan kunci API. Pembayaran menggunakan kripto. Periksa total lalu pilih Bayar dengan kripto: halaman pembayaran terbuka, tempat Anda membayar total persis dalam USDT atau koin lain yang tersedia di sana. Total tetap dalam dolar AS, dan halaman tersebut bisa dibayar selama masa berlaku pesanan, minimal 15 menit. Jika Anda meninggalkannya, pesanan di halaman Paket dan pembayaran membawa Anda kembali ke pembayaran atau membatalkan pesanan. Pemeriksaan diberikan hanya setelah server mengonfirmasi pembayaran langsung ke penyedia pembayaran: respons dompet, tangkapan layar, atau kembali ke portal tidak memberikan apa pun. Halaman pembayaran tidak dapat ditarik, jadi dana yang dikirim setelah pesanan dibatalkan atau kedaluwarsa tetap dikreditkan bila masih dapat diterapkan, dan ditinjau dukungan bila tidak. Pembayaran ganda atau parsial dicatat dan ditinjau dukungan; tidak pernah diberikan dua kali.
Saldo di API
curl --max-time 15 'https://api.chainzap.io/v1/usage?days=7' \
-H 'X-API-Key: cz_live_000000000000.fictional_example_only' | jq '.balances, .subscription'
period.remaining tetap berarti sisa pemeriksaan termasuk pada periode penagihan saat ini. balances.extra menunjukkan pemeriksaan tambahan, balances.total_available menunjukkan total yang dapat dipakai pemeriksaan baru, dan balances.included.reserved menunjukkan pemeriksaan yang masih berjalan. subscription melaporkan periode penagihan, paket, dan perpanjangan manual. Header X-Quota-Available membawa total tersebut pada respons pemeriksaan. Saldo tidak membatalkan organisasi yang ditangguhkan, jaringan yang tidak diaktifkan, atau paket yang tidak aktif: 429 quota_exceeded dikembalikan ketika tidak ada yang tersedia.
Pengembalian dana dan sengketa
Dukungan menangani pengembalian dana kasus per kasus dan mencatatnya sebagai peristiwa terpisah: sisa alokasi yang belum dipakai dibalik, pemeriksaan yang sudah dipakai tidak ditarik kembali, dan saldo tersedia tidak pernah negatif.
Sandbox
Kunci sandbox diawali cz_test_. Kunci ini dibuat di dasbor pengembang atau oleh operator organisasi Anda. Kunci sandbox memanggil endpoint yang sama dengan skema permintaan dan respons yang sama, tetapi tidak pernah menjangkau penyedia data, tidak berbiaya, dan tidak menyentuh pemeriksaan berbayar Anda. Setiap respons sandbox yang berhasil membawa environment: "sandbox", begitu pula setiap galat yang dikembalikan oleh pemeriksaan itu sendiri (misalnya provider_unavailable, network_not_enabled, kuota, dan batas laju): jadikan kolom itu dasar percabangan. Penolakan sebelum pemeriksaan dimulai (401, 403 tenant_suspended, 503 api_disabled, batas 429 per IP yang berlaku sebelum kunci dibaca, 413, 415, galat validasi permintaan 422, invalid_idempotency_key) tidak membawa environment, dan 500 atau 504 yang tidak terduga mungkin tidak membawanya; di sana kunci yang Anda kirim menentukan lingkungannya. POST /v1/check dan pemeriksaan dompet juga membawa details.evidence.source: "sandbox"; POST /v1/transaction/check tidak memiliki details, dan item buktinya menyebut peran sumber yang sama seperti jawaban live, sehingga andalkan environment. Perlakukan hasil tersebut sebagai fixture, bukan pengamatan. Setiap fixture menjelaskan dirinya dengan reason_codes yang sama seperti mesin live, sehingga cabang yang Anda tulis untuk sandbox adalah cabang yang dijalankan produksi.
Hasil deterministik
Karakter pertama hash transaksi menentukan hasil, sehingga setiap status dapat diuji dengan sengaja:
| Karakter heksa pertama | Hasil |
|---|---|
0–3, c, f |
CLEAR, cakupan lengkap |
4–5 |
REVIEW, cakupan lengkap |
6 |
HIGH_RISK karena tingkat AML tinggi, cakupan lengkap |
7 |
HIGH_RISK karena kecocokan sanksi (sanctions_hit: true), cakupan lengkap |
8–9 |
LIMITED_DATA, cakupan parsial, tidak ditagih |
a |
transaksi tidak ditemukan, seperti di lingkungan live: transaction_status: NOT_FOUND, dapat diulang, tidak ditagih; /v1/check menjawab 404 transaction_not_found |
b |
gangguan penyedia (503 provider_unavailable), tidak ditagih |
d |
transaksi gagal (revert): transaction_status: FAILED, recommended_action: NOT_EXECUTED, kolom *_match bernilai null; final, sehingga ditagih seperti transaksi gagal live |
e |
transaksi tertunda: REVIEW dengan TX_PENDING_CONFIRMATIONS, cakupan lengkap, tidak ditagih |
Sandbox hanya membuat tiruan dari apa yang akan dikembalikan penyedia. Perbandingan dengan nilai yang Anda harapkan, sumbu status, item bukti, dan alasan berasal dari mesin live, sehingga jawaban sandbox memiliki bentuk dan aturan yang sama dengan jawaban live, termasuk kolom kontrak 0.3. Jika buku besar kewajiban aktif, pemeriksaan, kewajiban, dan batch sandbox dicatat dalam buku besar sandbox yang terpisah dari buku besar live.
curl --max-time 15 https://api.chainzap.io/v1/check \
-H 'X-API-Key: cz_test_000000000000.fictional_example_only' \
-H 'Idempotency-Key: sandbox-demo-1' -H 'Content-Type: application/json' \
--data '{"tx_hash":"8111111111111111111111111111111111111111111111111111111111111111"}'
Tanpa network, sandbox menjawab untuk TRON bila TRON diaktifkan untuk organisasi Anda, dan bila tidak, untuk jaringan pertama yang Anda miliki. Sama seperti penentuan jaringan live, bentuk hash (0x, base64) tidak pernah memilih jaringan. Kirim network secara eksplisit untuk mengetahui apakah jaringan aktif: sandbox menjawab 403 network_not_enabled persis seperti lingkungan live. Hash TON base64 memakai empat bit teratas dari byte pertama.
Jatah dan isolasi
Sandbox memakai jatahnya persis untuk apa yang ditagih pada pemeriksaan live: hasil yang lengkap dan final. Hasil tertunda, hasil parsial, transaksi yang tidak ditemukan, dan fixture gangguan tidak berbiaya, sama seperti di produksi; fixture transaksi gagal (d) bersifat final dan ditagih, seperti transaksi gagal live. Jika organisasi Anda memakai kontrak pilot, kunci sandbox ditolak dengan cara yang sama seperti kunci live (expected_fields_required, token_not_enabled, check_kind_not_enabled). expected_recipient, expected_token, dan expected_amount dibandingkan dengan fixture dan ketidakcocokan tidak pernah menghasilkan CLEAR, sehingga cabang yang Anda uji adalah cabang yang dijalankan produksi; digit bukan nol di luar decimals token menghasilkan 422 invalid_expected_amount, sama seperti pada pemeriksaan live. Pemeriksaan sandbox memakai jatah terpisah 50 pemeriksaan uji per bulan kalender UTC; GET /v1/usage dengan kunci sandbox melaporkan jatah itu dengan environment: "sandbox". Kunci idempotensi, kuota, dan statistik terpisah per lingkungan: Idempotency-Key yang sama di sandbox dan di lingkungan live adalah dua operasi berbeda. Kunci sandbox tidak dapat membeli apa pun dan tidak membuktikan bahwa jaringan live diaktifkan untuk organisasi Anda.
Fixture dompet
Untuk POST /v1/wallet/check, sandbox memilih hasil dari hash alamat yang dinormalisasi, sehingga tidak dapat diarahkan lewat karakter pertama. Gunakan salah satu alamat tetap di bawah ini; setiap baris stabil antar rilis dan diperiksa oleh rangkaian pengujian.
| Hasil | Keterangan |
|---|---|
clear |
CLEAR, cakupan lengkap, ditagih |
review |
REVIEW dari perilaku, cakupan lengkap, ditagih |
high_risk_denylist |
HIGH_RISK dari kecocokan daftar hitam, cakupan lengkap, ditagih |
high_risk_sanctions |
HIGH_RISK dari kecocokan sanksi, cakupan lengkap, ditagih |
limited_data |
LIMITED_DATA, cakupan sebagian, tidak ditagih |
review_partial |
REVIEW dengan paparan tidak langsung dan penyaringan pihak lawan sebagian, ditagih |
provider_unavailable |
503 provider_unavailable, tidak ditagih |
| Hasil | Ethereum | TRON | TON |
|---|---|---|---|
| clear | 0xc933ee607c865f6fbc6222330dc9166e1cc6d64f |
TPkD2p19tKyRxAyRFyFdAc5vdPifpmtUfc |
0:ad4ab97d14757696f1af317e613adc31b296e683ad1795880c8c906de6daf327 |
| review | 0x0aa8246d9ace486edb4cb7600ac6d40c3c8f884b |
TBBBSYtDqb7szRTcJ9YW4AdrEFTz7a9pvi |
0:fa057a9368fb5432944e6c874d1f92e8a1cd893f88e6f18a868c08a3bf7dc885 |
| high_risk_denylist | 0x1e799ef4c436f1e576f1cf40fb3655ca7e87cd4a |
TZBCVU6RLDLhvJoJUPksGjGMdFh7LngTXy |
0:0ab976607b5b1f1b384b6fe79521bfc2d11a868b2b2ed38e118cc5f1e3e63990 |
| high_risk_sanctions | 0x88c967e52185aef0263776a7efa1521c66a88547 |
TEs2fpP1TLoCwjAwxmwZz7sZVdwrWrKdRQ |
0:bf24aaea2aa3bdd5d48c68ba1cbb7869a50fa2b39b7ed6e2c3c9aec437330461 |
| limited_data | 0x9c689365b5e78b2bab2d1b0f4e0734540fb719f1 |
TFFXvwH4owR9bDNg3g3MG8K1a9mX8PurXm |
0:b5c1220a9967b961b34ff54e836ef02f0942c2b5597c559129b3e5fcfc83dfaa |
| review_partial | 0x5629d9db95999852cb0c0b4e9afd057800800cfb |
TB7fLLjaJqubgudHK5d7mQ754sAds3qsB7 |
0:ecf8f65ba4afdd1da26b0774b59b688907accdaf5e2ae4ef47ad4a3014fc2c2b |
| provider_unavailable | 0xf60ca8315084bc9b55a2f4026d8856f1170ef8db |
TAy5XDN27LLL2eoBbQcota2a3YD9iHc3MT |
0:a765cd5463fe92dbf3e928978ec5c8e04003ae8589d5116fa5a17c1a0507b259 |
Setiap fixture dompet membawa environment: "sandbox" dan details.evidence.source: "sandbox", menjelaskan dirinya dengan kode alasan yang sama seperti mesin live, dan menghabiskan jatah sandbox persis seperti pemeriksaan dompet live menghabiskan kuota: saat sebuah status dihasilkan.
Contoh integrasi
Contoh pengulangan dan fixture respons di bawah menggunakan endpoint kanonis kontrak 0.3 POST /v1/transaction/check dengan jaringan eksplisit. Untuk permintaan singkat /v1/check dan respons ringkasnya, lihat pemeriksaan satu hash. Kedua endpoint memakai aturan pengulangan dan kuota yang sama.
Respons HTTP berhasil harus dinilai pada sumbu terpisah: verification_final dengan integrity_status untuk perbandingan pembayaran; risk_status, risk_final, dan recommended_action untuk risiko serta tindakan. Pending tidak pernah berarti MATCH; MATCH final dengan KYT tidak memadai memerlukan MANUAL_REVIEW. Pengulangan risiko memakai risk_retryable dan risk_retry_after_seconds, bukan retryable verifikasi. Lihat sumbu status.
Python: pengulangan idempoten
Contoh sisi server ini menggunakan httpx. Kuncinya fiktif. Dalam integrasi sebenarnya, muat kunci API dari penyimpanan rahasia server dan simpan operation_key serta body dalam catatan operasi Anda sendiri sebelum percobaan pertama. Setelah proses dimulai ulang, gunakan kembali keduanya.
import random
import time
import httpx
api_key = "cz_live_000000000000.fictional_example_only"
operation_key = "merchant-order-1001-check-1"
body = {
"network": "tron", "tx_hash": "a" * 64,
"expected_recipient": "TJRabPrwbZy45sbavfcjinPJC18kjpRTv8",
"expected_token": "TR7NHqjeKQxGTCi8q8ZY4pL8otSzgjLj6t",
"expected_amount": "1250.000001",
}
def check():
with httpx.Client(timeout=15, follow_redirects=False) as client:
for attempt in range(4):
try:
response = client.post(
"https://api.chainzap.io/v1/transaction/check",
headers={
"X-API-Key": api_key,
"Idempotency-Key": operation_key,
"X-Request-ID": f"order-1001-attempt-{attempt + 1}",
},
json=body,
)
except httpx.TransportError:
if attempt == 3:
raise RuntimeError("unresolved_transport_outcome") from None
time.sleep(2 ** attempt + random.uniform(0, 1))
continue
print("X-Request-ID:", response.headers.get("X-Request-ID"))
try:
result = response.json()
except ValueError:
raise RuntimeError("unresolved_gateway_response") from None
if response.is_success:
return result
error = result.get("error", {})
if error.get("retryable") is not True:
raise RuntimeError(error.get("code", "unresolved_response"))
if response.headers.get("Idempotent-Replayed") == "true":
raise RuntimeError("stored_error_requires_reconciliation")
try:
instructed = int(response.headers.get("Retry-After", "0"))
except ValueError:
raise RuntimeError("invalid_retry_after") from None
delay = max(instructed, 2 ** attempt) + random.uniform(0, 1)
if attempt == 3 or delay > 30:
raise RuntimeError("schedule_retry_with_same_operation_key")
time.sleep(delay)
Loop ini menangani respons 409/429/503/504 yang dapat diulang dan ketidakpastian jaringan tanpa membuat operasi logis lain. Tangani status bisnis yang dikembalikan sesuai alur kerja pembayaran Anda. Jangan mencatat body atau seluruh hasil dalam log.
JavaScript / TypeScript: permintaan dari server
Gunakan kode ini di server Anda, tidak pernah di browser dengan kunci live. Kunci operasi dan isi permintaan harus disimpan sebelum memanggil fungsi, seperti pada contoh Python.
type PublicResult = {
request_id?: string;
error?: { code: string; message: string; retryable: boolean };
[field: string]: unknown;
};
const apiKey = "cz_live_000000000000.fictional_example_only";
const operationKey = "merchant-order-1001-check-1";
const body = {
network: "tron", tx_hash: "a".repeat(64),
expected_recipient: "TJRabPrwbZy45sbavfcjinPJC18kjpRTv8",
expected_token: "TR7NHqjeKQxGTCi8q8ZY4pL8otSzgjLj6t",
expected_amount: "1250.000001",
};
const wait = (ms: number) => new Promise(resolve => setTimeout(resolve, ms));
async function check(): Promise<PublicResult> {
for (let attempt = 0; attempt < 4; attempt++) {
let response: Response;
try {
response = await fetch("https://api.chainzap.io/v1/transaction/check", {
method: "POST", redirect: "error", signal: AbortSignal.timeout(15000),
headers: {
"Content-Type": "application/json", "X-API-Key": apiKey,
"Idempotency-Key": operationKey,
"X-Request-ID": `order-1001-attempt-${attempt + 1}`,
},
body: JSON.stringify(body),
});
} catch {
if (attempt === 3) throw new Error("unresolved_transport_outcome");
await wait((2 ** attempt + Math.random()) * 1000);
continue;
}
console.info("X-Request-ID:", response.headers.get("X-Request-ID"));
const result = await response.json() as PublicResult;
if (response.ok) return result;
if (result.error?.retryable !== true) {
throw new Error(result.error?.code ?? "unresolved_response");
}
if (response.headers.get("Idempotent-Replayed") === "true") {
throw new Error("stored_error_requires_reconciliation");
}
const instructed = Number(response.headers.get("Retry-After") ?? "0");
if (!Number.isFinite(instructed) || instructed < 0) {
throw new Error("invalid_retry_after");
}
const delay = Math.max(instructed, 2 ** attempt) + Math.random();
if (attempt === 3 || delay > 30) {
throw new Error("schedule_retry_with_same_operation_key");
}
await wait(delay * 1000);
}
throw new Error("retry_budget_exhausted");
}
Skenario respons
Fixture sintetis berikut menggambarkan bentuk respons yang valid, bukan pemeriksaan langsung. Setiap contoh memiliki header X-Request-ID yang sama dengan request_id. Periksa nilai null dan cakupan, selain penilaian keseluruhan.
Transaksi terkonfirmasi
Lihat respons JSON lengkap
{
"request_id": "example-confirmed",
"tx_hash": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
"network": "tron",
"transaction_type": "TriggerSmartContract",
"transaction_category": "trc20_transfer",
"transaction_state": "confirmed",
"confirmations": 27,
"required_confirmations": 19,
"sender": "TF17BgPaZYbz8oxbjhriubPDsA7ArKoLX3",
"recipient": "TJRabPrwbZy45sbavfcjinPJC18kjpRTv8",
"token_contract": "TR7NHqjeKQxGTCi8q8ZY4pL8otSzgjLj6t",
"token_symbol": "USDT",
"decimals": 6,
"amount": "1250.000001",
"transfers": [
{
"index": 0,
"asset_type": "trc20",
"sender": "TF17BgPaZYbz8oxbjhriubPDsA7ArKoLX3",
"recipient": "TJRabPrwbZy45sbavfcjinPJC18kjpRTv8",
"token_contract": "TR7NHqjeKQxGTCi8q8ZY4pL8otSzgjLj6t",
"token_id": null,
"token_symbol": "USDT",
"decimals": 6,
"amount": "1250.000001",
"event_ref": "log:0",
"execution_status": "success"
}
],
"transfers_truncated": false,
"aml_risk_level": "low",
"schema_version": "0.3",
"policy_version": "b2b-tx-2026-10.4",
"sanctions_hit": false,
"direct_sanctions_match": false,
"indirect_sanctions_exposure": false,
"risk_exposure": false,
"key_exposure": [],
"token_authenticity": "official",
"recipient_match": true,
"token_match": true,
"amount_match": true,
"coverage": "complete",
"workflow_coverage": "complete",
"source_coverage": {
"sanctions_sources": {
"ofac": {
"status": "checked",
"checked_at": "2026-10-10T09:00:00Z",
"retrieved_at": "2026-10-10T09:00:00Z",
"data_updated_at": null,
"stale_after_seconds": 172800,
"scope": "configured_address_index",
"error_code": null
},
"eu": {
"status": "checked",
"checked_at": "2026-10-10T09:00:00Z",
"retrieved_at": "2026-10-02T23:49:24Z",
"data_updated_at": "2026-09-22T18:01:34Z",
"stale_after_seconds": 3024000,
"scope": "configured_address_index",
"error_code": null
},
"uk": {
"status": "checked",
"checked_at": "2026-10-10T09:00:00Z",
"retrieved_at": "2026-10-02T23:47:32Z",
"data_updated_at": "2026-10-02T00:00:00Z",
"stale_after_seconds": 3024000,
"scope": "configured_address_index",
"error_code": null
},
"un": {
"status": "not_applicable",
"checked_at": null,
"retrieved_at": null,
"data_updated_at": null,
"stale_after_seconds": null,
"scope": "configured_address_index",
"error_code": null
}
},
"transaction_sources": {
"chain_explorer": {
"status": "checked",
"checked_at": "2026-10-10T09:00:00Z",
"retrieved_at": "2026-10-10T09:00:00Z",
"data_updated_at": null,
"stale_after_seconds": null,
"scope": "transaction_facts",
"error_code": null
},
"chain_node": {
"status": "checked",
"checked_at": "2026-10-10T09:00:00Z",
"retrieved_at": "2026-10-10T09:00:00Z",
"data_updated_at": null,
"stale_after_seconds": null,
"scope": "transaction_facts",
"error_code": null
}
},
"risk_sources": {
"aml_provider": {
"status": "checked_freshness_unknown",
"checked_at": "2026-10-10T09:00:00Z",
"retrieved_at": "2026-10-10T09:00:00Z",
"data_updated_at": null,
"stale_after_seconds": null,
"scope": "transaction_risk_score",
"error_code": null
}
},
"universal_clearance": false
},
"freshness": {
"checked_at": "2026-10-10T09:00:00Z",
"transaction_at": "2026-10-10T09:00:00Z",
"risk_data_at": "2026-10-10T09:00:00Z",
"token_data_at": "2026-10-10T09:00:00Z",
"max_source_age_seconds": 0
},
"overall_state": "CLEAR",
"environment": "live",
"reasons": [
{
"code": "TX_FACTS_VERIFIED",
"category": "transaction",
"severity": "info"
},
{
"code": "TX_FINALIZED",
"category": "transaction",
"severity": "info"
},
{
"code": "AML_LOW",
"category": "risk",
"severity": "info"
},
{
"code": "NO_DIRECT_SANCTIONS_MATCH",
"category": "sanctions",
"severity": "info"
},
{
"code": "TOKEN_OFFICIAL",
"category": "token",
"severity": "info"
}
],
"decision_id": null,
"direction": null,
"workflow_type": null,
"versions": {
"decision": "b2b-tx-2026-10.4",
"rules": {
"exposure": "b2b-exp-v2",
"sanctions_freshness": "sf-v1",
"billing": "final_answers_only",
"integrity": "int-v3",
"reuse": "reuse-v1",
"allocation": "alloc-v1"
},
"reason_codes": "rc-1",
"evidence_schema": "ev-1",
"contract": "0.3"
},
"transaction_status": "CONFIRMED",
"integrity_status": "MATCH",
"risk_status": "NO_MATERIAL_SIGNAL",
"coverage_status": "OK",
"status_drivers": {
"transaction": "TX_FINALIZED",
"integrity": null,
"risk": null,
"coverage": null,
"action": "CUSTOMER_STATE_UNKNOWN"
},
"result_final": true,
"verification_final": true,
"risk_final": true,
"risk_retryable": false,
"risk_retry_after_seconds": null,
"retryable": false,
"retry_after_seconds": null,
"recommended_action": "CONFIRM_INTERNAL_STATE",
"integrity": {
"status": "MATCH",
"selected_event_ref": "log:0",
"relevant_event_count": 1,
"comparisons": {
"recipient": {
"expected": "TJRabPrwbZy45sbavfcjinPJC18kjpRTv8",
"actual": "TJRabPrwbZy45sbavfcjinPJC18kjpRTv8",
"result": "MATCH"
},
"sender": {
"expected": null,
"actual": "TF17BgPaZYbz8oxbjhriubPDsA7ArKoLX3",
"result": "NOT_EVALUATED"
},
"token": {
"expected": "TR7NHqjeKQxGTCi8q8ZY4pL8otSzgjLj6t",
"actual": "TR7NHqjeKQxGTCi8q8ZY4pL8otSzgjLj6t",
"result": "MATCH"
},
"amount": {
"expected": "1250.000001",
"actual": "1250.000001",
"result": "EXACT",
"tolerance": null,
"delta": "0",
"delta_raw": "0"
},
"network": {
"expected": null,
"actual": "tron",
"result": "NOT_EVALUATED"
}
}
},
"risk": {
"status": "NO_MATERIAL_SIGNAL",
"driver": null,
"driver_evidence_ids": []
},
"evidence_items": [
{
"evidence_id": "ev_431b2fd74ad43ef5",
"kind": "transaction_facts",
"source": "chain_explorer",
"subject": {
"type": "transaction",
"ref": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
},
"source_reference": "block:80000000",
"observed_at": "2026-10-10T09:00:00Z",
"effective_at": "2026-10-10T09:00:00Z",
"temporal_scope": "TRANSACTION_TIME",
"coverage": "checked",
"freshness": {
"age_seconds": 0,
"stale": false,
"stale_after_seconds": null
},
"dependency": "required",
"disagreement": null,
"evidence_version": "ev-1"
},
{
"evidence_id": "ev_63c8c4e421f6ff66",
"kind": "transaction_facts",
"source": "chain_node",
"subject": {
"type": "transaction",
"ref": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
},
"source_reference": "block:80000000",
"observed_at": "2026-10-10T09:00:00Z",
"effective_at": "2026-10-10T09:00:00Z",
"temporal_scope": "TRANSACTION_TIME",
"coverage": "checked",
"freshness": {
"age_seconds": 0,
"stale": false,
"stale_after_seconds": null
},
"dependency": "required",
"disagreement": null,
"evidence_version": "ev-1"
},
{
"evidence_id": "ev_896f4ce46de5246c",
"kind": "aml_risk",
"source": "aml_provider",
"subject": {
"type": "transaction",
"ref": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
},
"source_reference": "transaction_risk_score",
"observed_at": "2026-10-10T09:00:00Z",
"effective_at": null,
"temporal_scope": "CHECK_TIME",
"coverage": "checked_freshness_unknown",
"freshness": {
"age_seconds": 0,
"stale": true,
"stale_after_seconds": null
},
"dependency": "required",
"disagreement": null,
"evidence_version": "ev-1"
},
{
"evidence_id": "ev_7d0537ae6c2054d5",
"kind": "sanctions_list",
"source": "ofac",
"subject": {
"type": "transaction_addresses",
"ref": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
},
"source_reference": "configured_address_index",
"observed_at": "2026-10-10T09:00:00Z",
"effective_at": null,
"temporal_scope": "LIST_PUBLICATION",
"coverage": "checked",
"freshness": {
"age_seconds": 0,
"stale": false,
"stale_after_seconds": 172800
},
"dependency": "required",
"disagreement": null,
"evidence_version": "ev-1"
},
{
"evidence_id": "ev_2be872923c0687c9",
"kind": "sanctions_list",
"source": "eu",
"subject": {
"type": "transaction_addresses",
"ref": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
},
"source_reference": "configured_address_index",
"observed_at": "2026-10-10T09:00:00Z",
"effective_at": "2026-09-22T18:01:34Z",
"temporal_scope": "LIST_PUBLICATION",
"coverage": "checked",
"freshness": {
"age_seconds": 0,
"stale": false,
"stale_after_seconds": 3024000
},
"dependency": "required",
"disagreement": null,
"evidence_version": "ev-1"
},
{
"evidence_id": "ev_df2204c780968cb5",
"kind": "sanctions_list",
"source": "uk",
"subject": {
"type": "transaction_addresses",
"ref": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
},
"source_reference": "configured_address_index",
"observed_at": "2026-10-10T09:00:00Z",
"effective_at": "2026-10-02T00:00:00Z",
"temporal_scope": "LIST_PUBLICATION",
"coverage": "checked",
"freshness": {
"age_seconds": 0,
"stale": false,
"stale_after_seconds": 3024000
},
"dependency": "required",
"disagreement": null,
"evidence_version": "ev-1"
},
{
"evidence_id": "ev_76c33d7fb3a48fb7",
"kind": "sanctions_list",
"source": "un",
"subject": {
"type": "transaction_addresses",
"ref": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
},
"source_reference": "configured_address_index",
"observed_at": null,
"effective_at": null,
"temporal_scope": "LIST_PUBLICATION",
"coverage": "not_applicable",
"freshness": {
"age_seconds": null,
"stale": false,
"stale_after_seconds": null
},
"dependency": "not_applicable",
"disagreement": null,
"evidence_version": "ev-1"
},
{
"evidence_id": "ev_81b44db3a9445d39",
"kind": "token_authenticity",
"source": "token_registry",
"subject": {
"type": "token",
"ref": "TR7NHqjeKQxGTCi8q8ZY4pL8otSzgjLj6t"
},
"source_reference": "official",
"observed_at": "2026-10-10T09:00:00Z",
"effective_at": null,
"temporal_scope": "CHECK_TIME",
"coverage": "checked",
"freshness": {
"age_seconds": 0,
"stale": false,
"stale_after_seconds": null
},
"dependency": "required",
"disagreement": null,
"evidence_version": "ev-1"
}
],
"coverage_limitations": {
"runtime": [],
"product": [
"AML_TRANSACTION_LEVEL_ONLY",
"RISK_STATE_AS_OF_CHECK",
"SANCTIONS_CONFIGURED_LISTS_ONLY"
]
},
"obligation": null,
"reuse": null
}
Menunggu konfirmasi
Lihat respons JSON lengkap
{
"request_id": "example-pending",
"tx_hash": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
"network": "tron",
"transaction_type": "TriggerSmartContract",
"transaction_category": "trc20_transfer",
"transaction_state": "pending",
"confirmations": 3,
"required_confirmations": 19,
"sender": "TF17BgPaZYbz8oxbjhriubPDsA7ArKoLX3",
"recipient": "TJRabPrwbZy45sbavfcjinPJC18kjpRTv8",
"token_contract": "TR7NHqjeKQxGTCi8q8ZY4pL8otSzgjLj6t",
"token_symbol": "USDT",
"decimals": 6,
"amount": "1250.000001",
"transfers": [
{
"index": 0,
"asset_type": "trc20",
"sender": "TF17BgPaZYbz8oxbjhriubPDsA7ArKoLX3",
"recipient": "TJRabPrwbZy45sbavfcjinPJC18kjpRTv8",
"token_contract": "TR7NHqjeKQxGTCi8q8ZY4pL8otSzgjLj6t",
"token_id": null,
"token_symbol": "USDT",
"decimals": 6,
"amount": "1250.000001",
"event_ref": "log:0",
"execution_status": "success"
}
],
"transfers_truncated": false,
"aml_risk_level": "low",
"schema_version": "0.3",
"policy_version": "b2b-tx-2026-10.4",
"sanctions_hit": false,
"direct_sanctions_match": false,
"indirect_sanctions_exposure": false,
"risk_exposure": false,
"key_exposure": [],
"token_authenticity": "official",
"recipient_match": null,
"token_match": null,
"amount_match": null,
"coverage": "complete",
"workflow_coverage": "complete",
"source_coverage": {
"sanctions_sources": {
"ofac": {
"status": "checked",
"checked_at": "2026-10-10T09:00:00Z",
"retrieved_at": "2026-10-10T09:00:00Z",
"data_updated_at": null,
"stale_after_seconds": 172800,
"scope": "configured_address_index",
"error_code": null
},
"eu": {
"status": "checked",
"checked_at": "2026-10-10T09:00:00Z",
"retrieved_at": "2026-10-02T23:49:24Z",
"data_updated_at": "2026-09-22T18:01:34Z",
"stale_after_seconds": 3024000,
"scope": "configured_address_index",
"error_code": null
},
"uk": {
"status": "checked",
"checked_at": "2026-10-10T09:00:00Z",
"retrieved_at": "2026-10-02T23:47:32Z",
"data_updated_at": "2026-10-02T00:00:00Z",
"stale_after_seconds": 3024000,
"scope": "configured_address_index",
"error_code": null
},
"un": {
"status": "not_applicable",
"checked_at": null,
"retrieved_at": null,
"data_updated_at": null,
"stale_after_seconds": null,
"scope": "configured_address_index",
"error_code": null
}
},
"transaction_sources": {
"chain_explorer": {
"status": "checked",
"checked_at": "2026-10-10T09:00:00Z",
"retrieved_at": "2026-10-10T09:00:00Z",
"data_updated_at": null,
"stale_after_seconds": null,
"scope": "transaction_facts",
"error_code": null
},
"chain_node": {
"status": "checked",
"checked_at": "2026-10-10T09:00:00Z",
"retrieved_at": "2026-10-10T09:00:00Z",
"data_updated_at": null,
"stale_after_seconds": null,
"scope": "transaction_facts",
"error_code": null
}
},
"risk_sources": {
"aml_provider": {
"status": "checked_freshness_unknown",
"checked_at": "2026-10-10T09:00:00Z",
"retrieved_at": "2026-10-10T09:00:00Z",
"data_updated_at": null,
"stale_after_seconds": null,
"scope": "transaction_risk_score",
"error_code": null
}
},
"universal_clearance": false
},
"freshness": {
"checked_at": "2026-10-10T09:00:00Z",
"transaction_at": "2026-10-10T09:00:00Z",
"risk_data_at": "2026-10-10T09:00:00Z",
"token_data_at": "2026-10-10T09:00:00Z",
"max_source_age_seconds": 0
},
"overall_state": "REVIEW",
"environment": "live",
"reasons": [
{
"code": "TX_PENDING_CONFIRMATIONS",
"category": "transaction",
"severity": "warning"
},
{
"code": "TX_FACTS_VERIFIED",
"category": "transaction",
"severity": "info"
},
{
"code": "AML_LOW",
"category": "risk",
"severity": "info"
},
{
"code": "NO_DIRECT_SANCTIONS_MATCH",
"category": "sanctions",
"severity": "info"
},
{
"code": "TOKEN_OFFICIAL",
"category": "token",
"severity": "info"
}
],
"decision_id": null,
"direction": null,
"workflow_type": null,
"versions": {
"decision": "b2b-tx-2026-10.4",
"rules": {
"exposure": "b2b-exp-v2",
"sanctions_freshness": "sf-v1",
"billing": "final_answers_only",
"integrity": "int-v3",
"reuse": "reuse-v1",
"allocation": "alloc-v1"
},
"reason_codes": "rc-1",
"evidence_schema": "ev-1",
"contract": "0.3"
},
"transaction_status": "PENDING",
"integrity_status": "NOT_EVALUATED",
"risk_status": "NO_MATERIAL_SIGNAL",
"coverage_status": "OK",
"status_drivers": {
"transaction": "TX_PENDING_CONFIRMATIONS",
"integrity": "TX_PENDING_CONFIRMATIONS",
"risk": null,
"coverage": null,
"action": "TX_PENDING_CONFIRMATIONS"
},
"result_final": false,
"verification_final": false,
"risk_final": false,
"risk_retryable": true,
"risk_retry_after_seconds": 48,
"retryable": true,
"retry_after_seconds": 48,
"recommended_action": "RECHECK_LATER",
"integrity": {
"status": "NOT_EVALUATED",
"selected_event_ref": "log:0",
"relevant_event_count": 1,
"comparisons": {
"recipient": {
"expected": "TJRabPrwbZy45sbavfcjinPJC18kjpRTv8",
"actual": "TJRabPrwbZy45sbavfcjinPJC18kjpRTv8",
"result": "NOT_EVALUATED"
},
"sender": {
"expected": null,
"actual": "TF17BgPaZYbz8oxbjhriubPDsA7ArKoLX3",
"result": "NOT_EVALUATED"
},
"token": {
"expected": "TR7NHqjeKQxGTCi8q8ZY4pL8otSzgjLj6t",
"actual": "TR7NHqjeKQxGTCi8q8ZY4pL8otSzgjLj6t",
"result": "NOT_EVALUATED"
},
"amount": {
"expected": "1250.000001",
"actual": "1250.000001",
"result": "NOT_EVALUATED",
"tolerance": null,
"delta": null,
"delta_raw": null
},
"network": {
"expected": null,
"actual": "tron",
"result": "NOT_EVALUATED"
}
}
},
"risk": {
"status": "NO_MATERIAL_SIGNAL",
"driver": null,
"driver_evidence_ids": []
},
"evidence_items": [
{
"evidence_id": "ev_431b2fd74ad43ef5",
"kind": "transaction_facts",
"source": "chain_explorer",
"subject": {
"type": "transaction",
"ref": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
},
"source_reference": "block:80000000",
"observed_at": "2026-10-10T09:00:00Z",
"effective_at": "2026-10-10T09:00:00Z",
"temporal_scope": "TRANSACTION_TIME",
"coverage": "checked",
"freshness": {
"age_seconds": 0,
"stale": false,
"stale_after_seconds": null
},
"dependency": "required",
"disagreement": null,
"evidence_version": "ev-1"
},
{
"evidence_id": "ev_63c8c4e421f6ff66",
"kind": "transaction_facts",
"source": "chain_node",
"subject": {
"type": "transaction",
"ref": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
},
"source_reference": "block:80000000",
"observed_at": "2026-10-10T09:00:00Z",
"effective_at": "2026-10-10T09:00:00Z",
"temporal_scope": "TRANSACTION_TIME",
"coverage": "checked",
"freshness": {
"age_seconds": 0,
"stale": false,
"stale_after_seconds": null
},
"dependency": "required",
"disagreement": null,
"evidence_version": "ev-1"
},
{
"evidence_id": "ev_896f4ce46de5246c",
"kind": "aml_risk",
"source": "aml_provider",
"subject": {
"type": "transaction",
"ref": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
},
"source_reference": "transaction_risk_score",
"observed_at": "2026-10-10T09:00:00Z",
"effective_at": null,
"temporal_scope": "CHECK_TIME",
"coverage": "checked_freshness_unknown",
"freshness": {
"age_seconds": 0,
"stale": true,
"stale_after_seconds": null
},
"dependency": "required",
"disagreement": null,
"evidence_version": "ev-1"
},
{
"evidence_id": "ev_7d0537ae6c2054d5",
"kind": "sanctions_list",
"source": "ofac",
"subject": {
"type": "transaction_addresses",
"ref": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
},
"source_reference": "configured_address_index",
"observed_at": "2026-10-10T09:00:00Z",
"effective_at": null,
"temporal_scope": "LIST_PUBLICATION",
"coverage": "checked",
"freshness": {
"age_seconds": 0,
"stale": false,
"stale_after_seconds": 172800
},
"dependency": "required",
"disagreement": null,
"evidence_version": "ev-1"
},
{
"evidence_id": "ev_2be872923c0687c9",
"kind": "sanctions_list",
"source": "eu",
"subject": {
"type": "transaction_addresses",
"ref": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
},
"source_reference": "configured_address_index",
"observed_at": "2026-10-10T09:00:00Z",
"effective_at": "2026-09-22T18:01:34Z",
"temporal_scope": "LIST_PUBLICATION",
"coverage": "checked",
"freshness": {
"age_seconds": 0,
"stale": false,
"stale_after_seconds": 3024000
},
"dependency": "required",
"disagreement": null,
"evidence_version": "ev-1"
},
{
"evidence_id": "ev_df2204c780968cb5",
"kind": "sanctions_list",
"source": "uk",
"subject": {
"type": "transaction_addresses",
"ref": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
},
"source_reference": "configured_address_index",
"observed_at": "2026-10-10T09:00:00Z",
"effective_at": "2026-10-02T00:00:00Z",
"temporal_scope": "LIST_PUBLICATION",
"coverage": "checked",
"freshness": {
"age_seconds": 0,
"stale": false,
"stale_after_seconds": 3024000
},
"dependency": "required",
"disagreement": null,
"evidence_version": "ev-1"
},
{
"evidence_id": "ev_76c33d7fb3a48fb7",
"kind": "sanctions_list",
"source": "un",
"subject": {
"type": "transaction_addresses",
"ref": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
},
"source_reference": "configured_address_index",
"observed_at": null,
"effective_at": null,
"temporal_scope": "LIST_PUBLICATION",
"coverage": "not_applicable",
"freshness": {
"age_seconds": null,
"stale": false,
"stale_after_seconds": null
},
"dependency": "not_applicable",
"disagreement": null,
"evidence_version": "ev-1"
},
{
"evidence_id": "ev_81b44db3a9445d39",
"kind": "token_authenticity",
"source": "token_registry",
"subject": {
"type": "token",
"ref": "TR7NHqjeKQxGTCi8q8ZY4pL8otSzgjLj6t"
},
"source_reference": "official",
"observed_at": "2026-10-10T09:00:00Z",
"effective_at": null,
"temporal_scope": "CHECK_TIME",
"coverage": "checked",
"freshness": {
"age_seconds": 0,
"stale": false,
"stale_after_seconds": null
},
"dependency": "required",
"disagreement": null,
"evidence_version": "ev-1"
}
],
"coverage_limitations": {
"runtime": [],
"product": [
"AML_TRANSACTION_LEVEL_ONLY",
"RISK_STATE_AS_OF_CHECK",
"SANCTIONS_CONFIGURED_LISTS_ONLY"
]
},
"obligation": null,
"reuse": null
}
Transaksi gagal
Lihat respons JSON lengkap
{
"request_id": "example-failed",
"tx_hash": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
"network": "tron",
"transaction_type": "TriggerSmartContract",
"transaction_category": "trc20_transfer",
"transaction_state": "failed",
"confirmations": 27,
"required_confirmations": 19,
"sender": "TF17BgPaZYbz8oxbjhriubPDsA7ArKoLX3",
"recipient": "TJRabPrwbZy45sbavfcjinPJC18kjpRTv8",
"token_contract": null,
"token_symbol": null,
"decimals": null,
"amount": null,
"transfers": [],
"transfers_truncated": false,
"aml_risk_level": "unknown",
"schema_version": "0.3",
"policy_version": "b2b-tx-2026-10.4",
"sanctions_hit": null,
"direct_sanctions_match": null,
"indirect_sanctions_exposure": null,
"risk_exposure": null,
"key_exposure": [],
"token_authenticity": "official",
"recipient_match": null,
"token_match": null,
"amount_match": null,
"coverage": "complete",
"workflow_coverage": "complete",
"source_coverage": {
"sanctions_sources": {
"ofac": {
"status": "not_checked",
"checked_at": null,
"retrieved_at": "2026-10-10T09:00:00Z",
"data_updated_at": null,
"stale_after_seconds": 172800,
"scope": "configured_address_index",
"error_code": null
},
"eu": {
"status": "not_checked",
"checked_at": null,
"retrieved_at": "2026-10-02T23:49:24Z",
"data_updated_at": "2026-09-22T18:01:34Z",
"stale_after_seconds": 3024000,
"scope": "configured_address_index",
"error_code": null
},
"uk": {
"status": "not_checked",
"checked_at": null,
"retrieved_at": "2026-10-02T23:47:32Z",
"data_updated_at": "2026-10-02T00:00:00Z",
"stale_after_seconds": 3024000,
"scope": "configured_address_index",
"error_code": null
},
"un": {
"status": "not_applicable",
"checked_at": null,
"retrieved_at": null,
"data_updated_at": null,
"stale_after_seconds": null,
"scope": "configured_address_index",
"error_code": null
}
},
"transaction_sources": {
"chain_explorer": {
"status": "checked",
"checked_at": "2026-10-10T09:00:00Z",
"retrieved_at": "2026-10-10T09:00:00Z",
"data_updated_at": null,
"stale_after_seconds": null,
"scope": "transaction_facts",
"error_code": null
},
"chain_node": {
"status": "checked",
"checked_at": "2026-10-10T09:00:00Z",
"retrieved_at": "2026-10-10T09:00:00Z",
"data_updated_at": null,
"stale_after_seconds": null,
"scope": "transaction_facts",
"error_code": null
}
},
"risk_sources": {
"aml_provider": {
"status": "not_applicable",
"checked_at": null,
"retrieved_at": null,
"data_updated_at": null,
"stale_after_seconds": null,
"scope": "transaction_risk_score",
"error_code": null
}
},
"universal_clearance": false
},
"freshness": {
"checked_at": "2026-10-10T09:00:00Z",
"transaction_at": "2026-10-10T09:00:00Z",
"risk_data_at": null,
"token_data_at": "2026-10-10T09:00:00Z",
"max_source_age_seconds": 0
},
"overall_state": "REVIEW",
"environment": "live",
"reasons": [
{
"code": "TX_REVERTED",
"category": "transaction",
"severity": "warning"
},
{
"code": "TX_FACTS_VERIFIED",
"category": "transaction",
"severity": "info"
}
],
"decision_id": null,
"direction": null,
"workflow_type": null,
"versions": {
"decision": "b2b-tx-2026-10.4",
"rules": {
"exposure": "b2b-exp-v2",
"sanctions_freshness": "sf-v1",
"billing": "final_answers_only",
"integrity": "int-v3",
"reuse": "reuse-v1",
"allocation": "alloc-v1"
},
"reason_codes": "rc-1",
"evidence_schema": "ev-1",
"contract": "0.3"
},
"transaction_status": "FAILED",
"integrity_status": "NOT_EVALUATED",
"risk_status": "NOT_EVALUATED",
"coverage_status": "SKIPPED",
"status_drivers": {
"transaction": "TX_REVERTED",
"integrity": "TX_REVERTED",
"risk": "TX_REVERTED",
"coverage": null,
"action": "TX_REVERTED"
},
"result_final": true,
"verification_final": true,
"risk_final": true,
"risk_retryable": false,
"risk_retry_after_seconds": null,
"retryable": false,
"retry_after_seconds": null,
"recommended_action": "NOT_EXECUTED",
"integrity": {
"status": "NOT_EVALUATED",
"selected_event_ref": null,
"relevant_event_count": 0,
"comparisons": {
"recipient": null,
"sender": null,
"token": null,
"amount": null,
"network": {
"expected": null,
"actual": "tron",
"result": "NOT_EVALUATED"
}
}
},
"risk": {
"status": "NOT_EVALUATED",
"driver": "TX_REVERTED",
"driver_evidence_ids": []
},
"evidence_items": [
{
"evidence_id": "ev_431b2fd74ad43ef5",
"kind": "transaction_facts",
"source": "chain_explorer",
"subject": {
"type": "transaction",
"ref": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
},
"source_reference": "block:80000000",
"observed_at": "2026-10-10T09:00:00Z",
"effective_at": "2026-10-10T09:00:00Z",
"temporal_scope": "TRANSACTION_TIME",
"coverage": "checked",
"freshness": {
"age_seconds": 0,
"stale": false,
"stale_after_seconds": null
},
"dependency": "required",
"disagreement": null,
"evidence_version": "ev-1"
},
{
"evidence_id": "ev_63c8c4e421f6ff66",
"kind": "transaction_facts",
"source": "chain_node",
"subject": {
"type": "transaction",
"ref": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
},
"source_reference": "block:80000000",
"observed_at": "2026-10-10T09:00:00Z",
"effective_at": "2026-10-10T09:00:00Z",
"temporal_scope": "TRANSACTION_TIME",
"coverage": "checked",
"freshness": {
"age_seconds": 0,
"stale": false,
"stale_after_seconds": null
},
"dependency": "required",
"disagreement": null,
"evidence_version": "ev-1"
},
{
"evidence_id": "ev_73e84774c4ced93d",
"kind": "aml_risk",
"source": "aml_provider",
"subject": {
"type": "transaction",
"ref": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
},
"source_reference": "transaction_risk_score",
"observed_at": null,
"effective_at": null,
"temporal_scope": "CHECK_TIME",
"coverage": "not_applicable",
"freshness": {
"age_seconds": null,
"stale": false,
"stale_after_seconds": null
},
"dependency": "not_applicable",
"disagreement": null,
"evidence_version": "ev-1"
},
{
"evidence_id": "ev_6b44582b97147dc6",
"kind": "sanctions_list",
"source": "ofac",
"subject": {
"type": "transaction_addresses",
"ref": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
},
"source_reference": "configured_address_index",
"observed_at": null,
"effective_at": null,
"temporal_scope": "LIST_PUBLICATION",
"coverage": "not_checked",
"freshness": {
"age_seconds": null,
"stale": false,
"stale_after_seconds": 172800
},
"dependency": "required",
"disagreement": null,
"evidence_version": "ev-1"
},
{
"evidence_id": "ev_06483bdcf9ba67c5",
"kind": "sanctions_list",
"source": "eu",
"subject": {
"type": "transaction_addresses",
"ref": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
},
"source_reference": "configured_address_index",
"observed_at": null,
"effective_at": "2026-09-22T18:01:34Z",
"temporal_scope": "LIST_PUBLICATION",
"coverage": "not_checked",
"freshness": {
"age_seconds": null,
"stale": false,
"stale_after_seconds": 3024000
},
"dependency": "required",
"disagreement": null,
"evidence_version": "ev-1"
},
{
"evidence_id": "ev_9ea21340c566a061",
"kind": "sanctions_list",
"source": "uk",
"subject": {
"type": "transaction_addresses",
"ref": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
},
"source_reference": "configured_address_index",
"observed_at": null,
"effective_at": "2026-10-02T00:00:00Z",
"temporal_scope": "LIST_PUBLICATION",
"coverage": "not_checked",
"freshness": {
"age_seconds": null,
"stale": false,
"stale_after_seconds": 3024000
},
"dependency": "required",
"disagreement": null,
"evidence_version": "ev-1"
},
{
"evidence_id": "ev_76c33d7fb3a48fb7",
"kind": "sanctions_list",
"source": "un",
"subject": {
"type": "transaction_addresses",
"ref": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
},
"source_reference": "configured_address_index",
"observed_at": null,
"effective_at": null,
"temporal_scope": "LIST_PUBLICATION",
"coverage": "not_applicable",
"freshness": {
"age_seconds": null,
"stale": false,
"stale_after_seconds": null
},
"dependency": "not_applicable",
"disagreement": null,
"evidence_version": "ev-1"
}
],
"coverage_limitations": {
"runtime": [],
"product": [
"AML_TRANSACTION_LEVEL_ONLY",
"RISK_STATE_AS_OF_CHECK",
"SANCTIONS_CONFIGURED_LISTS_ONLY"
]
},
"obligation": null,
"reuse": null
}
Transaksi tidak ditemukan
Lihat respons JSON lengkap
{
"request_id": "example-not-found",
"tx_hash": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
"network": "tron",
"transaction_type": "TriggerSmartContract",
"transaction_category": "trc20_transfer",
"transaction_state": "not_found",
"confirmations": null,
"required_confirmations": 19,
"sender": null,
"recipient": null,
"token_contract": null,
"token_symbol": null,
"decimals": null,
"amount": null,
"transfers": [],
"transfers_truncated": false,
"aml_risk_level": "unknown",
"schema_version": "0.3",
"policy_version": "b2b-tx-2026-10.4",
"sanctions_hit": null,
"direct_sanctions_match": null,
"indirect_sanctions_exposure": null,
"risk_exposure": null,
"key_exposure": [],
"token_authenticity": "official",
"recipient_match": null,
"token_match": null,
"amount_match": null,
"coverage": "partial",
"workflow_coverage": "partial",
"source_coverage": {
"sanctions_sources": {
"ofac": {
"status": "not_checked",
"checked_at": null,
"retrieved_at": "2026-10-10T09:00:00Z",
"data_updated_at": null,
"stale_after_seconds": 172800,
"scope": "configured_address_index",
"error_code": null
},
"eu": {
"status": "not_checked",
"checked_at": null,
"retrieved_at": "2026-10-02T23:49:24Z",
"data_updated_at": "2026-09-22T18:01:34Z",
"stale_after_seconds": 3024000,
"scope": "configured_address_index",
"error_code": null
},
"uk": {
"status": "not_checked",
"checked_at": null,
"retrieved_at": "2026-10-02T23:47:32Z",
"data_updated_at": "2026-10-02T00:00:00Z",
"stale_after_seconds": 3024000,
"scope": "configured_address_index",
"error_code": null
},
"un": {
"status": "not_applicable",
"checked_at": null,
"retrieved_at": null,
"data_updated_at": null,
"stale_after_seconds": null,
"scope": "configured_address_index",
"error_code": null
}
},
"transaction_sources": {
"chain_explorer": {
"status": "checked",
"checked_at": "2026-10-10T09:00:00Z",
"retrieved_at": "2026-10-10T09:00:00Z",
"data_updated_at": null,
"stale_after_seconds": null,
"scope": "transaction_facts",
"error_code": null
},
"chain_node": {
"status": "checked",
"checked_at": "2026-10-10T09:00:00Z",
"retrieved_at": "2026-10-10T09:00:00Z",
"data_updated_at": null,
"stale_after_seconds": null,
"scope": "transaction_facts",
"error_code": null
}
},
"risk_sources": {
"aml_provider": {
"status": "not_applicable",
"checked_at": null,
"retrieved_at": null,
"data_updated_at": null,
"stale_after_seconds": null,
"scope": "transaction_risk_score",
"error_code": null
}
},
"universal_clearance": false
},
"freshness": {
"checked_at": "2026-10-10T09:00:00Z",
"transaction_at": null,
"risk_data_at": null,
"token_data_at": "2026-10-10T09:00:00Z",
"max_source_age_seconds": 0
},
"overall_state": "LIMITED_DATA",
"environment": "live",
"reasons": [
{
"code": "TX_NOT_FOUND",
"category": "transaction",
"severity": "warning"
},
{
"code": "EXPECTED_DATA_UNAVAILABLE",
"category": "expected",
"severity": "warning"
},
{
"code": "TX_FACTS_VERIFIED",
"category": "transaction",
"severity": "info"
}
],
"decision_id": null,
"direction": null,
"workflow_type": null,
"versions": {
"decision": "b2b-tx-2026-10.4",
"rules": {
"exposure": "b2b-exp-v2",
"sanctions_freshness": "sf-v1",
"billing": "final_answers_only",
"integrity": "int-v3",
"reuse": "reuse-v1",
"allocation": "alloc-v1"
},
"reason_codes": "rc-1",
"evidence_schema": "ev-1",
"contract": "0.3"
},
"transaction_status": "NOT_FOUND",
"integrity_status": "NOT_EVALUATED",
"risk_status": "NOT_EVALUATED",
"coverage_status": "SKIPPED",
"status_drivers": {
"transaction": "TX_NOT_FOUND",
"integrity": "TX_NOT_FOUND",
"risk": "TX_NOT_FOUND",
"coverage": null,
"action": "TX_NOT_FOUND"
},
"result_final": false,
"verification_final": false,
"risk_final": false,
"risk_retryable": true,
"risk_retry_after_seconds": 15,
"retryable": true,
"retry_after_seconds": 15,
"recommended_action": "RECHECK_LATER",
"integrity": {
"status": "NOT_EVALUATED",
"selected_event_ref": null,
"relevant_event_count": 0,
"comparisons": {
"recipient": null,
"sender": null,
"token": null,
"amount": null,
"network": {
"expected": null,
"actual": "tron",
"result": "NOT_EVALUATED"
}
}
},
"risk": {
"status": "NOT_EVALUATED",
"driver": "TX_NOT_FOUND",
"driver_evidence_ids": []
},
"evidence_items": [
{
"evidence_id": "ev_431b2fd74ad43ef5",
"kind": "transaction_facts",
"source": "chain_explorer",
"subject": {
"type": "transaction",
"ref": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
},
"source_reference": null,
"observed_at": "2026-10-10T09:00:00Z",
"effective_at": null,
"temporal_scope": "TRANSACTION_TIME",
"coverage": "checked",
"freshness": {
"age_seconds": 0,
"stale": false,
"stale_after_seconds": null
},
"dependency": "required",
"disagreement": null,
"evidence_version": "ev-1"
},
{
"evidence_id": "ev_63c8c4e421f6ff66",
"kind": "transaction_facts",
"source": "chain_node",
"subject": {
"type": "transaction",
"ref": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
},
"source_reference": null,
"observed_at": "2026-10-10T09:00:00Z",
"effective_at": null,
"temporal_scope": "TRANSACTION_TIME",
"coverage": "checked",
"freshness": {
"age_seconds": 0,
"stale": false,
"stale_after_seconds": null
},
"dependency": "required",
"disagreement": null,
"evidence_version": "ev-1"
},
{
"evidence_id": "ev_73e84774c4ced93d",
"kind": "aml_risk",
"source": "aml_provider",
"subject": {
"type": "transaction",
"ref": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
},
"source_reference": "transaction_risk_score",
"observed_at": null,
"effective_at": null,
"temporal_scope": "CHECK_TIME",
"coverage": "not_applicable",
"freshness": {
"age_seconds": null,
"stale": false,
"stale_after_seconds": null
},
"dependency": "not_applicable",
"disagreement": null,
"evidence_version": "ev-1"
},
{
"evidence_id": "ev_6b44582b97147dc6",
"kind": "sanctions_list",
"source": "ofac",
"subject": {
"type": "transaction_addresses",
"ref": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
},
"source_reference": "configured_address_index",
"observed_at": null,
"effective_at": null,
"temporal_scope": "LIST_PUBLICATION",
"coverage": "not_checked",
"freshness": {
"age_seconds": null,
"stale": false,
"stale_after_seconds": 172800
},
"dependency": "required",
"disagreement": null,
"evidence_version": "ev-1"
},
{
"evidence_id": "ev_06483bdcf9ba67c5",
"kind": "sanctions_list",
"source": "eu",
"subject": {
"type": "transaction_addresses",
"ref": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
},
"source_reference": "configured_address_index",
"observed_at": null,
"effective_at": "2026-09-22T18:01:34Z",
"temporal_scope": "LIST_PUBLICATION",
"coverage": "not_checked",
"freshness": {
"age_seconds": null,
"stale": false,
"stale_after_seconds": 3024000
},
"dependency": "required",
"disagreement": null,
"evidence_version": "ev-1"
},
{
"evidence_id": "ev_9ea21340c566a061",
"kind": "sanctions_list",
"source": "uk",
"subject": {
"type": "transaction_addresses",
"ref": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
},
"source_reference": "configured_address_index",
"observed_at": null,
"effective_at": "2026-10-02T00:00:00Z",
"temporal_scope": "LIST_PUBLICATION",
"coverage": "not_checked",
"freshness": {
"age_seconds": null,
"stale": false,
"stale_after_seconds": 3024000
},
"dependency": "required",
"disagreement": null,
"evidence_version": "ev-1"
},
{
"evidence_id": "ev_76c33d7fb3a48fb7",
"kind": "sanctions_list",
"source": "un",
"subject": {
"type": "transaction_addresses",
"ref": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
},
"source_reference": "configured_address_index",
"observed_at": null,
"effective_at": null,
"temporal_scope": "LIST_PUBLICATION",
"coverage": "not_applicable",
"freshness": {
"age_seconds": null,
"stale": false,
"stale_after_seconds": null
},
"dependency": "not_applicable",
"disagreement": null,
"evidence_version": "ev-1"
}
],
"coverage_limitations": {
"runtime": [],
"product": [
"AML_TRANSACTION_LEVEL_ONLY",
"RISK_STATE_AS_OF_CHECK",
"SANCTIONS_CONFIGURED_LISTS_ONLY"
]
},
"obligation": null,
"reuse": null
}
Data belum lengkap
Lihat respons JSON lengkap
{
"request_id": "example-limited-data",
"tx_hash": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
"network": "tron",
"transaction_type": "TriggerSmartContract",
"transaction_category": "trc20_transfer",
"transaction_state": "confirmed",
"confirmations": 27,
"required_confirmations": 19,
"sender": "TF17BgPaZYbz8oxbjhriubPDsA7ArKoLX3",
"recipient": "TJRabPrwbZy45sbavfcjinPJC18kjpRTv8",
"token_contract": "TR7NHqjeKQxGTCi8q8ZY4pL8otSzgjLj6t",
"token_symbol": "USDT",
"decimals": 6,
"amount": "1250.000001",
"transfers": [
{
"index": 0,
"asset_type": "trc20",
"sender": "TF17BgPaZYbz8oxbjhriubPDsA7ArKoLX3",
"recipient": "TJRabPrwbZy45sbavfcjinPJC18kjpRTv8",
"token_contract": "TR7NHqjeKQxGTCi8q8ZY4pL8otSzgjLj6t",
"token_id": null,
"token_symbol": "USDT",
"decimals": 6,
"amount": "1250.000001",
"event_ref": "log:0",
"execution_status": "success"
}
],
"transfers_truncated": false,
"aml_risk_level": "unknown",
"schema_version": "0.3",
"policy_version": "b2b-tx-2026-10.4",
"sanctions_hit": false,
"direct_sanctions_match": false,
"indirect_sanctions_exposure": false,
"risk_exposure": false,
"key_exposure": [],
"token_authenticity": "official",
"recipient_match": true,
"token_match": true,
"amount_match": true,
"coverage": "partial",
"workflow_coverage": "partial",
"source_coverage": {
"sanctions_sources": {
"ofac": {
"status": "checked",
"checked_at": "2026-10-10T09:00:00Z",
"retrieved_at": "2026-10-10T09:00:00Z",
"data_updated_at": null,
"stale_after_seconds": 172800,
"scope": "configured_address_index",
"error_code": null
},
"eu": {
"status": "checked",
"checked_at": "2026-10-10T09:00:00Z",
"retrieved_at": "2026-10-02T23:49:24Z",
"data_updated_at": "2026-09-22T18:01:34Z",
"stale_after_seconds": 3024000,
"scope": "configured_address_index",
"error_code": null
},
"uk": {
"status": "checked",
"checked_at": "2026-10-10T09:00:00Z",
"retrieved_at": "2026-10-02T23:47:32Z",
"data_updated_at": "2026-10-02T00:00:00Z",
"stale_after_seconds": 3024000,
"scope": "configured_address_index",
"error_code": null
},
"un": {
"status": "not_applicable",
"checked_at": null,
"retrieved_at": null,
"data_updated_at": null,
"stale_after_seconds": null,
"scope": "configured_address_index",
"error_code": null
}
},
"transaction_sources": {
"chain_explorer": {
"status": "checked",
"checked_at": "2026-10-10T09:00:00Z",
"retrieved_at": "2026-10-10T09:00:00Z",
"data_updated_at": null,
"stale_after_seconds": null,
"scope": "transaction_facts",
"error_code": null
},
"chain_node": {
"status": "checked",
"checked_at": "2026-10-10T09:00:00Z",
"retrieved_at": "2026-10-10T09:00:00Z",
"data_updated_at": null,
"stale_after_seconds": null,
"scope": "transaction_facts",
"error_code": null
}
},
"risk_sources": {
"aml_provider": {
"status": "unavailable",
"checked_at": null,
"retrieved_at": null,
"data_updated_at": null,
"stale_after_seconds": null,
"scope": "transaction_risk_score",
"error_code": "timeout"
}
},
"universal_clearance": false
},
"freshness": {
"checked_at": "2026-10-10T09:00:00Z",
"transaction_at": "2026-10-10T09:00:00Z",
"risk_data_at": null,
"token_data_at": "2026-10-10T09:00:00Z",
"max_source_age_seconds": 0
},
"overall_state": "LIMITED_DATA",
"environment": "live",
"reasons": [
{
"code": "AML_UNAVAILABLE",
"category": "risk",
"severity": "warning"
},
{
"code": "TX_FACTS_VERIFIED",
"category": "transaction",
"severity": "info"
},
{
"code": "TX_FINALIZED",
"category": "transaction",
"severity": "info"
},
{
"code": "NO_DIRECT_SANCTIONS_MATCH",
"category": "sanctions",
"severity": "info"
},
{
"code": "TOKEN_OFFICIAL",
"category": "token",
"severity": "info"
}
],
"decision_id": null,
"direction": null,
"workflow_type": null,
"versions": {
"decision": "b2b-tx-2026-10.4",
"rules": {
"exposure": "b2b-exp-v2",
"sanctions_freshness": "sf-v1",
"billing": "final_answers_only",
"integrity": "int-v3",
"reuse": "reuse-v1",
"allocation": "alloc-v1"
},
"reason_codes": "rc-1",
"evidence_schema": "ev-1",
"contract": "0.3"
},
"transaction_status": "CONFIRMED",
"integrity_status": "MATCH",
"risk_status": "INSUFFICIENT",
"coverage_status": "UNAVAILABLE",
"status_drivers": {
"transaction": "TX_FINALIZED",
"integrity": null,
"risk": "AML_UNAVAILABLE",
"coverage": "AML_UNAVAILABLE",
"action": "AML_UNAVAILABLE"
},
"result_final": true,
"verification_final": true,
"risk_final": false,
"risk_retryable": true,
"risk_retry_after_seconds": 30,
"retryable": false,
"retry_after_seconds": null,
"recommended_action": "MANUAL_REVIEW",
"integrity": {
"status": "MATCH",
"selected_event_ref": "log:0",
"relevant_event_count": 1,
"comparisons": {
"recipient": {
"expected": "TJRabPrwbZy45sbavfcjinPJC18kjpRTv8",
"actual": "TJRabPrwbZy45sbavfcjinPJC18kjpRTv8",
"result": "MATCH"
},
"sender": {
"expected": null,
"actual": "TF17BgPaZYbz8oxbjhriubPDsA7ArKoLX3",
"result": "NOT_EVALUATED"
},
"token": {
"expected": "TR7NHqjeKQxGTCi8q8ZY4pL8otSzgjLj6t",
"actual": "TR7NHqjeKQxGTCi8q8ZY4pL8otSzgjLj6t",
"result": "MATCH"
},
"amount": {
"expected": "1250.000001",
"actual": "1250.000001",
"result": "EXACT",
"tolerance": null,
"delta": "0",
"delta_raw": "0"
},
"network": {
"expected": null,
"actual": "tron",
"result": "NOT_EVALUATED"
}
}
},
"risk": {
"status": "INSUFFICIENT",
"driver": "AML_UNAVAILABLE",
"driver_evidence_ids": []
},
"evidence_items": [
{
"evidence_id": "ev_431b2fd74ad43ef5",
"kind": "transaction_facts",
"source": "chain_explorer",
"subject": {
"type": "transaction",
"ref": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
},
"source_reference": "block:80000000",
"observed_at": "2026-10-10T09:00:00Z",
"effective_at": "2026-10-10T09:00:00Z",
"temporal_scope": "TRANSACTION_TIME",
"coverage": "checked",
"freshness": {
"age_seconds": 0,
"stale": false,
"stale_after_seconds": null
},
"dependency": "required",
"disagreement": null,
"evidence_version": "ev-1"
},
{
"evidence_id": "ev_63c8c4e421f6ff66",
"kind": "transaction_facts",
"source": "chain_node",
"subject": {
"type": "transaction",
"ref": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
},
"source_reference": "block:80000000",
"observed_at": "2026-10-10T09:00:00Z",
"effective_at": "2026-10-10T09:00:00Z",
"temporal_scope": "TRANSACTION_TIME",
"coverage": "checked",
"freshness": {
"age_seconds": 0,
"stale": false,
"stale_after_seconds": null
},
"dependency": "required",
"disagreement": null,
"evidence_version": "ev-1"
},
{
"evidence_id": "ev_73e84774c4ced93d",
"kind": "aml_risk",
"source": "aml_provider",
"subject": {
"type": "transaction",
"ref": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
},
"source_reference": "transaction_risk_score",
"observed_at": null,
"effective_at": null,
"temporal_scope": "CHECK_TIME",
"coverage": "unavailable",
"freshness": {
"age_seconds": null,
"stale": false,
"stale_after_seconds": null
},
"dependency": "required",
"disagreement": null,
"evidence_version": "ev-1"
},
{
"evidence_id": "ev_7d0537ae6c2054d5",
"kind": "sanctions_list",
"source": "ofac",
"subject": {
"type": "transaction_addresses",
"ref": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
},
"source_reference": "configured_address_index",
"observed_at": "2026-10-10T09:00:00Z",
"effective_at": null,
"temporal_scope": "LIST_PUBLICATION",
"coverage": "checked",
"freshness": {
"age_seconds": 0,
"stale": false,
"stale_after_seconds": 172800
},
"dependency": "required",
"disagreement": null,
"evidence_version": "ev-1"
},
{
"evidence_id": "ev_2be872923c0687c9",
"kind": "sanctions_list",
"source": "eu",
"subject": {
"type": "transaction_addresses",
"ref": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
},
"source_reference": "configured_address_index",
"observed_at": "2026-10-10T09:00:00Z",
"effective_at": "2026-09-22T18:01:34Z",
"temporal_scope": "LIST_PUBLICATION",
"coverage": "checked",
"freshness": {
"age_seconds": 0,
"stale": false,
"stale_after_seconds": 3024000
},
"dependency": "required",
"disagreement": null,
"evidence_version": "ev-1"
},
{
"evidence_id": "ev_df2204c780968cb5",
"kind": "sanctions_list",
"source": "uk",
"subject": {
"type": "transaction_addresses",
"ref": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
},
"source_reference": "configured_address_index",
"observed_at": "2026-10-10T09:00:00Z",
"effective_at": "2026-10-02T00:00:00Z",
"temporal_scope": "LIST_PUBLICATION",
"coverage": "checked",
"freshness": {
"age_seconds": 0,
"stale": false,
"stale_after_seconds": 3024000
},
"dependency": "required",
"disagreement": null,
"evidence_version": "ev-1"
},
{
"evidence_id": "ev_76c33d7fb3a48fb7",
"kind": "sanctions_list",
"source": "un",
"subject": {
"type": "transaction_addresses",
"ref": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
},
"source_reference": "configured_address_index",
"observed_at": null,
"effective_at": null,
"temporal_scope": "LIST_PUBLICATION",
"coverage": "not_applicable",
"freshness": {
"age_seconds": null,
"stale": false,
"stale_after_seconds": null
},
"dependency": "not_applicable",
"disagreement": null,
"evidence_version": "ev-1"
},
{
"evidence_id": "ev_81b44db3a9445d39",
"kind": "token_authenticity",
"source": "token_registry",
"subject": {
"type": "token",
"ref": "TR7NHqjeKQxGTCi8q8ZY4pL8otSzgjLj6t"
},
"source_reference": "official",
"observed_at": "2026-10-10T09:00:00Z",
"effective_at": null,
"temporal_scope": "CHECK_TIME",
"coverage": "checked",
"freshness": {
"age_seconds": 0,
"stale": false,
"stale_after_seconds": null
},
"dependency": "required",
"disagreement": null,
"evidence_version": "ev-1"
}
],
"coverage_limitations": {
"runtime": [
"AML_UNAVAILABLE"
],
"product": [
"AML_TRANSACTION_LEVEL_ONLY",
"RISK_STATE_AS_OF_CHECK",
"SANCTIONS_CONFIGURED_LISTS_ONLY"
]
},
"obligation": null,
"reuse": null
}
Kecocokan daftar sanksi
Lihat respons JSON lengkap
{
"request_id": "example-sanctions-hit",
"tx_hash": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
"network": "tron",
"transaction_type": "TriggerSmartContract",
"transaction_category": "trc20_transfer",
"transaction_state": "confirmed",
"confirmations": 27,
"required_confirmations": 19,
"sender": "TF17BgPaZYbz8oxbjhriubPDsA7ArKoLX3",
"recipient": "TJRabPrwbZy45sbavfcjinPJC18kjpRTv8",
"token_contract": "TR7NHqjeKQxGTCi8q8ZY4pL8otSzgjLj6t",
"token_symbol": "USDT",
"decimals": 6,
"amount": "1250.000001",
"transfers": [
{
"index": 0,
"asset_type": "trc20",
"sender": "TF17BgPaZYbz8oxbjhriubPDsA7ArKoLX3",
"recipient": "TJRabPrwbZy45sbavfcjinPJC18kjpRTv8",
"token_contract": "TR7NHqjeKQxGTCi8q8ZY4pL8otSzgjLj6t",
"token_id": null,
"token_symbol": "USDT",
"decimals": 6,
"amount": "1250.000001",
"event_ref": "log:0",
"execution_status": "success"
}
],
"transfers_truncated": false,
"aml_risk_level": "low",
"schema_version": "0.3",
"policy_version": "b2b-tx-2026-10.4",
"sanctions_hit": true,
"direct_sanctions_match": true,
"indirect_sanctions_exposure": false,
"risk_exposure": false,
"key_exposure": [],
"token_authenticity": "official",
"recipient_match": true,
"token_match": true,
"amount_match": true,
"coverage": "complete",
"workflow_coverage": "complete",
"source_coverage": {
"sanctions_sources": {
"ofac": {
"status": "checked",
"checked_at": "2026-10-10T09:00:00Z",
"retrieved_at": "2026-10-10T09:00:00Z",
"data_updated_at": null,
"stale_after_seconds": 172800,
"scope": "configured_address_index",
"error_code": null
},
"eu": {
"status": "checked",
"checked_at": "2026-10-10T09:00:00Z",
"retrieved_at": "2026-10-02T23:49:24Z",
"data_updated_at": "2026-09-22T18:01:34Z",
"stale_after_seconds": 3024000,
"scope": "configured_address_index",
"error_code": null
},
"uk": {
"status": "checked",
"checked_at": "2026-10-10T09:00:00Z",
"retrieved_at": "2026-10-02T23:47:32Z",
"data_updated_at": "2026-10-02T00:00:00Z",
"stale_after_seconds": 3024000,
"scope": "configured_address_index",
"error_code": null
},
"un": {
"status": "not_applicable",
"checked_at": null,
"retrieved_at": null,
"data_updated_at": null,
"stale_after_seconds": null,
"scope": "configured_address_index",
"error_code": null
}
},
"transaction_sources": {
"chain_explorer": {
"status": "checked",
"checked_at": "2026-10-10T09:00:00Z",
"retrieved_at": "2026-10-10T09:00:00Z",
"data_updated_at": null,
"stale_after_seconds": null,
"scope": "transaction_facts",
"error_code": null
},
"chain_node": {
"status": "checked",
"checked_at": "2026-10-10T09:00:00Z",
"retrieved_at": "2026-10-10T09:00:00Z",
"data_updated_at": null,
"stale_after_seconds": null,
"scope": "transaction_facts",
"error_code": null
}
},
"risk_sources": {
"aml_provider": {
"status": "checked_freshness_unknown",
"checked_at": "2026-10-10T09:00:00Z",
"retrieved_at": "2026-10-10T09:00:00Z",
"data_updated_at": null,
"stale_after_seconds": null,
"scope": "transaction_risk_score",
"error_code": null
}
},
"universal_clearance": false
},
"freshness": {
"checked_at": "2026-10-10T09:00:00Z",
"transaction_at": "2026-10-10T09:00:00Z",
"risk_data_at": "2026-10-10T09:00:00Z",
"token_data_at": "2026-10-10T09:00:00Z",
"max_source_age_seconds": 0
},
"overall_state": "HIGH_RISK",
"environment": "live",
"reasons": [
{
"code": "DIRECT_SANCTIONS_MATCH",
"category": "sanctions",
"severity": "critical"
},
{
"code": "TX_FACTS_VERIFIED",
"category": "transaction",
"severity": "info"
},
{
"code": "TX_FINALIZED",
"category": "transaction",
"severity": "info"
},
{
"code": "AML_LOW",
"category": "risk",
"severity": "info"
},
{
"code": "TOKEN_OFFICIAL",
"category": "token",
"severity": "info"
}
],
"decision_id": null,
"direction": null,
"workflow_type": null,
"versions": {
"decision": "b2b-tx-2026-10.4",
"rules": {
"exposure": "b2b-exp-v2",
"sanctions_freshness": "sf-v1",
"billing": "final_answers_only",
"integrity": "int-v3",
"reuse": "reuse-v1",
"allocation": "alloc-v1"
},
"reason_codes": "rc-1",
"evidence_schema": "ev-1",
"contract": "0.3"
},
"transaction_status": "CONFIRMED",
"integrity_status": "MATCH",
"risk_status": "HIGH_RISK",
"coverage_status": "OK",
"status_drivers": {
"transaction": "TX_FINALIZED",
"integrity": null,
"risk": "DIRECT_SANCTIONS_MATCH",
"coverage": null,
"action": "DIRECT_SANCTIONS_MATCH"
},
"result_final": true,
"verification_final": true,
"risk_final": true,
"risk_retryable": false,
"risk_retry_after_seconds": null,
"retryable": false,
"retry_after_seconds": null,
"recommended_action": "HOLD_AND_ESCALATE",
"integrity": {
"status": "MATCH",
"selected_event_ref": "log:0",
"relevant_event_count": 1,
"comparisons": {
"recipient": {
"expected": "TJRabPrwbZy45sbavfcjinPJC18kjpRTv8",
"actual": "TJRabPrwbZy45sbavfcjinPJC18kjpRTv8",
"result": "MATCH"
},
"sender": {
"expected": null,
"actual": "TF17BgPaZYbz8oxbjhriubPDsA7ArKoLX3",
"result": "NOT_EVALUATED"
},
"token": {
"expected": "TR7NHqjeKQxGTCi8q8ZY4pL8otSzgjLj6t",
"actual": "TR7NHqjeKQxGTCi8q8ZY4pL8otSzgjLj6t",
"result": "MATCH"
},
"amount": {
"expected": "1250.000001",
"actual": "1250.000001",
"result": "EXACT",
"tolerance": null,
"delta": "0",
"delta_raw": "0"
},
"network": {
"expected": null,
"actual": "tron",
"result": "NOT_EVALUATED"
}
}
},
"risk": {
"status": "HIGH_RISK",
"driver": "DIRECT_SANCTIONS_MATCH",
"driver_evidence_ids": []
},
"evidence_items": [
{
"evidence_id": "ev_431b2fd74ad43ef5",
"kind": "transaction_facts",
"source": "chain_explorer",
"subject": {
"type": "transaction",
"ref": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
},
"source_reference": "block:80000000",
"observed_at": "2026-10-10T09:00:00Z",
"effective_at": "2026-10-10T09:00:00Z",
"temporal_scope": "TRANSACTION_TIME",
"coverage": "checked",
"freshness": {
"age_seconds": 0,
"stale": false,
"stale_after_seconds": null
},
"dependency": "required",
"disagreement": null,
"evidence_version": "ev-1"
},
{
"evidence_id": "ev_63c8c4e421f6ff66",
"kind": "transaction_facts",
"source": "chain_node",
"subject": {
"type": "transaction",
"ref": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
},
"source_reference": "block:80000000",
"observed_at": "2026-10-10T09:00:00Z",
"effective_at": "2026-10-10T09:00:00Z",
"temporal_scope": "TRANSACTION_TIME",
"coverage": "checked",
"freshness": {
"age_seconds": 0,
"stale": false,
"stale_after_seconds": null
},
"dependency": "required",
"disagreement": null,
"evidence_version": "ev-1"
},
{
"evidence_id": "ev_896f4ce46de5246c",
"kind": "aml_risk",
"source": "aml_provider",
"subject": {
"type": "transaction",
"ref": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
},
"source_reference": "transaction_risk_score",
"observed_at": "2026-10-10T09:00:00Z",
"effective_at": null,
"temporal_scope": "CHECK_TIME",
"coverage": "checked_freshness_unknown",
"freshness": {
"age_seconds": 0,
"stale": true,
"stale_after_seconds": null
},
"dependency": "required",
"disagreement": null,
"evidence_version": "ev-1"
},
{
"evidence_id": "ev_7d0537ae6c2054d5",
"kind": "sanctions_list",
"source": "ofac",
"subject": {
"type": "transaction_addresses",
"ref": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
},
"source_reference": "configured_address_index",
"observed_at": "2026-10-10T09:00:00Z",
"effective_at": null,
"temporal_scope": "LIST_PUBLICATION",
"coverage": "checked",
"freshness": {
"age_seconds": 0,
"stale": false,
"stale_after_seconds": 172800
},
"dependency": "required",
"disagreement": null,
"evidence_version": "ev-1"
},
{
"evidence_id": "ev_2be872923c0687c9",
"kind": "sanctions_list",
"source": "eu",
"subject": {
"type": "transaction_addresses",
"ref": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
},
"source_reference": "configured_address_index",
"observed_at": "2026-10-10T09:00:00Z",
"effective_at": "2026-09-22T18:01:34Z",
"temporal_scope": "LIST_PUBLICATION",
"coverage": "checked",
"freshness": {
"age_seconds": 0,
"stale": false,
"stale_after_seconds": 3024000
},
"dependency": "required",
"disagreement": null,
"evidence_version": "ev-1"
},
{
"evidence_id": "ev_df2204c780968cb5",
"kind": "sanctions_list",
"source": "uk",
"subject": {
"type": "transaction_addresses",
"ref": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
},
"source_reference": "configured_address_index",
"observed_at": "2026-10-10T09:00:00Z",
"effective_at": "2026-10-02T00:00:00Z",
"temporal_scope": "LIST_PUBLICATION",
"coverage": "checked",
"freshness": {
"age_seconds": 0,
"stale": false,
"stale_after_seconds": 3024000
},
"dependency": "required",
"disagreement": null,
"evidence_version": "ev-1"
},
{
"evidence_id": "ev_76c33d7fb3a48fb7",
"kind": "sanctions_list",
"source": "un",
"subject": {
"type": "transaction_addresses",
"ref": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
},
"source_reference": "configured_address_index",
"observed_at": null,
"effective_at": null,
"temporal_scope": "LIST_PUBLICATION",
"coverage": "not_applicable",
"freshness": {
"age_seconds": null,
"stale": false,
"stale_after_seconds": null
},
"dependency": "not_applicable",
"disagreement": null,
"evidence_version": "ev-1"
},
{
"evidence_id": "ev_81b44db3a9445d39",
"kind": "token_authenticity",
"source": "token_registry",
"subject": {
"type": "token",
"ref": "TR7NHqjeKQxGTCi8q8ZY4pL8otSzgjLj6t"
},
"source_reference": "official",
"observed_at": "2026-10-10T09:00:00Z",
"effective_at": null,
"temporal_scope": "CHECK_TIME",
"coverage": "checked",
"freshness": {
"age_seconds": 0,
"stale": false,
"stale_after_seconds": null
},
"dependency": "required",
"disagreement": null,
"evidence_version": "ev-1"
}
],
"coverage_limitations": {
"runtime": [],
"product": [
"AML_TRANSACTION_LEVEL_ONLY",
"RISK_STATE_AS_OF_CHECK",
"SANCTIONS_CONFIGURED_LISTS_ONLY"
]
},
"obligation": null,
"reuse": null
}
Rincian pembayaran tidak cocok
Lihat respons JSON lengkap
{
"request_id": "example-expected-mismatch",
"tx_hash": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
"network": "tron",
"transaction_type": "TriggerSmartContract",
"transaction_category": "trc20_transfer",
"transaction_state": "confirmed",
"confirmations": 27,
"required_confirmations": 19,
"sender": "TF17BgPaZYbz8oxbjhriubPDsA7ArKoLX3",
"recipient": "TJRabPrwbZy45sbavfcjinPJC18kjpRTv8",
"token_contract": "TR7NHqjeKQxGTCi8q8ZY4pL8otSzgjLj6t",
"token_symbol": "USDT",
"decimals": 6,
"amount": "1250.000001",
"transfers": [
{
"index": 0,
"asset_type": "trc20",
"sender": "TF17BgPaZYbz8oxbjhriubPDsA7ArKoLX3",
"recipient": "TJRabPrwbZy45sbavfcjinPJC18kjpRTv8",
"token_contract": "TR7NHqjeKQxGTCi8q8ZY4pL8otSzgjLj6t",
"token_id": null,
"token_symbol": "USDT",
"decimals": 6,
"amount": "1250.000001",
"event_ref": "log:0",
"execution_status": "success"
}
],
"transfers_truncated": false,
"aml_risk_level": "low",
"schema_version": "0.3",
"policy_version": "b2b-tx-2026-10.4",
"sanctions_hit": false,
"direct_sanctions_match": false,
"indirect_sanctions_exposure": false,
"risk_exposure": false,
"key_exposure": [],
"token_authenticity": "official",
"recipient_match": true,
"token_match": true,
"amount_match": false,
"coverage": "complete",
"workflow_coverage": "complete",
"source_coverage": {
"sanctions_sources": {
"ofac": {
"status": "checked",
"checked_at": "2026-10-10T09:00:00Z",
"retrieved_at": "2026-10-10T09:00:00Z",
"data_updated_at": null,
"stale_after_seconds": 172800,
"scope": "configured_address_index",
"error_code": null
},
"eu": {
"status": "checked",
"checked_at": "2026-10-10T09:00:00Z",
"retrieved_at": "2026-10-02T23:49:24Z",
"data_updated_at": "2026-09-22T18:01:34Z",
"stale_after_seconds": 3024000,
"scope": "configured_address_index",
"error_code": null
},
"uk": {
"status": "checked",
"checked_at": "2026-10-10T09:00:00Z",
"retrieved_at": "2026-10-02T23:47:32Z",
"data_updated_at": "2026-10-02T00:00:00Z",
"stale_after_seconds": 3024000,
"scope": "configured_address_index",
"error_code": null
},
"un": {
"status": "not_applicable",
"checked_at": null,
"retrieved_at": null,
"data_updated_at": null,
"stale_after_seconds": null,
"scope": "configured_address_index",
"error_code": null
}
},
"transaction_sources": {
"chain_explorer": {
"status": "checked",
"checked_at": "2026-10-10T09:00:00Z",
"retrieved_at": "2026-10-10T09:00:00Z",
"data_updated_at": null,
"stale_after_seconds": null,
"scope": "transaction_facts",
"error_code": null
},
"chain_node": {
"status": "checked",
"checked_at": "2026-10-10T09:00:00Z",
"retrieved_at": "2026-10-10T09:00:00Z",
"data_updated_at": null,
"stale_after_seconds": null,
"scope": "transaction_facts",
"error_code": null
}
},
"risk_sources": {
"aml_provider": {
"status": "checked_freshness_unknown",
"checked_at": "2026-10-10T09:00:00Z",
"retrieved_at": "2026-10-10T09:00:00Z",
"data_updated_at": null,
"stale_after_seconds": null,
"scope": "transaction_risk_score",
"error_code": null
}
},
"universal_clearance": false
},
"freshness": {
"checked_at": "2026-10-10T09:00:00Z",
"transaction_at": "2026-10-10T09:00:00Z",
"risk_data_at": "2026-10-10T09:00:00Z",
"token_data_at": "2026-10-10T09:00:00Z",
"max_source_age_seconds": 0
},
"overall_state": "REVIEW",
"environment": "live",
"reasons": [
{
"code": "EXPECTED_AMOUNT_MISMATCH",
"category": "expected",
"severity": "warning"
},
{
"code": "TX_FACTS_VERIFIED",
"category": "transaction",
"severity": "info"
},
{
"code": "TX_FINALIZED",
"category": "transaction",
"severity": "info"
},
{
"code": "AML_LOW",
"category": "risk",
"severity": "info"
},
{
"code": "NO_DIRECT_SANCTIONS_MATCH",
"category": "sanctions",
"severity": "info"
}
],
"decision_id": null,
"direction": null,
"workflow_type": null,
"versions": {
"decision": "b2b-tx-2026-10.4",
"rules": {
"exposure": "b2b-exp-v2",
"sanctions_freshness": "sf-v1",
"billing": "final_answers_only",
"integrity": "int-v3",
"reuse": "reuse-v1",
"allocation": "alloc-v1"
},
"reason_codes": "rc-1",
"evidence_schema": "ev-1",
"contract": "0.3"
},
"transaction_status": "CONFIRMED",
"integrity_status": "MISMATCH",
"risk_status": "NO_MATERIAL_SIGNAL",
"coverage_status": "OK",
"status_drivers": {
"transaction": "TX_FINALIZED",
"integrity": "EXPECTED_AMOUNT_MISMATCH",
"risk": null,
"coverage": null,
"action": "EXPECTED_AMOUNT_MISMATCH"
},
"result_final": true,
"verification_final": true,
"risk_final": true,
"risk_retryable": false,
"risk_retry_after_seconds": null,
"retryable": false,
"retry_after_seconds": null,
"recommended_action": "MANUAL_REVIEW",
"integrity": {
"status": "MISMATCH",
"selected_event_ref": "log:0",
"relevant_event_count": 1,
"comparisons": {
"recipient": {
"expected": "TJRabPrwbZy45sbavfcjinPJC18kjpRTv8",
"actual": "TJRabPrwbZy45sbavfcjinPJC18kjpRTv8",
"result": "MATCH"
},
"sender": {
"expected": null,
"actual": "TF17BgPaZYbz8oxbjhriubPDsA7ArKoLX3",
"result": "NOT_EVALUATED"
},
"token": {
"expected": "TR7NHqjeKQxGTCi8q8ZY4pL8otSzgjLj6t",
"actual": "TR7NHqjeKQxGTCi8q8ZY4pL8otSzgjLj6t",
"result": "MATCH"
},
"amount": {
"expected": "1251.000001",
"actual": "1250.000001",
"result": "UNDERPAID",
"tolerance": null,
"delta": "-1",
"delta_raw": "-1000000"
},
"network": {
"expected": null,
"actual": "tron",
"result": "NOT_EVALUATED"
}
}
},
"risk": {
"status": "NO_MATERIAL_SIGNAL",
"driver": null,
"driver_evidence_ids": []
},
"evidence_items": [
{
"evidence_id": "ev_431b2fd74ad43ef5",
"kind": "transaction_facts",
"source": "chain_explorer",
"subject": {
"type": "transaction",
"ref": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
},
"source_reference": "block:80000000",
"observed_at": "2026-10-10T09:00:00Z",
"effective_at": "2026-10-10T09:00:00Z",
"temporal_scope": "TRANSACTION_TIME",
"coverage": "checked",
"freshness": {
"age_seconds": 0,
"stale": false,
"stale_after_seconds": null
},
"dependency": "required",
"disagreement": null,
"evidence_version": "ev-1"
},
{
"evidence_id": "ev_63c8c4e421f6ff66",
"kind": "transaction_facts",
"source": "chain_node",
"subject": {
"type": "transaction",
"ref": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
},
"source_reference": "block:80000000",
"observed_at": "2026-10-10T09:00:00Z",
"effective_at": "2026-10-10T09:00:00Z",
"temporal_scope": "TRANSACTION_TIME",
"coverage": "checked",
"freshness": {
"age_seconds": 0,
"stale": false,
"stale_after_seconds": null
},
"dependency": "required",
"disagreement": null,
"evidence_version": "ev-1"
},
{
"evidence_id": "ev_896f4ce46de5246c",
"kind": "aml_risk",
"source": "aml_provider",
"subject": {
"type": "transaction",
"ref": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
},
"source_reference": "transaction_risk_score",
"observed_at": "2026-10-10T09:00:00Z",
"effective_at": null,
"temporal_scope": "CHECK_TIME",
"coverage": "checked_freshness_unknown",
"freshness": {
"age_seconds": 0,
"stale": true,
"stale_after_seconds": null
},
"dependency": "required",
"disagreement": null,
"evidence_version": "ev-1"
},
{
"evidence_id": "ev_7d0537ae6c2054d5",
"kind": "sanctions_list",
"source": "ofac",
"subject": {
"type": "transaction_addresses",
"ref": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
},
"source_reference": "configured_address_index",
"observed_at": "2026-10-10T09:00:00Z",
"effective_at": null,
"temporal_scope": "LIST_PUBLICATION",
"coverage": "checked",
"freshness": {
"age_seconds": 0,
"stale": false,
"stale_after_seconds": 172800
},
"dependency": "required",
"disagreement": null,
"evidence_version": "ev-1"
},
{
"evidence_id": "ev_2be872923c0687c9",
"kind": "sanctions_list",
"source": "eu",
"subject": {
"type": "transaction_addresses",
"ref": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
},
"source_reference": "configured_address_index",
"observed_at": "2026-10-10T09:00:00Z",
"effective_at": "2026-09-22T18:01:34Z",
"temporal_scope": "LIST_PUBLICATION",
"coverage": "checked",
"freshness": {
"age_seconds": 0,
"stale": false,
"stale_after_seconds": 3024000
},
"dependency": "required",
"disagreement": null,
"evidence_version": "ev-1"
},
{
"evidence_id": "ev_df2204c780968cb5",
"kind": "sanctions_list",
"source": "uk",
"subject": {
"type": "transaction_addresses",
"ref": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
},
"source_reference": "configured_address_index",
"observed_at": "2026-10-10T09:00:00Z",
"effective_at": "2026-10-02T00:00:00Z",
"temporal_scope": "LIST_PUBLICATION",
"coverage": "checked",
"freshness": {
"age_seconds": 0,
"stale": false,
"stale_after_seconds": 3024000
},
"dependency": "required",
"disagreement": null,
"evidence_version": "ev-1"
},
{
"evidence_id": "ev_76c33d7fb3a48fb7",
"kind": "sanctions_list",
"source": "un",
"subject": {
"type": "transaction_addresses",
"ref": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
},
"source_reference": "configured_address_index",
"observed_at": null,
"effective_at": null,
"temporal_scope": "LIST_PUBLICATION",
"coverage": "not_applicable",
"freshness": {
"age_seconds": null,
"stale": false,
"stale_after_seconds": null
},
"dependency": "not_applicable",
"disagreement": null,
"evidence_version": "ev-1"
},
{
"evidence_id": "ev_81b44db3a9445d39",
"kind": "token_authenticity",
"source": "token_registry",
"subject": {
"type": "token",
"ref": "TR7NHqjeKQxGTCi8q8ZY4pL8otSzgjLj6t"
},
"source_reference": "official",
"observed_at": "2026-10-10T09:00:00Z",
"effective_at": null,
"temporal_scope": "CHECK_TIME",
"coverage": "checked",
"freshness": {
"age_seconds": 0,
"stale": false,
"stale_after_seconds": null
},
"dependency": "required",
"disagreement": null,
"evidence_version": "ev-1"
}
],
"coverage_limitations": {
"runtime": [],
"product": [
"AML_TRANSACTION_LEVEL_ONLY",
"RISK_STATE_AS_OF_CHECK",
"SANCTIONS_CONFIGURED_LISTS_ONLY"
]
},
"obligation": null,
"reuse": null
}
Zero-Friction v0.1
POST /v1/check menambahkan konteks jaringan opsional dan respons ringkas. Permintaan dengan jaringan eksplisit tidak pernah berpindah jaringan. NETWORK_REQUIRED dan NETWORK_AMBIGUOUS memerlukan isi yang diperbaiki serta kunci idempotensi baru; replay mempertahankan jaringan dan hasil semula. Contoh singkat cURL, Node.js, Python, dan PHP, normalisasi alamat, serta matriks aset ada di panduan tersebut.
Pemeriksaan dompet
POST /v1/wallet/check menggunakan loop pengulangan yang sama dengan batas waktu klien 35 detik dan isi permintaan berupa alamat dompet; panduan tersebut memuat cuplikan cURL, Python, dan TypeScript.
Status transaksi
transaction_state menjelaskan apa yang dilaporkan blockchain tentang transaksi. Kolom ini tidak menggantikan penilaian risiko atau pemeriksaan cakupan.
transaction_state adalah kolom kontrak 0.2 dalam huruf kecil dan mempertahankan unknown untuk fakta yang tidak dapat menetapkan status. Kontrak 0.3 menjawab pertanyaan yang sama di transaction_status (CONFIRMED, PENDING, FAILED, NOT_FOUND, INSUFFICIENT; INSUFFICIENT mencakup unknown, sumber yang tidak sepakat tentang transaksi itu sendiri (hash yang dikembalikan, keberadaannya, bloknya, status eksekusinya, atau finalitasnya), dan ketiadaan yang tidak dikonfirmasi semua sumber; ketidaksepakatan yang hanya menyangkut isinya (transfer, pengirim, penerima, atau jenis transaksi) tidak mengubah transaction_status dan terlihat sebagai coverage_status: DISAGREEMENT dengan verification_final: false), yang juga menerapkan ambang finalitas: transaksi confirmed yang belum mencapainya adalah PENDING. Gunakan transaction_status; lihat sumbu status.
| Nilai | Arti | Penanganan |
|---|---|---|
confirmed |
Fakta on-chain melaporkan konfirmasi. | Periksa juga jumlah konfirmasi, penilaian keseluruhan, dan cakupan. |
pending |
Transaksi terlihat, tetapi finalitas belum lengkap. | Jangan catat pembayaran sebagai selesai. Respons ini tidak ditagih. Jadwalkan pengamatan terpisah nanti dengan kunci idempotensi baru dan jeda yang makin panjang: untuk TRON, finalitas tercapai sekitar satu menit setelah transaksi disiarkan. Respons gratis dihitung dalam batas harian pemeriksaan yang tidak ditagih (lihat batas dan kuota). |
failed |
Eksekusi gagal atau dibatalkan. | Jangan anggap transfer yang diharapkan telah diterima. |
not_found |
Transaksi tidak ditemukan dalam data yang tersedia. | Periksa jaringan dan hash. Ketiadaan catatan bukan bukti pembayaran selesai. |
unknown |
Data yang ada belum dapat menentukan status. | Tangani sebagai data yang belum lengkap. |
Konfirmasi TRON
TRON v1 memakai kebijakan finalitas 19 konfirmasi bersama bukti on-chain yang sudah final. Bandingkan confirmations dengan required_confirmations. Status transaksi saja tidak menetapkan cakupan risiko. Contoh respons menunjukkan status-status ini.
Finalitas Ethereum dan TON
Ethereum memerlukan blok kanonis pada atau di bawah head finalized dari sumber yang dikonfigurasi; head latest atau blok apa pun sebelum head finalized tidak cukup. TON memerlukan finalitas masterchain yang dinyatakan penyedia untuk setiap transaksi dan, secara terpisah, trace pesan yang lengkap. Nilai 1 pada required_confirmations untuk adaptor ini tidak menggantikan kedua kebijakan finalitas tersebut. Lihat rincian jaringan.
Penilaian keseluruhan
overall_state menggabungkan fakta transaksi, pemeriksaan risiko, sanksi, dan token, serta perbandingan pembayaran yang diharapkan menjadi satu status.
| Nilai | Cara membacanya |
|---|---|
CLEAR |
Pemeriksaan yang berlaku selesai tanpa masalah yang teridentifikasi dan syarat finalitas terpenuhi. Ini bukan jaminan bebas risiko di masa depan. |
REVIEW |
Ada hal yang perlu ditinjau, misalnya finalitas tertunda, eksekusi gagal, risiko meningkat, atau rincian pembayaran tidak cocok. |
HIGH_RISK |
Ada temuan berisiko tinggi atau kritis, seperti kecocokan daftar sanksi, risiko AML tinggi, atau token palsu. |
LIMITED_DATA |
Data tidak lengkap, tidak didukung, atau saling bertentangan. Jangan pernah perlakukan sebagai CLEAR. |
Kontrak 0.3 juga menjawab empat pertanyaan dasarnya secara terpisah, menyatakan apakah jawaban sudah final, dan menyarankan tindakan: lihat sumbu status dan tindakan yang disarankan. overall_state tetap mengikuti aturan di bawah ini; temuan buku besar dan konteks klien (kewajiban lain yang sudah dibayar oleh transaksi ini, eksekusi ganda, setoran yang sudah dikreditkan) hanya dapat menaikkannya menjadi REVIEW.
Pada kontrak 0.3, ambil keputusan berdasarkan sumbu, bukan berdasarkan status ini. overall_state adalah ringkasan satu kata yang dipertahankan untuk integrasi 0.2, dan di dalamnya kekurangan data lebih diutamakan daripada ketidakcocokan: pembayaran yang pasti salah (verification_final: true, integrity_status: MISMATCH) tetap terbaca LIMITED_DATA jika penyaringan risiko tidak dapat berjalan. Gunakan verification_final dan integrity_status untuk pembayaran, serta risk_status dan recommended_action untuk tindakan.
Bertindak berdasarkan status
Status adalah hasil pemeriksaan, bukan instruksi pembayaran: kebijakan Anda yang memutuskan. Pilot mitra desain menyepakati pemetaan berikut:
| Respons | Tindakan yang disarankan |
|---|---|
CLEAR, coverage: complete, setiap *_match yang diminta bernilai true |
Layak dikreditkan sesuai kebijakan Anda sendiri. |
REVIEW |
Tinjauan manual. TX_PENDING_CONFIRMATIONS: tunggu, lalu periksa lagi dengan kunci baru. EXPECTED_*_MISMATCH: pembayaran ini bukan yang Anda harapkan; kode ini tidak pernah muncul selama transaction_status bernilai PENDING. |
HIGH_RISK |
Tahan dana dan eskalasikan ke tim kepatuhan. |
LIMITED_DATA |
Jangan kreditkan secara otomatis. Dengan verification_final: true dan integrity_status: MISMATCH pembayaran pasti salah: tinjau, mengulang tidak akan mengubahnya. Selain itu, ulangi nanti dengan kunci baru; setelah jumlah percobaan yang terbatas, tinjau secara manual. Selama sumber tidak sepakat tentang transaksi itu sendiri, jawabannya belum final dan masih dapat membawa EXPECTED_*_MISMATCH (lihat sumbu status). |
429, 5xx, 409 idempotency_in_progress |
Ulangi dengan kunci idempotensi yang sama setelah Retry-After. |
404 transaction_not_found (/v1/check) |
Periksa hash; periksa lagi nanti dengan kunci baru. |
422 NETWORK_REQUIRED, 422 NETWORK_AMBIGUOUS |
Kirim ulang dengan network dan kunci baru. |
4xx lainnya |
Galat integrasi: perbaiki permintaan, jangan diulang. |
Baca status bersama cakupan
Cakupan dan status saling independen. Kecocokan sanksi, token palsu, atau risiko AML tinggi yang sudah diketahui diprioritaskan sebagai HIGH_RISK, meskipun fakta tidak lengkap atau bertentangan. Tanpa temuan seperti itu, kekurangan data wajib menghasilkan LIMITED_DATA. /v1/check melaporkan status yang sama dengan huruf kecil pada state dan menyediakan semua objek alasan pada details.reasons.
Sumbu status dan tindakan yang disarankan
Kontrak 0.3 menjawab empat pertanyaan terpisah tentang sebuah transaksi alih-alih meleburnya menjadi satu status. Setiap jawaban memiliki statusnya sendiri dan kode alasan yang menetapkannya. overall_state tetap dikembalikan dan dihitung dengan aturan 0.2, sehingga integrasi yang dibangun di atasnya tetap berfungsi.
Empat sumbu
| Kolom | Nilai | Pertanyaan |
|---|---|---|
transaction_status |
CONFIRMED, PENDING, FAILED, NOT_FOUND, INSUFFICIENT |
Apakah transaksi telah dieksekusi, dan apakah itu final? |
integrity_status |
MATCH, MISMATCH, AMBIGUOUS, NOT_EVALUATED, INSUFFICIENT |
Apakah transaksi membayar sesuai yang Anda harapkan? |
risk_status |
NO_MATERIAL_SIGNAL, REVIEW, HIGH_RISK, INSUFFICIENT, NOT_EVALUATED |
Apakah ada sinyal risiko atau sanksi yang material terkait transaksi ini? |
coverage_status |
OK, DEGRADED, SKIPPED, UNAVAILABLE, DISAGREEMENT |
Apakah sumber yang dibutuhkan jawaban ini merespons, dan apakah semuanya sepakat? |
status_drivers menyebutkan kode alasan di balik setiap sumbu dan di balik recommended_action (transaction, integrity, risk, coverage, action); null berarti tidak ada yang perlu dijelaskan. Saat recommended_action bernilai MANUAL_REVIEW, status_drivers.action menyebutkan satu temuan: TX_REVERTED pada transaksi FAILED, selain itu temuan yang paling berat. Di antara temuan yang sama beratnya, yang ditunjukkan rantai tentang transaksi itu sendiri didahulukan, lalu pemeriksaan risiko (AML, sanksi, token), lalu perbandingan pembayaran dan temuan lainnya. Jadi jika ketidakcocokan pembayaran yang final diperiksa saat sumber AML tidak tersedia, status_drivers.action biasanya menampilkan AML_UNAVAILABLE, bukan ketidakcocokannya: lihat status_drivers.integrity dan reasons untuk perbandingan pembayaran, dan driver masing-masing sumbu untuk penyebabnya.
Transaksi
CONFIRMED: sudah dieksekusi dan melewati ambang finalitas jaringan.PENDING: berada di mempool atau di dalam blok, tetapi belum mencapai ambang finalitas. Tidak pernah final.FAILED: dieksekusi lalu dibatalkan (revert). Jika tidak ada transfer di dalamnya yang dieksekusi, tidak ada yang dibayarkan; di TON, trace yang gagal masih dapat memuat bagian yang benar-benar dieksekusi, jadi bacaintegrity_statusdanrecommended_action.NOT_FOUND: setiap sumber memastikan transaksi tidak ada. Transaksi masih mungkin muncul.INSUFFICIENT: sumber tidak dapat memastikan faktanya, atau saling bertentangan tentang keberadaan transaksi, statusnya, atau finalitasnya.
Integritas
MATCH: setelah finalitas jaringan, tepat satu transfer yang dieksekusi membayar penerima yang diharapkan dengan token dan jumlah yang diharapkan, dalam batasamount_tolerancejika Anda mengirimnya. Beberapa bagian dalam satu transaksi yang jumlahnya bila digabung sama dengan jumlah yang diharapkan juga dianggap cocok (SPLIT_WITHIN_TX).MISMATCH: tidak ada transfer yang dieksekusi yang sesuai.integrity.comparisonsmenunjukkan kolom mana yang berbeda dan, untuk jumlah,UNDERPAIDatauOVERPAIDbesertadelta.AMBIGUOUS: beberapa transfer yang dieksekusi sama-sama sesuai; tidak ada yang dialokasikan.NOT_EVALUATED: transaksi pending, Anda tidak mengirim apa pun untuk dibandingkan, atau transaksi gagal dan tidak ada apa pun di dalamnya yang dieksekusi (panggilan token yang dibatalkan biasanya tidak meninggalkan baris transfer sama sekali).INSUFFICIENT: Anda mengirim nilai yang diharapkan, tetapi data transfer yang diperlukan untuk membandingkannya tidak tersedia, sumber saling bertentangan tentang transfernya, kewajiban yang Anda sebutkan tidak memiliki instruksi yang tercatat (INSTRUCTION_UNAVAILABLE), atau transaksi gagal padahal sebuah transfer di dalamnya tereksekusi (trace TON), sehingga data on-chain saja tidak cukup untuk memastikan apakah pembayaran terjadi.
Perpindahan dana yang tidak dieksekusi tidak pernah dianggap cocok: transfer yang dibatalkan ke alamat yang benar bernilai NOT_EVALUATED, dan recipient_match, token_match, serta amount_match-nya bernilai null.
Risiko
HIGH_RISK mengalahkan REVIEW, yang mengalahkan INSUFFICIENT. NO_MATERIAL_SIGNAL berarti penyaringan yang berlaku telah dijalankan dan tidak menemukan hal yang material; ini bukan izin. NOT_EVALUATED berarti risiko tidak berlaku (transaksi gagal atau tidak ada). Blok risk mengulang status tersebut beserta driver dan driver_evidence_ids, yaitu item bukti yang menjadi dasar driver itu. Setiap baris paparan penyedia di key_exposure membawa grade yang diberikan oleh kebijakan paparan.
Cakupan
DISAGREEMENT mengalahkan UNAVAILABLE (kelompok sumber yang wajib tidak menjawab), yang mengalahkan DEGRADED (hanya satu sumber rantai, daftar yang kedaluwarsa, aset tanpa dukungan AML), lalu SKIPPED (sumber risiko tidak dipanggil karena transaksi gagal atau tidak ada) dan OK.
Finalitas verifikasi dan risiko
verification_final menjelaskan finalitas fakta pembayaran dan perbandingannya. result_final adalah aliasnya; retryable adalah kebalikannya, dan retry_after_seconds menyarankan waktu tunggu untuk observasi verifikasi baru. Transaksi yang final di jaringan dan cocok tepat dengan rincian yang diharapkan mengembalikan verification_final: true serta integrity_status: MATCH meskipun KYT tidak tersedia dan risk_status: INSUFFICIENT.
risk_final bernilai true ketika pemeriksaan ulang tidak lagi diharapkan mengisi kekurangan dalam penilaian risiko: transaksi sudah final, sumber-sumbernya sepakat, dan tidak ada pemeriksaan AML, sanksi, atau token yang mengalami kekurangan sementara (gangguan atau daftar yang usang). Selama transaksi masih pending atau tidak ditemukan, risk_final bernilai false apa pun risk_status-nya, dan risk_retry_after_seconds sama dengan retry_after_seconds: risiko dinilai ulang setelah transaksi final. risk_retryable adalah kebalikannya; risk_retry_after_seconds menyarankan waktu tunggu pemeriksaan risiko berikutnya. Batasan cakupan permanen dapat bersifat final dengan status INSUFFICIENT: finalitas bukan izin. KYT menjelaskan risiko pada saat pemeriksaan dan dapat berubah kemudian, bahkan setelah penilaian final.
Transaksi pending mengembalikan integrity_status: NOT_EVALUATED, verification_final: false, penanda pencocokan null, NOT_EVALUATED untuk setiap perbandingan yang diminta, dan tanpa alasan EXPECTED_*_MISMATCH: ketentuan yang berbeda baru dilaporkan setelah transaksi final. Ketika sumber tidak sepakat tentang transaksi itu sendiri (transaction_status: INSUFFICIENT, coverage_status: DISAGREEMENT), jawabannya juga belum final, tetapi transfer yang dilaporkan sumber tetap dibandingkan dan dapat membawa EXPECTED_*_MISMATCH: berpeganglah pada verification_final: false dan periksa lagi. Transfer yang diamati tetap menjadi bukti, bukan kecocokan pembayaran final. Waktu tunggu verifikasi adalah 5–120 detik untuk finalitas pending, 15 detik untuk transaksi yang tidak ada, atau 30 detik untuk kekurangan sumber rantai sementara. Kekurangan KYT sementara menyarankan pengulangan risiko terpisah setelah 30 detik. Ketika sumber AML melaporkan error_code spend_cap (batas pengeluaran harian organisasi Anda untuk sumber berbayar tercapai, atau pengeluaran saat ini tidak dapat dicatat) atau daily_cap (plafon harian sumber AML untuk seluruh layanan tercapai), batas yang tercapai direset pukul 00:00 UTC, dan pemeriksaan baru sebelum waktu itu biasanya memberi kekurangan yang sama; lihat batas. Pada transaksi yang tidak ditemukan, risk_retryable bernilai true meskipun risk_status adalah NOT_EVALUATED: risiko dinilai setelah transaksi muncul.
KYT yang tidak tersedia tidak membuka kembali verifikasi final dan tidak pernah mengizinkan PROCEED: MATCH dengan risk_status: INSUFFICIENT menyarankan MANUAL_REVIEW. Hanya jawaban final dengan cakupan lengkap yang ditagih; verifikasi final dengan cakupan KYT parsial tetap gratis. Gunakan Idempotency-Key baru untuk observasi baru; kunci yang sama mengembalikan jawaban tersimpan dengan kebijakan aslinya.
Tindakan yang disarankan
recommended_action adalah tindakan yang didukung oleh jawaban, bukan instruksi. Kebijakan Anda yang memutuskan, dan Anda mencatat apa yang Anda lakukan pada keputusan.
| Nilai | Kapan |
|---|---|
HOLD_AND_ESCALATE |
risk_status: HIGH_RISK. |
RECHECK_LATER |
Verifikasi belum final: pending, transaksi tidak ada, kekurangan sumber rantai sementara, atau pertentangan antarsumber. Pemeriksaan dengan direction: "OUTGOING" yang transaksinya tidak ditemukan menambahkan ATTEMPT_MAY_STILL_LAND. |
NOT_EXECUTED |
Transaksi gagal dan tidak ada transfer di dalamnya yang dieksekusi. Transaksi gagal yang salah satu bagiannya dieksekusi bernilai MANUAL_REVIEW, tidak pernah izin untuk melanjutkan. |
MANUAL_REVIEW |
Ada temuan yang perlu ditinjau: risk_status: INSUFFICIENT, risiko REVIEW, MISMATCH, AMBIGUOUS, integritas INSUFFICIENT, pemakaian ulang oleh kewajiban lain, eksekusi ganda, atau setoran yang sudah dikreditkan. |
CONFIRM_INTERNAL_STATE |
Kondisi on-chain sudah beres, tetapi ChainZap tidak dapat melihat sisi Anda: tidak ada kewajiban yang disebutkan, pembayaran tidak diketahui sebagai pembayaran keluar, tidak ada yang dibandingkan, atau customer_context tidak menyatakan NOT_CREDITED. Periksa catatan Anda sendiri sebelum bertindak. |
PROCEED |
Kecocokan bersih dengan kewajiban keluar yang tercatat dan buku besar yang bersih, atau pembayaran yang Anda nyatakan NOT_CREDITED. |
Pembayaran masuk tidak pernah bernilai PROCEED kecuali Anda mengirim customer_context.credit_status: "NOT_CREDITED"; CREDITED menaikkan jawaban menjadi REVIEW dengan ALREADY_CREDITED, dan allocation_status: UNKNOWN membuatnya tetap CONFIRM_INTERNAL_STATE. Jika pemeriksaan tidak menyertakan direction, arahnya diambil dari arah yang tercatat pada kewajiban, lalu dari workflow_type: PAYOUT dan REFUND adalah pembayaran keluar, DEPOSIT dan INVOICE pembayaran masuk. Tanpa customer_context.credit_status: "NOT_CREDITED", pembayaran yang arahnya tetap tidak diketahui tidak pernah bernilai PROCEED.
Bukti dan batasan
evidence_items mencantumkan dasar jawaban: sumber rantai, penyedia AML, setiap daftar sanksi, dan pemeriksaan token. Setiap item memiliki evidence_id, kind, source yang netral, subject, source_reference (misalnya blok), observed_at (saat ChainZap membacanya), effective_at (waktu yang dirujuk fakta tersebut, misalnya waktu blok atau tanggal daftar), coverage, freshness, dependency (required, atau not_applicable jika sumber tersebut tidak berlaku untuk transaksi ini), evidence_version, dan, jika sumber saling bertentangan, disagreement.fields. Item AML membawa temporal_scope: "CHECK_TIME": penyedia melaporkan kondisi risiko pada saat pemeriksaan, bukan pada saat pembayaran.
coverage_limitations memisahkan apa yang membatasi jawaban ini (runtime) dari apa yang tidak pernah dicakup produk untuk jaringan atau aset ini (product, misalnya AML_TRANSACTION_LEVEL_ONLY atau SANCTIONS_CONFIGURED_LISTS_ONLY). Batasan produk tidak membuat jawaban dapat diulang.
Versi
versions menyebutkan semua hal yang membentuk jawaban: decision (sama dengan policy_version), rules (aturan paparan, kesegaran sanksi, penagihan, integritas, pemakaian ulang, dan alokasi), reason_codes, evidence_schema, dan contract. Simpan bersama keputusan jika Anda perlu menjelaskan jawaban tersebut di kemudian hari.
Kelengkapan data
Cakupan lengkap dan parsial
coverage: complete berarti pemeriksaan bukti yang berlaku memenuhi persyaratannya untuk respons ini. Ini tidak berarti transaksi bebas risiko; pemeriksaan lengkap tetap dapat melaporkan HIGH_RISK. coverage: partial berarti satu atau lebih sumber wajib, pemetaan aset, pemeriksaan token, atau fakta transaksi tidak tersedia, tidak didukung, atau tidak konsisten.
workflow_coverage menunjukkan penyelesaian pemeriksaan ini; coverage adalah alias kompatibilitasnya. complete tidak pernah berarti izin kepatuhan universal. source_coverage.sanctions_sources melaporkan OFAC/EU/UK/UN secara terpisah: checked, checked_stale, checked_freshness_unknown, not_checked, not_applicable, atau unavailable. Di source_coverage.risk_sources, checked_freshness_unknown adalah status normal untuk penyaringan AML yang selesai: sumber AML tidak memberi tanggal pada datanya, sehingga item buktinya juga menunjukkan freshness.stale: true. Ini tidak membuat pemeriksaan menjadi parsial.
Kesegaran daftar sanksi
Setiap daftar sanksi dinilai menurut jendela kesegarannya sendiri (kebijakan sf-v1, bagian dari policy_version). Ini kebijakan internal, bukan jaminan penyedia:
| Daftar | Segar selama | Dasar |
|---|---|---|
| OFAC | 48 jam | Sinkronisasi terakhir yang berhasil dengan cermin daftar SDN. retrieved_at melaporkannya; tanggal publikasi SDN tidak tersedia, sehingga data_updated_at bernilai null. |
| EU, UK | 35 hari | Penyusunan ulang terakhir dari publikasi resmi, dilakukan setiap bulan. data_updated_at adalah tanggal publikasi, retrieved_at adalah waktu penyusunan ulang. |
| UN | not_applicable |
Daftar Dewan Keamanan PBB tidak memublikasikan alamat kripto. |
Daftar yang kedaluwarsa, yang kesegarannya tidak dapat dipastikan, atau yang tidak tersedia tidak dapat mendukung jawaban bersih: pemeriksaan melaporkan SANCTIONS_DATA_STALE atau SANCTIONS_UNAVAILABLE, coverage: partial, dan LIMITED_DATA, serta tidak ditagih. Temuan risiko tinggi yang sudah diketahui tetap diutamakan. stale_after_seconds pada setiap sumber menyatakan jendelanya.
direct_sanctions_match berarti alamat cocok persis dengan indeks yang dikonfigurasi. false berarti tidak ada kecocokan dalam indeks tersebut, sesuai cakupan dan kesegarannya. indirect_sanctions_exposure berarti penyedia risiko transaksi melaporkan paparan sanksi berapa pun besarnya, termasuk paparan pihak lawan yang disebut “direct” oleh penyedia; ini bukan bukti bahwa pihak transaksi tercantum dalam daftar. risk_exposure menunjukkan kategori paparan lain berapa pun besarnya atau peristiwa peretasan. sanctions_hit yang lama hanya menjadi alias direct_sanctions_match. Ketika sumber AML tidak tersedia, penanda paparan bernilai null; pencocokan lokal yang selesai masih dapat bernilai false.
Bagaimana paparan menggeser status
Kedua penanda paparan menyatakan bahwa penyedia melaporkan sesuatu; apakah hal itu menggeser status bergantung pada seberapa dekat dan seberapa besar paparannya (kebijakan b2b-exp-v2). Baris yang dilaporkan tetap ada di key_exposure (paling banyak 50, setelah kecocokan daftar lokal jika ada), mulai dari yang paling signifikan, beserta jumlah langkah, porsi, dan grade yang diberikan kebijakan untuk setiap baris (high, review, minor). percent bernilai null jika porsinya tidak diketahui atau sumbernya tidak mengizinkan porsi itu ditampilkan.
| Baris penyedia | Langkah dan porsi | Dampak |
|---|---|---|
| Entitas yang disanksi | paling jauh 1 langkah dan minimal 5% | HIGH_RISK, INDIRECT_SANCTIONS_EXPOSURE |
| Entitas yang disanksi | paling jauh 1 langkah dan di bawah 5%; minimal 1% pada langkah berapa pun; atau porsi tidak diketahui | REVIEW, SANCTIONS_EXPOSURE_REVIEW |
| Entitas yang disanksi | 2 langkah atau lebih dan di bawah 1% | tidak berubah, SANCTIONS_EXPOSURE_MINOR |
| Kategori lain | sampai 2 langkah, dengan porsi minimal 1% atau porsi tidak diketahui; peristiwa peretasan apa pun | REVIEW, RISK_EXPOSURE |
| Kategori lain | lebih jauh atau lebih kecil | tidak berubah, RISK_EXPOSURE_MINOR |
| Kategori tidak dikenali atau kosong | sama seperti kategori lain | REVIEW, UNRECOGNIZED_PROVIDER_LABEL; atau tidak berubah, UNRECOGNIZED_PROVIDER_LABEL_MINOR |
Kategori yang tidak dikenali ChainZap tidak pernah diabaikan: kategori itu dinilai seperti kategori risiko lainnya dan disebutkan namanya, sehingga temuan asing yang dekat atau besar masuk ke peninjauan, dan temuan yang jauh dan kecil tetap dilaporkan (UNRECOGNIZED_PROVIDER_LABEL_MINOR). Kategori yang dikenali adalah sanctioned_entity, illicit_activity, mixer, risk_exchange, gambling, dan bridge.
Ambang batas ini dikalibrasi pada sampel transfer USDT biasa di TRON: dengan aturan sebelumnya, yang menaikkan setiap jejak sanksi tidak langsung, sebagian besar transfer itu menjadi HIGH_RISK; dengan aturan ini, risk_status: HIGH_RISK bertumpu pada kecocokan daftar yang persis, porsi material yang berjarak satu langkah, atau tingkat AML tinggi, dan risk.driver menyebutkan yang mana. Kecocokan sanksi lokal yang persis untuk pihak transaksi selalu menghasilkan HIGH_RISK. Terapkan aturan Anda sendiri yang lebih ketat pada key_exposure jika kebijakan kepatuhan Anda memerlukannya.
Setiap sumber memuat checked_at (evaluasi ini), retrieved_at (waktu pengambilan respons atau indeks jarak jauh), dan data_updated_at (tanggal daftar sumber jika diketahui). Pengambilan baru tidak membuktikan publikasi yang baru. Sumber AML tidak memberikan tanggal data dasarnya; nilainya tetap null. freshness.max_source_age_seconds yang lama hanya mengukur usia respons yang diambil, bukan daftar sanksi. source_coverage.universal_clearance selalu false.
- Risiko tidak diketahui:
aml_risk_level="unknown". - Token belum terverifikasi:
token_authenticity="unknown"; simbol token tidak membuktikan keasliannya.
LIMITED_DATA adalah respons bisnis normal dengan HTTP 200, bukan selalu galat transport.
Waktu data
Baca freshness.checked_at, stempel waktu bukti, dan max_source_age_seconds. Stempel waktu sumber bernilai null berarti waktunya tidak diketahui. Replay idempoten mengembalikan hasil dan ID permintaan semula; ini bukan pengamatan baru. Pengamatan baru adalah operasi logis baru yang Anda buat setelah menangani respons sebelumnya.
Penagihan
Hanya pemeriksaan yang lengkap dan final yang ditagih: CLEAR, REVIEW, dan HIGH_RISK dengan coverage: complete untuk transaksi yang sudah terkonfirmasi melewati kebijakan finalitasnya atau gagal secara permanen masing-masing memakai satu pemeriksaan. Respons tertunda dan tidak ditemukan, cakupan parsial (LIMITED_DATA), galat transport, waktu habis, dan replay idempoten tidak memakai pemeriksaan; reservasinya dilepaskan. Bagian Uji API memakai aturan yang sama dan kuota organisasi yang sama. Kunci sandbox tidak pernah memakai pemeriksaan berbayar. Rincian ada di paket dan pembayaran.
Batas jaringan dan aset
Lihat matriks aset Ethereum/TON dan kebijakan finalitas. Cakupan lengkap terbatas pada jenis transfer yang didukung dan aset terpilih; tidak mencakup nilai ETH internal tanpa trace atau perubahan saldo bersih token. Decimals yang tidak diketahui tidak pernah diganti nilai bawaan.
Nilai kontrak TON yang tidak dapat diklasifikasikan menghasilkan TON_CONTRACT_VALUE_NOT_CLASSIFIED dan cakupan parsial, meskipun transfer lain dalam trace yang sama dikenali. Hasil ini tidak dapat menjadi CLEAR; temuan risiko tinggi yang sudah diketahui tetap diprioritaskan sebagai HIGH_RISK. Periksa details.limitations, details.finalized, dan details.trace_complete pada respons ringkas.
Kredit jetton di TON dapat terkonfirmasi meskipun dompet penerima tidak memiliki cukup gas untuk menjalankan notifikasi. TON_NOTIFICATION_NOT_EXECUTED mencatat kondisi ini secara terpisah: transfer jetton dan pemilik dompet tetap harus diverifikasi oleh kedua sumber. Pengecualian ini tidak berlaku untuk transfer token yang gagal atau dikembalikan.
source_coverage.transaction_sources melaporkan setiap sumber fakta on-chain yang dikonfigurasi secara terpisah dengan nama netral yang stabil: chain_explorer dan chain_node pada TRON dan TON, chain_node dan chain_node_secondary pada Ethereum. source_coverage.risk_sources.aml_provider adalah penilaian AML. Cache mempertahankan waktu pengambilan awal setiap observasi. Respons yang berhasil dengan tingkat risiko AML yang tidak diketahui berarti observasi aml_provider partial (risk_level_unknown). Cakupan sanksi lokal yang tidak tersedia tidak mengubah penilaian AML yang berhasil menjadi AML_UNAVAILABLE; workflow tetap parsial dengan SANCTIONS_UNAVAILABLE. Ketersediaan jaringan tetap bergantung pada konfigurasi deployment dan akses organisasi.
Pemeriksaan dompet
Pemeriksaan dompet melaporkan istilah cakupannya sendiri pada details.data_coverage: FULL jika setiap modul yang berlaku disaring sepenuhnya, PARTIAL jika setidaknya satu modul hanya disaring sebagian, INSUFFICIENT jika modul gerbang (sanctions_aml atau address_security) tidak disaring sama sekali atau mesin analisis tidak dapat memutuskan. coverage tingkat teratas bernilai complete hanya untuk FULL. Setiap baris modul membawa source_coverage-nya sendiri, dan details.source_coverage mencantumkan setiap sumber dengan kosakata status yang sama seperti di atas. Berbeda dengan pemeriksaan transaksi, pemeriksaan dompet ditagih setiap kali status dihasilkan, termasuk dengan cakupan sebagian; hanya limited_data yang gratis. Lihat pemeriksaan dompet.
Status cakupan dan item bukti
Kontrak 0.3 menambahkan coverage_status (OK, DEGRADED, SKIPPED, UNAVAILABLE, DISAGREEMENT), alasan di baliknya pada status_drivers.coverage, satu entri evidence_items untuk setiap sumber yang menjadi dasar jawaban, dan coverage_limitations yang dipisahkan menjadi apa yang membatasi pemeriksaan ini dan apa yang tidak pernah dicakup produk. Lihat sumbu status. coverage dan workflow_coverage tetap memiliki arti yang sama.
Kode alasan
Setiap alasan memiliki code, category, dan severity (info, warning, high, critical). /v1/transaction/check mengembalikan 2 sampai 5 alasan yang diprioritaskan; daftar ringkas selalu mempertahankan alasan yang menentukan status, setiap alasan EXPECTED_*, setiap temuan perbandingan pembayaran dan konteks klien, serta setiap temuan buku besar kewajiban di atas info, lalu mengisi sisanya menurut tingkat keparahan. Katalog lengkapnya berversi (versions.reason_codes); status_drivers menyebutkan alasan di balik setiap sumbu status. /v1/check mengembalikan daftar lengkap pada details.reasons dan string terkait pada reason_codes. Terima kode baru di masa depan. Jangan pernah menganggap kode yang belum dikenal sebagai hasil bersih, dan jangan menyimpulkan dari alasan yang tidak muncul bahwa pemeriksaan terkait telah dilakukan.
| Kode | Arti |
|---|---|
TX_FACTS_VERIFIED |
Sumber data transaksi menjawab dan sepakat, termasuk ketika sepakat bahwa transaksi tidak ada. Kode ini menjelaskan fakta, bukan pembayaran yang ditemukan atau cocok. |
TX_FACTS_PARTIAL |
Sebagian data transaksi yang wajib belum tersedia. |
TX_FACTS_DISAGREE |
Sumber data transaksi saling bertentangan. |
TX_FINALIZED |
Persyaratan finalitas terpenuhi. |
TX_PENDING_CONFIRMATIONS |
Konfirmasi belum cukup. |
TX_REVERTED |
Eksekusi transaksi gagal. |
TX_NOT_FOUND |
Transaksi tidak ditemukan. |
TRANSFERS_TRUNCATED |
Daftar transfer telah dipersingkat. |
AMBIGUOUS_TRANSFER |
Beberapa transfer sesuai dengan penerima dan token yang diberikan, dan tidak satu pun, atau lebih dari satu, dapat dipilih sebagai pembayaran. |
AML_UNSUPPORTED_ASSET |
Pemeriksaan AML yang diperlukan belum mendukung aset ini. |
AML_UNAVAILABLE |
Data penilaian risiko AML tidak tersedia. |
AML_LOW |
Penilaian yang tersedia menunjukkan risiko AML rendah. |
AML_ELEVATED |
Penilaian yang tersedia menunjukkan risiko AML sedang. |
AML_HIGH |
Penilaian yang tersedia menunjukkan risiko AML tinggi atau sangat tinggi. |
DIRECT_SANCTIONS_MATCH |
Alamat cocok persis dalam indeks sanksi yang dikonfigurasi. |
NO_DIRECT_SANCTIONS_MATCH |
Tidak ada kecocokan alamat dalam indeks yang diperiksa; baca cakupan dan kesegaran sumber. |
INDIRECT_SANCTIONS_EXPOSURE |
Paparan sanksi material yang dilaporkan penyedia (paling jauh 1 langkah, minimal 5%); bukan kecocokan langsung dengan daftar. Menghasilkan HIGH_RISK. |
SANCTIONS_EXPOSURE_REVIEW |
Paparan sanksi yang dilaporkan penyedia dan perlu ditinjau (paling jauh 1 langkah dan di bawah 5%; minimal 1% pada langkah berapa pun; atau porsi tidak diketahui). Menghasilkan REVIEW. |
SANCTIONS_EXPOSURE_MINOR |
Paparan sanksi yang jauh dan kecil menurut penyedia; dilaporkan, tetapi tidak mengubah status. |
RISK_EXPOSURE |
Paparan risiko lain yang signifikan menurut penyedia (sampai 2 langkah dan minimal 1%, atau porsi tidak diketahui), atau peristiwa peretasan. Menghasilkan REVIEW. |
RISK_EXPOSURE_MINOR |
Paparan risiko lain yang jauh atau kecil; dilaporkan, tetapi tidak mengubah status. |
SANCTIONS_UNAVAILABLE |
Pemeriksaan sanksi tidak tersedia; ini bukan hasil bersih. |
SANCTIONS_DATA_STALE |
Daftar sanksi melewati jendela kesegarannya atau kesegarannya tidak dapat dipastikan; cakupan parsial. |
TOKEN_AUTH_UNAVAILABLE |
Data untuk memeriksa keaslian token tidak tersedia. |
TOKEN_OFFICIAL |
Kontrak dikenali sebagai kontrak resmi. |
TOKEN_FAKE |
Token teridentifikasi sebagai token palsu. |
TOKEN_UNKNOWN |
Keaslian token belum diketahui. |
EXPECTED_RECIPIENT_MISMATCH |
Penerima transfer terpilih berbeda dari yang diminta. |
EXPECTED_TOKEN_MISMATCH |
Kontrak token transfer terpilih berbeda dari yang diminta. |
EXPECTED_AMOUNT_MISMATCH |
Jumlah transfer terpilih berbeda dari yang diminta. |
EXPECTED_DATA_UNAVAILABLE |
Data transfer belum cukup untuk menyelesaikan perbandingan yang diminta. Kolom hasil perbandingan tersebut bernilai null. |
EXPECTED_SENDER_MISMATCH |
Transfer terpilih tidak berasal dari expected_sender. |
EXPECTED_NETWORK_MISMATCH |
Instruksi yang tercatat menyebutkan jaringan yang berbeda dari jaringan yang diperiksa. |
AMOUNT_WITHIN_TOLERANCE |
Jumlah berbeda dari yang diharapkan tidak lebih dari amount_tolerance; dianggap cocok. |
ADDITIONAL_RELEVANT_TRANSFERS |
Selain transfer yang cocok, transaksi ini sekali lagi membayar penerima yang diharapkan dengan token yang diharapkan; pembayaran mungkin terjadi dua kali. Menghasilkan REVIEW. |
SPLIT_WITHIN_TX |
Beberapa transfer dalam transaksi ke penerima yang diharapkan, bila dijumlahkan, sama dengan jumlah yang diharapkan. Menghasilkan REVIEW. |
ATTEMPT_MAY_STILL_LAND |
Pemeriksaan dengan direction: "OUTGOING" belum menemukan transaksinya; percobaan di baliknya masih mungkin masuk ke rantai. Jangan membayarnya lagi sebelum hasilnya final. |
UNRECOGNIZED_PROVIDER_LABEL |
Penyedia AML melaporkan kategori yang tidak dikenali ChainZap, cukup dekat dan cukup besar untuk diperiksa. Menghasilkan REVIEW. |
UNRECOGNIZED_PROVIDER_LABEL_MINOR |
Kategori penyedia yang tidak dikenali, tetapi jauh atau kecil; dilaporkan, tetapi tidak mengubah status. |
Buku besar kewajiban dan konteks klien
Alasan-alasan ini muncul ketika pemeriksaan menyebutkan sebuah kewajiban atau membawa customer_context. Alasan ini tidak pernah mengubah coverage atau apa yang ditagih.
| Kode | Arti |
|---|---|
INSTRUCTION_UNAVAILABLE |
Kewajiban yang disebutkan tidak memiliki instruksi yang tercatat untuk versi yang diminta; tidak ada yang dibandingkan. integrity_status: INSUFFICIENT, menghasilkan REVIEW. |
INSTRUCTION_HISTORY_INCOMPLETE |
Instruksi pertama yang tercatat untuk kewajiban ini bukan versi 1; versi sebelumnya tidak diketahui. |
INSTRUCTION_NOT_EFFECTIVE |
Pembayaran berada dalam blok sebelum instruction_effective_at milik instruksi. Menghasilkan REVIEW. |
INSTRUCTION_CONFLICT |
Permintaan lain mengubah instruksi kewajiban saat permintaan ini sedang diperiksa. Menghasilkan REVIEW. |
TX_REUSED_ACROSS_OBLIGATIONS |
Peristiwa pembayaran sudah menyelesaikan kewajiban lain. Menghasilkan REVIEW; tidak ada yang dialokasikan. |
DUPLICATE_EXECUTION |
Dua transaksi atau lebih bersama-sama membayar kewajiban melebihi jumlah yang terutang. Menghasilkan REVIEW. |
EVENT_CONTENT_CHANGED |
Peristiwa pembayaran yang dicatat sebelumnya kini dilaporkan dengan isi yang berbeda; catatannya tidak ditimpa. Menghasilkan REVIEW. |
ALREADY_CREDITED |
Anda menyatakan pembayaran sudah dikreditkan, atau sudah diterapkan di pembukuan Anda, meskipun sebagian (customer_context). Menghasilkan REVIEW. |
CUSTOMER_STATE_UNKNOWN |
Ditampilkan sebagai status_drivers.action ketika ChainZap tidak dapat memastikan apakah bertindak berdasarkan jawaban bersih aman bagi pembukuan Anda: CONFIRM_INTERNAL_STATE. |
Batasan produk
Dicantumkan di coverage_limitations.product, tidak pernah di reasons: apa yang tidak dicakup produk untuk jaringan atau aset ini, apa pun pemeriksaannya. Batasan ini tidak membuat jawaban dapat diulang.
| Kode | Arti |
|---|---|
AML_TRANSACTION_LEVEL_ONLY |
Penyaringan AML mencakup alamat-alamat transaksi sebagaimana dilihat penyedia, bukan seluruh riwayat setiap pihak lawan. |
RISK_STATE_AS_OF_CHECK |
Bukti risiko adalah kondisi penyedia pada saat pemeriksaan, bukan pada saat pembayaran. |
SANCTIONS_CONFIGURED_LISTS_ONLY |
Pencocokan sanksi hanya mencakup daftar yang dikonfigurasi (OFAC, EU, UK). |
MEMO_NOT_EVALUATED |
Memo atau komentar pada transfer, misalnya komentar TON, tidak dibandingkan. |
Ethereum / TON / Zero-Friction
/v1/check menyediakan semua objek alasan di details.reasons dan kode string di reason_codes. Endpoint kanonis /v1/transaction/check mempertahankan daftar terbatasnya.
| Kode | Arti |
|---|---|
ETH_REORG_DETECTED |
Blok kanonis Ethereum tidak cocok dengan keanggotaan transaksi. |
ETH_NATIVE_INTERNAL_TRANSFERS_UNAVAILABLE |
Nilai ETH internal native berada di luar cakupan log receipt. |
TOKEN_MINT_OR_BURN |
Mint atau burn bukan setoran biasa. |
TOKEN_BALANCE_EFFECT_NOT_VERIFIED |
Log tidak membuktikan perubahan saldo bersih token. |
ZERO_VALUE_TRANSFER |
Jumlah transfer adalah nol. |
TON_BOUNCED |
Pesan dikembalikan dengan bounce. |
TON_TRACE_INCOMPLETE |
Keturunan pesan atau bukti trace lengkap belum tersedia. |
TON_EXECUTION_FAILED |
Transaksi dalam rangkaian transfer gagal. |
TON_FINALITY_UNVERIFIED |
Finalitas masterchain belum terverifikasi. |
TON_CONTRACT_VALUE_NOT_CLASSIFIED |
Nilai TON dalam pesan kontrak tidak dapat diklasifikasikan sebagai transfer biasa. Cakupan tetap parsial meskipun transfer lain telah diverifikasi. |
JETTON_IDENTITY_UNVERIFIED |
Identitas jetton wallet/master/owner belum terverifikasi. |
JETTON_WALLET_MISMATCH |
Jetton wallet, master, atau owner bertentangan dengan pesan transfer. |
NO_SUPPORTED_TRANSFER |
Transfer selesai yang didukung belum dapat dipastikan. |
MULTI_ASSET_AML_PARTIAL |
Ada beberapa aset; AML diperiksa untuk satu aset. |
TON_TRACE_LIMIT_EXCEEDED |
Ukuran atau jumlah tingkat trace melebihi batas; bukti transfer tidak lengkap. |
TON_NOTIFICATION_NOT_EXECUTED |
Notifikasi transfer jetton mencapai penerima yang tidak mengeksekusinya; transfer itu sendiri telah selesai. |
Kode alasan dompet
POST /v1/wallet/check mengembalikan hingga sepuluh alasan pada details.reasons, diurutkan menurut tingkat keparahan, dan kodenya pada reason_codes. Temuan hanya dinyatakan jika kebijakan signifikansi mesin analisis sendiri menilainya demikian, sehingga setiap alasan di sini selalu sesuai dengan sesuatu yang akan ditampilkan laporan. Tingkat keparahan dalam tabel adalah nilai bawaan; tanda kritis yang terkonfirmasi dari penyedia atau label merah dari penjelajah blok akan menaikkannya.
| Kode | Kategori / keparahan | Arti |
|---|---|---|
DIRECT_SANCTIONS_MATCH |
sanctions / critical |
Kecocokan alamat persis pada indeks sanksi yang dikonfigurasi, atau pencatatan langsung yang dilaporkan penyedia AML. |
INDIRECT_SANCTIONS_EXPOSURE |
sanctions / high |
Paparan terhadap dana yang disanksi menurut penyedia AML; bukan pencatatan langsung. |
SANCTIONS_EXPOSURE_MINOR |
sanctions / warning |
Sebagian kecil paparan terhadap dana yang disanksi menurut penyedia AML. Pemeriksaan transaksi mengeluarkan kode yang sama dengan tingkat info. |
SANCTIONS_UNAVAILABLE |
sanctions / warning |
Tidak ada indeks sanksi yang disaring; ini bukan hasil bersih. |
NO_DIRECT_SANCTIONS_MATCH |
sanctions / info |
Tidak ada kecocokan persis pada indeks yang disaring; baca cakupan sumber dan waktu data. |
AML_HIGH |
risk / high |
Penyedia AML melaporkan risiko tinggi atau sangat tinggi. |
AML_ELEVATED |
risk / warning |
Penyedia AML melaporkan risiko sedang. |
AML_LOW |
risk / info |
Penyedia AML melaporkan risiko rendah. |
AML_EXPOSURE_UNAVAILABLE |
risk / warning |
Penyedia AML dipanggil tetapi tidak menjawab; paparan tidak diketahui. |
AML_EXPOSURE_SKIPPED |
risk / info |
Penyedia AML tidak dipanggil karena kecocokan lokal pada daftar sanksi atau daftar hitam sudah menentukan hasil. |
HACKING_EVENT_LINK |
risk / high |
Penyedia AML mengaitkan alamat dengan insiden peretasan yang diketahui. |
DENYLIST_MATCH |
address / critical |
Alamat ada di daftar hitam publik untuk alamat penipuan, phishing, atau drainer. |
ISSUER_BLOCKED |
address / critical |
Penerbit stablecoin telah membekukan alamat. |
PROVIDER_SECURITY_FLAG |
address / high |
Penyedia keamanan menandai alamat; tingkat keparahan mengikuti tanda yang terkonfirmasi. |
EXPLORER_RISK_TAG |
address / high |
Penjelajah blok atau label akun menandai alamat sebagai berisiko. |
SCAM_EVENT_ACTIVITY |
address / high |
Terlihat transfer dengan alamat yang ditandai atas aktivitas penipuan. |
ADDRESS_SECURITY_UNAVAILABLE |
address / warning |
Sumber keamanan alamat tidak disaring sepenuhnya. |
NO_ADDRESS_SECURITY_FLAGS |
address / info |
Sumber keamanan alamat yang disaring tidak melaporkan apa pun. |
TOKEN_IMPERSONATION |
token / high |
Token yang dipegang atau dibuat meniru aset resmi. |
TOKEN_HOLDINGS_UNVERIFIED |
token / warning |
Tidak semua token yang dipegang dapat disaring keasliannya. |
TOKEN_HOLDINGS_VERIFIED |
token / info |
Token yang dipegang telah disaring dan tidak ada yang meniru aset resmi. |
RISKY_COUNTERPARTY_DIRECT |
counterparties / high |
Pihak lawan langsung adalah layanan atau alamat berisiko yang diketahui. |
RISKY_COUNTERPARTY_INDIRECT |
counterparties / warning |
Layanan atau alamat berisiko berada satu langkah lebih jauh. |
COUNTERPARTY_SCREENING_PARTIAL |
counterparties / warning |
Tidak semua pihak lawan dapat diatribusikan; cakupan sebagian. |
NO_COUNTERPARTY_FLAGS |
counterparties / info |
Pihak lawan yang disaring tidak menimbulkan tanda. |
NEW_WALLET |
behaviour / warning |
Dompet masih sangat baru. |
BEHAVIOUR_PATTERN_FLAGGED |
behaviour / warning |
Terlihat pola transaksi yang patut diperhatikan, misalnya lonjakan, perputaran cepat, atau perilaku relai. |
LOW_ACTIVITY |
behaviour / info |
Transaksi sangat sedikit; sinyal perilaku kurang berbobot. |
CONTRACT_ADDRESS |
behaviour / info |
Alamat adalah kontrak, bukan dompet. |
NO_BEHAVIOUR_FLAGS |
behaviour / info |
Tidak ada pola perilaku yang menonjol. |
WALLET_DATA_LIMITED |
coverage / warning |
Data tidak cukup untuk memutuskan; statusnya limited_data. |
SOURCE_UNAVAILABLE |
coverage / warning |
Sumber yang diperlukan tidak menjawab. |
NETWORK_ASSUMED_ETH |
coverage / warning |
Alamat 0x hanya disaring di Ethereum; alamat itu mungkin juga ada di rantai EVM lain. |
Keputusan, tindakan, dan hasil
Setiap pemeriksaan transaksi adalah sebuah keputusan dengan decision_id-nya sendiri. Apa yang direkomendasikan ChainZap, apa yang Anda lakukan, bagaimana Anda menyelesaikannya, dan bagaimana akhirnya merupakan catatan yang terpisah: rekomendasi bukanlah tindakan, dan pembayaran yang ditahan bukanlah kerugian yang dicegah sampai Anda memastikannya.
Baca keputusan
GET /v1/decisions/{decision_id} mengembalikan keputusan persis seperti saat dibuat: keempat sumbu status, overall_state, recommended_action, reuse_status, peristiwa pembayaran terpilih, reason_codes, versions, dan evidence_items yang menjadi dasarnya, ditambah setiap peristiwa yang dicatat padanya sejak itu. Pemeriksaan berikutnya atas transaksi yang sama adalah keputusan baru; pemeriksaan itu tidak pernah menulis ulang keputusan sebelumnya, sehingga jawaban yang menjadi dasar tindakan Anda selalu dapat dijelaskan dengan bukti yang tersedia pada saat itu. Item bukti disimpan selama ketentuan penyedia mengizinkan dan paling lama selama masa penyimpanan nilai mentah.
Replay idempoten dari permintaan semula juga mengembalikan jawaban semula, byte demi byte.
Catat apa yang terjadi selanjutnya
| Endpoint | Isi | Arti |
|---|---|---|
POST /v1/decisions/{decision_id}/actions |
action, action_at opsional |
Apa yang Anda lakukan: CREDITED, PAID, HELD, REJECTED, REFUNDED, ESCALATED, RETRIED, NO_ACTION, OTHER. |
POST /v1/decisions/{decision_id}/resolution |
resolution, resolved_at opsional |
Bagaimana kasus ditutup: ACCEPTED, ACCEPTED_AFTER_REVIEW, REJECTED, REFUNDED, CORRECTED, WRITTEN_OFF, OTHER. |
POST /v1/decisions/{decision_id}/outcome |
outcome_status, loss_prevented, outcome_at opsional |
Bagaimana akhirnya: CONFIRMED, DISPUTED, UNRESOLVED, atau UNKNOWN, dan apakah kerugian berhasil dicegah: CONFIRMED, NOT_CONFIRMED, atau UNKNOWN (bawaan). |
Setiap panggilan menambahkan sebuah peristiwa (mengirim peristiwa yang persis sama lagi akan diabaikan); tidak ada yang ditimpa, dan beberapa tindakan pada satu keputusan adalah hal yang wajar (HELD, lalu ESCALATED, lalu REFUNDED). Setiap peristiwa boleh membawa owner: pengenal opak dari orang atau sistem yang bertindak, paling banyak 64 karakter dari A-Z a-z 0-9 . _ : -. Jangan pernah mengirim nama atau alamat email; 422 invalid_owner menolak nilai lain.
Paparan bukan kerugian yang dicegah
Jawaban HIGH_RISK berarti ada sinyal risiko yang material. Ini tidak berarti kerugian telah dihindari, dan ChainZap tidak pernah menghitungnya demikian. Hanya hasil yang Anda catat dengan loss_prevented: "CONFIRMED" yang merupakan kerugian yang dicegah. Buat laporan berdasarkan hasil, bukan berdasarkan rekomendasi.
verification_final dan risk_final menyimpan sumbu finalitas terpisah pada saat keputusan. Keduanya null untuk keputusan historis sebelum kebijakan b2b-tx-2026-10.3; baca keputusan tersebut menurut kebijakan asli versions.decision.
Idempotensi
Idempotency-Key mengikat setiap upaya pengiriman permintaan ke satu pemeriksaan logis. Ini adalah kunci operasi, bukan kunci API.
Simpan satu kunci untuk setiap operasi logis
Idempotency-Key menerima 1 sampai 128 karakter ASCII yang dapat dicetak. Kunci berlaku untuk organisasi Anda dan isi permintaan yang telah dinormalisasi. Simpan kunci dan isi permintaan sebelum percobaan pertama, lalu gunakan keduanya pada setiap pengulangan, termasuk dari server lain atau setelah mengganti kunci API. Jangan pernah memasukkan kredensial atau data pribadi ke dalam kunci.
| Situasi | Respons API |
|---|---|
| Operasi sudah selesai | Respons semula, byte demi byte, dengan Idempotent-Replayed: true dan X-Request-ID semula. |
| Operasi masih berjalan | 409 idempotency_in_progress dengan Retry-After; dapat diulang. |
| Kunci sama, isi berbeda | 409 idempotency_conflict; tidak dapat diulang. Perbaiki hubungan antara kunci dan operasi. |
Masa penyimpanan dan galat
Masa penyimpanan bawaan adalah 24 jam; konfirmasikan perubahan masa penyimpanan berdasarkan kontrak dengan dukungan. Setelah masa itu berakhir, kunci yang sama dapat mewakili eksekusi baru yang ditagih. Batasi pengulangan otomatis pada masa penyimpanan dan simpan catatan operasi pembayaran Anda sendiri.
Yang disimpan dan dikembalikan ulang: setiap respons 200, termasuk yang tertunda atau LIMITED_DATA, serta respons 404 dan 422 yang diberikan setelah pemeriksaan diterima, misalnya transaction_not_found, invalid_expected_amount, NETWORK_REQUIRED, NETWORK_AMBIGUOUS, dan alamat yang tidak lolos validasi untuk jaringan yang ditetapkan oleh penentuan jaringan. retryable=true menjelaskan kegagalannya; nilai ini tidak menghapus respons yang tersimpan, sehingga 404 transaction_not_found dikembalikan ulang selama seluruh masa penyimpanan dengan kunci yang sama.
Yang tidak pernah disimpan: 429 dan setiap 5xx. Mengulang dengan kunci yang sama menjalankan pemeriksaan lagi, dan memang itulah yang diminta galat tersebut. Penolakan sebelum pemeriksaan diterima juga tidak disimpan: autentikasi, 403, 413, 422 skema permintaan, dan 422 kontrak seperti expected_fields_required.
Hentikan pengulangan otomatis ketika respons tersimpan disertai Idempotent-Replayed: true. Setelah respons itu diterima dan dicatat, buat pemeriksaan logis baru dengan kunci baru jika alur kerja Anda memerlukan pengamatan yang lebih baru, misalnya untuk transaksi yang tertunda atau belum diindeks setelah Retry-After. Jangan pernah memakai kunci baru hanya karena hasil jaringan semula belum diketahui.
Endpoint dan jaringan merupakan bagian dari operasi
Kedua endpoint pemeriksaan memakai ruang kunci organisasi yang sama. Menggunakan kembali kunci pada endpoint lain atau dengan isi berbeda menghasilkan 409 idempotency_conflict, meskipun hash tetap sama. Jaringan yang ditemukan dan hasil semula dipertahankan saat replay; API memeriksa kembali bahwa akses ke jaringan itu masih diizinkan.
Untuk NETWORK_REQUIRED atau NETWORK_AMBIGUOUS, tangani dulu galat yang diterima, lalu tentukan network dalam operasi baru dengan kunci baru. Replay tidak menjalankan penentuan jaringan lagi.
Batas laju, kuota, dan konkurensi
Batas organisasi
Batas berasal dari versi paket Anda saat ini atau dari ketentuan khusus organisasi. Periksa /v1/usage dan bagian Paket dan pembayaran di dasbor pengembang. Harga beta dan pemeriksaan termasuk yang dipublikasikan ada di paket dan pembayaran; batas laju permintaan dan konkurensi bersifat sementara sampai peluncuran umum.
| Header respons | Arti |
|---|---|
X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset |
Kapasitas permintaan organisasi Anda, sisanya, dan waktu pemulihannya. |
X-Quota-Limit, X-Quota-Remaining, X-Quota-Reset |
Pemeriksaan termasuk pada periode penagihan saat ini, sisanya, dan akhir periode. X-Quota-Available menambahkan pemeriksaan tambahan. |
Header reset memakai detik Unix. Periode penagihan berbayar berjangkar pada pembayaran yang dikonfirmasi; organisasi tanpa paket berbayar mengikuti bulan kalender UTC. Periode mengikuti UTC, bukan zona waktu browser Anda. Semua kunci API dan permintaan dari dasbor pengembang memakai kuota yang sama. Ketika pemeriksaan memakai kuota pemeriksaan termasuk, X-Quota-Remaining sudah menghitungnya: kuotanya dicadangkan selama pemeriksaan berjalan dan dikembalikan jika jawabannya tidak ditagih, sehingga jawaban gratis menunjukkan satu lebih sedikit daripada yang kemudian dilaporkan /v1/usage. Pemutaran ulang idempoten tidak menyentuh kuota dan tidak membawa header X-Quota-*.
Saat batas tercapai
Permintaan terlalu sering menghasilkan 429 rate_limit_exceeded. Terlalu banyak pemeriksaan yang berjalan bersamaan menghasilkan 429 concurrency_limit_exceeded. Kuota habis menghasilkan 429 quota_exceeded. Patuhi Retry-After, yang bisa panjang untuk kuota bulanan. Replay tetap melewati kontrol akses, laju, dan konkurensi, tetapi tidak ditagih lagi.
Pemeriksaan yang mencapai sumber data dan tidak memberi hasil yang lengkap dan final (tertunda, tidak ditemukan, parsial) tidak pernah ditagih, dan jumlahnya per hari dibatasi untuk setiap organisasi (500 secara bawaan). Periksa ulang transaksi yang tertunda dengan jeda yang makin panjang, bukan dalam loop yang rapat. Melewati batas itu API menjawab 429 rate_limit_exceeded sampai batas itu direset pada akhir hari UTC; Retry-After pada setiap respons paling lama satu jam. Integrasi yang sehat tidak pernah mencapainya.
Gunakan antrean permintaan terbatas dan batas konkurensi per organisasi di server Anda. Perubahan paket memengaruhi hak berikutnya dan tidak mengubah riwayat penggunaan.
Batch
File batch memuat paling banyak 200 baris dan 256 KiB; satu organisasi menjalankan paling banyak dua batch sekaligus (diperiksa saat batch dimulai). Batch yang berjalan memakai paling banyak separuh batas laju permintaan organisasi Anda, sehingga pemeriksaan Anda sendiri tetap mendapat bagiannya, dan batch dijeda alih-alih gagal ketika kuota atau batas harian pemeriksaan yang tidak ditagih habis. Setiap transaksi unik dalam batch ditagih sekali.
Perlindungan pengeluaran
Setiap organisasi memiliki batas pengeluaran ChainZap untuk sumber data berbayar bagi pemeriksaannya per hari UTC; tim dukungan dapat menaikkan atau menurunkannya. Setelah batas itu terlampaui, pemeriksaan tetap dijawab, dari data cache jika tersedia. Penyaringan risiko yang memerlukan panggilan berbayar baru dilewati: pada pemeriksaan transaksi, sumber AML di source_coverage.risk_sources melaporkan error_code: "spend_cap" ("daily_cap" jika yang tercapai adalah plafon harian sumber AML untuk seluruh layanan), risk_status bernilai INSUFFICIENT, dan jawabannya tidak ditagih; pemeriksaan dompet mencantumkan aml_provider_unavailable. Batas direset pukul 00:00 UTC; pemeriksaan baru sebelum waktu itu biasanya memberi kekurangan yang sama, apa pun saran risk_retry_after_seconds. spend_cap juga dilaporkan selama pengeluaran tidak dapat dicatat (tarif tidak diketahui atau penghitung tidak tersedia); kekurangan itu hilang setelah pencatatan pulih, bukan pukul 00:00 UTC. Verifikasi pembayaran tidak terpengaruh: kecocokan final tetap final.
Sebelum setiap percobaan berbayar tanpa hasil cache, ChainZap mencadangkan seluruh biaya terkonfigurasi secara atomik, termasuk panggilan yang sedang berjalan. Panggilan yang akan melebihi sisa batas dilewati. Tarif tidak diketahui atau akuntansi tidak tersedia memblokir panggilan berbayar baru ketika batas ditetapkan. Permintaan yang pasti belum dikirim mengembalikan cadangannya; respons yang hilang tetap mempertahankannya. Bukti cache tetap tersedia. Batas ini memengaruhi cakupan risiko, bukan finalitas verifikasi pembayaran.
Pembacaan buku besar
Membaca kewajiban, keputusan, dan batch (pencarian, pemantauan status, satu halaman baris, ekspor) tidak memakai batas laju pemeriksaan Anda: pembacaan punya kuotanya sendiri per organisasi, empat kali batas per menit Anda dan paling sedikit 120 per menit, sehingga memantau batch tidak pernah mengambil kapasitas dari pemeriksaan Anda. Di atas kuota itu, pembacaan menjawab 429 rate_limit_exceeded dengan Retry-After; pada pembacaan, header X-RateLimit-* menggambarkan kuota ini.
Penentuan jaringan otomatis
POST /v1/check dan POST /v1/transaction/check berbagi batas organisasi yang sama. Permintaan tanpa network mencadangkan kuota sebelum mencari fakta transaksi di jaringan yang tersedia. Pencarian dibatasi dan tidak menjalankan pemeriksaan risiko untuk setiap jaringan. Hanya pemeriksaan selesai dengan cakupan lengkap yang ditagih; galat penentuan jaringan melepaskan reservasi.
Pengulangan dan batas waktu
Batas waktu klien
Gunakan batas waktu klien yang lebih panjang dari batas keras server 12 detik, misalnya 15 detik per percobaan. Pemeriksaan dompet memiliki anggaran server 30 detik; gunakan sekitar 35 detik untuknya. Target latensi p95 adalah paling lama 5 detik; ini syarat rilis, bukan jaminan tanpa syarat. Waktu jaringan berada di luar anggaran server.
Pengulangan terbatas
Untuk galat yang diterima, ulangi hanya bila error.retryable=true. Patuhi Retry-After, gunakan jeda eksponensial dengan variasi acak, batasi jumlah percobaan, dan batasi durasi seluruh alur kerja. Jika waktu tunggu yang diminta melebihi anggaran interaktif Anda, jadwalkan pengulangan alih-alih memperpendek jeda.
Koneksi terputus
Untuk galat jaringan, ulangi isi permintaan dan Idempotency-Key yang sama dari penyimpanan Anda. Pertahankan keduanya setelah proses dimulai ulang. Berhenti saat replay idempoten mengembalikan galat tersimpan, lalu rekonsiliasi hasilnya. 409 idempotency_conflict memerlukan perbaikan integrasi; 409 idempotency_in_progress, 429, 503, dan 504 dapat diulang sesuai aturan di atas.
Catat hanya ID permintaan dan kode galat publik dalam log biasa. Jangan mencatat isi permintaan, kunci API, nilai dompet, atau data mentah penyedia. Contoh yang dapat dijalankan mengikuti aturan ini.
Pengamatan baru
Transaksi tertunda dapat menjadi final kemudian, tetapi replay respons tersimpan tidak mengambil status yang lebih baru. Setelah hasil saat ini diterima dan direkonsiliasi, jadwalkan pemeriksaan logis baru dengan kunci baru jika Anda memerlukan pengamatan berikutnya. Untuk galat jaringan yang belum terselesaikan, ikuti penentuan jaringan; NETWORK_REQUIRED dan NETWORK_AMBIGUOUS memerlukan konteks jaringan eksplisit, bukan pengulangan otomatis.
Finalitas verifikasi dan risiko
verification_final menjelaskan finalitas fakta pembayaran dan perbandingannya. result_final adalah aliasnya; retryable adalah kebalikannya, dan retry_after_seconds menyarankan waktu tunggu untuk observasi verifikasi baru. Transaksi yang final di jaringan dan cocok tepat dengan rincian yang diharapkan mengembalikan verification_final: true serta integrity_status: MATCH meskipun KYT tidak tersedia dan risk_status: INSUFFICIENT.
risk_final bernilai true ketika pemeriksaan ulang tidak lagi diharapkan mengisi kekurangan dalam penilaian risiko: transaksi sudah final, sumber-sumbernya sepakat, dan tidak ada pemeriksaan AML, sanksi, atau token yang mengalami kekurangan sementara (gangguan atau daftar yang usang). Selama transaksi masih pending atau tidak ditemukan, risk_final bernilai false apa pun risk_status-nya, dan risk_retry_after_seconds sama dengan retry_after_seconds: risiko dinilai ulang setelah transaksi final. risk_retryable adalah kebalikannya; risk_retry_after_seconds menyarankan waktu tunggu pemeriksaan risiko berikutnya. Batasan cakupan permanen dapat bersifat final dengan status INSUFFICIENT: finalitas bukan izin. KYT menjelaskan risiko pada saat pemeriksaan dan dapat berubah kemudian, bahkan setelah penilaian final.
Transaksi pending mengembalikan integrity_status: NOT_EVALUATED, verification_final: false, penanda pencocokan null, NOT_EVALUATED untuk setiap perbandingan yang diminta, dan tanpa alasan EXPECTED_*_MISMATCH: ketentuan yang berbeda baru dilaporkan setelah transaksi final. Ketika sumber tidak sepakat tentang transaksi itu sendiri (transaction_status: INSUFFICIENT, coverage_status: DISAGREEMENT), jawabannya juga belum final, tetapi transfer yang dilaporkan sumber tetap dibandingkan dan dapat membawa EXPECTED_*_MISMATCH: berpeganglah pada verification_final: false dan periksa lagi. Transfer yang diamati tetap menjadi bukti, bukan kecocokan pembayaran final. Waktu tunggu verifikasi adalah 5–120 detik untuk finalitas pending, 15 detik untuk transaksi yang tidak ada, atau 30 detik untuk kekurangan sumber rantai sementara. Kekurangan KYT sementara menyarankan pengulangan risiko terpisah setelah 30 detik. Ketika sumber AML melaporkan error_code spend_cap (batas pengeluaran harian organisasi Anda untuk sumber berbayar tercapai, atau pengeluaran saat ini tidak dapat dicatat) atau daily_cap (plafon harian sumber AML untuk seluruh layanan tercapai), batas yang tercapai direset pukul 00:00 UTC, dan pemeriksaan baru sebelum waktu itu biasanya memberi kekurangan yang sama; lihat batas. Pada transaksi yang tidak ditemukan, risk_retryable bernilai true meskipun risk_status adalah NOT_EVALUATED: risiko dinilai setelah transaksi muncul.
KYT yang tidak tersedia tidak membuka kembali verifikasi final dan tidak pernah mengizinkan PROCEED: MATCH dengan risk_status: INSUFFICIENT menyarankan MANUAL_REVIEW. Hanya jawaban final dengan cakupan lengkap yang ditagih; verifikasi final dengan cakupan KYT parsial tetap gratis. Gunakan Idempotency-Key baru untuk observasi baru; kunci yang sama mengembalikan jawaban tersimpan dengan kebijakan aslinya.
Referensi galat
Format respons galat
{"request_id":"merchant-order-1001-attempt-1","error":{"code":"provider_unavailable","message":"Transaction data is temporarily unavailable","retryable":true}}
Header respons X-Request-ID mengidentifikasi respons yang sama. Percabangkan logika Anda pada code dan retryable yang stabil; jangan mengurai pesan yang ditujukan untuk manusia. Kegagalan gateway mungkin tidak memiliki format ini: anggap format yang tidak valid atau hilang sebagai hasil transport yang belum terselesaikan dan pertahankan kunci idempotensi semula.
| HTTP | Kode | Tindakan |
|---|---|---|
| 401 | invalid_api_key |
Perbaiki kredensial server; jangan mengulang secara membabi buta. |
| 403 | tenant_suspended, network_not_enabled, check_kind_not_enabled |
Selesaikan akses dengan organisasi Anda; kontrak pilot hanya mencakup pemeriksaan transaksi TRON. |
| 403 | forbidden |
Permintaan tidak melewati Cloudflare: permintaan dikirim langsung ke alamat server. Panggil https://api.chainzap.io. Respons edge ini memuat request_id hanya di isi respons. Jika api.chainzap.io sendiri diarahkan ke alamat server, server menolak permintaan dengan halaman 403 biasa tanpa JSON. |
| 403 | network_disabled |
Aktivasi adaptor masih tertunda; hubungi dukungan. |
| 403 | ledger_not_enabled, batch_not_enabled |
Buku besar kewajiban atau batch belum diaktifkan; kirim pemeriksaan tanpa kolom buku besar. |
| 404 | obligation_not_found, decision_not_found, payment_event_not_found, allocation_not_found, batch_not_found |
Catatan tidak ada di lingkungan ini. Peristiwa pembayaran baru ada setelah pemeriksaan yang menyebut sebuah kewajiban mencatatnya dengan cakupan lengkap. |
| 404 | transaction_not_found |
Hanya /v1/check. Semua jaringan yang diperiksa memastikan transaksi tidak ada. Periksa hash dan waktu pengindeksan; batasi pengulangan. |
| 409 | idempotency_conflict |
Perbaiki hubungan kunci dengan isi permintaan (atau, untuk unggahan batch, dengan file); tidak dapat diulang. |
| 409 | idempotency_in_progress |
Tunggu Retry-After, lalu ulangi operasi yang sama. |
| 409 | instruction_conflict, instruction_version_required |
Instruksi kewajiban tercatat dengan ketentuan lain. Kirim instruction_version baru untuk ketentuan yang berubah; versi yang sudah tercatat tidak pernah berubah. |
| 409 | allocation_exceeds_event, payment_event_not_settled, allocation_token_mismatch |
Bagian-bagiannya melebihi peristiwa pembayaran, peristiwa itu tidak dieksekusi atau belum final, atau peristiwa itu dalam token yang berbeda dari kewajiban. |
| 409 | attempt_conflict |
Percobaan tercatat dengan kanal, referensi penyedia, jumlah, atau transaksi lain, melalui POST /v1/obligations/attempts atau oleh pemeriksaan yang menyebut attempt_reference-nya dengan tx_hash lain; catat pengulangan atau pergantian penyedia sebagai attempt_reference baru. |
| 409 | batch_not_executable, insufficient_quota, nothing_to_retry |
Batch tidak berada dalam status yang memungkinkan tindakan ini, kuota tidak dapat menutupnya (kirim allow_partial), atau tidak ada baris yang dapat diulang. |
| 413 | payload_too_large |
Isi permintaan melebihi 4 KiB (256 KiB untuk unggahan batch); kirim hanya kolom yang didokumentasikan. |
| 413 | batch_too_large |
File batch memiliki lebih dari 200 baris; pecah file tersebut. |
| 415 | unsupported_media_type |
Kirim isi permintaan dengan Content-Type: application/json, atau text/csv untuk unggahan batch. |
| 422 | malformed_tx_hash, invalid_address, invalid_network, invalid_tron_address, invalid_eth_address, invalid_ton_address, invalid_expected_amount, invalid_idempotency_key, invalid_query_parameter, validation_error |
Perbaiki permintaan yang tidak valid. |
| 422 | invalid_amount_tolerance, invalid_reference, invalid_owner, instruction_terms_required |
Perbaiki permintaan: toleransi yang lebih presisi daripada decimals token, referensi di luar 1 sampai 128 karakter ASCII yang dapat dicetak, owner yang bukan pengenal opak, atau kewajiban tanpa ketentuan pembayaran apa pun. |
| 422 | invalid_csv, invalid_csv_header, confirmation_required |
Perbaiki file batch, atau konfirmasikan estimasi dengan confirm: true. |
| 422 | expected_fields_required, token_not_enabled |
Kontrak organisasi Anda mewajibkan ketiga kolom expected_* dan token yang dicakupnya. Perbaiki permintaan; tidak dapat diulang. |
| 422 | NETWORK_REQUIRED, NETWORK_AMBIGUOUS |
Input belum cukup, bukan keberhasilan: jaringan yang diperiksa belum memberi jawaban tunggal. Tentukan jaringan dan gunakan kunci baru. Lihat penentuan jaringan. |
| 429 | rate_limit_exceeded, quota_exceeded, concurrency_limit_exceeded |
Patuhi Retry-After; kurangi konkurensi atau tunggu kuota diperbarui. |
| 429 | batch_limit_reached |
Dua batch sudah berjalan untuk organisasi Anda; tunggu salah satunya selesai. |
| 503 | provider_unavailable, rate_limiter_unavailable, api_disabled, api_not_configured |
Ulangi hanya jika dapat diulang dan masih dalam anggaran pengulangan Anda; pertahankan kunci yang sama. |
| 504 | request_timeout |
Ulangi kunci dan isi yang sama setelah jeda yang diminta. Kode ini juga dijawab ketika permintaan lain sedang menahan pembayaran atau kewajiban yang sama di buku besar pada saat itu: tidak ada yang disimpan atau ditagih. |
| 500 | internal_error |
Terapkan kebijakan pengulangan terbatas dan hubungi dukungan dengan X-Request-ID. |
Periksa Idempotent-Replayed: galat tersimpan tidak memperbarui dirinya saat replay. Lihat idempotensi. Jangan pernah menganggap galat HTTP berarti tidak ada permintaan yang diterima.
Rekomendasi perlindungan integrasi
Lindungi kredensial
Panggil API dari backend Anda. Simpan kunci API dalam pengelola rahasia, batasi akses hanya untuk layanan integrasi, dan ganti kunci setelah dugaan kebocoran. Jangan pernah menempelkan kunci ke tiket dukungan, URL, pelacak masalah, peristiwa analitik, konsol browser, atau bundel frontend.
Lindungi penyedia identitas Anda dengan kebijakan autentikasi kuat yang tersedia. Terima undangan hanya dari administrator organisasi yang dipercaya. Keluar dari akun pada perangkat bersama; gunakan pengaturan Organisasi di dasbor pengembang untuk keluar dari semua perangkat.
Tangani data dengan cermat
Validasi permintaan pembayaran masuk di server Anda. Ikat setiap pemeriksaan dengan ID operasi pembayaran Anda sendiri dan rekonsiliasi hasil yang ambigu. Gunakan kontrak token yang tepat dan string desimal, serta tangani nilai null dan status tidak dikenal secara eksplisit. Escape nama organisasi, label kunci, dan nilai respons sebelum menampilkannya di UI Anda sendiri.
Simpan hanya data yang diperlukan alur kerja Anda. Batasi akses ke rincian respons. Kirim X-Request-ID respons dan kode galat publik kepada dukungan; jangan sertakan kunci, saldo, atau data mentah.
Referensi API
Unduh OpenAPI. Nama dan tipe kolom diambil langsung dari kontrak API publik. Kolom wajib dapat berisi null jika tipenya mengizinkan. Arti setiap kolom dijelaskan dalam panduan di atas.
POST /v1/transaction/check
Periksa satu transaksi. Kirim X-API-Key dan Idempotency-Key yang tersimpan. Kewajiban network bergantung pada endpoint.
| HTTP | Respons |
|---|---|
| 200 | Berhasil: isi respons mengikuti skema endpoint ini. Untuk pemeriksaan, baca sumbu status dan cakupan. |
| 401 | Kunci API tidak valid atau sudah dicabut. |
| 403 | Organisasi atau jaringan tidak memiliki akses. |
| 409 | Konflik: permintaan masih berjalan, kunci idempotensi dipakai ulang dengan isi berbeda, atau permintaan bertentangan dengan status yang tercatat. Baca error.code. |
| 413 | Isi permintaan lebih besar daripada yang diterima endpoint ini. |
| 415 | Jenis konten ini tidak diterima di sini: JSON, atau CSV untuk unggahan batch. |
| 422 | Perbaiki kolom permintaan. |
| 429 | Batas frekuensi, permintaan bersamaan, kuota bulanan, pemeriksaan tanpa tagihan harian, atau batch aktif tercapai. Baca error.code dan Retry-After. |
| 503 | Akses API atau layanan yang diperlukan tidak tersedia. |
| 504 | Pemrosesan permintaan melebihi batas waktu server. |
| 500 | Kesalahan internal. Simpan X-Request-ID untuk tim dukungan. |
POST /v1/check
Periksa satu transaksi. Kirim X-API-Key dan Idempotency-Key yang tersimpan. Kewajiban network bergantung pada endpoint.
| HTTP | Respons |
|---|---|
| 200 | Berhasil: isi respons mengikuti skema endpoint ini. Untuk pemeriksaan, baca sumbu status dan cakupan. |
| 401 | Kunci API tidak valid atau sudah dicabut. |
| 403 | Organisasi atau jaringan tidak memiliki akses. |
| 404 | Tidak ditemukan di organisasi dan lingkungan Anda. Pada /v1/check: transaksi tidak ditemukan di jaringan yang dipilih atau, tanpa jaringan, di jaringan mana pun yang diperiksa. |
| 409 | Konflik: permintaan masih berjalan, kunci idempotensi dipakai ulang dengan isi berbeda, atau permintaan bertentangan dengan status yang tercatat. Baca error.code. |
| 413 | Isi permintaan lebih besar daripada yang diterima endpoint ini. |
| 415 | Jenis konten ini tidak diterima di sini: JSON, atau CSV untuk unggahan batch. |
| 422 | Perbaiki kolom permintaan. |
| 429 | Batas frekuensi, permintaan bersamaan, kuota bulanan, pemeriksaan tanpa tagihan harian, atau batch aktif tercapai. Baca error.code dan Retry-After. |
| 500 | Kesalahan internal. Simpan X-Request-ID untuk tim dukungan. |
| 503 | Akses API atau layanan yang diperlukan tidak tersedia. |
| 504 | Pemrosesan permintaan melebihi batas waktu server. |
GET /v1/usage
Lihat batas dan penggunaan organisasi Anda. Parameter opsional days menerima 1-90 hari, dengan nilai bawaan 30.
| HTTP | Respons |
|---|---|
| 200 | Berhasil: isi respons mengikuti skema endpoint ini. Untuk pemeriksaan, baca sumbu status dan cakupan. |
| 422 | Perbaiki kolom permintaan. |
| 401 | Kunci API tidak valid atau sudah dicabut. |
| 403 | Organisasi atau jaringan tidak memiliki akses. |
| 429 | Batas frekuensi, permintaan bersamaan, kuota bulanan, pemeriksaan tanpa tagihan harian, atau batch aktif tercapai. Baca error.code dan Retry-After. |
| 500 | Kesalahan internal. Simpan X-Request-ID untuk tim dukungan. |
| 503 | Akses API atau layanan yang diperlukan tidak tersedia. |
| 504 | Pemrosesan permintaan melebihi batas waktu server. |
GET /v1/catalog
Katalog harga beta yang dipublikasikan: paket, pemeriksaan yang termasuk, dan ketentuan pemeriksaan tambahan.
| HTTP | Respons |
|---|---|
| 200 | Berhasil: isi respons mengikuti skema endpoint ini. Untuk pemeriksaan, baca sumbu status dan cakupan. |
| 401 | Kunci API tidak valid atau sudah dicabut. |
| 403 | Organisasi atau jaringan tidak memiliki akses. |
| 429 | Batas frekuensi, permintaan bersamaan, kuota bulanan, pemeriksaan tanpa tagihan harian, atau batch aktif tercapai. Baca error.code dan Retry-After. |
| 500 | Kesalahan internal. Simpan X-Request-ID untuk tim dukungan. |
| 503 | Akses API atau layanan yang diperlukan tidak tersedia. |
POST /v1/wallet/check
Periksa satu alamat dompet. Kirim X-API-Key dan Idempotency-Key yang tersimpan. Jaringan bersifat opsional dan dikenali dari format alamat.
| HTTP | Respons |
|---|---|
| 200 | Berhasil: isi respons mengikuti skema endpoint ini. Untuk pemeriksaan, baca sumbu status dan cakupan. |
| 401 | Kunci API tidak valid atau sudah dicabut. |
| 403 | Organisasi atau jaringan tidak memiliki akses. |
| 409 | Konflik: permintaan masih berjalan, kunci idempotensi dipakai ulang dengan isi berbeda, atau permintaan bertentangan dengan status yang tercatat. Baca error.code. |
| 413 | Isi permintaan lebih besar daripada yang diterima endpoint ini. |
| 415 | Jenis konten ini tidak diterima di sini: JSON, atau CSV untuk unggahan batch. |
| 422 | Perbaiki kolom permintaan. |
| 429 | Batas frekuensi, permintaan bersamaan, kuota bulanan, pemeriksaan tanpa tagihan harian, atau batch aktif tercapai. Baca error.code dan Retry-After. |
| 503 | Akses API atau layanan yang diperlukan tidak tersedia. |
| 504 | Pemrosesan permintaan melebihi batas waktu server. |
| 500 | Kesalahan internal. Simpan X-Request-ID untuk tim dukungan. |
POST /v1/obligations
Catat kewajiban dan instruksinya. Perubahan penerima, jumlah, token, atau jaringan adalah instruction_version baru.
| HTTP | Respons |
|---|---|
| 200 | Berhasil: isi respons mengikuti skema endpoint ini. Untuk pemeriksaan, baca sumbu status dan cakupan. |
| 401 | Kunci API tidak valid atau sudah dicabut. |
| 403 | Organisasi atau jaringan tidak memiliki akses. |
| 404 | Tidak ditemukan di organisasi dan lingkungan Anda. Pada /v1/check: transaksi tidak ditemukan di jaringan yang dipilih atau, tanpa jaringan, di jaringan mana pun yang diperiksa. |
| 409 | Konflik: permintaan masih berjalan, kunci idempotensi dipakai ulang dengan isi berbeda, atau permintaan bertentangan dengan status yang tercatat. Baca error.code. |
| 422 | Perbaiki kolom permintaan. |
| 429 | Batas frekuensi, permintaan bersamaan, kuota bulanan, pemeriksaan tanpa tagihan harian, atau batch aktif tercapai. Baca error.code dan Retry-After. |
| 500 | Kesalahan internal. Simpan X-Request-ID untuk tim dukungan. |
| 504 | Pemrosesan permintaan melebihi batas waktu server. |
POST /v1/obligations/lookup
Baca kembali kewajiban beserta riwayat instruksi, percobaan, alokasi, dan keputusan. Referensi dikirim di body, bukan di URL.
| HTTP | Respons |
|---|---|
| 200 | Berhasil: isi respons mengikuti skema endpoint ini. Untuk pemeriksaan, baca sumbu status dan cakupan. |
| 401 | Kunci API tidak valid atau sudah dicabut. |
| 403 | Organisasi atau jaringan tidak memiliki akses. |
| 404 | Tidak ditemukan di organisasi dan lingkungan Anda. Pada /v1/check: transaksi tidak ditemukan di jaringan yang dipilih atau, tanpa jaringan, di jaringan mana pun yang diperiksa. |
| 409 | Konflik: permintaan masih berjalan, kunci idempotensi dipakai ulang dengan isi berbeda, atau permintaan bertentangan dengan status yang tercatat. Baca error.code. |
| 422 | Perbaiki kolom permintaan. |
| 429 | Batas frekuensi, permintaan bersamaan, kuota bulanan, pemeriksaan tanpa tagihan harian, atau batch aktif tercapai. Baca error.code dan Retry-After. |
| 500 | Kesalahan internal. Simpan X-Request-ID untuk tim dukungan. |
| 504 | Pemrosesan permintaan melebihi batas waktu server. |
POST /v1/obligations/attempts
Catat satu percobaan eksekusi kewajiban, atau status barunya. Percobaan ulang atau pergantian penyedia adalah attempt_reference baru.
| HTTP | Respons |
|---|---|
| 200 | Berhasil: isi respons mengikuti skema endpoint ini. Untuk pemeriksaan, baca sumbu status dan cakupan. |
| 401 | Kunci API tidak valid atau sudah dicabut. |
| 403 | Organisasi atau jaringan tidak memiliki akses. |
| 404 | Tidak ditemukan di organisasi dan lingkungan Anda. Pada /v1/check: transaksi tidak ditemukan di jaringan yang dipilih atau, tanpa jaringan, di jaringan mana pun yang diperiksa. |
| 409 | Konflik: permintaan masih berjalan, kunci idempotensi dipakai ulang dengan isi berbeda, atau permintaan bertentangan dengan status yang tercatat. Baca error.code. |
| 422 | Perbaiki kolom permintaan. |
| 429 | Batas frekuensi, permintaan bersamaan, kuota bulanan, pemeriksaan tanpa tagihan harian, atau batch aktif tercapai. Baca error.code dan Retry-After. |
| 500 | Kesalahan internal. Simpan X-Request-ID untuk tim dukungan. |
| 504 | Pemrosesan permintaan melebihi batas waktu server. |
POST /v1/allocations
Nyatakan bagaimana satu peristiwa pembayaran menyelesaikan satu atau beberapa kewajiban, misalnya pembayaran agregat.
| HTTP | Respons |
|---|---|
| 200 | Berhasil: isi respons mengikuti skema endpoint ini. Untuk pemeriksaan, baca sumbu status dan cakupan. |
| 401 | Kunci API tidak valid atau sudah dicabut. |
| 403 | Organisasi atau jaringan tidak memiliki akses. |
| 404 | Tidak ditemukan di organisasi dan lingkungan Anda. Pada /v1/check: transaksi tidak ditemukan di jaringan yang dipilih atau, tanpa jaringan, di jaringan mana pun yang diperiksa. |
| 409 | Konflik: permintaan masih berjalan, kunci idempotensi dipakai ulang dengan isi berbeda, atau permintaan bertentangan dengan status yang tercatat. Baca error.code. |
| 422 | Perbaiki kolom permintaan. |
| 429 | Batas frekuensi, permintaan bersamaan, kuota bulanan, pemeriksaan tanpa tagihan harian, atau batch aktif tercapai. Baca error.code dan Retry-After. |
| 500 | Kesalahan internal. Simpan X-Request-ID untuk tim dukungan. |
| 504 | Pemrosesan permintaan melebihi batas waktu server. |
POST /v1/allocations/{allocation_id}/reversal
Batalkan alokasi. Alokasi tetap tercatat beserta waktu dan alasannya.
| HTTP | Respons |
|---|---|
| 200 | Berhasil: isi respons mengikuti skema endpoint ini. Untuk pemeriksaan, baca sumbu status dan cakupan. |
| 401 | Kunci API tidak valid atau sudah dicabut. |
| 403 | Organisasi atau jaringan tidak memiliki akses. |
| 404 | Tidak ditemukan di organisasi dan lingkungan Anda. Pada /v1/check: transaksi tidak ditemukan di jaringan yang dipilih atau, tanpa jaringan, di jaringan mana pun yang diperiksa. |
| 409 | Konflik: permintaan masih berjalan, kunci idempotensi dipakai ulang dengan isi berbeda, atau permintaan bertentangan dengan status yang tercatat. Baca error.code. |
| 422 | Perbaiki kolom permintaan. |
| 429 | Batas frekuensi, permintaan bersamaan, kuota bulanan, pemeriksaan tanpa tagihan harian, atau batch aktif tercapai. Baca error.code dan Retry-After. |
| 500 | Kesalahan internal. Simpan X-Request-ID untuk tim dukungan. |
| 504 | Pemrosesan permintaan melebihi batas waktu server. |
GET /v1/decisions/{decision_id}
Baca keputusan ChainZap saat dibuat, beserta bukti dan apa yang Anda catat setelahnya.
| HTTP | Respons |
|---|---|
| 200 | Berhasil: isi respons mengikuti skema endpoint ini. Untuk pemeriksaan, baca sumbu status dan cakupan. |
| 401 | Kunci API tidak valid atau sudah dicabut. |
| 403 | Organisasi atau jaringan tidak memiliki akses. |
| 404 | Tidak ditemukan di organisasi dan lingkungan Anda. Pada /v1/check: transaksi tidak ditemukan di jaringan yang dipilih atau, tanpa jaringan, di jaringan mana pun yang diperiksa. |
| 409 | Konflik: permintaan masih berjalan, kunci idempotensi dipakai ulang dengan isi berbeda, atau permintaan bertentangan dengan status yang tercatat. Baca error.code. |
| 422 | Perbaiki kolom permintaan. |
| 429 | Batas frekuensi, permintaan bersamaan, kuota bulanan, pemeriksaan tanpa tagihan harian, atau batch aktif tercapai. Baca error.code dan Retry-After. |
| 500 | Kesalahan internal. Simpan X-Request-ID untuk tim dukungan. |
| 504 | Pemrosesan permintaan melebihi batas waktu server. |
POST /v1/decisions/{decision_id}/actions
Catat tindakan atas keputusan, cara penyelesaiannya, atau hasilnya. Dicatat di samping keputusan, tidak mengubahnya.
| HTTP | Respons |
|---|---|
| 200 | Berhasil: isi respons mengikuti skema endpoint ini. Untuk pemeriksaan, baca sumbu status dan cakupan. |
| 401 | Kunci API tidak valid atau sudah dicabut. |
| 403 | Organisasi atau jaringan tidak memiliki akses. |
| 404 | Tidak ditemukan di organisasi dan lingkungan Anda. Pada /v1/check: transaksi tidak ditemukan di jaringan yang dipilih atau, tanpa jaringan, di jaringan mana pun yang diperiksa. |
| 409 | Konflik: permintaan masih berjalan, kunci idempotensi dipakai ulang dengan isi berbeda, atau permintaan bertentangan dengan status yang tercatat. Baca error.code. |
| 422 | Perbaiki kolom permintaan. |
| 429 | Batas frekuensi, permintaan bersamaan, kuota bulanan, pemeriksaan tanpa tagihan harian, atau batch aktif tercapai. Baca error.code dan Retry-After. |
| 500 | Kesalahan internal. Simpan X-Request-ID untuk tim dukungan. |
| 504 | Pemrosesan permintaan melebihi batas waktu server. |
POST /v1/decisions/{decision_id}/resolution
Catat tindakan atas keputusan, cara penyelesaiannya, atau hasilnya. Dicatat di samping keputusan, tidak mengubahnya.
| HTTP | Respons |
|---|---|
| 200 | Berhasil: isi respons mengikuti skema endpoint ini. Untuk pemeriksaan, baca sumbu status dan cakupan. |
| 401 | Kunci API tidak valid atau sudah dicabut. |
| 403 | Organisasi atau jaringan tidak memiliki akses. |
| 404 | Tidak ditemukan di organisasi dan lingkungan Anda. Pada /v1/check: transaksi tidak ditemukan di jaringan yang dipilih atau, tanpa jaringan, di jaringan mana pun yang diperiksa. |
| 409 | Konflik: permintaan masih berjalan, kunci idempotensi dipakai ulang dengan isi berbeda, atau permintaan bertentangan dengan status yang tercatat. Baca error.code. |
| 422 | Perbaiki kolom permintaan. |
| 429 | Batas frekuensi, permintaan bersamaan, kuota bulanan, pemeriksaan tanpa tagihan harian, atau batch aktif tercapai. Baca error.code dan Retry-After. |
| 500 | Kesalahan internal. Simpan X-Request-ID untuk tim dukungan. |
| 504 | Pemrosesan permintaan melebihi batas waktu server. |
POST /v1/decisions/{decision_id}/outcome
Catat tindakan atas keputusan, cara penyelesaiannya, atau hasilnya. Dicatat di samping keputusan, tidak mengubahnya.
| HTTP | Respons |
|---|---|
| 200 | Berhasil: isi respons mengikuti skema endpoint ini. Untuk pemeriksaan, baca sumbu status dan cakupan. |
| 401 | Kunci API tidak valid atau sudah dicabut. |
| 403 | Organisasi atau jaringan tidak memiliki akses. |
| 404 | Tidak ditemukan di organisasi dan lingkungan Anda. Pada /v1/check: transaksi tidak ditemukan di jaringan yang dipilih atau, tanpa jaringan, di jaringan mana pun yang diperiksa. |
| 409 | Konflik: permintaan masih berjalan, kunci idempotensi dipakai ulang dengan isi berbeda, atau permintaan bertentangan dengan status yang tercatat. Baca error.code. |
| 422 | Perbaiki kolom permintaan. |
| 429 | Batas frekuensi, permintaan bersamaan, kuota bulanan, pemeriksaan tanpa tagihan harian, atau batch aktif tercapai. Baca error.code dan Retry-After. |
| 500 | Kesalahan internal. Simpan X-Request-ID untuk tim dukungan. |
| 504 | Pemrosesan permintaan melebihi batas waktu server. |
POST /v1/batches
Unggah CSV hingga 200 pembayaran. Setiap baris divalidasi, dibandingkan dengan baris lain dan pemeriksaan sebelumnya, dan biaya diperkirakan sebelum dijalankan.
| HTTP | Respons |
|---|---|
| 201 | Dibuat: batch diterima dan diperiksa sebelum dijalankan; mulai dengan execute. |
| 401 | Kunci API tidak valid atau sudah dicabut. |
| 403 | Organisasi atau jaringan tidak memiliki akses. |
| 404 | Tidak ditemukan di organisasi dan lingkungan Anda. Pada /v1/check: transaksi tidak ditemukan di jaringan yang dipilih atau, tanpa jaringan, di jaringan mana pun yang diperiksa. |
| 409 | Konflik: permintaan masih berjalan, kunci idempotensi dipakai ulang dengan isi berbeda, atau permintaan bertentangan dengan status yang tercatat. Baca error.code. |
| 413 | Isi permintaan lebih besar daripada yang diterima endpoint ini. |
| 415 | Jenis konten ini tidak diterima di sini: JSON, atau CSV untuk unggahan batch. |
| 422 | Perbaiki kolom permintaan. |
| 429 | Batas frekuensi, permintaan bersamaan, kuota bulanan, pemeriksaan tanpa tagihan harian, atau batch aktif tercapai. Baca error.code dan Retry-After. |
| 500 | Kesalahan internal. Simpan X-Request-ID untuk tim dukungan. |
GET /v1/batches
Unggah CSV hingga 200 pembayaran. Setiap baris divalidasi, dibandingkan dengan baris lain dan pemeriksaan sebelumnya, dan biaya diperkirakan sebelum dijalankan.
| HTTP | Respons |
|---|---|
| 200 | Berhasil: isi respons mengikuti skema endpoint ini. Untuk pemeriksaan, baca sumbu status dan cakupan. |
| 401 | Kunci API tidak valid atau sudah dicabut. |
| 403 | Organisasi atau jaringan tidak memiliki akses. |
| 404 | Tidak ditemukan di organisasi dan lingkungan Anda. Pada /v1/check: transaksi tidak ditemukan di jaringan yang dipilih atau, tanpa jaringan, di jaringan mana pun yang diperiksa. |
| 409 | Konflik: permintaan masih berjalan, kunci idempotensi dipakai ulang dengan isi berbeda, atau permintaan bertentangan dengan status yang tercatat. Baca error.code. |
| 413 | Isi permintaan lebih besar daripada yang diterima endpoint ini. |
| 415 | Jenis konten ini tidak diterima di sini: JSON, atau CSV untuk unggahan batch. |
| 422 | Perbaiki kolom permintaan. |
| 429 | Batas frekuensi, permintaan bersamaan, kuota bulanan, pemeriksaan tanpa tagihan harian, atau batch aktif tercapai. Baca error.code dan Retry-After. |
| 500 | Kesalahan internal. Simpan X-Request-ID untuk tim dukungan. |
GET /v1/batches/{batch_id}
Baca status, progres, preflight, estimasi, dan ringkasan batch, atau barisnya beserta hasil.
| HTTP | Respons |
|---|---|
| 200 | Berhasil: isi respons mengikuti skema endpoint ini. Untuk pemeriksaan, baca sumbu status dan cakupan. |
| 401 | Kunci API tidak valid atau sudah dicabut. |
| 403 | Organisasi atau jaringan tidak memiliki akses. |
| 404 | Tidak ditemukan di organisasi dan lingkungan Anda. Pada /v1/check: transaksi tidak ditemukan di jaringan yang dipilih atau, tanpa jaringan, di jaringan mana pun yang diperiksa. |
| 409 | Konflik: permintaan masih berjalan, kunci idempotensi dipakai ulang dengan isi berbeda, atau permintaan bertentangan dengan status yang tercatat. Baca error.code. |
| 413 | Isi permintaan lebih besar daripada yang diterima endpoint ini. |
| 415 | Jenis konten ini tidak diterima di sini: JSON, atau CSV untuk unggahan batch. |
| 422 | Perbaiki kolom permintaan. |
| 429 | Batas frekuensi, permintaan bersamaan, kuota bulanan, pemeriksaan tanpa tagihan harian, atau batch aktif tercapai. Baca error.code dan Retry-After. |
| 500 | Kesalahan internal. Simpan X-Request-ID untuk tim dukungan. |
GET /v1/batches/{batch_id}/rows
Baca status, progres, preflight, estimasi, dan ringkasan batch, atau barisnya beserta hasil.
| HTTP | Respons |
|---|---|
| 200 | Berhasil: isi respons mengikuti skema endpoint ini. Untuk pemeriksaan, baca sumbu status dan cakupan. |
| 401 | Kunci API tidak valid atau sudah dicabut. |
| 403 | Organisasi atau jaringan tidak memiliki akses. |
| 404 | Tidak ditemukan di organisasi dan lingkungan Anda. Pada /v1/check: transaksi tidak ditemukan di jaringan yang dipilih atau, tanpa jaringan, di jaringan mana pun yang diperiksa. |
| 409 | Konflik: permintaan masih berjalan, kunci idempotensi dipakai ulang dengan isi berbeda, atau permintaan bertentangan dengan status yang tercatat. Baca error.code. |
| 413 | Isi permintaan lebih besar daripada yang diterima endpoint ini. |
| 415 | Jenis konten ini tidak diterima di sini: JSON, atau CSV untuk unggahan batch. |
| 422 | Perbaiki kolom permintaan. |
| 429 | Batas frekuensi, permintaan bersamaan, kuota bulanan, pemeriksaan tanpa tagihan harian, atau batch aktif tercapai. Baca error.code dan Retry-After. |
| 500 | Kesalahan internal. Simpan X-Request-ID untuk tim dukungan. |
GET /v1/batches/{batch_id}/export.csv
Ekspor batch sebagai CSV untuk spreadsheet
| HTTP | Respons |
|---|---|
| 200 | Berhasil: isi respons mengikuti skema endpoint ini. Untuk pemeriksaan, baca sumbu status dan cakupan. |
| 401 | Kunci API tidak valid atau sudah dicabut. |
| 403 | Organisasi atau jaringan tidak memiliki akses. |
| 404 | Tidak ditemukan di organisasi dan lingkungan Anda. Pada /v1/check: transaksi tidak ditemukan di jaringan yang dipilih atau, tanpa jaringan, di jaringan mana pun yang diperiksa. |
| 409 | Konflik: permintaan masih berjalan, kunci idempotensi dipakai ulang dengan isi berbeda, atau permintaan bertentangan dengan status yang tercatat. Baca error.code. |
| 413 | Isi permintaan lebih besar daripada yang diterima endpoint ini. |
| 415 | Jenis konten ini tidak diterima di sini: JSON, atau CSV untuk unggahan batch. |
| 422 | Perbaiki kolom permintaan. |
| 429 | Batas frekuensi, permintaan bersamaan, kuota bulanan, pemeriksaan tanpa tagihan harian, atau batch aktif tercapai. Baca error.code dan Retry-After. |
| 500 | Kesalahan internal. Simpan X-Request-ID untuk tim dukungan. |
POST /v1/batches/{batch_id}/execute
Mulai batch setelah mengonfirmasi estimasinya, ulangi hanya baris yang jawabannya masih bisa berubah, atau batalkan.
| HTTP | Respons |
|---|---|
| 200 | Berhasil: isi respons mengikuti skema endpoint ini. Untuk pemeriksaan, baca sumbu status dan cakupan. |
| 401 | Kunci API tidak valid atau sudah dicabut. |
| 403 | Organisasi atau jaringan tidak memiliki akses. |
| 404 | Tidak ditemukan di organisasi dan lingkungan Anda. Pada /v1/check: transaksi tidak ditemukan di jaringan yang dipilih atau, tanpa jaringan, di jaringan mana pun yang diperiksa. |
| 409 | Konflik: permintaan masih berjalan, kunci idempotensi dipakai ulang dengan isi berbeda, atau permintaan bertentangan dengan status yang tercatat. Baca error.code. |
| 413 | Isi permintaan lebih besar daripada yang diterima endpoint ini. |
| 415 | Jenis konten ini tidak diterima di sini: JSON, atau CSV untuk unggahan batch. |
| 422 | Perbaiki kolom permintaan. |
| 429 | Batas frekuensi, permintaan bersamaan, kuota bulanan, pemeriksaan tanpa tagihan harian, atau batch aktif tercapai. Baca error.code dan Retry-After. |
| 500 | Kesalahan internal. Simpan X-Request-ID untuk tim dukungan. |
POST /v1/batches/{batch_id}/retry
Mulai batch setelah mengonfirmasi estimasinya, ulangi hanya baris yang jawabannya masih bisa berubah, atau batalkan.
| HTTP | Respons |
|---|---|
| 200 | Berhasil: isi respons mengikuti skema endpoint ini. Untuk pemeriksaan, baca sumbu status dan cakupan. |
| 401 | Kunci API tidak valid atau sudah dicabut. |
| 403 | Organisasi atau jaringan tidak memiliki akses. |
| 404 | Tidak ditemukan di organisasi dan lingkungan Anda. Pada /v1/check: transaksi tidak ditemukan di jaringan yang dipilih atau, tanpa jaringan, di jaringan mana pun yang diperiksa. |
| 409 | Konflik: permintaan masih berjalan, kunci idempotensi dipakai ulang dengan isi berbeda, atau permintaan bertentangan dengan status yang tercatat. Baca error.code. |
| 413 | Isi permintaan lebih besar daripada yang diterima endpoint ini. |
| 415 | Jenis konten ini tidak diterima di sini: JSON, atau CSV untuk unggahan batch. |
| 422 | Perbaiki kolom permintaan. |
| 429 | Batas frekuensi, permintaan bersamaan, kuota bulanan, pemeriksaan tanpa tagihan harian, atau batch aktif tercapai. Baca error.code dan Retry-After. |
| 500 | Kesalahan internal. Simpan X-Request-ID untuk tim dukungan. |
POST /v1/batches/{batch_id}/cancel
Mulai batch setelah mengonfirmasi estimasinya, ulangi hanya baris yang jawabannya masih bisa berubah, atau batalkan.
| HTTP | Respons |
|---|---|
| 200 | Berhasil: isi respons mengikuti skema endpoint ini. Untuk pemeriksaan, baca sumbu status dan cakupan. |
| 401 | Kunci API tidak valid atau sudah dicabut. |
| 403 | Organisasi atau jaringan tidak memiliki akses. |
| 404 | Tidak ditemukan di organisasi dan lingkungan Anda. Pada /v1/check: transaksi tidak ditemukan di jaringan yang dipilih atau, tanpa jaringan, di jaringan mana pun yang diperiksa. |
| 409 | Konflik: permintaan masih berjalan, kunci idempotensi dipakai ulang dengan isi berbeda, atau permintaan bertentangan dengan status yang tercatat. Baca error.code. |
| 413 | Isi permintaan lebih besar daripada yang diterima endpoint ini. |
| 415 | Jenis konten ini tidak diterima di sini: JSON, atau CSV untuk unggahan batch. |
| 422 | Perbaiki kolom permintaan. |
| 429 | Batas frekuensi, permintaan bersamaan, kuota bulanan, pemeriksaan tanpa tagihan harian, atau batch aktif tercapai. Baca error.code dan Retry-After. |
| 500 | Kesalahan internal. Simpan X-Request-ID untuk tim dukungan. |
POST /v1/escrow-deals
Buat draf transaksi escrow, tampilkan transaksi organisasi, atau temukan satu berdasarkan referensi Anda.
| HTTP | Respons |
|---|---|
| 200 | Berhasil: isi respons mengikuti skema endpoint ini. Untuk pemeriksaan, baca sumbu status dan cakupan. |
| 401 | Kunci API tidak valid atau sudah dicabut. |
| 403 | Organisasi atau jaringan tidak memiliki akses. |
| 404 | Tidak ditemukan di organisasi dan lingkungan Anda. Pada /v1/check: transaksi tidak ditemukan di jaringan yang dipilih atau, tanpa jaringan, di jaringan mana pun yang diperiksa. |
| 409 | Konflik: permintaan masih berjalan, kunci idempotensi dipakai ulang dengan isi berbeda, atau permintaan bertentangan dengan status yang tercatat. Baca error.code. |
| 413 | Isi permintaan lebih besar daripada yang diterima endpoint ini. |
| 415 | Jenis konten ini tidak diterima di sini: JSON, atau CSV untuk unggahan batch. |
| 422 | Perbaiki kolom permintaan. |
| 429 | Batas frekuensi, permintaan bersamaan, kuota bulanan, pemeriksaan tanpa tagihan harian, atau batch aktif tercapai. Baca error.code dan Retry-After. |
| 500 | Kesalahan internal. Simpan X-Request-ID untuk tim dukungan. |
| 503 | Akses API atau layanan yang diperlukan tidak tersedia. |
| 504 | Pemrosesan permintaan melebihi batas waktu server. |
GET /v1/escrow-deals
Buat draf transaksi escrow, tampilkan transaksi organisasi, atau temukan satu berdasarkan referensi Anda.
| HTTP | Respons |
|---|---|
| 200 | Berhasil: isi respons mengikuti skema endpoint ini. Untuk pemeriksaan, baca sumbu status dan cakupan. |
| 401 | Kunci API tidak valid atau sudah dicabut. |
| 403 | Organisasi atau jaringan tidak memiliki akses. |
| 404 | Tidak ditemukan di organisasi dan lingkungan Anda. Pada /v1/check: transaksi tidak ditemukan di jaringan yang dipilih atau, tanpa jaringan, di jaringan mana pun yang diperiksa. |
| 409 | Konflik: permintaan masih berjalan, kunci idempotensi dipakai ulang dengan isi berbeda, atau permintaan bertentangan dengan status yang tercatat. Baca error.code. |
| 413 | Isi permintaan lebih besar daripada yang diterima endpoint ini. |
| 415 | Jenis konten ini tidak diterima di sini: JSON, atau CSV untuk unggahan batch. |
| 422 | Perbaiki kolom permintaan. |
| 429 | Batas frekuensi, permintaan bersamaan, kuota bulanan, pemeriksaan tanpa tagihan harian, atau batch aktif tercapai. Baca error.code dan Retry-After. |
| 500 | Kesalahan internal. Simpan X-Request-ID untuk tim dukungan. |
| 503 | Akses API atau layanan yang diperlukan tidak tersedia. |
| 504 | Pemrosesan permintaan melebihi batas waktu server. |
POST /v1/escrow-deals/lookup
Buat draf transaksi escrow, tampilkan transaksi organisasi, atau temukan satu berdasarkan referensi Anda.
| HTTP | Respons |
|---|---|
| 200 | Berhasil: isi respons mengikuti skema endpoint ini. Untuk pemeriksaan, baca sumbu status dan cakupan. |
| 401 | Kunci API tidak valid atau sudah dicabut. |
| 403 | Organisasi atau jaringan tidak memiliki akses. |
| 404 | Tidak ditemukan di organisasi dan lingkungan Anda. Pada /v1/check: transaksi tidak ditemukan di jaringan yang dipilih atau, tanpa jaringan, di jaringan mana pun yang diperiksa. |
| 409 | Konflik: permintaan masih berjalan, kunci idempotensi dipakai ulang dengan isi berbeda, atau permintaan bertentangan dengan status yang tercatat. Baca error.code. |
| 413 | Isi permintaan lebih besar daripada yang diterima endpoint ini. |
| 415 | Jenis konten ini tidak diterima di sini: JSON, atau CSV untuk unggahan batch. |
| 422 | Perbaiki kolom permintaan. |
| 429 | Batas frekuensi, permintaan bersamaan, kuota bulanan, pemeriksaan tanpa tagihan harian, atau batch aktif tercapai. Baca error.code dan Retry-After. |
| 500 | Kesalahan internal. Simpan X-Request-ID untuk tim dukungan. |
| 503 | Akses API atau layanan yang diperlukan tidak tersedia. |
| 504 | Pemrosesan permintaan melebihi batas waktu server. |
GET /v1/escrow-deals/events
Baca feed peristiwa setelah nomor urut, atau kirim ulang satu peristiwa ke webhook.
| HTTP | Respons |
|---|---|
| 200 | Berhasil: isi respons mengikuti skema endpoint ini. Untuk pemeriksaan, baca sumbu status dan cakupan. |
| 401 | Kunci API tidak valid atau sudah dicabut. |
| 403 | Organisasi atau jaringan tidak memiliki akses. |
| 404 | Tidak ditemukan di organisasi dan lingkungan Anda. Pada /v1/check: transaksi tidak ditemukan di jaringan yang dipilih atau, tanpa jaringan, di jaringan mana pun yang diperiksa. |
| 409 | Konflik: permintaan masih berjalan, kunci idempotensi dipakai ulang dengan isi berbeda, atau permintaan bertentangan dengan status yang tercatat. Baca error.code. |
| 413 | Isi permintaan lebih besar daripada yang diterima endpoint ini. |
| 415 | Jenis konten ini tidak diterima di sini: JSON, atau CSV untuk unggahan batch. |
| 422 | Perbaiki kolom permintaan. |
| 429 | Batas frekuensi, permintaan bersamaan, kuota bulanan, pemeriksaan tanpa tagihan harian, atau batch aktif tercapai. Baca error.code dan Retry-After. |
| 500 | Kesalahan internal. Simpan X-Request-ID untuk tim dukungan. |
| 503 | Akses API atau layanan yang diperlukan tidak tersedia. |
| 504 | Pemrosesan permintaan melebihi batas waktu server. |
POST /v1/escrow-deals/events/{event_id}/redeliver
Baca feed peristiwa setelah nomor urut, atau kirim ulang satu peristiwa ke webhook.
| HTTP | Respons |
|---|---|
| 200 | Berhasil: isi respons mengikuti skema endpoint ini. Untuk pemeriksaan, baca sumbu status dan cakupan. |
| 401 | Kunci API tidak valid atau sudah dicabut. |
| 403 | Organisasi atau jaringan tidak memiliki akses. |
| 404 | Tidak ditemukan di organisasi dan lingkungan Anda. Pada /v1/check: transaksi tidak ditemukan di jaringan yang dipilih atau, tanpa jaringan, di jaringan mana pun yang diperiksa. |
| 409 | Konflik: permintaan masih berjalan, kunci idempotensi dipakai ulang dengan isi berbeda, atau permintaan bertentangan dengan status yang tercatat. Baca error.code. |
| 413 | Isi permintaan lebih besar daripada yang diterima endpoint ini. |
| 415 | Jenis konten ini tidak diterima di sini: JSON, atau CSV untuk unggahan batch. |
| 422 | Perbaiki kolom permintaan. |
| 429 | Batas frekuensi, permintaan bersamaan, kuota bulanan, pemeriksaan tanpa tagihan harian, atau batch aktif tercapai. Baca error.code dan Retry-After. |
| 500 | Kesalahan internal. Simpan X-Request-ID untuk tim dukungan. |
| 503 | Akses API atau layanan yang diperlukan tidak tersedia. |
| 504 | Pemrosesan permintaan melebihi batas waktu server. |
GET /v1/escrow-deals/webhook
Atur, baca, atau nonaktifkan webhook bertanda tangan, ganti rahasianya, atau kirim peristiwa uji.
| HTTP | Respons |
|---|---|
| 200 | Berhasil: isi respons mengikuti skema endpoint ini. Untuk pemeriksaan, baca sumbu status dan cakupan. |
| 401 | Kunci API tidak valid atau sudah dicabut. |
| 403 | Organisasi atau jaringan tidak memiliki akses. |
| 404 | Tidak ditemukan di organisasi dan lingkungan Anda. Pada /v1/check: transaksi tidak ditemukan di jaringan yang dipilih atau, tanpa jaringan, di jaringan mana pun yang diperiksa. |
| 409 | Konflik: permintaan masih berjalan, kunci idempotensi dipakai ulang dengan isi berbeda, atau permintaan bertentangan dengan status yang tercatat. Baca error.code. |
| 413 | Isi permintaan lebih besar daripada yang diterima endpoint ini. |
| 415 | Jenis konten ini tidak diterima di sini: JSON, atau CSV untuk unggahan batch. |
| 422 | Perbaiki kolom permintaan. |
| 429 | Batas frekuensi, permintaan bersamaan, kuota bulanan, pemeriksaan tanpa tagihan harian, atau batch aktif tercapai. Baca error.code dan Retry-After. |
| 500 | Kesalahan internal. Simpan X-Request-ID untuk tim dukungan. |
| 503 | Akses API atau layanan yang diperlukan tidak tersedia. |
| 504 | Pemrosesan permintaan melebihi batas waktu server. |
PUT /v1/escrow-deals/webhook
Atur, baca, atau nonaktifkan webhook bertanda tangan, ganti rahasianya, atau kirim peristiwa uji.
| HTTP | Respons |
|---|---|
| 200 | Berhasil: isi respons mengikuti skema endpoint ini. Untuk pemeriksaan, baca sumbu status dan cakupan. |
| 401 | Kunci API tidak valid atau sudah dicabut. |
| 403 | Organisasi atau jaringan tidak memiliki akses. |
| 404 | Tidak ditemukan di organisasi dan lingkungan Anda. Pada /v1/check: transaksi tidak ditemukan di jaringan yang dipilih atau, tanpa jaringan, di jaringan mana pun yang diperiksa. |
| 409 | Konflik: permintaan masih berjalan, kunci idempotensi dipakai ulang dengan isi berbeda, atau permintaan bertentangan dengan status yang tercatat. Baca error.code. |
| 413 | Isi permintaan lebih besar daripada yang diterima endpoint ini. |
| 415 | Jenis konten ini tidak diterima di sini: JSON, atau CSV untuk unggahan batch. |
| 422 | Perbaiki kolom permintaan. |
| 429 | Batas frekuensi, permintaan bersamaan, kuota bulanan, pemeriksaan tanpa tagihan harian, atau batch aktif tercapai. Baca error.code dan Retry-After. |
| 500 | Kesalahan internal. Simpan X-Request-ID untuk tim dukungan. |
| 503 | Akses API atau layanan yang diperlukan tidak tersedia. |
| 504 | Pemrosesan permintaan melebihi batas waktu server. |
DELETE /v1/escrow-deals/webhook
Atur, baca, atau nonaktifkan webhook bertanda tangan, ganti rahasianya, atau kirim peristiwa uji.
| HTTP | Respons |
|---|---|
| 200 | Berhasil: isi respons mengikuti skema endpoint ini. Untuk pemeriksaan, baca sumbu status dan cakupan. |
| 401 | Kunci API tidak valid atau sudah dicabut. |
| 403 | Organisasi atau jaringan tidak memiliki akses. |
| 404 | Tidak ditemukan di organisasi dan lingkungan Anda. Pada /v1/check: transaksi tidak ditemukan di jaringan yang dipilih atau, tanpa jaringan, di jaringan mana pun yang diperiksa. |
| 409 | Konflik: permintaan masih berjalan, kunci idempotensi dipakai ulang dengan isi berbeda, atau permintaan bertentangan dengan status yang tercatat. Baca error.code. |
| 413 | Isi permintaan lebih besar daripada yang diterima endpoint ini. |
| 415 | Jenis konten ini tidak diterima di sini: JSON, atau CSV untuk unggahan batch. |
| 422 | Perbaiki kolom permintaan. |
| 429 | Batas frekuensi, permintaan bersamaan, kuota bulanan, pemeriksaan tanpa tagihan harian, atau batch aktif tercapai. Baca error.code dan Retry-After. |
| 500 | Kesalahan internal. Simpan X-Request-ID untuk tim dukungan. |
| 503 | Akses API atau layanan yang diperlukan tidak tersedia. |
| 504 | Pemrosesan permintaan melebihi batas waktu server. |
POST /v1/escrow-deals/webhook/rotate-secret
Atur, baca, atau nonaktifkan webhook bertanda tangan, ganti rahasianya, atau kirim peristiwa uji.
| HTTP | Respons |
|---|---|
| 200 | Berhasil: isi respons mengikuti skema endpoint ini. Untuk pemeriksaan, baca sumbu status dan cakupan. |
| 401 | Kunci API tidak valid atau sudah dicabut. |
| 403 | Organisasi atau jaringan tidak memiliki akses. |
| 404 | Tidak ditemukan di organisasi dan lingkungan Anda. Pada /v1/check: transaksi tidak ditemukan di jaringan yang dipilih atau, tanpa jaringan, di jaringan mana pun yang diperiksa. |
| 409 | Konflik: permintaan masih berjalan, kunci idempotensi dipakai ulang dengan isi berbeda, atau permintaan bertentangan dengan status yang tercatat. Baca error.code. |
| 413 | Isi permintaan lebih besar daripada yang diterima endpoint ini. |
| 415 | Jenis konten ini tidak diterima di sini: JSON, atau CSV untuk unggahan batch. |
| 422 | Perbaiki kolom permintaan. |
| 429 | Batas frekuensi, permintaan bersamaan, kuota bulanan, pemeriksaan tanpa tagihan harian, atau batch aktif tercapai. Baca error.code dan Retry-After. |
| 500 | Kesalahan internal. Simpan X-Request-ID untuk tim dukungan. |
| 503 | Akses API atau layanan yang diperlukan tidak tersedia. |
| 504 | Pemrosesan permintaan melebihi batas waktu server. |
POST /v1/escrow-deals/webhook/test
Atur, baca, atau nonaktifkan webhook bertanda tangan, ganti rahasianya, atau kirim peristiwa uji.
| HTTP | Respons |
|---|---|
| 200 | Berhasil: isi respons mengikuti skema endpoint ini. Untuk pemeriksaan, baca sumbu status dan cakupan. |
| 401 | Kunci API tidak valid atau sudah dicabut. |
| 403 | Organisasi atau jaringan tidak memiliki akses. |
| 404 | Tidak ditemukan di organisasi dan lingkungan Anda. Pada /v1/check: transaksi tidak ditemukan di jaringan yang dipilih atau, tanpa jaringan, di jaringan mana pun yang diperiksa. |
| 409 | Konflik: permintaan masih berjalan, kunci idempotensi dipakai ulang dengan isi berbeda, atau permintaan bertentangan dengan status yang tercatat. Baca error.code. |
| 413 | Isi permintaan lebih besar daripada yang diterima endpoint ini. |
| 415 | Jenis konten ini tidak diterima di sini: JSON, atau CSV untuk unggahan batch. |
| 422 | Perbaiki kolom permintaan. |
| 429 | Batas frekuensi, permintaan bersamaan, kuota bulanan, pemeriksaan tanpa tagihan harian, atau batch aktif tercapai. Baca error.code dan Retry-After. |
| 500 | Kesalahan internal. Simpan X-Request-ID untuk tim dukungan. |
| 503 | Akses API atau layanan yang diperlukan tidak tersedia. |
| 504 | Pemrosesan permintaan melebihi batas waktu server. |
GET /v1/escrow-deals/resolvers
Daftarkan resolver eksternal, lihat daftarnya, baca ulang akunnya di jaringan, atau nonaktifkan. Resolver bersifat opsional, dan ChainZap tidak pernah menjadi resolver.
| HTTP | Respons |
|---|---|
| 200 | Berhasil: isi respons mengikuti skema endpoint ini. Untuk pemeriksaan, baca sumbu status dan cakupan. |
| 401 | Kunci API tidak valid atau sudah dicabut. |
| 403 | Organisasi atau jaringan tidak memiliki akses. |
| 404 | Tidak ditemukan di organisasi dan lingkungan Anda. Pada /v1/check: transaksi tidak ditemukan di jaringan yang dipilih atau, tanpa jaringan, di jaringan mana pun yang diperiksa. |
| 409 | Konflik: permintaan masih berjalan, kunci idempotensi dipakai ulang dengan isi berbeda, atau permintaan bertentangan dengan status yang tercatat. Baca error.code. |
| 413 | Isi permintaan lebih besar daripada yang diterima endpoint ini. |
| 415 | Jenis konten ini tidak diterima di sini: JSON, atau CSV untuk unggahan batch. |
| 422 | Perbaiki kolom permintaan. |
| 429 | Batas frekuensi, permintaan bersamaan, kuota bulanan, pemeriksaan tanpa tagihan harian, atau batch aktif tercapai. Baca error.code dan Retry-After. |
| 500 | Kesalahan internal. Simpan X-Request-ID untuk tim dukungan. |
| 503 | Akses API atau layanan yang diperlukan tidak tersedia. |
| 504 | Pemrosesan permintaan melebihi batas waktu server. |
POST /v1/escrow-deals/resolvers
Daftarkan resolver eksternal, lihat daftarnya, baca ulang akunnya di jaringan, atau nonaktifkan. Resolver bersifat opsional, dan ChainZap tidak pernah menjadi resolver.
| HTTP | Respons |
|---|---|
| 200 | Berhasil: isi respons mengikuti skema endpoint ini. Untuk pemeriksaan, baca sumbu status dan cakupan. |
| 401 | Kunci API tidak valid atau sudah dicabut. |
| 403 | Organisasi atau jaringan tidak memiliki akses. |
| 404 | Tidak ditemukan di organisasi dan lingkungan Anda. Pada /v1/check: transaksi tidak ditemukan di jaringan yang dipilih atau, tanpa jaringan, di jaringan mana pun yang diperiksa. |
| 409 | Konflik: permintaan masih berjalan, kunci idempotensi dipakai ulang dengan isi berbeda, atau permintaan bertentangan dengan status yang tercatat. Baca error.code. |
| 413 | Isi permintaan lebih besar daripada yang diterima endpoint ini. |
| 415 | Jenis konten ini tidak diterima di sini: JSON, atau CSV untuk unggahan batch. |
| 422 | Perbaiki kolom permintaan. |
| 429 | Batas frekuensi, permintaan bersamaan, kuota bulanan, pemeriksaan tanpa tagihan harian, atau batch aktif tercapai. Baca error.code dan Retry-After. |
| 500 | Kesalahan internal. Simpan X-Request-ID untuk tim dukungan. |
| 503 | Akses API atau layanan yang diperlukan tidak tersedia. |
| 504 | Pemrosesan permintaan melebihi batas waktu server. |
GET /v1/escrow-deals/resolvers/{resolver_id}
Daftarkan resolver eksternal, lihat daftarnya, baca ulang akunnya di jaringan, atau nonaktifkan. Resolver bersifat opsional, dan ChainZap tidak pernah menjadi resolver.
| HTTP | Respons |
|---|---|
| 200 | Berhasil: isi respons mengikuti skema endpoint ini. Untuk pemeriksaan, baca sumbu status dan cakupan. |
| 401 | Kunci API tidak valid atau sudah dicabut. |
| 403 | Organisasi atau jaringan tidak memiliki akses. |
| 404 | Tidak ditemukan di organisasi dan lingkungan Anda. Pada /v1/check: transaksi tidak ditemukan di jaringan yang dipilih atau, tanpa jaringan, di jaringan mana pun yang diperiksa. |
| 409 | Konflik: permintaan masih berjalan, kunci idempotensi dipakai ulang dengan isi berbeda, atau permintaan bertentangan dengan status yang tercatat. Baca error.code. |
| 413 | Isi permintaan lebih besar daripada yang diterima endpoint ini. |
| 415 | Jenis konten ini tidak diterima di sini: JSON, atau CSV untuk unggahan batch. |
| 422 | Perbaiki kolom permintaan. |
| 429 | Batas frekuensi, permintaan bersamaan, kuota bulanan, pemeriksaan tanpa tagihan harian, atau batch aktif tercapai. Baca error.code dan Retry-After. |
| 500 | Kesalahan internal. Simpan X-Request-ID untuk tim dukungan. |
| 503 | Akses API atau layanan yang diperlukan tidak tersedia. |
| 504 | Pemrosesan permintaan melebihi batas waktu server. |
POST /v1/escrow-deals/resolvers/{resolver_id}/verify
Daftarkan resolver eksternal, lihat daftarnya, baca ulang akunnya di jaringan, atau nonaktifkan. Resolver bersifat opsional, dan ChainZap tidak pernah menjadi resolver.
| HTTP | Respons |
|---|---|
| 200 | Berhasil: isi respons mengikuti skema endpoint ini. Untuk pemeriksaan, baca sumbu status dan cakupan. |
| 401 | Kunci API tidak valid atau sudah dicabut. |
| 403 | Organisasi atau jaringan tidak memiliki akses. |
| 404 | Tidak ditemukan di organisasi dan lingkungan Anda. Pada /v1/check: transaksi tidak ditemukan di jaringan yang dipilih atau, tanpa jaringan, di jaringan mana pun yang diperiksa. |
| 409 | Konflik: permintaan masih berjalan, kunci idempotensi dipakai ulang dengan isi berbeda, atau permintaan bertentangan dengan status yang tercatat. Baca error.code. |
| 413 | Isi permintaan lebih besar daripada yang diterima endpoint ini. |
| 415 | Jenis konten ini tidak diterima di sini: JSON, atau CSV untuk unggahan batch. |
| 422 | Perbaiki kolom permintaan. |
| 429 | Batas frekuensi, permintaan bersamaan, kuota bulanan, pemeriksaan tanpa tagihan harian, atau batch aktif tercapai. Baca error.code dan Retry-After. |
| 500 | Kesalahan internal. Simpan X-Request-ID untuk tim dukungan. |
| 503 | Akses API atau layanan yang diperlukan tidak tersedia. |
| 504 | Pemrosesan permintaan melebihi batas waktu server. |
POST /v1/escrow-deals/resolvers/{resolver_id}/disable
Daftarkan resolver eksternal, lihat daftarnya, baca ulang akunnya di jaringan, atau nonaktifkan. Resolver bersifat opsional, dan ChainZap tidak pernah menjadi resolver.
| HTTP | Respons |
|---|---|
| 200 | Berhasil: isi respons mengikuti skema endpoint ini. Untuk pemeriksaan, baca sumbu status dan cakupan. |
| 401 | Kunci API tidak valid atau sudah dicabut. |
| 403 | Organisasi atau jaringan tidak memiliki akses. |
| 404 | Tidak ditemukan di organisasi dan lingkungan Anda. Pada /v1/check: transaksi tidak ditemukan di jaringan yang dipilih atau, tanpa jaringan, di jaringan mana pun yang diperiksa. |
| 409 | Konflik: permintaan masih berjalan, kunci idempotensi dipakai ulang dengan isi berbeda, atau permintaan bertentangan dengan status yang tercatat. Baca error.code. |
| 413 | Isi permintaan lebih besar daripada yang diterima endpoint ini. |
| 415 | Jenis konten ini tidak diterima di sini: JSON, atau CSV untuk unggahan batch. |
| 422 | Perbaiki kolom permintaan. |
| 429 | Batas frekuensi, permintaan bersamaan, kuota bulanan, pemeriksaan tanpa tagihan harian, atau batch aktif tercapai. Baca error.code dan Retry-After. |
| 500 | Kesalahan internal. Simpan X-Request-ID untuk tim dukungan. |
| 503 | Akses API atau layanan yang diperlukan tidak tersedia. |
| 504 | Pemrosesan permintaan melebihi batas waktu server. |
POST /v1/escrow-deals/resolvers/{resolver_id}/enable
Daftarkan resolver eksternal, lihat daftarnya, baca ulang akunnya di jaringan, atau nonaktifkan. Resolver bersifat opsional, dan ChainZap tidak pernah menjadi resolver.
| HTTP | Respons |
|---|---|
| 200 | Berhasil: isi respons mengikuti skema endpoint ini. Untuk pemeriksaan, baca sumbu status dan cakupan. |
| 401 | Kunci API tidak valid atau sudah dicabut. |
| 403 | Organisasi atau jaringan tidak memiliki akses. |
| 404 | Tidak ditemukan di organisasi dan lingkungan Anda. Pada /v1/check: transaksi tidak ditemukan di jaringan yang dipilih atau, tanpa jaringan, di jaringan mana pun yang diperiksa. |
| 409 | Konflik: permintaan masih berjalan, kunci idempotensi dipakai ulang dengan isi berbeda, atau permintaan bertentangan dengan status yang tercatat. Baca error.code. |
| 413 | Isi permintaan lebih besar daripada yang diterima endpoint ini. |
| 415 | Jenis konten ini tidak diterima di sini: JSON, atau CSV untuk unggahan batch. |
| 422 | Perbaiki kolom permintaan. |
| 429 | Batas frekuensi, permintaan bersamaan, kuota bulanan, pemeriksaan tanpa tagihan harian, atau batch aktif tercapai. Baca error.code dan Retry-After. |
| 500 | Kesalahan internal. Simpan X-Request-ID untuk tim dukungan. |
| 503 | Akses API atau layanan yang diperlukan tidak tersedia. |
| 504 | Pemrosesan permintaan melebihi batas waktu server. |
GET /v1/escrow-deals/{ref}
Baca satu transaksi escrow, ganti ketentuan draf, atau batalkan draf.
| HTTP | Respons |
|---|---|
| 200 | Berhasil: isi respons mengikuti skema endpoint ini. Untuk pemeriksaan, baca sumbu status dan cakupan. |
| 401 | Kunci API tidak valid atau sudah dicabut. |
| 403 | Organisasi atau jaringan tidak memiliki akses. |
| 404 | Tidak ditemukan di organisasi dan lingkungan Anda. Pada /v1/check: transaksi tidak ditemukan di jaringan yang dipilih atau, tanpa jaringan, di jaringan mana pun yang diperiksa. |
| 409 | Konflik: permintaan masih berjalan, kunci idempotensi dipakai ulang dengan isi berbeda, atau permintaan bertentangan dengan status yang tercatat. Baca error.code. |
| 413 | Isi permintaan lebih besar daripada yang diterima endpoint ini. |
| 415 | Jenis konten ini tidak diterima di sini: JSON, atau CSV untuk unggahan batch. |
| 422 | Perbaiki kolom permintaan. |
| 429 | Batas frekuensi, permintaan bersamaan, kuota bulanan, pemeriksaan tanpa tagihan harian, atau batch aktif tercapai. Baca error.code dan Retry-After. |
| 500 | Kesalahan internal. Simpan X-Request-ID untuk tim dukungan. |
| 503 | Akses API atau layanan yang diperlukan tidak tersedia. |
| 504 | Pemrosesan permintaan melebihi batas waktu server. |
POST /v1/escrow-deals/{ref}/versions
Baca satu transaksi escrow, ganti ketentuan draf, atau batalkan draf.
| HTTP | Respons |
|---|---|
| 200 | Berhasil: isi respons mengikuti skema endpoint ini. Untuk pemeriksaan, baca sumbu status dan cakupan. |
| 401 | Kunci API tidak valid atau sudah dicabut. |
| 403 | Organisasi atau jaringan tidak memiliki akses. |
| 404 | Tidak ditemukan di organisasi dan lingkungan Anda. Pada /v1/check: transaksi tidak ditemukan di jaringan yang dipilih atau, tanpa jaringan, di jaringan mana pun yang diperiksa. |
| 409 | Konflik: permintaan masih berjalan, kunci idempotensi dipakai ulang dengan isi berbeda, atau permintaan bertentangan dengan status yang tercatat. Baca error.code. |
| 413 | Isi permintaan lebih besar daripada yang diterima endpoint ini. |
| 415 | Jenis konten ini tidak diterima di sini: JSON, atau CSV untuk unggahan batch. |
| 422 | Perbaiki kolom permintaan. |
| 429 | Batas frekuensi, permintaan bersamaan, kuota bulanan, pemeriksaan tanpa tagihan harian, atau batch aktif tercapai. Baca error.code dan Retry-After. |
| 500 | Kesalahan internal. Simpan X-Request-ID untuk tim dukungan. |
| 503 | Akses API atau layanan yang diperlukan tidak tersedia. |
| 504 | Pemrosesan permintaan melebihi batas waktu server. |
POST /v1/escrow-deals/{ref}/cancel
Baca satu transaksi escrow, ganti ketentuan draf, atau batalkan draf.
| HTTP | Respons |
|---|---|
| 200 | Berhasil: isi respons mengikuti skema endpoint ini. Untuk pemeriksaan, baca sumbu status dan cakupan. |
| 401 | Kunci API tidak valid atau sudah dicabut. |
| 403 | Organisasi atau jaringan tidak memiliki akses. |
| 404 | Tidak ditemukan di organisasi dan lingkungan Anda. Pada /v1/check: transaksi tidak ditemukan di jaringan yang dipilih atau, tanpa jaringan, di jaringan mana pun yang diperiksa. |
| 409 | Konflik: permintaan masih berjalan, kunci idempotensi dipakai ulang dengan isi berbeda, atau permintaan bertentangan dengan status yang tercatat. Baca error.code. |
| 413 | Isi permintaan lebih besar daripada yang diterima endpoint ini. |
| 415 | Jenis konten ini tidak diterima di sini: JSON, atau CSV untuk unggahan batch. |
| 422 | Perbaiki kolom permintaan. |
| 429 | Batas frekuensi, permintaan bersamaan, kuota bulanan, pemeriksaan tanpa tagihan harian, atau batch aktif tercapai. Baca error.code dan Retry-After. |
| 500 | Kesalahan internal. Simpan X-Request-ID untuk tim dukungan. |
| 503 | Akses API atau layanan yang diperlukan tidak tersedia. |
| 504 | Pemrosesan permintaan melebihi batas waktu server. |
GET /v1/escrow-deals/{ref}/consent
Baca teks persis yang ditandatangani setiap pihak, atau teruskan tanda tangan suatu pihak.
| HTTP | Respons |
|---|---|
| 200 | Berhasil: isi respons mengikuti skema endpoint ini. Untuk pemeriksaan, baca sumbu status dan cakupan. |
| 401 | Kunci API tidak valid atau sudah dicabut. |
| 403 | Organisasi atau jaringan tidak memiliki akses. |
| 404 | Tidak ditemukan di organisasi dan lingkungan Anda. Pada /v1/check: transaksi tidak ditemukan di jaringan yang dipilih atau, tanpa jaringan, di jaringan mana pun yang diperiksa. |
| 409 | Konflik: permintaan masih berjalan, kunci idempotensi dipakai ulang dengan isi berbeda, atau permintaan bertentangan dengan status yang tercatat. Baca error.code. |
| 413 | Isi permintaan lebih besar daripada yang diterima endpoint ini. |
| 415 | Jenis konten ini tidak diterima di sini: JSON, atau CSV untuk unggahan batch. |
| 422 | Perbaiki kolom permintaan. |
| 429 | Batas frekuensi, permintaan bersamaan, kuota bulanan, pemeriksaan tanpa tagihan harian, atau batch aktif tercapai. Baca error.code dan Retry-After. |
| 500 | Kesalahan internal. Simpan X-Request-ID untuk tim dukungan. |
| 503 | Akses API atau layanan yang diperlukan tidak tersedia. |
| 504 | Pemrosesan permintaan melebihi batas waktu server. |
POST /v1/escrow-deals/{ref}/consents
Baca teks persis yang ditandatangani setiap pihak, atau teruskan tanda tangan suatu pihak.
| HTTP | Respons |
|---|---|
| 200 | Berhasil: isi respons mengikuti skema endpoint ini. Untuk pemeriksaan, baca sumbu status dan cakupan. |
| 401 | Kunci API tidak valid atau sudah dicabut. |
| 403 | Organisasi atau jaringan tidak memiliki akses. |
| 404 | Tidak ditemukan di organisasi dan lingkungan Anda. Pada /v1/check: transaksi tidak ditemukan di jaringan yang dipilih atau, tanpa jaringan, di jaringan mana pun yang diperiksa. |
| 409 | Konflik: permintaan masih berjalan, kunci idempotensi dipakai ulang dengan isi berbeda, atau permintaan bertentangan dengan status yang tercatat. Baca error.code. |
| 413 | Isi permintaan lebih besar daripada yang diterima endpoint ini. |
| 415 | Jenis konten ini tidak diterima di sini: JSON, atau CSV untuk unggahan batch. |
| 422 | Perbaiki kolom permintaan. |
| 429 | Batas frekuensi, permintaan bersamaan, kuota bulanan, pemeriksaan tanpa tagihan harian, atau batch aktif tercapai. Baca error.code dan Retry-After. |
| 500 | Kesalahan internal. Simpan X-Request-ID untuk tim dukungan. |
| 503 | Akses API atau layanan yang diperlukan tidak tersedia. |
| 504 | Pemrosesan permintaan melebihi batas waktu server. |
GET /v1/escrow-deals/{ref}/actions
Tampilkan panggilan kontrak yang dapat ditandatangani suatu pihak sekarang, atau laporkan transaksi yang Anda teruskan.
| HTTP | Respons |
|---|---|
| 200 | Berhasil: isi respons mengikuti skema endpoint ini. Untuk pemeriksaan, baca sumbu status dan cakupan. |
| 401 | Kunci API tidak valid atau sudah dicabut. |
| 403 | Organisasi atau jaringan tidak memiliki akses. |
| 404 | Tidak ditemukan di organisasi dan lingkungan Anda. Pada /v1/check: transaksi tidak ditemukan di jaringan yang dipilih atau, tanpa jaringan, di jaringan mana pun yang diperiksa. |
| 409 | Konflik: permintaan masih berjalan, kunci idempotensi dipakai ulang dengan isi berbeda, atau permintaan bertentangan dengan status yang tercatat. Baca error.code. |
| 413 | Isi permintaan lebih besar daripada yang diterima endpoint ini. |
| 415 | Jenis konten ini tidak diterima di sini: JSON, atau CSV untuk unggahan batch. |
| 422 | Perbaiki kolom permintaan. |
| 429 | Batas frekuensi, permintaan bersamaan, kuota bulanan, pemeriksaan tanpa tagihan harian, atau batch aktif tercapai. Baca error.code dan Retry-After. |
| 500 | Kesalahan internal. Simpan X-Request-ID untuk tim dukungan. |
| 503 | Akses API atau layanan yang diperlukan tidak tersedia. |
| 504 | Pemrosesan permintaan melebihi batas waktu server. |
POST /v1/escrow-deals/{ref}/transactions
Tampilkan panggilan kontrak yang dapat ditandatangani suatu pihak sekarang, atau laporkan transaksi yang Anda teruskan.
| HTTP | Respons |
|---|---|
| 200 | Berhasil: isi respons mengikuti skema endpoint ini. Untuk pemeriksaan, baca sumbu status dan cakupan. |
| 401 | Kunci API tidak valid atau sudah dicabut. |
| 403 | Organisasi atau jaringan tidak memiliki akses. |
| 404 | Tidak ditemukan di organisasi dan lingkungan Anda. Pada /v1/check: transaksi tidak ditemukan di jaringan yang dipilih atau, tanpa jaringan, di jaringan mana pun yang diperiksa. |
| 409 | Konflik: permintaan masih berjalan, kunci idempotensi dipakai ulang dengan isi berbeda, atau permintaan bertentangan dengan status yang tercatat. Baca error.code. |
| 413 | Isi permintaan lebih besar daripada yang diterima endpoint ini. |
| 415 | Jenis konten ini tidak diterima di sini: JSON, atau CSV untuk unggahan batch. |
| 422 | Perbaiki kolom permintaan. |
| 429 | Batas frekuensi, permintaan bersamaan, kuota bulanan, pemeriksaan tanpa tagihan harian, atau batch aktif tercapai. Baca error.code dan Retry-After. |
| 500 | Kesalahan internal. Simpan X-Request-ID untuk tim dukungan. |
| 503 | Akses API atau layanan yang diperlukan tidak tersedia. |
| 504 | Pemrosesan permintaan melebihi batas waktu server. |
GET /v1/escrow-deals/{ref}/evidence
Tambahkan atau baca bukti, atau baca sengketa dengan bukti kedua pihak dan batas waktunya.
| HTTP | Respons |
|---|---|
| 200 | Berhasil: isi respons mengikuti skema endpoint ini. Untuk pemeriksaan, baca sumbu status dan cakupan. |
| 401 | Kunci API tidak valid atau sudah dicabut. |
| 403 | Organisasi atau jaringan tidak memiliki akses. |
| 404 | Tidak ditemukan di organisasi dan lingkungan Anda. Pada /v1/check: transaksi tidak ditemukan di jaringan yang dipilih atau, tanpa jaringan, di jaringan mana pun yang diperiksa. |
| 409 | Konflik: permintaan masih berjalan, kunci idempotensi dipakai ulang dengan isi berbeda, atau permintaan bertentangan dengan status yang tercatat. Baca error.code. |
| 413 | Isi permintaan lebih besar daripada yang diterima endpoint ini. |
| 415 | Jenis konten ini tidak diterima di sini: JSON, atau CSV untuk unggahan batch. |
| 422 | Perbaiki kolom permintaan. |
| 429 | Batas frekuensi, permintaan bersamaan, kuota bulanan, pemeriksaan tanpa tagihan harian, atau batch aktif tercapai. Baca error.code dan Retry-After. |
| 500 | Kesalahan internal. Simpan X-Request-ID untuk tim dukungan. |
| 503 | Akses API atau layanan yang diperlukan tidak tersedia. |
| 504 | Pemrosesan permintaan melebihi batas waktu server. |
POST /v1/escrow-deals/{ref}/evidence
Tambahkan atau baca bukti, atau baca sengketa dengan bukti kedua pihak dan batas waktunya.
| HTTP | Respons |
|---|---|
| 200 | Berhasil: isi respons mengikuti skema endpoint ini. Untuk pemeriksaan, baca sumbu status dan cakupan. |
| 401 | Kunci API tidak valid atau sudah dicabut. |
| 403 | Organisasi atau jaringan tidak memiliki akses. |
| 404 | Tidak ditemukan di organisasi dan lingkungan Anda. Pada /v1/check: transaksi tidak ditemukan di jaringan yang dipilih atau, tanpa jaringan, di jaringan mana pun yang diperiksa. |
| 409 | Konflik: permintaan masih berjalan, kunci idempotensi dipakai ulang dengan isi berbeda, atau permintaan bertentangan dengan status yang tercatat. Baca error.code. |
| 413 | Isi permintaan lebih besar daripada yang diterima endpoint ini. |
| 415 | Jenis konten ini tidak diterima di sini: JSON, atau CSV untuk unggahan batch. |
| 422 | Perbaiki kolom permintaan. |
| 429 | Batas frekuensi, permintaan bersamaan, kuota bulanan, pemeriksaan tanpa tagihan harian, atau batch aktif tercapai. Baca error.code dan Retry-After. |
| 500 | Kesalahan internal. Simpan X-Request-ID untuk tim dukungan. |
| 503 | Akses API atau layanan yang diperlukan tidak tersedia. |
| 504 | Pemrosesan permintaan melebihi batas waktu server. |
PUT /v1/escrow-deals/{ref}/evidence/files
Tambahkan atau baca bukti, atau baca sengketa dengan bukti kedua pihak dan batas waktunya.
| HTTP | Respons |
|---|---|
| 200 | Berhasil: isi respons mengikuti skema endpoint ini. Untuk pemeriksaan, baca sumbu status dan cakupan. |
| 401 | Kunci API tidak valid atau sudah dicabut. |
| 403 | Organisasi atau jaringan tidak memiliki akses. |
| 404 | Tidak ditemukan di organisasi dan lingkungan Anda. Pada /v1/check: transaksi tidak ditemukan di jaringan yang dipilih atau, tanpa jaringan, di jaringan mana pun yang diperiksa. |
| 409 | Konflik: permintaan masih berjalan, kunci idempotensi dipakai ulang dengan isi berbeda, atau permintaan bertentangan dengan status yang tercatat. Baca error.code. |
| 413 | Isi permintaan lebih besar daripada yang diterima endpoint ini. |
| 415 | Jenis konten ini tidak diterima di sini: JSON, atau CSV untuk unggahan batch. |
| 422 | Perbaiki kolom permintaan. |
| 429 | Batas frekuensi, permintaan bersamaan, kuota bulanan, pemeriksaan tanpa tagihan harian, atau batch aktif tercapai. Baca error.code dan Retry-After. |
| 500 | Kesalahan internal. Simpan X-Request-ID untuk tim dukungan. |
| 503 | Akses API atau layanan yang diperlukan tidak tersedia. |
| 504 | Pemrosesan permintaan melebihi batas waktu server. |
GET /v1/escrow-deals/{ref}/evidence/{evidence_id}/content
Tambahkan atau baca bukti, atau baca sengketa dengan bukti kedua pihak dan batas waktunya.
| HTTP | Respons |
|---|---|
| 200 | Berhasil: isi respons mengikuti skema endpoint ini. Untuk pemeriksaan, baca sumbu status dan cakupan. |
| 401 | Kunci API tidak valid atau sudah dicabut. |
| 403 | Organisasi atau jaringan tidak memiliki akses. |
| 404 | Tidak ditemukan di organisasi dan lingkungan Anda. Pada /v1/check: transaksi tidak ditemukan di jaringan yang dipilih atau, tanpa jaringan, di jaringan mana pun yang diperiksa. |
| 409 | Konflik: permintaan masih berjalan, kunci idempotensi dipakai ulang dengan isi berbeda, atau permintaan bertentangan dengan status yang tercatat. Baca error.code. |
| 413 | Isi permintaan lebih besar daripada yang diterima endpoint ini. |
| 415 | Jenis konten ini tidak diterima di sini: JSON, atau CSV untuk unggahan batch. |
| 422 | Perbaiki kolom permintaan. |
| 429 | Batas frekuensi, permintaan bersamaan, kuota bulanan, pemeriksaan tanpa tagihan harian, atau batch aktif tercapai. Baca error.code dan Retry-After. |
| 500 | Kesalahan internal. Simpan X-Request-ID untuk tim dukungan. |
| 503 | Akses API atau layanan yang diperlukan tidak tersedia. |
| 504 | Pemrosesan permintaan melebihi batas waktu server. |
GET /v1/escrow-deals/{ref}/dispute
Tambahkan atau baca bukti, atau baca sengketa dengan bukti kedua pihak dan batas waktunya.
| HTTP | Respons |
|---|---|
| 200 | Berhasil: isi respons mengikuti skema endpoint ini. Untuk pemeriksaan, baca sumbu status dan cakupan. |
| 401 | Kunci API tidak valid atau sudah dicabut. |
| 403 | Organisasi atau jaringan tidak memiliki akses. |
| 404 | Tidak ditemukan di organisasi dan lingkungan Anda. Pada /v1/check: transaksi tidak ditemukan di jaringan yang dipilih atau, tanpa jaringan, di jaringan mana pun yang diperiksa. |
| 409 | Konflik: permintaan masih berjalan, kunci idempotensi dipakai ulang dengan isi berbeda, atau permintaan bertentangan dengan status yang tercatat. Baca error.code. |
| 413 | Isi permintaan lebih besar daripada yang diterima endpoint ini. |
| 415 | Jenis konten ini tidak diterima di sini: JSON, atau CSV untuk unggahan batch. |
| 422 | Perbaiki kolom permintaan. |
| 429 | Batas frekuensi, permintaan bersamaan, kuota bulanan, pemeriksaan tanpa tagihan harian, atau batch aktif tercapai. Baca error.code dan Retry-After. |
| 500 | Kesalahan internal. Simpan X-Request-ID untuk tim dukungan. |
| 503 | Akses API atau layanan yang diperlukan tidak tersedia. |
| 504 | Pemrosesan permintaan melebihi batas waktu server. |
ActionRequest
| Kolom | Tipe / nilai | Wajib |
|---|---|---|
owner |
string / null |
Tidak |
action |
"CREDITED", "PAID", "HELD", "REJECTED", "REFUNDED", "ESCALATED", "RETRIED", "NO_ACTION", "OTHER" |
Ya |
action_at |
string / null |
Tidak |
ActionView
| Kolom | Tipe / nilai | Wajib |
|---|---|---|
action |
string |
Ya |
contract |
string |
Ya |
function |
string |
Ya |
parameters |
string |
Ya |
data |
string |
Ya |
fee_limit_sun |
integer |
Ya |
call_value |
integer |
Tidak |
estimated_energy |
integer / null |
Ya |
estimated_trx |
string / null |
Ya |
note |
string / null |
Tidak |
ActionsResponse
| Kolom | Tipe / nilai | Wajib |
|---|---|---|
role |
"BUYER", "SELLER" |
Ya |
address |
string |
Ya |
state |
string / null |
Ya |
status |
string |
Ya |
actions |
ActionView[] |
Ya |
AllocationRequest
| Kolom | Tipe / nilai | Wajib |
|---|---|---|
network |
"tron", "eth", "ton" |
Ya |
tx_hash |
string |
Ya |
event_ref |
string |
Ya |
allocations |
AllocationShare[] |
Ya |
owner |
string / null |
Tidak |
AllocationResponse
| Kolom | Tipe / nilai | Wajib |
|---|---|---|
allocation_id |
string |
Ya |
external_reference |
string / null |
Ya |
event |
EventResponse |
Ya |
allocated_amount |
string |
Ya |
status |
string |
Ya |
source |
string |
Ya |
instruction_version |
integer / null |
Ya |
decision_id |
string / null |
Ya |
created_at |
string |
Ya |
reversed_at |
string / null |
Ya |
reversal_reason |
string / null |
Ya |
AllocationResultResponse
| Kolom | Tipe / nilai | Wajib |
|---|---|---|
allocations |
AllocationResponse[] |
Ya |
obligations |
ObligationResponse[] |
Ya |
AllocationShare
| Kolom | Tipe / nilai | Wajib |
|---|---|---|
external_reference |
string |
Ya |
amount |
string |
Ya |
AmountComparisonResponse
| Kolom | Tipe / nilai | Wajib |
|---|---|---|
expected |
string / null |
Ya |
actual |
string / null |
Ya |
result |
"EXACT", "WITHIN_TOLERANCE", "UNDERPAID", "OVERPAID", "NOT_EVALUATED", "INSUFFICIENT" |
Ya |
tolerance |
string / null |
Ya |
delta |
string / null |
Ya |
delta_raw |
string / null |
Ya |
AmountView
| Kolom | Tipe / nilai | Wajib |
|---|---|---|
value |
string |
Ya |
minor |
string |
Ya |
token |
string |
Ya |
symbol |
string |
Tidak |
decimals |
integer |
Ya |
AttemptRequest
| Kolom | Tipe / nilai | Wajib |
|---|---|---|
external_reference |
string |
Ya |
attempt_reference |
string |
Ya |
status |
"CREATED", "SUBMITTED", "BROADCAST", "TIMEOUT", "FAILED", "CANCELLED", "PROVIDER_CONFIRMED", "UNKNOWN" |
Tidak |
channel |
string / null |
Tidak |
provider_reference |
string / null |
Tidak |
amount |
string / null |
Tidak |
network |
"tron", "eth", "ton" / null |
Tidak |
tx_hash |
string / null |
Tidak |
instruction_version |
integer / null |
Tidak |
attempt_created_at |
string / null |
Tidak |
AttemptResponse
| Kolom | Tipe / nilai | Wajib |
|---|---|---|
attempt_reference |
string / null |
Ya |
status |
"CREATED", "SUBMITTED", "BROADCAST", "TIMEOUT", "FAILED", "CANCELLED", "PROVIDER_CONFIRMED", "UNKNOWN" |
Ya |
channel |
string / null |
Ya |
provider_reference |
string / null |
Ya |
amount |
string / null |
Ya |
network |
string / null |
Ya |
tx_hash |
string / null |
Ya |
instruction_version |
integer / null |
Ya |
attempt_created_at |
string |
Ya |
updated_at |
string |
Ya |
status_history |
object[] |
Ya |
execution_confirmed |
boolean |
Ya |
redacted |
boolean |
Ya |
BalancesView
| Kolom | Tipe / nilai | Wajib |
|---|---|---|
accrued |
PartyMoney |
Ya |
claimable |
PartyMoney |
Ya |
withdrawn |
PartyMoney |
Ya |
held_by_contract |
Money |
Ya |
BatchListResponse
| Kolom | Tipe / nilai | Wajib |
|---|---|---|
batches |
BatchResponse[] |
Ya |
BatchResponse
| Kolom | Tipe / nilai | Wajib |
|---|---|---|
batch_id |
string |
Ya |
environment |
"live", "sandbox" |
Ya |
status |
"PREFLIGHTED", "QUEUED", "RUNNING", "PAUSED", "CANCELLING", "COMPLETED", "CANCELLED", "FAILED" |
Ya |
pause_reason |
string / null |
Ya |
row_count |
integer |
Ya |
progress |
object |
Ya |
defaults |
object |
Ya |
preflight |
object |
Ya |
estimate |
object |
Ya |
summary |
object / null |
Ya |
created_at |
string |
Ya |
started_at |
string / null |
Ya |
completed_at |
string / null |
Ya |
BatchRowResponse
| Kolom | Tipe / nilai | Wajib |
|---|---|---|
row_no |
integer |
Ya |
kind |
"check", "obligation" |
Ya |
state |
"PENDING", "CLAIMED", "DONE", "FAILED", "RETRYABLE", "SKIPPED_DUPLICATE", "SKIPPED_INVALID", "CANCELLED" |
Ya |
attempt |
integer |
Ya |
external_reference |
string / null |
Ya |
network |
string / null |
Ya |
tx_hash |
string / null |
Ya |
errors |
string[] |
Ya |
warnings |
string[] |
Ya |
duplicate_of |
integer / null |
Ya |
error_code |
string / null |
Ya |
result |
object / null |
Ya |
redacted |
boolean |
Ya |
BatchRowsResponse
| Kolom | Tipe / nilai | Wajib |
|---|---|---|
batch_id |
string |
Ya |
rows |
BatchRowResponse[] |
Ya |
next_after |
integer / null |
Ya |
CatalogItemResponse
| Kolom | Tipe / nilai | Wajib |
|---|---|---|
plan_code |
string |
Ya |
plan_version |
integer |
Ya |
name |
string |
Ya |
environment |
"live", "sandbox" |
Ya |
commercial_status |
"published", "custom" |
Ya |
currency |
string |
Ya |
monthly_price_minor |
integer / null |
Ya |
included_checks |
integer / null |
Ya |
overage_unit_price_minor |
integer / null |
Ya |
package |
CatalogPackageTerms / null |
Ya |
CatalogPackageTerms
| Kolom | Tipe / nilai | Wajib |
|---|---|---|
min_quantity |
integer |
Ya |
max_quantity |
integer |
Ya |
step |
integer |
Ya |
expires_days |
integer / null |
Ya |
CatalogResponse
| Kolom | Tipe / nilai | Wajib |
|---|---|---|
pricing_policy |
string |
Ya |
revision |
integer |
Ya |
currency |
string |
Ya |
consumption_unit |
"transaction_check" |
Tidak |
renewal |
"manual" |
Tidak |
items |
CatalogItemResponse[] |
Ya |
computed_at |
string |
Ya |
Category
| Kolom | Tipe / nilai | Wajib |
|---|
CheckDetails
| Kolom | Tipe / nilai | Wajib |
|---|---|---|
request_id |
string |
Ya |
tx_hash |
string |
Ya |
network |
"tron", "eth", "ton" |
Ya |
transaction_type |
string |
Ya |
transaction_category |
"eth_transfer", "erc20_transfer", "ton_transfer", "jetton_transfer", "trx_transfer", "trc10_transfer", "trc20_transfer", "smart_contract_call", "smart_contract_deploy", "staking", "voting", "governance", "resource_operation", "account_operation", "exchange", "market", "permission_update", "other", "unknown" |
Ya |
transaction_state |
"confirmed", "pending", "failed", "not_found", "unknown" |
Ya |
confirmations |
integer / null |
Ya |
required_confirmations |
integer |
Ya |
sender |
string / null |
Ya |
recipient |
string / null |
Ya |
token_contract |
string / null |
Ya |
token_symbol |
string / null |
Ya |
decimals |
integer / null |
Ya |
amount |
string / null |
Ya |
transfers |
DetailedTransferResponse[] |
Ya |
transfers_truncated |
boolean |
Ya |
aml_risk_level |
"low", "moderate", "high", "severe", "unknown" |
Ya |
schema_version |
"0.3" |
Ya |
policy_version |
string |
Ya |
sanctions_hit |
boolean / null |
Ya |
direct_sanctions_match |
boolean / null |
Ya |
indirect_sanctions_exposure |
boolean / null |
Ya |
risk_exposure |
boolean / null |
Ya |
key_exposure |
ExposureResponse[] |
Ya |
token_authenticity |
"official", "fake", "unknown" |
Ya |
recipient_match |
boolean / null |
Ya |
token_match |
boolean / null |
Ya |
amount_match |
boolean / null |
Ya |
coverage |
"complete", "partial" |
Ya |
workflow_coverage |
"complete", "partial" |
Ya |
source_coverage |
SourceCoverageResponse |
Ya |
freshness |
FreshnessResponse |
Ya |
overall_state |
"CLEAR", "REVIEW", "HIGH_RISK", "LIMITED_DATA" |
Ya |
environment |
"live", "sandbox" |
Tidak |
reasons |
ReasonResponse[] |
Ya |
decision_id |
string / null |
Ya |
direction |
"INCOMING", "OUTGOING" / null |
Ya |
workflow_type |
"PAYOUT", "DEPOSIT", "INVOICE", "REFUND", "SETTLEMENT", "OTHER" / null |
Ya |
versions |
VersionsResponse |
Ya |
transaction_status |
"CONFIRMED", "PENDING", "FAILED", "NOT_FOUND", "INSUFFICIENT" |
Ya |
integrity_status |
"MATCH", "MISMATCH", "AMBIGUOUS", "NOT_EVALUATED", "INSUFFICIENT" |
Ya |
risk_status |
"HIGH_RISK", "REVIEW", "NO_MATERIAL_SIGNAL", "NOT_EVALUATED", "INSUFFICIENT" |
Ya |
coverage_status |
"OK", "DEGRADED", "UNAVAILABLE", "DISAGREEMENT", "SKIPPED" |
Ya |
status_drivers |
StatusDriversResponse |
Ya |
result_final |
boolean |
Ya |
verification_final |
boolean |
Ya |
risk_final |
boolean |
Ya |
risk_retryable |
boolean |
Ya |
risk_retry_after_seconds |
integer / null |
Ya |
retryable |
boolean |
Ya |
retry_after_seconds |
integer / null |
Ya |
recommended_action |
"PROCEED", "CONFIRM_INTERNAL_STATE", "MANUAL_REVIEW", "RECHECK_LATER", "NOT_EXECUTED", "HOLD_AND_ESCALATE" |
Ya |
integrity |
IntegrityResponse |
Ya |
risk |
RiskSummaryResponse |
Ya |
evidence_items |
EvidenceItemResponse[] |
Ya |
coverage_limitations |
CoverageLimitationsResponse |
Ya |
obligation |
ObligationSummaryResponse / null |
Tidak |
reuse |
ReuseResponse / null |
Tidak |
selected_transfer_index |
integer / null |
Ya |
finalized |
boolean |
Ya |
finality_policy |
string |
Ya |
trace_complete |
boolean / null |
Ya |
evidence |
object |
Ya |
limitations |
string[] |
Ya |
checked_networks |
"tron", "eth", "ton"[] |
Ya |
ConsentPackage
| Kolom | Tipe / nilai | Wajib |
|---|---|---|
version |
integer |
Ya |
deal_id |
string |
Ya |
message |
string |
Ya |
params |
object |
Ya |
terms |
object |
Ya |
terms_canonical |
string |
Ya |
terms_hash |
string |
Ya |
agreement_expires_at |
string |
Ya |
factory |
string |
Ya |
ConsentRequest
| Kolom | Tipe / nilai | Wajib |
|---|---|---|
version |
integer |
Ya |
role |
"BUYER", "SELLER" |
Ya |
signature |
string |
Ya |
ConsentStatus
| Kolom | Tipe / nilai | Wajib |
|---|---|---|
signed |
boolean |
Ya |
method |
"SIGNATURE", "ONCHAIN_APPROVAL" / null |
Ya |
at |
string / null |
Ya |
ConsentsView
| Kolom | Tipe / nilai | Wajib |
|---|---|---|
buyer |
ConsentStatus |
Ya |
seller |
ConsentStatus |
Ya |
ContractView
| Kolom | Tipe / nilai | Wajib |
|---|---|---|
factory |
string |
Ya |
escrow |
string / null |
Ya |
deal_id |
string / null |
Ya |
ruling_hash |
string / null |
Ya |
observed_at |
string / null |
Ya |
out_of_sync |
boolean |
Ya |
CoverageLimitationsResponse
| Kolom | Tipe / nilai | Wajib |
|---|---|---|
runtime |
ReasonCode[] |
Ya |
product |
ReasonCode[] |
Ya |
CreateDealRequest
| Kolom | Tipe / nilai | Wajib |
|---|---|---|
buyer |
string |
Ya |
seller |
string |
Ya |
amount |
string |
Ya |
category |
Category |
Ya |
title |
string |
Ya |
description |
string |
Tidak |
delivery |
DeliveryInput |
Ya |
timeline |
TimelineInput |
Ya |
resolver_enabled |
boolean |
Tidak |
resolver_id |
string / null |
Tidak |
resolver_fee |
string / null |
Tidak |
external_reference |
string |
Ya |
obligation_reference |
string / null |
Tidak |
CustomerContext
| Kolom | Tipe / nilai | Wajib |
|---|---|---|
credit_status |
"NOT_CREDITED", "CREDITED", "PARTIALLY_CREDITED", "UNKNOWN" / null |
Tidak |
allocation_status |
"NOT_ALLOCATED", "PARTIALLY_ALLOCATED", "ALLOCATED", "UNKNOWN" / null |
Tidak |
DealListResponse
| Kolom | Tipe / nilai | Wajib |
|---|---|---|
deals |
DealResponse[] |
Ya |
next_before |
string / null |
Ya |
DealResponse
| Kolom | Tipe / nilai | Wajib |
|---|---|---|
id |
string |
Ya |
external_reference |
string |
Ya |
obligation_reference |
string / null |
Ya |
environment |
"live", "sandbox" |
Ya |
network |
string |
Ya |
status |
string |
Ya |
protocol_version |
1, 2 |
Ya |
state |
string / null |
Ya |
settlement_reason |
string / null |
Ya |
category |
string |
Ya |
title |
string / null |
Ya |
pricing_class |
string |
Ya |
parties |
Parties |
Ya |
resolver_enabled |
boolean |
Ya |
resolver |
ResolverView / null |
Ya |
amount |
AmountView |
Ya |
fee |
FeeView |
Ya |
terms |
TermsView |
Ya |
timeline |
TimelineView |
Ya |
settlement |
SettlementView / null |
Ya |
funding |
FundingView / null |
Ya |
contract |
ContractView |
Ya |
balances |
BalancesView |
Ya |
links |
Links |
Ya |
created_at |
string / null |
Ya |
updated_at |
string / null |
Ya |
transactions |
TransactionView[] |
Tidak |
replayed |
boolean |
Tidak |
DecisionEventResponse
| Kolom | Tipe / nilai | Wajib |
|---|---|---|
kind |
"ACTION", "RESOLUTION", "OUTCOME" |
Ya |
action |
string / null |
Ya |
resolution |
string / null |
Ya |
outcome_status |
string / null |
Ya |
loss_prevented |
string / null |
Ya |
owner |
string / null |
Ya |
occurred_at |
string |
Ya |
recorded_at |
string |
Ya |
DecisionResponse
| Kolom | Tipe / nilai | Wajib |
|---|---|---|
decision_id |
string |
Ya |
decided_at |
string |
Ya |
channel |
string |
Ya |
transaction_status |
string |
Ya |
integrity_status |
string |
Ya |
risk_status |
string |
Ya |
coverage_status |
string |
Ya |
overall_state |
string |
Ya |
recommended_action |
string |
Ya |
reuse_status |
string / null |
Ya |
environment |
"live", "sandbox" |
Ya |
network |
string |
Ya |
external_reference |
string / null |
Ya |
instruction_version |
integer / null |
Ya |
selected_event_ref |
string / null |
Ya |
result_final |
boolean |
Ya |
verification_final |
boolean / null |
Ya |
risk_final |
boolean / null |
Ya |
retryable |
boolean |
Ya |
status_drivers |
object |
Ya |
reason_codes |
string[] |
Ya |
versions |
object |
Ya |
evidence_items |
object[] / null |
Ya |
events |
DecisionEventResponse[] |
Ya |
DecisionSummaryResponse
| Kolom | Tipe / nilai | Wajib |
|---|---|---|
decision_id |
string |
Ya |
decided_at |
string |
Ya |
channel |
string |
Ya |
transaction_status |
string |
Ya |
integrity_status |
string |
Ya |
risk_status |
string |
Ya |
coverage_status |
string |
Ya |
overall_state |
string |
Ya |
recommended_action |
string |
Ya |
reuse_status |
string / null |
Ya |
DeliveryInput
| Kolom | Tipe / nilai | Wajib |
|---|---|---|
criteria |
string[] |
Ya |
method |
string |
Ya |
evidence_required |
string[] |
Tidak |
DetailedTransferResponse
| Kolom | Tipe / nilai | Wajib |
|---|---|---|
index |
integer |
Ya |
asset_type |
string |
Ya |
sender |
string / null |
Ya |
recipient |
string / null |
Ya |
token_contract |
string / null |
Ya |
token_id |
string / null |
Ya |
token_symbol |
string / null |
Ya |
decimals |
integer / null |
Ya |
amount |
string / null |
Ya |
event_ref |
string / null |
Tidak |
execution_status |
"success", "failed", "unknown" |
Tidak |
raw_amount |
string / null |
Ya |
DisputeResponse
| Kolom | Tipe / nilai | Wajib |
|---|---|---|
state |
string / null |
Ya |
disputed_at |
string / null |
Ya |
resolve_deadline |
string / null |
Ya |
resolver_enabled |
boolean |
Ya |
deadlocked |
boolean |
Ya |
buyer_proposal |
Money / null |
Ya |
seller_proposal |
Money / null |
Ya |
criteria |
string[] |
Ya |
evidence |
EvidenceView[] |
Ya |
ruling |
RulingView / null |
Ya |
ErrorDetail
| Kolom | Tipe / nilai | Wajib |
|---|---|---|
code |
string |
Ya |
message |
string |
Ya |
retryable |
boolean |
Ya |
ErrorResponse
| Kolom | Tipe / nilai | Wajib |
|---|---|---|
request_id |
string |
Ya |
error |
ErrorDetail |
Ya |
EventFeedResponse
| Kolom | Tipe / nilai | Wajib |
|---|---|---|
events |
EventView[] |
Ya |
next_after |
integer |
Ya |
EventResponse
| Kolom | Tipe / nilai | Wajib |
|---|---|---|
network |
string |
Ya |
tx_hash |
string / null |
Ya |
event_ref |
string |
Ya |
asset_type |
string |
Ya |
token_contract |
string / null |
Ya |
sender |
string / null |
Ya |
recipient |
string / null |
Ya |
amount |
string / null |
Ya |
execution_status |
string |
Ya |
finalized |
boolean |
Ya |
block_number |
integer / null |
Ya |
block_time |
string / null |
Ya |
EventView
| Kolom | Tipe / nilai | Wajib |
|---|---|---|
seq |
integer |
Ya |
event_id |
string |
Ya |
type |
string |
Ya |
occurred_at |
string |
Ya |
deal |
object |
Ya |
data |
object |
Ya |
EvidenceDisagreementResponse
| Kolom | Tipe / nilai | Wajib |
|---|---|---|
fields |
string[] |
Ya |
EvidenceFreshnessResponse
| Kolom | Tipe / nilai | Wajib |
|---|---|---|
age_seconds |
integer / null |
Ya |
stale |
boolean |
Ya |
stale_after_seconds |
integer / null |
Ya |
EvidenceItemResponse
| Kolom | Tipe / nilai | Wajib |
|---|---|---|
evidence_id |
string |
Ya |
kind |
"transaction_facts", "aml_risk", "sanctions_list", "token_authenticity" |
Ya |
source |
string |
Ya |
subject |
EvidenceSubjectResponse |
Ya |
source_reference |
string / null |
Ya |
observed_at |
string / null |
Ya |
effective_at |
string / null |
Ya |
temporal_scope |
"TRANSACTION_TIME", "CHECK_TIME", "LIST_PUBLICATION" |
Ya |
coverage |
"checked", "checked_stale", "checked_freshness_unknown", "not_checked", "not_applicable", "unavailable", "partial", "disagreement" |
Ya |
freshness |
EvidenceFreshnessResponse |
Ya |
dependency |
"required", "optional", "not_applicable" |
Ya |
disagreement |
EvidenceDisagreementResponse / null |
Ya |
evidence_version |
string |
Ya |
EvidenceListResponse
| Kolom | Tipe / nilai | Wajib |
|---|---|---|
evidence |
EvidenceView[] |
Ya |
EvidenceSubjectResponse
| Kolom | Tipe / nilai | Wajib |
|---|---|---|
type |
"transaction", "transaction_addresses", "token" |
Ya |
ref |
string / null |
Ya |
EvidenceView
| Kolom | Tipe / nilai | Wajib |
|---|---|---|
id |
string |
Ya |
author_role |
string |
Ya |
purpose |
string |
Ya |
kind |
string |
Ya |
terms_version |
integer |
Ya |
file_name |
string / null |
Ya |
media_type |
string / null |
Ya |
size_bytes |
integer / null |
Ya |
sha256 |
string / null |
Ya |
note |
string / null |
Ya |
supersedes |
string / null |
Ya |
uploaded |
boolean |
Ya |
content_deleted |
boolean |
Ya |
created_at |
string |
Ya |
ExecuteRequest
| Kolom | Tipe / nilai | Wajib |
|---|---|---|
confirm |
boolean |
Ya |
allow_partial |
boolean |
Tidak |
ExposureResponse
| Kolom | Tipe / nilai | Wajib |
|---|---|---|
category |
string |
Ya |
exposure_type |
string |
Ya |
hops |
integer |
Ya |
percent |
string / null |
Ya |
source |
string / null |
Tidak |
grade |
"high", "review", "minor", "none" / null |
Tidak |
FeeView
| Kolom | Tipe / nilai | Wajib |
|---|---|---|
value |
string |
Ya |
minor |
string |
Ya |
rule |
"seller-share-v1" |
Ya |
FieldComparisonResponse
| Kolom | Tipe / nilai | Wajib |
|---|---|---|
expected |
string / null |
Ya |
actual |
string / null |
Ya |
result |
"MATCH", "MISMATCH", "NOT_EVALUATED", "INSUFFICIENT" |
Ya |
FreshnessResponse
| Kolom | Tipe / nilai | Wajib |
|---|---|---|
checked_at |
string |
Ya |
transaction_at |
string / null |
Ya |
risk_data_at |
string / null |
Ya |
token_data_at |
string / null |
Ya |
max_source_age_seconds |
integer |
Ya |
FundingView
| Kolom | Tipe / nilai | Wajib |
|---|---|---|
received |
Money |
Ya |
remaining |
Money |
Ya |
InstructionResponse
| Kolom | Tipe / nilai | Wajib |
|---|---|---|
version |
integer |
Ya |
network |
string |
Ya |
recipient |
string / null |
Ya |
sender |
string / null |
Ya |
token_contract |
string / null |
Ya |
amount |
string / null |
Ya |
amount_tolerance |
string / null |
Ya |
effective_at |
string / null |
Ya |
approval_reference |
string / null |
Ya |
source |
string |
Ya |
history_complete |
boolean |
Ya |
created_at |
string |
Ya |
redacted |
boolean |
Ya |
IntegrityComparisonsResponse
| Kolom | Tipe / nilai | Wajib |
|---|---|---|
recipient |
FieldComparisonResponse / null |
Ya |
sender |
FieldComparisonResponse / null |
Ya |
token |
FieldComparisonResponse / null |
Ya |
amount |
AmountComparisonResponse / null |
Ya |
network |
FieldComparisonResponse |
Ya |
IntegrityResponse
| Kolom | Tipe / nilai | Wajib |
|---|---|---|
status |
"MATCH", "MISMATCH", "AMBIGUOUS", "NOT_EVALUATED", "INSUFFICIENT" |
Ya |
selected_event_ref |
string / null |
Ya |
relevant_event_count |
integer |
Ya |
comparisons |
IntegrityComparisonsResponse |
Ya |
Links
| Kolom | Tipe / nilai | Wajib |
|---|---|---|
buyer |
string |
Ya |
seller |
string |
Ya |
telegram_invite |
string / null |
Ya |
LookupRequest
| Kolom | Tipe / nilai | Wajib |
|---|---|---|
external_reference |
string |
Ya |
ModuleStatusResponse
| Kolom | Tipe / nilai | Wajib |
|---|---|---|
key |
"sanctions_aml", "wallet_behaviour", "token_authenticity", "contract_controls", "address_security", "counterparties_services", "flows_connections" |
Ya |
status |
"RISK_DETECTED", "NO_MATCHES_FOUND", "PARTIALLY_CHECKED", "INSUFFICIENT_DATA", "NOT_SUPPORTED", "NOT_CHECKED" |
Ya |
source_coverage |
"complete", "partial", "none", "not_applicable" |
Ya |
Money
| Kolom | Tipe / nilai | Wajib |
|---|---|---|
value |
string |
Ya |
minor |
string |
Ya |
NetworkErrorDetail
| Kolom | Tipe / nilai | Wajib |
|---|---|---|
code |
string |
Ya |
message |
string |
Ya |
retryable |
boolean |
Ya |
required_field |
"network" |
Ya |
candidates |
"tron", "eth", "ton"[] |
Ya |
checked_networks |
"tron", "eth", "ton"[] |
Ya |
NetworkInputErrorResponse
| Kolom | Tipe / nilai | Wajib |
|---|---|---|
request_id |
string |
Ya |
network |
null |
Tidak |
state |
"insufficient_input" |
Tidak |
error |
NetworkErrorDetail |
Ya |
NewVersionRequest
| Kolom | Tipe / nilai | Wajib |
|---|---|---|
buyer |
string |
Ya |
seller |
string |
Ya |
amount |
string |
Ya |
category |
Category |
Ya |
title |
string |
Ya |
description |
string |
Tidak |
delivery |
DeliveryInput |
Ya |
timeline |
TimelineInput |
Ya |
resolver_enabled |
boolean |
Tidak |
resolver_id |
string / null |
Tidak |
resolver_fee |
string / null |
Tidak |
expected_version |
integer |
Ya |
NobodyActs
| Kolom | Tipe / nilai | Wajib |
|---|---|---|
at |
string / null |
Ya |
outcome |
"EXPIRED", "REFUNDED", "RELEASED", "DEADLOCK", "AGREEMENT_EXPIRED" |
Ya |
claim_by |
"BUYER", "SELLER", "ANYONE" / null |
Ya |
NoteRequest
| Kolom | Tipe / nilai | Wajib |
|---|---|---|
purpose |
"DELIVERY", "DISPUTE", "RESPONSE", "OTHER" |
Ya |
note |
string |
Ya |
supersedes |
string / null |
Tidak |
ObligationLookupRequest
| Kolom | Tipe / nilai | Wajib |
|---|---|---|
external_reference |
string |
Ya |
ObligationRequest
| Kolom | Tipe / nilai | Wajib |
|---|---|---|
network |
"tron", "eth", "ton" |
Ya |
expected_recipient |
string / null |
Tidak |
expected_token |
string / null |
Tidak |
expected_amount |
string / null |
Tidak |
expected_sender |
string / null |
Tidak |
amount_tolerance |
string / null |
Tidak |
external_reference |
string |
Ya |
direction |
"INCOMING", "OUTGOING" / null |
Tidak |
workflow_type |
"PAYOUT", "DEPOSIT", "INVOICE", "REFUND", "SETTLEMENT", "OTHER" / null |
Tidak |
instruction_version |
integer / null |
Tidak |
instruction_effective_at |
string / null |
Tidak |
approval_reference |
string / null |
Tidak |
ObligationResponse
| Kolom | Tipe / nilai | Wajib |
|---|---|---|
external_reference |
string / null |
Ya |
environment |
"live", "sandbox" |
Ya |
workflow_type |
string / null |
Ya |
direction |
string / null |
Ya |
status |
string |
Ya |
current_instruction_version |
integer / null |
Ya |
expected_amount |
string / null |
Ya |
allocated_amount |
string |
Ya |
residual_amount |
string / null |
Ya |
pending_events |
integer |
Ya |
instructions |
InstructionResponse[] |
Ya |
attempts |
AttemptResponse[] |
Ya |
allocations |
AllocationResponse[] |
Ya |
decisions |
DecisionSummaryResponse[] |
Ya |
created_at |
string |
Ya |
redacted |
boolean |
Ya |
ObligationSummaryResponse
| Kolom | Tipe / nilai | Wajib |
|---|---|---|
external_reference |
string / null |
Ya |
workflow_type |
string / null |
Ya |
direction |
string / null |
Ya |
instruction_version |
integer / null |
Ya |
status |
"OPEN", "PARTIALLY_ALLOCATED", "ALLOCATED", "OVER_ALLOCATED", "CANCELLED" |
Ya |
expected_amount |
string / null |
Ya |
allocated_amount |
string |
Ya |
residual_amount |
string / null |
Ya |
attempts |
integer |
Ya |
events |
integer |
Ya |
pending_events |
integer |
Ya |
redacted |
boolean |
Tidak |
OutcomeRequest
| Kolom | Tipe / nilai | Wajib |
|---|---|---|
owner |
string / null |
Tidak |
outcome_status |
"CONFIRMED", "DISPUTED", "UNRESOLVED", "UNKNOWN" |
Ya |
loss_prevented |
"CONFIRMED", "NOT_CONFIRMED", "UNKNOWN" |
Tidak |
outcome_at |
string / null |
Tidak |
Parties
| Kolom | Tipe / nilai | Wajib |
|---|---|---|
buyer |
string |
Ya |
seller |
string |
Ya |
PartyMoney
| Kolom | Tipe / nilai | Wajib |
|---|---|---|
buyer |
Money |
Ya |
seller |
Money |
Ya |
fee |
Money |
Ya |
resolver |
Money |
Ya |
ReasonCode
| Kolom | Tipe / nilai | Wajib |
|---|
ReasonResponse
| Kolom | Tipe / nilai | Wajib |
|---|---|---|
code |
ReasonCode |
Ya |
category |
"transaction", "risk", "sanctions", "token", "expected", "integrity", "ledger", "context" |
Ya |
severity |
"info", "warning", "high", "critical" |
Ya |
RedeliveryResponse
| Kolom | Tipe / nilai | Wajib |
|---|---|---|
delivery_id |
string |
Ya |
status |
string |
Ya |
ResolutionRequest
| Kolom | Tipe / nilai | Wajib |
|---|---|---|
owner |
string / null |
Tidak |
resolution |
"ACCEPTED", "ACCEPTED_AFTER_REVIEW", "REJECTED", "REFUNDED", "CORRECTED", "WRITTEN_OFF", "OTHER" |
Ya |
resolved_at |
string / null |
Tidak |
ResolverListResponse
| Kolom | Tipe / nilai | Wajib |
|---|---|---|
resolvers |
ResolverResponse[] |
Ya |
ResolverRegistration
| Kolom | Tipe / nilai | Wajib |
|---|---|---|
address |
string |
Ya |
name |
string |
Ya |
affiliation |
"PLATFORM", "INDEPENDENT" |
Ya |
rules_version |
string |
Ya |
rules_sha256 |
string |
Ya |
ResolverResponse
| Kolom | Tipe / nilai | Wajib |
|---|---|---|
id |
string |
Ya |
network |
string |
Ya |
address |
string |
Ya |
name |
string |
Ya |
affiliation |
"PLATFORM", "INDEPENDENT" |
Ya |
rules_version |
string |
Ya |
rules_sha256 |
string |
Ya |
status |
"ACTIVE", "DISABLED" |
Ya |
owned |
boolean |
Ya |
key_scheme |
"SINGLE_KEY", "MULTISIG_2_OF_3", "UNSUPPORTED" / null |
Ya |
signatures_required |
integer / null |
Ya |
checked_at |
string / null |
Ya |
eligible |
boolean |
Ya |
ineligible_reason |
string / null |
Ya |
ResolverView
| Kolom | Tipe / nilai | Wajib |
|---|---|---|
id |
string |
Ya |
name |
string |
Ya |
address |
string |
Ya |
affiliation |
"PLATFORM", "INDEPENDENT" |
Ya |
rules_version |
string |
Ya |
rules_sha256 |
string |
Ya |
fee |
Money |
Ya |
key_scheme |
"SINGLE_KEY", "MULTISIG_2_OF_3", "UNSUPPORTED" / null |
Ya |
signatures_required |
integer / null |
Ya |
verified |
boolean |
Ya |
registered_by |
"PLATFORM", "OPERATOR" |
Ya |
ReuseResponse
| Kolom | Tipe / nilai | Wajib |
|---|---|---|
status |
"FIRST_SEEN", "REPEAT_CHECK", "SAME_OBLIGATION", "DECLARED_SHARED", "OTHER_OBLIGATION" |
Ya |
other_obligations |
integer |
Ya |
prior_decisions |
integer |
Ya |
first_seen_at |
string / null |
Ya |
ReversalRequest
| Kolom | Tipe / nilai | Wajib |
|---|---|---|
reason |
"CUSTOMER_CORRECTION", "DISPUTED", "DUPLICATE_RECORD", "OTHER" |
Ya |
owner |
string / null |
Tidak |
RiskSummaryResponse
| Kolom | Tipe / nilai | Wajib |
|---|---|---|
status |
"HIGH_RISK", "REVIEW", "NO_MATERIAL_SIGNAL", "NOT_EVALUATED", "INSUFFICIENT" |
Ya |
driver |
ReasonCode / null |
Ya |
driver_evidence_ids |
string[] |
Ya |
RulingView
| Kolom | Tipe / nilai | Wajib |
|---|---|---|
buyer_amount |
Money / null |
Ya |
rationale |
string |
Ya |
ruling_hash |
string |
Ya |
status |
string |
Ya |
txid |
string / null |
Ya |
SettlementView
| Kolom | Tipe / nilai | Wajib |
|---|---|---|
buyer_proposal |
Money / null |
Ya |
seller_proposal |
Money / null |
Ya |
deadlocked |
boolean |
Ya |
SimpleCheckRequest
| Kolom | Tipe / nilai | Wajib |
|---|---|---|
network |
"tron", "eth", "ton" / null |
Tidak |
expected_recipient |
string / null |
Tidak |
expected_token |
string / null |
Tidak |
expected_amount |
string / null |
Tidak |
expected_sender |
string / null |
Tidak |
amount_tolerance |
string / null |
Tidak |
tx_hash |
string |
Ya |
SimpleCheckResponse
| Kolom | Tipe / nilai | Wajib |
|---|---|---|
request_id |
string |
Ya |
network |
"tron", "eth", "ton" |
Ya |
state |
"clear", "review", "high_risk", "limited_data" |
Ya |
risk_level |
"low", "moderate", "high", "severe", "unknown" |
Ya |
coverage |
"complete", "partial" |
Ya |
reason_codes |
string[] |
Ya |
environment |
"live", "sandbox" |
Tidak |
details |
CheckDetails |
Ya |
SourceCoverageResponse
| Kolom | Tipe / nilai | Wajib |
|---|---|---|
sanctions_sources |
object |
Ya |
transaction_sources |
object |
Ya |
risk_sources |
object |
Ya |
universal_clearance |
false |
Tidak |
SourceObservationResponse
| Kolom | Tipe / nilai | Wajib |
|---|---|---|
status |
"checked", "checked_stale", "checked_freshness_unknown", "not_checked", "not_applicable", "unavailable", "partial", "disagreement" |
Ya |
checked_at |
string / null |
Ya |
retrieved_at |
string / null |
Ya |
data_updated_at |
string / null |
Ya |
stale_after_seconds |
integer / null |
Ya |
scope |
string |
Ya |
error_code |
string / null |
Ya |
StatusDriversResponse
| Kolom | Tipe / nilai | Wajib |
|---|---|---|
transaction |
ReasonCode / null |
Ya |
integrity |
ReasonCode / null |
Ya |
risk |
ReasonCode / null |
Ya |
coverage |
ReasonCode / null |
Ya |
action |
ReasonCode / null |
Ya |
TermsView
| Kolom | Tipe / nilai | Wajib |
|---|---|---|
version |
integer |
Ya |
agreed_version |
integer / null |
Ya |
terms_hash |
string / null |
Ya |
deal_id |
string / null |
Ya |
agreement_expires_at |
string / null |
Ya |
consents |
ConsentsView |
Ya |
TimelineInput
| Kolom | Tipe / nilai | Wajib |
|---|---|---|
agreement_window_seconds |
integer / null |
Tidak |
funding_window_seconds |
integer / null |
Tidak |
delivery_period_seconds |
integer |
Ya |
inspection_period_seconds |
integer |
Ya |
resolve_period_seconds |
integer / null |
Tidak |
TimelineView
| Kolom | Tipe / nilai | Wajib |
|---|---|---|
funding_deadline |
string / null |
Ya |
delivery_period_seconds |
integer / null |
Ya |
inspection_period_seconds |
integer / null |
Ya |
resolve_period_seconds |
integer / null |
Ya |
funded_at |
string / null |
Ya |
delivered_at |
string / null |
Ya |
disputed_at |
string / null |
Ya |
settled_at |
string / null |
Ya |
current_deadline |
string / null |
Ya |
resolve_deadline |
string / null |
Ya |
if_nobody_acts |
NobodyActs / null |
Ya |
TransactionAccepted
| Kolom | Tipe / nilai | Wajib |
|---|---|---|
txid |
string |
Ya |
status |
string |
Ya |
TransactionCheckRequest
| Kolom | Tipe / nilai | Wajib |
|---|---|---|
network |
"tron", "eth", "ton" |
Ya |
expected_recipient |
string / null |
Tidak |
expected_token |
string / null |
Tidak |
expected_amount |
string / null |
Tidak |
expected_sender |
string / null |
Tidak |
amount_tolerance |
string / null |
Tidak |
tx_hash |
string |
Ya |
direction |
"INCOMING", "OUTGOING" / null |
Tidak |
workflow_type |
"PAYOUT", "DEPOSIT", "INVOICE", "REFUND", "SETTLEMENT", "OTHER" / null |
Tidak |
external_reference |
string / null |
Tidak |
instruction_version |
integer / null |
Tidak |
instruction_effective_at |
string / null |
Tidak |
approval_reference |
string / null |
Tidak |
attempt_reference |
string / null |
Tidak |
customer_context |
CustomerContext / null |
Tidak |
TransactionCheckResponse
| Kolom | Tipe / nilai | Wajib |
|---|---|---|
request_id |
string |
Ya |
tx_hash |
string |
Ya |
network |
"tron", "eth", "ton" |
Ya |
transaction_type |
string |
Ya |
transaction_category |
"eth_transfer", "erc20_transfer", "ton_transfer", "jetton_transfer", "trx_transfer", "trc10_transfer", "trc20_transfer", "smart_contract_call", "smart_contract_deploy", "staking", "voting", "governance", "resource_operation", "account_operation", "exchange", "market", "permission_update", "other", "unknown" |
Ya |
transaction_state |
"confirmed", "pending", "failed", "not_found", "unknown" |
Ya |
confirmations |
integer / null |
Ya |
required_confirmations |
integer |
Ya |
sender |
string / null |
Ya |
recipient |
string / null |
Ya |
token_contract |
string / null |
Ya |
token_symbol |
string / null |
Ya |
decimals |
integer / null |
Ya |
amount |
string / null |
Ya |
transfers |
TransferResponse[] |
Ya |
transfers_truncated |
boolean |
Ya |
aml_risk_level |
"low", "moderate", "high", "severe", "unknown" |
Ya |
schema_version |
"0.3" |
Ya |
policy_version |
string |
Ya |
sanctions_hit |
boolean / null |
Ya |
direct_sanctions_match |
boolean / null |
Ya |
indirect_sanctions_exposure |
boolean / null |
Ya |
risk_exposure |
boolean / null |
Ya |
key_exposure |
ExposureResponse[] |
Ya |
token_authenticity |
"official", "fake", "unknown" |
Ya |
recipient_match |
boolean / null |
Ya |
token_match |
boolean / null |
Ya |
amount_match |
boolean / null |
Ya |
coverage |
"complete", "partial" |
Ya |
workflow_coverage |
"complete", "partial" |
Ya |
source_coverage |
SourceCoverageResponse |
Ya |
freshness |
FreshnessResponse |
Ya |
overall_state |
"CLEAR", "REVIEW", "HIGH_RISK", "LIMITED_DATA" |
Ya |
environment |
"live", "sandbox" |
Tidak |
reasons |
ReasonResponse[] |
Ya |
decision_id |
string / null |
Ya |
direction |
"INCOMING", "OUTGOING" / null |
Ya |
workflow_type |
"PAYOUT", "DEPOSIT", "INVOICE", "REFUND", "SETTLEMENT", "OTHER" / null |
Ya |
versions |
VersionsResponse |
Ya |
transaction_status |
"CONFIRMED", "PENDING", "FAILED", "NOT_FOUND", "INSUFFICIENT" |
Ya |
integrity_status |
"MATCH", "MISMATCH", "AMBIGUOUS", "NOT_EVALUATED", "INSUFFICIENT" |
Ya |
risk_status |
"HIGH_RISK", "REVIEW", "NO_MATERIAL_SIGNAL", "NOT_EVALUATED", "INSUFFICIENT" |
Ya |
coverage_status |
"OK", "DEGRADED", "UNAVAILABLE", "DISAGREEMENT", "SKIPPED" |
Ya |
status_drivers |
StatusDriversResponse |
Ya |
result_final |
boolean |
Ya |
verification_final |
boolean |
Ya |
risk_final |
boolean |
Ya |
risk_retryable |
boolean |
Ya |
risk_retry_after_seconds |
integer / null |
Ya |
retryable |
boolean |
Ya |
retry_after_seconds |
integer / null |
Ya |
recommended_action |
"PROCEED", "CONFIRM_INTERNAL_STATE", "MANUAL_REVIEW", "RECHECK_LATER", "NOT_EXECUTED", "HOLD_AND_ESCALATE" |
Ya |
integrity |
IntegrityResponse |
Ya |
risk |
RiskSummaryResponse |
Ya |
evidence_items |
EvidenceItemResponse[] |
Ya |
coverage_limitations |
CoverageLimitationsResponse |
Ya |
obligation |
ObligationSummaryResponse / null |
Tidak |
reuse |
ReuseResponse / null |
Tidak |
TransactionReport
| Kolom | Tipe / nilai | Wajib |
|---|---|---|
role |
"BUYER", "SELLER" |
Ya |
action |
"APPROVE_TERMS", "TRANSFER_FUNDS", "CONFIRM_FUNDING", "MARK_DELIVERED", "RELEASE", "REFUND", "CLAIM_REFUND", "CLAIM_RELEASE", "DISPUTE", "PROPOSE_SETTLEMENT", "WITHDRAW", "EXPIRE", "SWEEP_EXCESS" |
Ya |
txid |
string |
Ya |
TransactionView
| Kolom | Tipe / nilai | Wajib |
|---|---|---|
purpose |
string |
Ya |
txid |
string |
Ya |
status |
string |
Ya |
signer_role |
string |
Ya |
block_number |
integer / null |
Ya |
confirmed_at |
string / null |
Ya |
TransferResponse
| Kolom | Tipe / nilai | Wajib |
|---|---|---|
index |
integer |
Ya |
asset_type |
string |
Ya |
sender |
string / null |
Ya |
recipient |
string / null |
Ya |
token_contract |
string / null |
Ya |
token_id |
string / null |
Ya |
token_symbol |
string / null |
Ya |
decimals |
integer / null |
Ya |
amount |
string / null |
Ya |
event_ref |
string / null |
Tidak |
execution_status |
"success", "failed", "unknown" |
Tidak |
UsageBalanceResponse
| Kolom | Tipe / nilai | Wajib |
|---|---|---|
granted |
integer |
Ya |
used |
integer |
Ya |
reserved |
integer |
Ya |
available |
integer |
Ya |
UsageBalancesResponse
| Kolom | Tipe / nilai | Wajib |
|---|---|---|
included |
UsageBalanceResponse |
Ya |
extra |
UsageExtraBalanceResponse |
Ya |
total_available |
integer |
Ya |
computed_at |
string |
Ya |
UsageExtraBalanceResponse
| Kolom | Tipe / nilai | Wajib |
|---|---|---|
granted |
integer |
Ya |
used |
integer |
Ya |
reserved |
integer |
Ya |
available |
integer |
Ya |
expires_at |
string / null |
Ya |
UsageLimitsResponse
| Kolom | Tipe / nilai | Wajib |
|---|---|---|
rate_limit_per_minute |
integer |
Ya |
max_concurrent_requests |
integer |
Ya |
enabled_networks |
string[] |
Ya |
UsagePeriodResponse
| Kolom | Tipe / nilai | Wajib |
|---|---|---|
start |
string |
Ya |
end |
string |
Ya |
used |
integer |
Ya |
reserved |
integer |
Ya |
limit |
integer |
Ya |
remaining |
integer |
Ya |
UsagePlanResponse
| Kolom | Tipe / nilai | Wajib |
|---|---|---|
code |
string |
Ya |
version |
integer |
Ya |
name |
string |
Ya |
UsageRecentResponse
| Kolom | Tipe / nilai | Wajib |
|---|---|---|
days |
integer |
Ya |
requests |
integer |
Ya |
billable |
integer |
Ya |
limited_data |
integer |
Ya |
errors |
integer |
Ya |
average_latency_ms |
integer / null |
Ya |
by_network |
object |
Ya |
by_overall_state |
object |
Ya |
by_kind |
object |
Tidak |
UsageResponse
| Kolom | Tipe / nilai | Wajib |
|---|---|---|
tenant_id |
string |
Ya |
environment |
"live", "sandbox" |
Tidak |
plan |
UsagePlanResponse / null |
Ya |
limits |
UsageLimitsResponse |
Ya |
period |
UsagePeriodResponse |
Ya |
balances |
UsageBalancesResponse |
Ya |
subscription |
UsageSubscriptionResponse |
Ya |
recent |
UsageRecentResponse |
Ya |
UsageSubscriptionResponse
| Kolom | Tipe / nilai | Wajib |
|---|---|---|
status |
"legacy", "active", "scheduled", "lapsed", "none" |
Ya |
plan_code |
string / null |
Ya |
plan_version |
integer / null |
Ya |
period_start |
string / null |
Ya |
period_end |
string / null |
Ya |
next_period_start |
string / null |
Tidak |
renewal |
"manual" |
Tidak |
cancel_at_period_end |
boolean |
Tidak |
VersionsResponse
| Kolom | Tipe / nilai | Wajib |
|---|---|---|
decision |
string |
Ya |
rules |
object |
Ya |
reason_codes |
string |
Ya |
evidence_schema |
string |
Ya |
contract |
string |
Ya |
WalletAddressSecurityResponse
| Kolom | Tipe / nilai | Wajib |
|---|---|---|
denylisted |
boolean / null |
Ya |
denylist_category |
string / null |
Ya |
provider_flagged |
boolean / null |
Ya |
provider_flags |
string[] |
Ya |
issuer_blocked |
boolean / null |
Ya |
issuer_blocked_symbols |
string[] |
Ya |
WalletBehaviourResponse
| Kolom | Tipe / nilai | Wajib |
|---|---|---|
is_contract |
boolean / null |
Ya |
contract_verified |
boolean / null |
Ya |
transaction_count |
integer / null |
Ya |
transaction_count_limited |
boolean |
Ya |
wallet_age_days |
integer / null |
Ya |
first_activity_at |
string / null |
Ya |
last_activity_at |
string / null |
Ya |
counterparties_count |
integer / null |
Ya |
WalletCheckDetails
| Kolom | Tipe / nilai | Wajib |
|---|---|---|
schema_version |
"0.1" |
Tidak |
overall_state |
"CLEAR", "REVIEW", "HIGH_RISK", "LIMITED_DATA" |
Ya |
data_coverage |
"FULL", "PARTIAL", "INSUFFICIENT" |
Ya |
coverage_scope |
"supported_deep_sources" |
Tidak |
modules |
ModuleStatusResponse[] |
Ya |
sanctions |
WalletSanctionsResponse |
Ya |
address_security |
WalletAddressSecurityResponse |
Ya |
behaviour |
WalletBehaviourResponse |
Ya |
counterparties |
WalletCounterpartiesResponse |
Ya |
token_authenticity |
WalletTokenAuthenticityResponse |
Ya |
freshness |
WalletFreshnessResponse |
Ya |
source_coverage |
object |
Ya |
universal_clearance |
false |
Tidak |
reasons |
WalletReasonResponse[] |
Ya |
limitations |
string[] |
Ya |
evidence |
WalletEvidenceResponse |
Ya |
WalletCheckRequest
| Kolom | Tipe / nilai | Wajib |
|---|---|---|
address |
string |
Ya |
network |
"tron", "eth", "ton" / null |
Tidak |
WalletCheckResponse
| Kolom | Tipe / nilai | Wajib |
|---|---|---|
request_id |
string |
Ya |
address |
string |
Ya |
network |
"tron", "eth", "ton" |
Ya |
state |
"clear", "review", "high_risk", "limited_data" |
Ya |
coverage |
"complete", "partial" |
Ya |
reason_codes |
string[] |
Ya |
environment |
"live", "sandbox" |
Tidak |
details |
WalletCheckDetails |
Ya |
WalletCounterpartiesResponse
| Kolom | Tipe / nilai | Wajib |
|---|---|---|
screened |
integer |
Ya |
unverified |
integer |
Ya |
flagged |
integer |
Ya |
WalletEvidenceResponse
| Kolom | Tipe / nilai | Wajib |
|---|---|---|
live |
boolean |
Ya |
source |
"live", "sandbox" |
Ya |
WalletFreshnessResponse
| Kolom | Tipe / nilai | Wajib |
|---|---|---|
checked_at |
string |
Ya |
analyzed_at |
string / null |
Ya |
served_from_analysis_cache |
boolean |
Ya |
oldest_source_age_seconds |
integer / null |
Ya |
WalletReasonResponse
| Kolom | Tipe / nilai | Wajib |
|---|---|---|
code |
string |
Ya |
category |
"sanctions", "risk", "address", "token", "counterparties", "behaviour", "coverage" |
Ya |
severity |
"info", "warning", "high", "critical" |
Ya |
WalletSanctionsResponse
| Kolom | Tipe / nilai | Wajib |
|---|---|---|
direct_match |
boolean / null |
Ya |
authorities |
string[] |
Ya |
attributed |
boolean |
Ya |
indirect_exposure |
boolean / null |
Ya |
exposure_source |
"aml_provider" / null |
Ya |
WalletTokenAuthenticityResponse
| Kolom | Tipe / nilai | Wajib |
|---|---|---|
total |
integer |
Ya |
official |
integer |
Ya |
fake |
integer |
Ya |
suspicious |
integer |
Ya |
unknown |
integer |
Ya |
WebhookRequest
| Kolom | Tipe / nilai | Wajib |
|---|---|---|
url |
string |
Ya |
WebhookResponse
| Kolom | Tipe / nilai | Wajib |
|---|---|---|
url |
string / null |
Ya |
status |
string / null |
Ya |
secret |
string / null |
Tidak |
consecutive_failures |
integer |
Tidak |
Riwayat perubahan dan versi
2026-10-15: perbaikan, kebijakan sama
Kontrak tetap 0.3 dan kebijakan b2b-tx-2026-10.4. Jawaban tersimpan diputar ulang tanpa perubahan.
- Daftar transfer TRON yang terpotong. Jika kedua sumber mencantumkan lebih banyak transfer daripada yang dibaca ChainZap (100), kedua daftar tidak lagi dibandingkan baris demi baris: setiap sumber menyimpan baris pertamanya sendiri. Daftar yang terpotong hanya pada satu sumber tetap dianggap ketidaksepakatan. Kekurangannya tetap
TRANSFERS_TRUNCATED, sehingga pemeriksaan seperti itu dapat menjadi final sebagaiLIMITED_DATAalih-alih meminta pemeriksaan ulang tanpa akhir. - Hak penyedia. Sumber tanpa catatan hak, atau yang haknya hanya untuk penggunaan internal, tidak menampilkan referensi buktinya sendiri maupun bidang paparannya sendiri. Tidak ada jawaban saat ini yang berubah.
- Contoh. Sumber daftar dalam contoh terlihat seperti pada jawaban langsung, termasuk
undan kesegaran daftar yang diperiksa; contoh di referensi membawa objekreuseseperti pemeriksaan yang tercatat. - Dokumentasi. Galat sandbox mana yang membawa
environment; ketidaksepakatan mana yang membuattransaction_statusbernilaiINSUFFICIENT;CONFIRM_INTERNAL_STATEmenutup pembayaran keluar hanya denganMATCH, dan pembayaran keluar mencapaiPROCEEDhanya denganexternal_referencekewajiban dalam pemeriksaan (ataucustomer_context.credit_status: "NOT_CREDITED");ATTEMPT_MAY_STILL_LANDmemerlukandirection: "OUTGOING"dalam permintaan;spend_capjuga dilaporkan selama pengeluaran tidak dapat dicatat; kode perbandingan ditahan selamatransaction_statusbernilaiPENDING, dan pemeriksaan yang sumbernya tidak sepakat tentang transaksi itu sendiri belum final tetapi masih dapat membawanya.
2026-10-14: koreksi referensi, kebijakan sama
Kontrak tetap 0.3 dan kebijakan b2b-tx-2026-10.4; tidak ada aturan keputusan yang berubah.
- Kode galat. Deskripsi OpenAPI untuk
POST /v1/transaction/checkkini mencantumkan setiap kode galat yang dapat dikembalikan pemeriksaan:ledger_not_enabled(403),instruction_conflict,instruction_version_requireddanattempt_conflict(409),invalid_amount_tolerancedaninvalid_reference(422). Kode dan artinya tidak berubah; lihat galat. - Contoh. Contoh respons di referensi mencantumkan kedua sumber rantai dan sumber AML dengan status yang dilaporkan jawaban langsung, satu item bukti per sumber, dan alasan yang diberikan jawaban langsung. Setiap contoh menampilkan waktu seperti yang dikembalikan API (
…Z). - Dokumentasi.
risk_finalbernilaifalseselama transaksi masih tertunda atau tidak ditemukan, apa punrisk_status-nya. PadaMANUAL_REVIEW,status_drivers.actionmenyebutkan satu temuan:TX_REVERTEDpada transaksi yang gagal, selain itu yang paling berat, dengan kekurangan data risiko atau sinyal risiko didahulukan sebelum perbandingan pembayaran jika sama beratnya. Lihatstatus_drivers.integrityuntuk perbandingan pembayaran. Pada sumber AML,checked_freshness_unknownadalah status normal untuk penyaringan yang selesai.
2026-10-14: kebijakan b2b-tx-2026-10.4
Aturan integritas int-v3. Kontrak tetap 0.3; jawaban tersimpan diputar ulang tanpa perubahan di bawah kebijakan saat jawaban itu diberikan.
- Pending tidak dibandingkan. Selama transaksi masih tertunda (
transaction_status: PENDING), alasanEXPECTED_*_MISMATCHtidak dilaporkan, karena integritas sudahNOT_EVALUATEDdengan penanda pencocokan null. Ketentuan yang berbeda dilaporkan setelah transaksi final. - Jangan bayar lagi.
ATTEMPT_MAY_STILL_LAND(pemeriksaan dengandirection: "OUTGOING"yang transaksinya tidak ditemukan) selalu dipertahankan dalam daftarreasonsyang pendek, apa pun temuan lainnya. - Dokumentasi. Setiap organisasi memiliki batas pengeluaran harian untuk sumber berbayar, dan
spend_cap/daily_capdireset pukul 00:00 UTC; plafon harian pemeriksaan tanpa tagihan adalah 500 secara bawaan; header kuota menghitung pemeriksaan yang sedang dijawab dan pemutaran ulang tidak membawanya; penanda sandbox pada/v1/transaction/checkadalahenvironment; fixture transaksi gagal ditagih; pada 0.3 ambil keputusan berdasarkan sumbu, bukanoverall_state; cara pembayaran keluar mencapaiPROCEED;expected_tokendi semua tempat; deskripsi status HTTP di referensi netral terhadap endpoint dan mencantumkan 413 serta 415.
2026-10-14: perbaikan, kontrak sama
Kontrak tetap 0.3 dan kebijakan b2b-tx-2026-10.3; tidak ada aturan keputusan yang berubah. Jawaban tersimpan diputar ulang tanpa perubahan.
- Pemeriksaan dompet.
address_security.provider_flaggedmenyatakan apakah penyedia keamanan alamat menandai alamat ini (nullbila penyedia tidak menjawab). Label milik penyedia tidak lagi dikembalikan:provider_flagsyang usang berisi["PROVIDER_SECURITY_FLAG"]atau kosong. Bila hak penyedia tidak mengizinkan ChainZap menampilkan tanda itu, nilainyanulldengan batasanaddress_security_provider_withheld. Status dan alasan tidak berubah. - Waktu TRON.
transaction_at,effective_atpada bukti, dan, untuk pembayaran yang dicatat ledger mulai sekarang, waktu pembayaran adalah waktu blok, bukan cap waktu yang ditulis pengirim ke dalam transaksi. Pembayaran yang sudah tercatat mempertahankan waktu yang pertama kali dicatat. Transaksi yang belum masuk blok memilikitransaction_at: null. - Sumber TRON. Dua sumber yang mencantumkan transfer yang sama dalam urutan berbeda tidak lagi dianggap tidak sepakat.
- Ledger. Reversal menunggu pemeriksaan atas pembayaran yang sama dan tidak pernah dibatalkan olehnya; saat terjadi persaingan, reversal menjawab
504 request_timeoutdenganRetry-Aftertanpa menyimpan apa pun. Operasi ledger kini mencantumkan504tersebut. - Kontrak.
/v1/openapi.jsonkini identik dengan kontrak yang dipublikasikan, danGET /v1/batches/{batch_id}/export.csvdijelaskan hanya sebagai CSV. - Batch. Panduan kini menyatakan bahwa baris yang kekurangannya hanya pada risiko berstatus
DONEdenganrisk_retryable: true. - Hak penyedia. Baris eksposur dari sumber tanpa catatan hak tidak menampilkan satu pun bidang milik sumber itu.
2026-10-10: perbaikan finalitas kontrak 0.3
Kebijakan b2b-tx-2026-10.3 memisahkan verifikasi pembayaran dari risk/KYT. verification_final dan aliasnya result_final menjelaskan verifikasi; risk_final, risk_retryable, dan risk_retry_after_seconds menjelaskan penilaian risiko. Kecocokan final tetap MATCH ketika KYT tidak tersedia, dengan risk_status: INSUFFICIENT dan MANUAL_REVIEW. Pending kini mengembalikan NOT_EVALUATED untuk integritas dan setiap perbandingan yang diminta, dengan penanda pencocokan null. retryable hanya meminta observasi verifikasi baru. Perbarui klien yang memakainya sebagai penanda gabungan verifikasi/KYT.
Versi kontrak tetap 0.3. Jawaban dan keputusan tersimpan mempertahankan kebijakan serta makna aslinya; observasi baru dengan kunci baru memakai kebijakan yang diperbaiki. Kolom finalitas terpisah pada keputusan historis bernilai null. Quickstart memakai endpoint kanonis; semua contoh respons dihasilkan oleh mesin yang sama dengan pemeriksaan live.
5 Oktober 2026: kontrak 0.3
Respons POST /v1/transaction/check membawa schema_version: "0.3" dengan kebijakan b2b-tx-2026-10.2. Setiap kolom 0.2 tetap memiliki arti yang sama; semua yang di bawah ini merupakan tambahan.
- Sumbu status.
transaction_status,integrity_status,risk_status, dancoverage_statusbesertastatus_drivers,result_final,retryable,retry_after_seconds, danrecommended_action. Lihat sumbu status. - Perbandingan terstruktur.
integritydengancomparisonsper kolom,event_refterpilih, dan jumlah transfer yang relevan;transfers[].event_refdanexecution_status;expected_senderdanamount_tolerancedalam permintaan. Beberapa transfer ke penerima pembayaran menambahkanADDITIONAL_RELEVANT_TRANSFERSatauSPLIT_WITHIN_TX. Lihat pencocokan. - Bukti dan versi.
evidence_items,coverage_limitations(runtime,product),riskbeserta driver dan buktinya,gradepada setiap bariskey_exposure, danversions. - Buku besar kewajiban.
external_reference,instruction_version,instruction_effective_at,approval_reference,attempt_reference,direction,workflow_type, dancustomer_context(credit_status,allocation_status) dalam permintaan,obligationdanreusedalam jawaban, serta endpoint/v1/obligations(denganPOST /v1/obligations/lookup, sehingga tidak ada URL yang membawa referensi),/v1/allocations, dan/v1/decisions. Lihat kewajiban dan keputusan. - Batch.
/v1/batchesmemeriksa file CSV berisi hingga 200 pembayaran dengan preflight gratis dan perkiraan biaya, dan dasbor pengembang memiliki halaman Batch. Lihat batch. - Kebijakan paparan
b2b-exp-v2. Kategori penyedia yang tidak dikenali ChainZap dinilai seperti kategori risiko lainnya dan disebutkan namanya (UNRECOGNIZED_PROVIDER_LABEL), bukan diabaikan. - ID keputusan.
decision_idmengidentifikasi jawaban;request_idtetap milik Anda. - Perbaikan. Transfer yang dibatalkan (revert) tidak lagi terbaca sebagai kecocokan: kolom
*_match-nya bernilainull, dan transaksi gagal yang di dalamnya tidak ada yang dieksekusi bernilaiNOT_EVALUATEDdenganNOT_EXECUTED. Daftar alasan ringkas mempertahankan alasan perbandingan dan konteks klien dan tidak pernah lebih dari lima. Ketidaksepakatan sumber Ethereum tentang keberadaan atau status transaksi membuatnya tetapINSUFFICIENT. - Sandbox. Nibble
dkini berarti transaksi gagal;cdanftetapCLEAR. - Penyempurnaan pada hari yang sama. Transaksi gagal yang di dalamnya sebuah transfer tetap tereksekusi bernilai
integrity_status: INSUFFICIENT, tidak pernahMATCH. Pemeriksaan tanpadirectionmengambilnya dari kewajiban atau dariworkflow_type, dan pembayaran dengan arah yang tidak diketahui tidak pernah bernilaiPROCEED. Beberapa transfer ke penerima yang tidak dapat dibedakan selalu menyebutAMBIGUOUS_TRANSFER. Pemeriksaan yang menyebutattempt_referenceyang tercatat dengan transaksi lain ditolak dengan409 attempt_conflict. Pembacaan buku besar punya kuota lajunya sendiri. Baris paparan yang porsinya tidak boleh ditampilkan oleh sumbernya memilikipercent: null.
POST /v1/check mengembalikan penilaian yang sama di bawah details. Kunci idempotensi yang dipakai sebelum perubahan ini tetap mengembalikan jawaban 0.2 yang tersimpan.
3 Oktober 2026: kontrak 0.2
Respons POST /v1/transaction/check membawa schema_version: "0.2" dan policy_version, yaitu kebijakan keputusan yang menghasilkan respons tersebut. Yang berubah dalam kebijakan itu:
- Paparan yang dilaporkan penyedia kini menggeser status berdasarkan jumlah langkah dan porsinya, bukan sekadar keberadaannya: paparan sanksi menghasilkan
HIGH_RISKhanya pada jarak paling jauh 1 langkah dan porsi minimal 5%,REVIEWbila perlu ditinjau, danSANCTIONS_EXPOSURE_MINORselain itu; kategori lain menghasilkanREVIEWhanya sampai 2 langkah dengan porsi minimal 1% atau porsi yang tidak diketahui, atau pada peristiwa peretasan (selain ituRISK_EXPOSURE_MINOR). Setiap baris tetap ada dikey_exposure. Lihat cakupan. - Daftar sanksi yang melewati jendela kesegarannya menghasilkan
SANCTIONS_DATA_STALEdanLIMITED_DATA; daftar UN bernilainot_applicable. - Hanya respons final yang ditagih: transaksi yang tertunda gratis.
- Daftar alasan ringkas selalu mempertahankan alasan yang menentukan status dan setiap alasan
EXPECTED_*. expected_amountdengan angka nol di luar decimals token diterima.- Isi permintaan yang terlalu besar dijawab
413 payload_too_large, bukan422. - Organisasi pilot wajib mengirim ketiga kolom
expected_*(422 expected_fields_required) untuk USDT resmi di TRON (422 token_not_enabled); pemeriksaan dompet berada di luar pilot (403 check_kind_not_enabled). - Karakter heksa pertama
edi sandbox kini berarti transaksi tertunda, dan sandbox tidak lagi mengklaim memilih jaringan dari bentuk hash.
Kunci idempotensi yang dipakai sebelum perubahan ini menghasilkan 409 idempotency_conflict.
2 Oktober 2026: pembayaran melalui OxaPay
Paket dan pemeriksaan tambahan dibayar dengan kripto melalui OxaPay: pesanan menautkan ke halaman pembayaran OxaPay untuk total persis dalam dolar AS. Crypto Pay dan transfer langsung di TON tidak lagi ditawarkan; riwayat pesanan yang memakainya tetap tersimpan. Jendela checkout tidak lagi meminta aset. Lihat paket dan pembayaran.
23 September 2026: nama sumber yang netral
Setiap sumber data dalam respons pemeriksaan kini dinamai menurut perannya, bukan menurut vendor di baliknya. source_coverage.risk_sources memuat aml_provider; kunci transaction_sources adalah chain_explorer, chain_node, dan chain_node_secondary; source_coverage pada pemeriksaan dompet memakai aml_provider dan address_security_provider, sanctions.exposure_source bernilai aml_provider, dan batasan AML bernama aml_provider_unavailable serta aml_provider_skipped_dominant_local_hit. Kosakata status, status hasil, dan kode alasan tidak berubah. Integrasi yang bergantung pada nama sumber lama yang menyebut vendor harus membaca sumber menurut perannya; nama tersebut tidak lagi dikembalikan.
21 September 2026: pemeriksaan dompet
POST /v1/wallet/check menyaring satu alamat dompet dengan kunci, kuota, dan aturan idempotensi yang sama seperti pemeriksaan transaksi. Jaringan dikenali dari format alamat. Respons berisi status, tingkat cakupan, dan kode alasan dengan fakta per modul; tidak ada skor numerik yang dipublikasikan. Pemeriksaan dompet ditagih saat status dihasilkan; limited_data gratis. GET /v1/usage menambahkan recent.by_kind. Sandbox mendapat fixture dompet tetap dan Konsol API mendapat mode dompet. Lihat pemeriksaan dompet.
10 September 2026: masuk mandiri
Siapa pun dapat masuk ke dasbor pengembang dengan akun Google; organisasi dibuat otomatis dan anggota pertama menjadi pemiliknya. Kode undangan bersifat opsional dan hanya untuk bergabung ke organisasi yang sudah ada. Pemeriksaan TRON dan TON mainnet langsung tersedia untuk organisasi baru; pemeriksaan Ethereum diaktifkan oleh dukungan. Paket dan pemeriksaan tambahan dibeli di halaman Paket dan pembayaran.
8 September 2026: harga beta, pembelian, dan sandbox
GET /v1/catalog memublikasikan paket BETA_PRICING_V0. GET /v1/usage menambahkan balances, subscription, dan environment; makna period.remaining tidak berubah. Respons pemeriksaan menambahkan environment dan header X-Quota-Available. Paket dan paket pemeriksaan tambahan dibeli di dasbor pengembang dengan Crypto Pay atau transfer langsung TON, dengan perpanjangan manual; lihat paket dan pembayaran. Kunci sandbox (cz_test_) mengembalikan hasil uji deterministik tanpa panggilan penyedia; lihat sandbox. Pemilik, admin, dan anggota billing dapat membeli di dasbor.
7 September 2026: tiga jaringan dan pemeriksaan yang lebih sederhana
POST /v1/check menerima hash transaksi dengan konteks jaringan opsional. Endpoint ini menambahkan penentuan jaringan yang konservatif, penilaian ringkas, dan bukti lengkap pada details. TRON, Ethereum mainnet, dan TON mainnet memiliki fakta dan kebijakan finalitas masing-masing. Endpoint pemeriksaan awal dan endpoint penggunaan tetap tersedia dengan batas organisasi dan aturan idempotensi yang sama.
Nilai kontrak TON yang tidak dapat diklasifikasikan kini menghasilkan cakupan parsial, termasuk ketika transfer lain dikenali atau fakta diambil dari cache. Risiko tinggi yang diketahui tetap ditampilkan.
Pemeriksaan Ethereum diaktifkan per organisasi oleh dukungan setelah pengujian penyedia langsung; lihat status layanan untuk keadaan adaptor saat ini.
v1.0.0
Pemeriksaan transaksi TRON dan laporan penggunaan organisasi. Dasbor pengembang menyediakan pengelolaan kunci API, rincian paket, dan Uji API untuk menguji permintaan dalam organisasi Anda.
Ethereum dan TON diterima oleh skema; adaptornya memerlukan aktivasi dan pengujian langsung terpisah. Versi ini tidak mencakup API dompet, webhook, pemantauan, atau pelaksanaan pembayaran.
Evolusi kontrak
Awalan endpoint publik adalah /v1. Dokumentasi ini berversi di /docs/v1/. OpenAPI yang dapat diunduh dibuat dari model permintaan dan respons yang sama dengan API dan diperiksa terhadap snapshot yang tersimpan di CI.
Integrasi harus menerima kolom respons tambahan sambil tetap memvalidasi kolom yang digunakan. Jangan menganggap kode alasan yang tidak dikenal sebagai hasil bersih. Perubahan yang tidak kompatibel memerlukan panduan migrasi berversi; tautan dokumentasi untuk versi utama yang ada tetap stabil.
Status layanan dan dukungan
Status akses
Indikator status publik melaporkan apakah akses bisnis diaktifkan. Indikator ini tidak menjalankan pemeriksaan penyedia secara langsung dan bukan jaminan ketersediaan. Jaringan yang tersedia menggambarkan fungsi yang didukung; organisasi tertentu dapat memiliki hak yang lebih sempit.
Respons 503 api_disabled berarti pemeriksaan bisnis belum diaktifkan atau sengaja dijeda. Respons 503 provider_unavailable berarti data transaksi yang diperlukan tidak dapat diambil untuk permintaan tersebut. Simpan ID permintaan dan ikuti panduan pengulangan.
Kontak
Hubungi tim ChainZap untuk aktivasi Ethereum, ketentuan paket Scale, pertanyaan insiden, dan dukungan. Sertakan X-Request-ID, kode galat publik, dan waktu UTC. Jangan pernah menyertakan kunci API, token identitas, atau data mentah transaksi maupun penyedia.
Jaringan: TRON mainnet tersedia untuk setiap organisasi dan menjadi ruang lingkup pilot mitra desain (USDT TRC-20). TON mainnet berstatus pratinjau: jaringan ini menjawab, tetapi pemeriksaan TON atas transaksi yang sudah dieksekusi saat ini menghasilkan LIMITED_DATA (tidak ditagih) karena tidak ada daftar sanksi terkonfigurasi yang memuat alamat TON, dan TON berada di luar pilot. Ethereum diimplementasikan dan diaktifkan per organisasi oleh dukungan. /status.json melaporkan aktivasi adaptor yang dikonfigurasi terpisah dari akses API global, tanpa pemeriksaan penyedia secara langsung.
Memuat…