Skip to main content
Didit Raises $2M and Joins Y Combinator (W26)
Didit
Back to blog
Blog · May 21, 2026

KYT for Crypto Exchanges & On-Ramps: A Build Guide

A practical guide to wiring wallet screening into a crypto exchange or on-ramp — screening deposits and withdrawals at the right moment, encoding policy, and handling alerts — at $0.02 per screening with BYOK.

By DiditUpdated
kyt-crypto-exchange-integration.png

A crypto exchange or on-ramp has exactly two moments where on-chain risk enters or leaves the business: a deposit comes in, and a withdrawal goes out. Get screening right at those two points and you've covered the core of Know Your Transaction (KYT). Get it wrong — screen too late, screen the wrong thing, or treat every match as a manual ticket — and you either accept tainted funds or drown your analysts.

This is a build guide for wiring Didit's Wallet Screening into a deposit/withdrawal flow. It covers where to screen, how to encode policy so most decisions are automatic, and how to handle the ones that aren't — all on the unified /v3/ API at $0.02 per screening with bring-your-own-key.

Key takeaways

  • Two screening points: screen the deposit address on the way in, screen the destination address on the way out.
  • Gate before settlement. Pre-transfer screening lets you decline a deposit or block a withdrawal before value moves.
  • Encode policy as rules so LOW/MEDIUM pass automatically, HIGH routes to review, and CRITICAL declines — analysts only touch the edge cases.
  • Post-transfer records by transaction hash keep an audit trail and catch retroactive sanctions designations.
  • Built-in case management + SAR workflow — alerts open in the same Console, no separate tool.
  • $0.02 per screening with BYOK (Crystal or Merkle Science); pay-per-call, no minimums.

What KYT means for an exchange

KYC verifies who your user is at onboarding. KYT watches what their money does afterward — specifically, where the crypto they deposit came from and where the crypto they withdraw is going. For an exchange or on-ramp, the obligation is concrete: don't accept funds with sanctions, mixer, darknet, ransomware, or stolen-funds exposure, and don't send funds to wallets with the same. Wallet screening is the mechanism that enforces it transaction by transaction.

Why it matters

Deposits and withdrawals are the only two doors value uses, so they're the only two doors risk uses. A tainted deposit accepted is a laundering exposure on your books; a withdrawal sent to a sanctioned wallet is a sanctions violation regardless of intent. The regulatory expectation for VASPs is explicit ongoing transaction monitoring, and the practical expectation is that you catch this before settlement, not in a month-end review.

The reason teams historically under-screened is cost: legacy blockchain-analytics subscriptions priced screening as an enterprise contract. At $0.02 per screening with BYOK, that constraint is gone — you can screen every deposit and every withdrawal and still come out roughly 10× cheaper than buying the data direct.

Technical details

Everything runs on POST /v3/transactions/. Set currency_kind: "crypto", a direction, and the address you're screening.

Deposit (INBOUND) — screen the source address before crediting:

curl -X POST https://verification.didit.me/v3/transactions/ \
  -H "x-api-key: $DIDIT_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "transaction_id": "dep_a31f",
    "category": "finance",
    "amount": 8000,
    "currency": "USDT",
    "currency_kind": "crypto",
    "direction": "INBOUND",
    "wallet_address": "0x12ab...90cd",
    "include_crypto_screening": true,
    "subject": { "vendor_data": "user_2201", "role": "RECEIVER" }
  }'

Withdrawal (OUTBOUND) — screen the destination before releasing:

curl -X POST https://verification.didit.me/v3/transactions/ \
  -H "x-api-key: $DIDIT_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "transaction_id": "wd_b58c",
    "category": "finance",
    "amount": 8000,
    "currency": "USDT",
    "currency_kind": "crypto",
    "direction": "OUTBOUND",
    "wallet_address": "0x44de...11ff",
    "include_crypto_screening": true,
    "subject": { "vendor_data": "user_2201", "role": "SENDER" }
  }'

Branch on the verdict's band:

{
  "transaction_id": "wd_b58c",
  "status": "APPROVED",
  "wallet_screening": {
    "risk_score": 12,
    "risk_band": "LOW",
    "exposure": [ { "category": "EXCHANGE", "type": "DIRECT", "share": 0.96 } ]
  }
}

After settlement, screen the confirmed transaction by hash (payment_reference_id) to keep an auditable post-transfer record.

Webhooks. Subscribe to transaction.status.updated so your ledger reflects analyst decisions and any AWAITING_USER remediation.

Price. $0.02 per screening with BYOK (Crystal or Merkle Science), per call, no minimums.

A reference flow

Deposit request
   └─ POST /v3/transactions/ (INBOUND, wallet_address, screening)
        ├─ LOW / MEDIUM  → credit the deposit
        ├─ HIGH          → hold; open alert; analyst reviews
        └─ CRITICAL      → reject; freeze; open alert; consider SAR

Withdrawal request
   └─ POST /v3/transactions/ (OUTBOUND, destination wallet_address, screening)
        ├─ LOW / MEDIUM  → release
        ├─ HIGH          → hold; analyst reviews
        └─ CRITICAL      → block; open alert

Post-settlement
   └─ POST /v3/transactions/ (hash as payment_reference_id) → audit record

Encode the LOW/MEDIUM/HIGH/CRITICAL handling once in the Crypto screening rule bundle so the status comes back already decided — your backend just acts on it.

Use cases

  • Centralized exchanges — screen every deposit and withdrawal; auto-decline CRITICAL, queue HIGH, log the rest.
  • On/off-ramps — gate fiat↔crypto conversions on the counterparty wallet before settling to the banking rails.
  • Brokerages adding crypto — reuse an existing transaction-monitoring integration; crypto screening is the same endpoint.
  • Custodians — screen at intake and re-screen on movement, with the network graph as freeze evidence.
  • VASPs — pair KYT with FATF Travel Rule data exchange on the same engine for end-to-end counterparty risk.

How to integrate with Didit

  1. Configure provider + default. In Console → Transactions → Settings, set Crystal or Merkle Science (BYOK or managed) and the default screening behavior.
  2. Write the policy rules. Turn on the Crypto screening bundle and set bands → actions so most decisions are automatic.
  3. Screen at both doors. Call POST /v3/transactions/ for every deposit (INBOUND) and withdrawal (OUTBOUND) before settlement.
  4. Record after settlement. Re-screen the confirmed transaction by hash for the audit trail.
  5. Work the edge cases. HIGH/CRITICAL screenings open alerts; investigate, escalate to a case, and file SARs in the same Console.

Because it's all on the unified /v3/ API, the same user who deposits flows through transaction monitoring, a flagged transaction can pause via AWAITING_USER and trigger a remediation step, and KYC, KYT, and AML compose into one identity-and-fraud platform.

Frequently asked questions

Where exactly should I screen?

At two points: the source address of every deposit (INBOUND) before crediting, and the destination address of every withdrawal (OUTBOUND) before releasing. Add post-transfer screening by hash for records.

Won't screening every transaction be expensive?

No. At $0.02 per screening with BYOK — roughly 10× cheaper than buying analytics direct — screening every deposit and withdrawal is affordable, even at high volume.

How do I avoid manual review on every match?

Encode policy in the Crypto screening rule bundle so LOW/MEDIUM pass automatically, HIGH routes to an analyst, and CRITICAL declines. Analysts only handle the edge.

Does this also cover the Travel Rule?

Yes. The same Transaction Monitoring engine carries FATF Travel Rule support, so counterparty data exchange and wallet screening run together.

Which providers can I use?

Crystal and Merkle Science today (BYOK or managed); Chainalysis and Elliptic are coming soon at $0.02 BYOK.

Ready to get started?

Read the Wallet Screening overview in the docs, see how it fits the platform on the Wallet Screening product page, and check per-call pricing on the pricing page. When you're ready, start free — 500 free KYC checks every month, and wallet screening at $0.02 per screening with BYOK.

Infrastructure for identity and fraud.

One API for KYC, KYB, Transaction Monitoring, and Wallet Screening. Integrate in 5 minutes.

Ask an AI to summarise this page
KYT for Crypto Exchanges & On-Ramps | Didit