Don't let your agent sign into a honeypot.

One call. OFAC SDN + GoPlus + Etherscan source verification + anomaly heuristics, composed into a single allow / warn / block verdict your agent can branch on. $0.001 USDC/call via x402 on Base, plus a free fixture-only endpoint for CI testing. Drop-in for ElizaOS and Coinbase AgentKit.

Live · Base 8453 OFAC SDN GoPlus Etherscan Anomaly x402-paid

What it does

Single API call returns a recommendation (allow / warn / block) plus a per-factor breakdown. The intended pattern: agent abstains on block, surfaces a warning on warn, proceeds on allow.

FactorSourceCadence
OFAC SDNU.S. Treasury SDN XML feed (cryptocurrency-tagged via Feature 345 / Detail 1432)Daily refresh target (we run a once-per-24h cron against the Treasury XML feed). Operationally we may miss refreshes during outages — for sub-daily or audit-grade compliance, query Treasury directly.
GoPlusGoPlus trust-list + token-security APIOn-call (recently-deployed contracts may not yet be classified)
EtherscanSource-code verification via getSourceCodeCached per (address, chainId)
AnomalyFresh-deploy / low-holder / proxy patternsOn-call

Two modes — read this first

There are two endpoints. They look similar but mean different things:

EndpointWhat it returnsCost
POST /v1/trust-check
Paid (real evaluation)
Live composed evaluation. Each factor has real: true. Recommendation is one of allow / warn / block. Use this for production agent decisions. $0.001 USDC/call settled via x402 on Base
POST /v1/trust-check/preview
Free sample fixtures
Sample fixtures only — NOT a real evaluation. Every factor has real: false. Recommendation is prefixed sample- (sample-allow, sample-warn, sample-block). Response carries _preview: true. Intended for CI / shape testing / development. Do NOT use the preview verdict to gate real swaps. Free, no auth, no payment
Why we built it this way. The free preview lets you wire up your agent and verify the response shape without spending USDC. But because the verdict is a fixture, we mark it explicitly so it cannot be cropped or re-served as a real risk assessment. If you see a recommendation prefixed sample- or a factor with real: false, you're looking at a fixture, not an evaluation. Conversely, on the paid endpoint a sample- recommendation or real: false factor would indicate a server-side defect — treat it as an error, not a verdict.

REST API

Paid: real evaluation

curl -sS https://swap.paladinfi.com/v1/trust-check \
  -H 'content-type: application/json' \
  -d '{
    "chainId": 8453,
    "address": "0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48"
  }'
# Returns 402 with payment-required headers. Use an x402-aware client
# (e.g. @x402/fetch + wallet) to retry; settles $0.001 USDC on Base.

Free: sample fixtures (NOT real)

curl -sS https://swap.paladinfi.com/v1/trust-check/preview \
  -H 'content-type: application/json' \
  -d '{
    "chainId": 8453,
    "address": "0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48"
  }'
# Returns 200 with a sample fixture. Recommendation is "sample-allow"/
# "sample-warn"/"sample-block"; every factor has real:false; response
# includes _preview:true. Useful for CI; DO NOT use for production verdicts.

Sample paid response (Base USDC contract — verified live)

{
  "address": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
  "chainId": 8453,
  "trust": {
    "risk_score": 0,
    "recommendation": "allow",
    "factors": [
      {"source": "ofac",            "signal": "not_listed",            "details": ""},
      {"source": "paladin.anomaly", "signal": "address_kind_contract", "details": "eth_getCode = non-empty"},
      {"source": "goplus",          "signal": "trust_list",            "details": "GoPlus trust list (curated)"},
      {"source": "etherscan_source","signal": "verified",              "details": "Verified as FiatTokenProxy"},
      {"source": "etherscan_source","signal": "proxy",                 "details": "Proxy contract"}
    ],
    "version": "1.0"
  }
}
# Note: paid responses omit the per-factor `real` field (implicit true);
# preview responses include real:false explicitly + a `_preview: true` marker.
# Number of factors per response varies (typically 3–5) depending on which
# anomaly + GoPlus + Etherscan signals fire for the queried address.

Plugins

The same trust-check API, packaged as a drop-in tool for two agent frameworks:

Pre-sign safety (paid mode)

When using @paladinfi/eliza-plugin-trust ≥ 0.1.0 or @paladinfi/agentkit-actions ≥ 0.1.0, the paid path validates the server's 402 challenge against hard-coded constants before the wallet signs anything. Specifically:

If any field deviates, the call aborts client-side and the wallet never signs. A compromised server cannot redirect a signed authorization to a different recipient, asset, or chain.

If you're rolling your own x402 client (not using one of the plugins above), you are responsible for replicating these checks yourself before signing the EIP-3009 authorization. The constants above are the canonical values your client should validate against. They are versioned with the API: any breaking rotation (e.g., a new treasury address) will be announced on /health and in the changelog ahead of cut-over, so unmaintained DIY clients fail closed rather than silently signing under stale assumptions.

Coverage caveats

Pricing