Merchant Integration

Crypto Payment Verification

Screen customer wallet addresses before accepting crypto payments. Detect sanctioned addresses, scam wallets, and high-risk senders with a single API call or an embeddable widget.

How It Works

1

Customer Enters Address

Your customer pastes their crypto wallet address into your checkout or payment form.

2

Instant Verification

The address is checked against scam databases, OFAC sanctions lists, GoPlus security data, and our risk scoring engine.

3

Accept or Reject

You receive a clear recommendation: accept, review, or reject. The widget shows an inline badge automatically.

Widget Quick Start

Add one script tag to your checkout page. The widget attaches to your payment address input and shows a verification badge automatically.

HTML
<input
  type="text"
  id="crypto-address"
  placeholder="Enter wallet address"
/>

<script
  src="https://chainevidence.net/api/v1/merchant/widget.js"
  data-key="YOUR_API_KEY"
  data-element="#crypto-address"
></script>

When the user enters a valid crypto address and leaves the field, a colored badge appears: Safe Review High Risk or Sanctioned.

Widget Configuration

Configure the widget via data- attributes on the script tag.

AttributeRequiredDescription
data-keyYes

Your ChainEvidence API key. Required. The widget will not initialize without it.

data-key="ce_live_a1b2c3d4..."
data-elementYes

CSS selector for the payment address input field the widget should attach to.

data-element="#crypto-address"
data-positionNo

Where to place the badge relative to the input. "after" (default) inserts after the input, "before" inserts before it.

data-position="after"

Widget Events

The widget dispatches a ce:payment-checked custom event on the input element after each verification. Use it to integrate with your checkout logic.

JavaScript
document.querySelector('#crypto-address')
  .addEventListener('ce:payment-checked', function(e) {
    var result = e.detail;

    if (result.recommendation === 'sanctioned_reject') {
      disableCheckout('This address is sanctioned.');
    } else if (result.recommendation === 'high_risk_reject') {
      showWarning('This address has been flagged. Proceed with caution.');
    } else if (result.recommendation === 'review_recommended') {
      flagForManualReview(result);
    }

    console.log('Risk score:', result.risk.score, result.risk.level);
  });

API Endpoint

For server-side integration, call the payment check endpoint directly. Base URL: https://chainevidence.net

POST/api/v1/payment-check

Payment Address Verification

Submit a crypto address to check if it is safe to accept payment from. Returns risk score, sanctions status, scam reports, and a clear accept/reject recommendation.

Request

curl
curl -X POST \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"address": "0x1234...abcd", "chain": "ETH"}' \
  https://chainevidence.net/api/v1/payment-check

Request Body

{
  "address": "0x1234...abcd",   // Required: wallet address
  "chain": "ETH",               // Optional: BTC, ETH, BSC, TRX, SOL (auto-detected)
  "amount": 1.5,                // Optional: transaction amount (for logging)
  "currency": "ETH"             // Optional: currency of the amount
}

Example Response

{
  "data": {
    "address": "0x1234...abcd",
    "chain": "ETH",
    "risk": { "score": 5, "level": "low" },
    "recommendation": "safe_to_accept",
    "sanctions": { "listed": false },
    "scamReports": 0,
    "labels": [],
    "goplusFlags": [],
    "verifiedAt": "2026-03-22T14:30:00.000Z"
  },
  "meta": {
    "creditsRemaining": 18,
    "balanceCents": 500,
    "costCents": 1,
    "requestId": "req_a1b2c3d4e5f6g7h8"
  }
}

Response Fields

FieldTypeDescription
addressstringThe address that was checked.
chainstringDetected blockchain: BTC, ETH, BSC, TRX, SOL, or UNKNOWN.
risk.scorenumberRisk score from 0 (safe) to 100 (critical).
risk.levelstringHuman-readable risk level: low, medium, high, or critical.
recommendationstringAction recommendation: safe_to_accept, review_recommended, high_risk_reject, or sanctioned_reject.
sanctions.listedbooleanWhether the address appears on OFAC or other sanctions lists.
scamReportsnumberNumber of scam reports in the ChainEvidence database.
labelsstring[]Known labels for this address (e.g. "phishing", "ransomware").
goplusFlagsstring[]Risk flags from GoPlus security analysis (e.g. money laundering, mixer usage).
verifiedAtstringISO 8601 timestamp of when the check was performed.

Recommendation Levels

The recommendation field tells you what action to take. Use it to automate your payment acceptance logic.

safe_to_acceptSafe to Accept

Address has no known scam reports, sanctions flags, or malicious activity. Risk score below 30.

review_recommendedReview Recommended

Address has some risk signals (risk score 30-59). Manual review before accepting is advised.

high_risk_rejectHigh Risk - Reject

Address has significant fraud indicators, multiple scam reports, or malicious activity flags. Risk score 60+.

sanctioned_rejectSanctioned - Reject

Address appears on OFAC sanctions list or is flagged as blacklisted. Accepting payment is a legal risk.

Compliance

Legal obligation: Merchants who knowingly accept payments from sanctioned addresses may face regulatory penalties. ChainEvidence provides screening data to help you comply, but you are responsible for your own compliance decisions.

OFAC Sanctions

Every payment check screens against the OFAC SDN list and known sanctioned wallet clusters. Sanctioned addresses always return sanctioned_reject.

AML / KYC

Use the risk score and scam reports to enrich your existing AML workflows. Addresses with mixer usage, money laundering flags, or darkweb activity are flagged automatically.

Audit Trail

Every API call is logged with a unique requestId. Use it to prove due diligence in case of regulatory inquiry.

Multi-Chain

Supports Bitcoin, Ethereum, BSC, Tron, and Solana addresses. Chain is auto-detected from the address format, or specify manually for BSC (0x) addresses.

Integration Examples

Server-side verification patterns for common merchant setups.

Node.js / Express — Checkout Webhook
app.post('/checkout/verify-payment', async (req, res) => {
  const { customerAddress } = req.body;

  const check = await fetch('https://chainevidence.net/api/v1/payment-check', {
    method: 'POST',
    headers: {
      'Authorization': 'Bearer ' + process.env.CHAINEVIDENCE_API_KEY,
      'Content-Type': 'application/json',
    },
    body: JSON.stringify({ address: customerAddress }),
  });

  const { data } = await check.json();

  if (data.recommendation === 'sanctioned_reject') {
    return res.status(403).json({
      error: 'Cannot accept payment from this address.',
    });
  }

  if (data.recommendation === 'high_risk_reject') {
    await notifyComplianceTeam(data);
    return res.status(403).json({
      error: 'This address has been flagged for review.',
    });
  }

  // Proceed with payment
  await processPayment(customerAddress);
  res.json({ status: 'accepted', riskScore: data.risk.score });
});
Python / Django — Payment Gateway
import requests

def verify_payment_address(address: str) -> dict:
    resp = requests.post(
        "https://chainevidence.net/api/v1/payment-check",
        headers={
            "Authorization": f"Bearer {settings.CHAINEVIDENCE_API_KEY}",
            "Content-Type": "application/json",
        },
        json={"address": address},
        timeout=10,
    )
    resp.raise_for_status()
    return resp.json()["data"]

# In your view:
result = verify_payment_address(customer_wallet)
if result["recommendation"] in ("sanctioned_reject", "high_risk_reject"):
    raise PaymentRejected(f"Address flagged: {result['recommendation']}")
Shopify / WooCommerce — Webhook Handler
// Shopify webhook: orders/create
// Verify the customer's crypto payment address before fulfillment

async function handleOrderCreated(order) {
  const cryptoAddress = order.note_attributes
    ?.find(a => a.name === 'crypto_address')?.value;

  if (!cryptoAddress) return; // Not a crypto payment

  const resp = await fetch('https://chainevidence.net/api/v1/payment-check', {
    method: 'POST',
    headers: {
      'Authorization': 'Bearer ' + CHAINEVIDENCE_KEY,
      'Content-Type': 'application/json',
    },
    body: JSON.stringify({ address: cryptoAddress }),
  });

  const { data } = await resp.json();

  if (data.recommendation !== 'safe_to_accept') {
    // Tag the order for manual review
    await shopify.order.addTag(order.id, 'crypto-risk-' + data.risk.level);
    await shopify.order.addNote(order.id,
      'ChainEvidence: ' + data.recommendation +
      ' (score: ' + data.risk.score + ')'
    );
  }
}

Pricing

per payment check

Billed per unique API call. Widget-side cache (5min TTL) avoids duplicate charges.

1,000 checks

$10

10,000 checks

$100

100,000+ checks

Contact us

20 free checks included with every API key. Top up your balance at any time via Stripe. No monthly fees, no commitments.

Protect your business today

Screen every crypto payment against scam databases, sanctions lists, and fraud indicators. One API call or one script tag. 20 free checks included.