ChainZap
Daftar isi


EnglishРусскийBahasa Indonesia
Dasbor

Pencarian berjalan di browser. Pilih hasil dengan ↑ ↓, lalu tekan Enter untuk membukanya.

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 pada details.
  • POST /v1/wallet/check: kirim alamat dompet. Jaringan dikenali dari formatnya. Respons berisi status, tingkat cakupan, dan kode alasan dengan fakta per modul pada details; 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
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

JSON
{
  "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
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\"}"
Node.js
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);
Python
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
<?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
JSON
{
  "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
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_state dan data_coverage: status dalam huruf kapital dan istilah cakupan dari mesin analisis sendiri, FULL, PARTIAL, atau INSUFFICIENT.
  • modules: tujuh baris dalam urutan tetap, sanctions_aml, wallet_behaviour, token_authenticity, contract_controls, address_security, counterparties_services, flows_connections. Setiap baris memiliki status (RISK_DETECTED, NO_MATCHES_FOUND, PARTIALLY_CHECKED, INSUFFICIENT_DATA, NOT_SUPPORTED, NOT_CHECKED) dan source_coverage (complete, partial, none, not_applicable). Modul yang tidak disaring menyatakannya secara terbuka; modul itu tidak pernah dilaporkan bersih.
  • sanctions: direct_match terhadap indeks OFAC, EU, UK, dan UN yang dikonfigurasi (null jika tidak ada indeks yang disaring), otoritas pencatatan pada authorities, apakah pencatatan itu attributed, dan indirect_exposure yang dilaporkan penyedia AML (null jika penyedia tidak dijalankan).
  • address_security: status dan kategori pada daftar hitam publik, provider_flagged (apakah penyedia keamanan alamat menandai alamat ini; null bila penyedia tidak menjawab atau haknya tidak mengizinkan ChainZap menampilkannya), dan apakah penerbit stablecoin telah membekukan alamat. Label milik penyedia tidak pernah dikembalikan; provider_flags yang usang berisi ["PROVIDER_SECURITY_FLAG"] ketika provider_flagged bernilai 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.
  • counterparties dan token_authenticity: berapa banyak pihak lawan yang disaring, belum terverifikasi, atau ditandai, dan berapa banyak token yang dipegang tergolong resmi, palsu, mencurigakan, atau tidak dikenal.
  • freshness dan source_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

Python
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"])
TypeScript
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
JSON
{
  "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:

JSON
{
  "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}], dan owner opsional 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_amount berkurang hingga kewajiban menjadi ALLOCATED.
  • Pembalikan. POST /v1/allocations/{allocation_id}/reversal dengan reason (CUSTOMER_CORRECTION, DISPUTED, DUPLICATE_RECORD, OTHER) menandai alokasi sebagai dibalik, dan DISPUTED menandainya DISPUTED. 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
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, dan duplicates, beserta errors dan warnings yang dihitung per kode. Baris dengan galat dilewati (SKIPPED_INVALID) dan galatnya menyebutkan kolomnya, misalnya invalid_tron_address atau unknown_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 tanpa allocated_amount), declared_shared_payment, several_transactions_for_obligation, dan tx_seen_for_other_obligation jika 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, dan quota_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/batches mencantumkan batch terbaru Anda; GET /v1/batches/{batch_id} mengembalikan satu batch beserta progress dan, setelah dijalankan, summary.
  • GET /v1/batches/{batch_id}/rows?after=0&limit=100 menampilkan 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 dengan state= atau review=true.
  • GET /v1/batches/{batch_id}/export.csv mengembalikan 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).
  • 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. confirmFunding menolak escrow yang memegang kurang dari jumlah.
  • Lebih dari jumlah, atau transfer kedua. Setelah pendanaan, kelebihannya dikreditkan ke pembeli (sweepExcess, peristiwa escrow_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, status EXPIRED); 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: 0 memberikan 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, peristiwa escrow_deal.settlement_proposed untuk setiap usulan). settlement.buyer_proposal dan settlement.seller_proposal menampilkan usulan saat ini.
  • Resolver. Pada transaksi yang menunjuknya, resolver dapat memutuskan dalam resolve_period setelah 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
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:

JSON
{
  "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.

shell
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:

text
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
Python
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_enabled kini menjadi resolver_enabled: setiap transaksi dapat disengketakan, hanya resolver yang opsional. Dengan resolver, kirim resolver_id, resolver_fee, dan timeline.resolve_period_seconds. timeline.response_period_seconds dan timeout_outcome dihapus: tidak ada lagi jendela tanggapan penjual maupun hasil sengketa karena tenggat.
  • Respons transaksi. Baru: protocol_version, resolver.fee, timeline.resolve_deadline, settlement (usulan dan deadlocked, selama sengketa), funding (selama menunggu dana), dan resolver di balances.accrued, claimable, dan withdrawn. timeline.if_nobody_acts kini {at, outcome, claim_by}. Dihapus: dispute_enabled, timeline.response_period_seconds, timeline.seller_response_deadline, dan timeline.seller_responded. settlement_reason dapat bernilai MUTUAL_SETTLEMENT; TIMEOUT_NO_RULING hanya muncul pada transaksi arsip.
  • Pendanaan dan batas waktu. Pendanaan adalah transfer langsung dan confirmFunding, bukan izin dan fund. 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, dan SWEEP_EXCESS. Dihapus: APPROVE_TOKEN, FUND, RESPOND, PROCESS_TIMEOUT, dan CREDIT_EXCESS.
  • Peristiwa. Baru: escrow_deal.settlement_proposed dan escrow_deal.excess_credited. Dihapus: escrow_deal.seller_responded.
  • Ketentuan. chainzap.escrow.terms/2 menambahkan rules: "chainzap.escrow.rules/2" dan resolver.fee, serta menghapus timeout_outcome dan timeline.response_period.
  • Kesalahan. Baru: resolver_settings_required, resolver_settings_without_resolver, invalid_resolver_fee, dan invalid_buyer_amount. Dihapus: invalid_simple_deal, dispute_settings_required, dispute_settings_without_disputes, disputes_disabled, dan invalid_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
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
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
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
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.

Python
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.

TypeScript
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
JSON
{
  "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
JSON
{
  "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
JSON
{
  "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
JSON
{
  "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
JSON
{
  "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
JSON
{
  "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
JSON
{
  "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 baca integrity_status dan recommended_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 batas amount_tolerance jika 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.comparisons menunjukkan kolom mana yang berbeda dan, untuk jumlah, UNDERPAID atau OVERPAID beserta delta.
  • 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

JSON
{"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.

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
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 sebagai LIMITED_DATA alih-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 un dan kesegaran daftar yang diperiksa; contoh di referensi membawa objek reuse seperti pemeriksaan yang tercatat.
  • Dokumentasi. Galat sandbox mana yang membawa environment; ketidaksepakatan mana yang membuat transaction_status bernilai INSUFFICIENT; CONFIRM_INTERNAL_STATE menutup pembayaran keluar hanya dengan MATCH, dan pembayaran keluar mencapai PROCEED hanya dengan external_reference kewajiban dalam pemeriksaan (atau customer_context.credit_status: "NOT_CREDITED"); ATTEMPT_MAY_STILL_LAND memerlukan direction: "OUTGOING" dalam permintaan; spend_cap juga dilaporkan selama pengeluaran tidak dapat dicatat; kode perbandingan ditahan selama transaction_status bernilai PENDING, 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/check kini mencantumkan setiap kode galat yang dapat dikembalikan pemeriksaan: ledger_not_enabled (403), instruction_conflict, instruction_version_required dan attempt_conflict (409), invalid_amount_tolerance dan invalid_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_final bernilai false selama transaksi masih tertunda atau tidak ditemukan, apa pun risk_status-nya. Pada MANUAL_REVIEW, status_drivers.action menyebutkan satu temuan: TX_REVERTED pada transaksi yang gagal, selain itu yang paling berat, dengan kekurangan data risiko atau sinyal risiko didahulukan sebelum perbandingan pembayaran jika sama beratnya. Lihat status_drivers.integrity untuk perbandingan pembayaran. Pada sumber AML, checked_freshness_unknown adalah 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), alasan EXPECTED_*_MISMATCH tidak dilaporkan, karena integritas sudah NOT_EVALUATED dengan penanda pencocokan null. Ketentuan yang berbeda dilaporkan setelah transaksi final.
  • Jangan bayar lagi. ATTEMPT_MAY_STILL_LAND (pemeriksaan dengan direction: "OUTGOING" yang transaksinya tidak ditemukan) selalu dipertahankan dalam daftar reasons yang pendek, apa pun temuan lainnya.
  • Dokumentasi. Setiap organisasi memiliki batas pengeluaran harian untuk sumber berbayar, dan spend_cap / daily_cap direset 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/check adalah environment; fixture transaksi gagal ditagih; pada 0.3 ambil keputusan berdasarkan sumbu, bukan overall_state; cara pembayaran keluar mencapai PROCEED; expected_token di 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_flagged menyatakan apakah penyedia keamanan alamat menandai alamat ini (null bila penyedia tidak menjawab). Label milik penyedia tidak lagi dikembalikan: provider_flags yang usang berisi ["PROVIDER_SECURITY_FLAG"] atau kosong. Bila hak penyedia tidak mengizinkan ChainZap menampilkan tanda itu, nilainya null dengan batasan address_security_provider_withheld. Status dan alasan tidak berubah.
  • Waktu TRON. transaction_at, effective_at pada 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 memiliki transaction_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_timeout dengan Retry-After tanpa menyimpan apa pun. Operasi ledger kini mencantumkan 504 tersebut.
  • Kontrak. /v1/openapi.json kini identik dengan kontrak yang dipublikasikan, dan GET /v1/batches/{batch_id}/export.csv dijelaskan hanya sebagai CSV.
  • Batch. Panduan kini menyatakan bahwa baris yang kekurangannya hanya pada risiko berstatus DONE dengan risk_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, dan coverage_status beserta status_drivers, result_final, retryable, retry_after_seconds, dan recommended_action. Lihat sumbu status.
  • Perbandingan terstruktur. integrity dengan comparisons per kolom, event_ref terpilih, dan jumlah transfer yang relevan; transfers[].event_ref dan execution_status; expected_sender dan amount_tolerance dalam permintaan. Beberapa transfer ke penerima pembayaran menambahkan ADDITIONAL_RELEVANT_TRANSFERS atau SPLIT_WITHIN_TX. Lihat pencocokan.
  • Bukti dan versi. evidence_items, coverage_limitations (runtime, product), risk beserta driver dan buktinya, grade pada setiap baris key_exposure, dan versions.
  • Buku besar kewajiban. external_reference, instruction_version, instruction_effective_at, approval_reference, attempt_reference, direction, workflow_type, dan customer_context (credit_status, allocation_status) dalam permintaan, obligation dan reuse dalam jawaban, serta endpoint /v1/obligations (dengan POST /v1/obligations/lookup, sehingga tidak ada URL yang membawa referensi), /v1/allocations, dan /v1/decisions. Lihat kewajiban dan keputusan.
  • Batch. /v1/batches memeriksa 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_id mengidentifikasi jawaban; request_id tetap milik Anda.
  • Perbaikan. Transfer yang dibatalkan (revert) tidak lagi terbaca sebagai kecocokan: kolom *_match-nya bernilai null, dan transaksi gagal yang di dalamnya tidak ada yang dieksekusi bernilai NOT_EVALUATED dengan NOT_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 tetap INSUFFICIENT.
  • Sandbox. Nibble d kini berarti transaksi gagal; c dan f tetap CLEAR.
  • Penyempurnaan pada hari yang sama. Transaksi gagal yang di dalamnya sebuah transfer tetap tereksekusi bernilai integrity_status: INSUFFICIENT, tidak pernah MATCH. Pemeriksaan tanpa direction mengambilnya dari kewajiban atau dari workflow_type, dan pembayaran dengan arah yang tidak diketahui tidak pernah bernilai PROCEED. Beberapa transfer ke penerima yang tidak dapat dibedakan selalu menyebut AMBIGUOUS_TRANSFER. Pemeriksaan yang menyebut attempt_reference yang tercatat dengan transaksi lain ditolak dengan 409 attempt_conflict. Pembacaan buku besar punya kuota lajunya sendiri. Baris paparan yang porsinya tidak boleh ditampilkan oleh sumbernya memiliki percent: 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_RISK hanya pada jarak paling jauh 1 langkah dan porsi minimal 5%, REVIEW bila perlu ditinjau, dan SANCTIONS_EXPOSURE_MINOR selain itu; kategori lain menghasilkan REVIEW hanya sampai 2 langkah dengan porsi minimal 1% atau porsi yang tidak diketahui, atau pada peristiwa peretasan (selain itu RISK_EXPOSURE_MINOR). Setiap baris tetap ada di key_exposure. Lihat cakupan.
  • Daftar sanksi yang melewati jendela kesegarannya menghasilkan SANCTIONS_DATA_STALE dan LIMITED_DATA; daftar UN bernilai not_applicable.
  • Hanya respons final yang ditagih: transaksi yang tertunda gratis.
  • Daftar alasan ringkas selalu mempertahankan alasan yang menentukan status dan setiap alasan EXPECTED_*.
  • expected_amount dengan angka nol di luar decimals token diterima.
  • Isi permintaan yang terlalu besar dijawab 413 payload_too_large, bukan 422.
  • 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 e di 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.

Akses API

Memuat…

Ringkasan