Menu

Wallet Trust Profiles

44 curated checks across 25 chains in 5 dimensions — up to 49 across 27 chains in 9 dimensions with optional Solana/XRPL/Bitcoin/Tron wallets. ECDSA-signed fact profiles. No score, no opinion, just verifiable evidence.

Same ECDSA signing and JWKS verification as the attestation endpoint.

Auth: X-API-Key, or Authorization: Wallet for EVM agents who bought their key via /v1/keys/buy and hold the Insumer Access pass. Accepted on both POST /v1/trust and POST /v1/trust/batch. See Authentication →

Building this in Claude Code? Install the wallet auth skill and Claude will write correct, signature-verifying integration code on the first try.

smithery skill add douglasborthwick/insumer-skill

View on Smithery · GitHub repo

What this does

Generate a structured on-chain fact profile for any EVM wallet. 44 base checks across 25 chains in 5 dimensions — stablecoins (USDC and USDT), governance tokens, NFTs, staking positions, and institutional stablecoins — each signed with ECDSA P-256. Optional Solana, XRPL, Bitcoin, and Tron wallets add dimensions, up to 49 checks across 27 chains in 9 dimensions.

Generate a trust profile

Node.js
const res = await fetch(
  "https://api.insumermodel.com/v1/trust",
  {
    method: "POST",
    headers: {
      "Content-Type": "application/json",
      "x-api-key": "YOUR_API_KEY"
    },
    body: JSON.stringify({
      wallet: "0xd8dA6BF26964aF9D7eEd9e03E53415D37aA96045"
    })
  }
);
const { data } = await res.json();
console.log(data.trust.id);         // TRST-XXXXX
console.log(data.trust.dimensions); // { stablecoins, governance, nfts, staking }
Python
import requests

res = requests.post(
    "https://api.insumermodel.com/v1/trust",
    headers={
        "Content-Type": "application/json",
        "x-api-key": "YOUR_API_KEY"
    },
    json={
        "wallet": "0xd8dA6BF26964aF9D7eEd9e03E53415D37aA96045"
    }
)
data = res.json()["data"]
print(data["trust"]["id"])         # TRST-XXXXX
print(data["trust"]["dimensions"]) # { stablecoins, governance, nfts, staking }
curl
curl -X POST https://api.insumermodel.com/v1/trust \
  -H "Content-Type: application/json" \
  -H "x-api-key: YOUR_API_KEY" \
  -d '{
    "wallet": "0xd8dA6BF26964aF9D7eEd9e03E53415D37aA96045"
  }'

Five base dimensions, up to nine

44 base checks across 25 chains in 5 dimensions; optional wallets take it up to 49 across 27 in 9. Each check returns a boolean presence fact. No balances exposed by default. Optional Merkle proofs for trustless verification.

Stablecoins

26 checks

USDC across Ethereum, Base, Polygon, Arbitrum, Optimism, Avalanche, BNB Chain, Sonic, World Chain, Linea, ZKsync, Celo, Sei, Plume, Unichain, Ink. USDT across Ethereum, Sonic, Linea, ZKsync, Gnosis, Mantle, Scroll, Celo, Soneium, opBNB. Balance > 0 presence detection.

Governance

4 checks

UNI, AAVE, ARB, OP governance tokens. Balance > 0.

NFTs

3 checks

BAYC, Pudgy Penguins, Wrapped CryptoPunks. Balance > 0.

Staking

3 checks

stETH, rETH, cbETH liquid staking positions. Balance > 0.

Institutional Stablecoins

8 checks

EURCV, USDCV, USDC, and BENJI across Ethereum, Solana, XRPL, Stellar, and Sui. Balance > 0. (Solana/XRPL/Stellar/Sui checks evaluate when the matching wallet is supplied.)

Optional solanaWallet adds USDC on Solana. Optional xrplWallet adds RLUSD + USDC on XRP Ledger. Optional bitcoinWallet adds native BTC balance check. Optional tronWallet adds USDT-TRC20. The institutional stablecoins dimension is always included; optional stellarWallet and suiWallet let its Stellar and Sui checks evaluate (USDC on Stellar, BENJI on Stellar, USDC on Sui). Together the optional chains take the profile up to 49 checks across 27 chains in 9 dimensions.

Endpoint reference

POST /v1/trust

Generate Trust Profile

Runs curated on-chain checks against a single wallet and returns an ECDSA-signed trust profile with boolean facts across 5 base dimensions (up to 9 with optional Solana/XRPL/Bitcoin/Tron wallets).

ParameterTypeDescription
walletstring requiredEVM wallet address (0x...).
solanaWalletstring optionalSolana wallet address. Adds USDC on Solana check.
xrplWalletstring optionalXRPL wallet address (r-address). Adds RLUSD + USDC on XRP Ledger checks.
bitcoinWalletstring optionalBitcoin address (P2PKH, P2SH, bech32, or Taproot). Adds Bitcoin Holdings dimension.
proofstring optionalSet to "merkle" for Merkle storage proofs on RPC chains. Doubles credit cost.
Request
curl -X POST https://api.insumermodel.com/v1/trust \
  -H "Content-Type: application/json" \
  -H "x-api-key: YOUR_API_KEY" \
  -d '{
    "wallet": "0xd8dA6BF26964aF9D7eEd9e03E53415D37aA96045"
  }'
Response
{
  "ok": true,
  "data": {
    "trust": {
      "id": "TRST-8F2A1",
      "wallet": "0xd8dA...6045",
      "conditionSetVersion": "v1",
      "dimensions": {
        "stablecoins": {
          "checks": [
            { "label": "USDC on Ethereum", "chainId": 1, "met": true,
              "evaluatedCondition": { "type": "token_balance", "chainId": 1, "contractAddress": "0xA0b8...eB48", "operator": "gt", "threshold": 0, "decimals": 6 },
              "conditionHash": "0x3a7f...", "blockNumber": "0x12f4a80", "blockTimestamp": "2026-02-27T12:00:00.000Z" },
            { "label": "USDC on Base", "chainId": 8453, "met": false,
              "evaluatedCondition": { "type": "token_balance", "chainId": 8453, "contractAddress": "0x833...4eC7", "operator": "gt", "threshold": 0, "decimals": 6 },
              "conditionHash": "0x9b2e...", "blockNumber": "0x1a2b3c", "blockTimestamp": "2026-02-27T12:00:00.000Z" },
            /* ... 14 more USDC chains */
            { "label": "USDT on Ethereum", "chainId": 1, "met": true,
              "evaluatedCondition": { "type": "token_balance", "chainId": 1, "contractAddress": "0xdAC1...1ec7", "operator": "gt", "threshold": 0, "decimals": 6 },
              "conditionHash": "0x4c1d...", "blockNumber": "0x12f4a80", "blockTimestamp": "2026-02-27T12:00:00.000Z" },
            /* ... 9 more USDT chains */
          ],
          "passCount": 5, "failCount": 21, "total": 26
        },
        "governance": {
          "checks": [
            { "label": "UNI", "chainId": 1, "met": true, "conditionHash": "0x..." },
            /* ... AAVE, ARB, OP */
          ],
          "passCount": 2, "failCount": 2, "total": 4
        },
        "nfts": {
          "checks": [/* BAYC, Pudgy Penguins, Wrapped CryptoPunks */],
          "passCount": 0, "failCount": 3, "total": 3
        },
        "staking": {
          "checks": [/* stETH, rETH, cbETH */],
          "passCount": 1, "failCount": 2, "total": 3
        },
        "institutional_stablecoins": {
          "checks": [/* EURCV, USDCV, USDC, BENJI across Ethereum, Solana, XRPL, Stellar, Sui */],
          "passCount": 0, "failCount": 8, "total": 8
        }
      },
      "summary": {
        "totalChecks": 44,
        "totalPassed": 8,
        "totalFailed": 36,
        "dimensionsWithActivity": 3,
        "dimensionsChecked": 5
      },
      "profiledAt": "2026-02-27T12:00:00Z",
      "expiresAt": "2026-02-27T12:30:00Z"
    },
    "sig": "MEUCIQ...",
    "kid": "insumer-attest-v1"
  },
  "meta": { "creditsRemaining": 47, "creditsCharged": 3, "version": "1.0", "timestamp": "2026-02-27T12:00:01.000Z" }
}

Verify signatures: Trust profile responses include sig and kid fields. Verify them using the same ECDSA P-256 flow described in On-Chain Verification.

XRPL checks: When xrplWallet is provided, RLUSD and USDC checks are added. XRPL results include ledgerIndex and ledgerHash instead of blockNumber/blockTimestamp, plus trustLineState: { frozen }. Frozen trust lines return met: false.

Pricing: 3 credits per wallet ($0.12). With proof: "merkle": 6 credits ($0.24).
POST /v1/trust/batch

Batch Trust Profiles

Generate trust profiles for up to 10 wallets in a single request. Shared block number fetches make batch calls 5-8x faster than sequential single calls. Supports partial success.

ParameterTypeDescription
walletsarray requiredArray of 1-10 objects, each with wallet (required), solanaWallet (optional), and xrplWallet (optional).
proofstring optionalSet to "merkle" for Merkle proofs. Applies to all wallets in the batch.
Request
curl -X POST https://api.insumermodel.com/v1/trust/batch \
  -H "Content-Type: application/json" \
  -H "x-api-key: YOUR_API_KEY" \
  -d '{
    "wallets": [
      { "wallet": "0xd8dA6BF26964aF9D7eEd9e03E53415D37aA96045" },
      { "wallet": "0xAb5801a7D398351b8bE11C439e05C5B3259aeC9B" },
      { "wallet": "0x1f9090aaE28b8a3dCeaDf281B0F12828e676c326" }
    ]
  }'
Response
{
  "ok": true,
  "data": {
    "results": [
      {
        "trust": { "id": "TRST-8F2A1", "wallet": "0xd8dA...6045", "dimensions": { /* ... */ },
          "summary": { "totalChecks": 44, "totalPassed": 5, "totalFailed": 39 } },
        "sig": "MEUCIQ...",
        "kid": "insumer-attest-v1"
      },
      {
        "trust": { "id": "TRST-3B7C9", "wallet": "0xAb58...eC9B", "dimensions": { /* ... */ },
          "summary": { "totalChecks": 44, "totalPassed": 2, "totalFailed": 42 } },
        "sig": "MEQCIAo...",
        "kid": "insumer-attest-v1"
      },
      {
        "trust": { "id": "TRST-D41E6", "wallet": "0xd8dA6BF26964aF9D7eEd9e03E53415D37aA96045", "dimensions": { /* ... */ },
          "summary": { "totalChecks": 44, "totalPassed": 7, "totalFailed": 37 } },
        "sig": "MEYCIQDi...",
        "kid": "insumer-attest-v1"
      }
    ],
    "summary": {
      "requested": 3,
      "succeeded": 3,
      "failed": 0
    }
  },
  "meta": {
    "creditsRemaining": 38,
    "creditsCharged": 9,
    "version": "1.0",
    "timestamp": "2026-02-27T12:00:02.000Z"
  }
}
Pricing: 3 credits per wallet ($0.12 each). The entire batch counts as 1 request toward rate limits. Shared block fetches yield 5-8x faster throughput than sequential calls.

See how this endpoint fits the full API → API Topology