Wallet Trust Profiles

155 curated checks across 27 chains in 10 dimensions, up to 176 across 29 chains in 14 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, including the post-quantum signature (pqSig/pqKid).

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.

git clone https://github.com/insumerapi/insumer-skill.git ~/.claude/skills/insumer

View on Smithery · GitHub repo

What this does

Generate a structured on-chain fact profile for any EVM wallet. 155 base checks across 27 chains in 10 dimensions: stablecoins, governance tokens, NFTs, staking positions, institutional stablecoins, tokenized treasuries, stablecoin deposits, wrapped bitcoin, names, and account code, each a presence check signed with ECDSA P-256. Optional Solana, XRPL, Bitcoin, and Tron wallets add dimensions, up to 176 checks across 29 chains in 14 dimensions. Every token row is admitted on an official issuer deployment and at least $1M live supply.

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, institutional_stablecoins, tokenized_treasuries, stablecoin_deposits, wrapped_bitcoin, names, account }
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, institutional_stablecoins, tokenized_treasuries, stablecoin_deposits, wrapped_bitcoin, names, account }
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"
  }'

Ten base dimensions, up to fourteen

155 base checks across 27 chains in 10 dimensions; optional wallets take it up to 176 across 29 in 14. Each check returns a boolean presence fact: a token balance above zero, an NFT held, or code present at the wallet address. No balances exposed by default. Optional Merkle proofs for EVM token rows.

Stablecoins

52 checks

USDC across 17 chains (Ethereum, Base, Polygon, Arbitrum, Optimism, Avalanche, BNB Chain, Sonic, World Chain, Linea, ZKsync, Celo, Sei, Plume, Unichain, Ink, Arc) and USDT across 10 (Ethereum, Sonic, Linea, ZKsync, Gnosis, Mantle, Scroll, Celo, Soneium, opBNB), plus OUSD (Open USD), PYUSD, USDG, USD1, RLUSD, USDS, DAI and EURC on their main chains. Presence detection.

Governance

8 checks

UNI, AAVE, ARB, OP, ENS, LDO, SKY, COMP governance tokens. Presence detection.

NFTs

3 checks

BAYC, Pudgy Penguins, Wrapped CryptoPunks. NFT held.

Staking

5 checks

stETH, wstETH, rETH, cbETH, weETH liquid staking positions. Presence detection.

Institutional Stablecoins

8 checks

EURCV and USDCV on Ethereum and Solana; EURCV on XRPL; USDC and BENJI on Stellar; USDC on Sui. Presence detection. (Solana/XRPL/Stellar/Sui checks evaluate when the matching wallet is supplied.)

Tokenized Treasuries

16 checks

BUIDL, USYC, OUSG, USTB, USDY across Ethereum, Arbitrum, Avalanche, BNB Chain, Optimism, Polygon, Sei and Sui. Presence detection. (USDY on Sui evaluates when suiWallet is supplied.)

Stablecoin Deposits

39 checks

Aave v3 aUSDC and aUSDT receipts across 13 chains, sUSDS, sDAI, and listed Morpho USDC vaults on Ethereum and Base. Presence detection.

Wrapped Bitcoin

12 checks

cbBTC, WBTC, tBTC across Ethereum, Base, Arbitrum, Optimism, Polygon, Avalanche and Robinhood Chain. Presence detection.

Names

2 checks

ENS .eth names on Ethereum and Basenames on Base. NFT held.

Account

10 checks

Two per chain on Ethereum, Base, Arbitrum, Optimism and Polygon: contract code present (a smart-contract wallet, a protocol, a token) and EIP-7702 delegation present (a key that delegated execution). Exclusive per chain; a plain key reads false on both. Which contract is never named. Code present.

Optional solanaWallet adds a 14-check Solana dimension: USDC, OUSD, PYUSD, USDG, USD1, USDS, EURC, BUIDL, USDY, cbBTC, WBTC, tBTC, jitoSOL, mSOL. Optional xrplWallet adds RLUSD, USDC and OUSG on XRP Ledger. Optional bitcoinWallet adds a native BTC presence check. Optional tronWallet adds USDT, USD1 and WBTC on Tron. Stellar and Sui add no dimension: optional stellarWallet and suiWallet let the Stellar and Sui rows inside the base dimensions evaluate (USDC and BENJI on Stellar; USDC and USDY on Sui). Together the optional chains take the profile up to 176 checks across 29 chains in 14 dimensions. The signed conditionSetVersion is "2026-10-08" on every key version; it names the check list that was run and moves whenever a row is added or removed. Log it; never reject on it.

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 10 base dimensions (up to 14 with optional Solana/XRPL/Bitcoin/Tron wallets).

ParameterTypeDescription
walletstring requiredEVM wallet address (0x...).
solanaWalletstring optionalSolana wallet address. Adds the 14-check solana dimension and evaluates the Solana rows in institutional_stablecoins.
xrplWalletstring optionalXRPL wallet address (r-address). Adds the xrpl dimension (RLUSD, USDC, OUSG) and evaluates EURCV on XRPL.
bitcoinWalletstring optionalBitcoin address (P2PKH, P2SH, bech32, or Taproot). Adds the bitcoin dimension (native BTC).
tronWalletstring optionalTron T-address. Adds the tron dimension (USDT, USD1, WBTC).
stellarWalletstring optionalStellar G-address. Adds no dimension; evaluates USDC and BENJI on Stellar inside institutional_stablecoins.
suiWalletstring optionalSui address (0x + 64 hex). Adds no dimension; evaluates USDC on Sui (institutional_stablecoins) and USDY on Sui (tokenized_treasuries).
proofstring optionalSet to "merkle" for EIP-1186 storage proofs. EVM token rows carry a storage proof when the token's balance slot can be discovered; rows whose balance is computed rather than stored (Aave aTokens, BUIDL) and tokens with non-standard storage layouts are declined with available: false and a stated reason; NFT and non-EVM rows are declined; a check that was not evaluated carries no proof key at all. The premium is refunded whenever no proof is delivered. 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": "0x1601843c5E9bC251A3272907010AFa41Fa18347E"
  }'
Response
{
  "ok": true,
  "data": {
    "trust": {
      "id": "TRST-81224",
      "wallet": "0x1601...347E",
      "conditionSetVersion": "2026-10-08",
      "dimensions": {
        "stablecoins": {
          "checks": [
            { "label": "USDC on Ethereum", "chainId": 1, "met": false,
              "evaluatedCondition": { "type": "token_balance", "chainId": 1, "contractAddress": "0xA0b8...eB48", "operator": "gt", "threshold": 0, "decimals": 6 },
              "conditionHash": "0x2725...", "blockNumber": "0x18eea5a", "blockTimestamp": "2026-10-07T21:52:59.000Z" },
            { "label": "USDC on Base", "chainId": 8453, "met": true,
              "evaluatedCondition": { "type": "token_balance", "chainId": 8453, "contractAddress": "0x8335...2913", "operator": "gt", "threshold": 0, "decimals": 6 },
              "conditionHash": "0x39c2...", "blockNumber": "0x31e312e", "blockTimestamp": "2026-10-07T21:53:03.000Z" },
            /* ... 15 more USDC chains */
            { "label": "USDT on Ethereum", "chainId": 1, "met": false,
              "evaluatedCondition": { "type": "token_balance", "chainId": 1, "contractAddress": "0xdAC1...1ec7", "operator": "gt", "threshold": 0, "decimals": 6 },
              "conditionHash": "0x76e3...", "blockNumber": "0x18eea5a", "blockTimestamp": "2026-10-07T21:52:59.000Z" },
            /* ... 9 more USDT chains */
            /* ... 25 more rows: DAI, EURC, OUSD, PYUSD, RLUSD, USD1, USDG, USDS */
          ],
          "passCount": 6, "failCount": 46, "notEvaluatedCount": 0, "total": 52
        },
        "governance": {
          "checks": [
            { "label": "UNI on Ethereum", "chainId": 1, "met": false,
              "evaluatedCondition": { "type": "token_balance", "chainId": 1, "contractAddress": "0x1f98...F984", "operator": "gt", "threshold": 0, "decimals": 18 },
              "conditionHash": "0xef25...", "blockNumber": "0x18eea5a", "blockTimestamp": "2026-10-07T21:52:59.000Z" },
            /* ... AAVE, ARB, OP, COMP, ENS, LDO, SKY */
          ],
          "passCount": 0, "failCount": 8, "notEvaluatedCount": 0, "total": 8
        },
        "nfts": {
          "checks": [/* BAYC, Pudgy Penguins, Wrapped CryptoPunks */],
          "passCount": 0, "failCount": 3, "notEvaluatedCount": 0, "total": 3
        },
        "staking": {
          "checks": [/* stETH, rETH, cbETH, weETH, wstETH */],
          "passCount": 0, "failCount": 5, "notEvaluatedCount": 0, "total": 5
        },
        "institutional_stablecoins": {
          "checks": [
            /* EURCV and USDCV on Ethereum, evaluated */
            { "label": "EURCV on Solana", "chainId": "solana", "met": false,
              "evaluatedCondition": { "type": "token_balance", "chainId": "solana", "contractAddress": "DghpMk...GG52", "operator": "gt", "threshold": 0, "decimals": 2 },
              "conditionHash": "0x279f...", "evaluated": false, "reason": "wallet_not_provided", "requires": "solanaWallet" },
            /* ... 5 more rows on Solana, XRPL, Stellar and Sui, each evaluated: false because that wallet was not supplied */
          ],
          "passCount": 0, "failCount": 2, "notEvaluatedCount": 6, "total": 8
        },
        "tokenized_treasuries": {
          "checks": [/* BUIDL on 6 chains and BUIDL-I, USDY on 5, USYC on 2, OUSG, USTB; USDY on Sui carries evaluated: false here */],
          "passCount": 0, "failCount": 15, "notEvaluatedCount": 1, "total": 16
        },
        "stablecoin_deposits": {
          "checks": [
            { "label": "sUSDS on Ethereum", "chainId": 1, "met": true,
              "evaluatedCondition": { "type": "token_balance", "chainId": 1, "contractAddress": "0xa393...7fbD", "operator": "gt", "threshold": 0, "decimals": 18 },
              "conditionHash": "0x529c...", "blockNumber": "0x18eea5a", "blockTimestamp": "2026-10-07T21:52:59.000Z" },
            /* ... 38 more rows: Aave v3 aUSDC and aUSDT receipts, sUSDS, sDAI, listed Morpho USDC vaults */
          ],
          "passCount": 5, "failCount": 34, "notEvaluatedCount": 0, "total": 39
        },
        "wrapped_bitcoin": {
          "checks": [/* WBTC on 5 chains, cbBTC on 4, tBTC on 3 */],
          "passCount": 0, "failCount": 12, "notEvaluatedCount": 0, "total": 12
        },
        "names": {
          "checks": [/* ENS .eth names on Ethereum, Basenames on Base */],
          "passCount": 0, "failCount": 2, "notEvaluatedCount": 0, "total": 2
        },
        "account": {
          "checks": [
            { "label": "Contract code on Ethereum", "chainId": 1, "met": true,
              "evaluatedCondition": { "type": "account_code", "chainId": 1, "expect": "contract", "operator": "code_state" },
              "conditionHash": "0xfd7b...", "blockNumber": "0x18eea5a", "blockTimestamp": "2026-10-07T21:52:59.000Z" },
            { "label": "EIP-7702 delegation on Ethereum", "chainId": 1, "met": false,
              "evaluatedCondition": { "type": "account_code", "chainId": 1, "expect": "eip7702", "operator": "code_state" },
              "conditionHash": "0xdef6...", "blockNumber": "0x18eea5a", "blockTimestamp": "2026-10-07T21:52:59.000Z" },
            /* ... 8 more rows: the same pair on Base, Arbitrum, Optimism and Polygon */
          ],
          "passCount": 5, "failCount": 5, "notEvaluatedCount": 0, "total": 10
        }
      },
      "summary": {
        "totalChecks": 155,
        "totalPassed": 16,
        "totalFailed": 132,
        "totalNotEvaluated": 7,
        "dimensionsWithActivity": 3,
        "dimensionsChecked": 10
      },
      "profiledAt": "2026-10-07T21:53:04.795Z",
      "expiresAt": "2026-10-07T22:23:04.795Z"
    },
    "sig": "JF3g6BPYwxrawKel...",
    "kid": "insumer-trust-v2",
    "pqSig": "wlT8yqIk5TOO7Me6...",
    "pqKid": "insumer-trust-pq1"
  },
  "meta": { "creditsRemaining": 850, "creditsCharged": 3, "version": "1.0", "timestamp": "2026-10-07T21:53:05.439Z" }
}

Unevaluated checks: a curated check on Solana, XRPL, Stellar or Sui whose wallet parameter you did not supply stays in the signed profile with evaluated: false, reason: "wallet_not_provided" and requires naming the parameter. It carries no anchor and is counted in notEvaluatedCount and totalNotEvaluated, never in the fail counts. Do not read it as "not met."

Dimension order: the dimension keys come in a fixed order: the ten base dimensions in the order of the table above, then any of solana, xrpl, bitcoin and tron that were switched on, in that order; the same order for every wallet, on batch too. Readers may still look dimensions up by name. The order of checks inside a dimension is stable and matches the table above. Each account row’s evaluatedCondition is {type: account_code, chainId, expect, operator: code_state}, the same shape as the /v1/attest condition, so its conditionHash equals that condition’s; in proof mode account rows carry available: false with a reason pointing at /v1/attest.

Verify signatures: Trust profile responses include sig and kid fields. Verify them using the same ECDSA P-256 flow described in On-Chain Verification. POST /v1/trust and POST /v1/trust/batch responses also carry pqSig and pqKid (ML-DSA-65) under insumer-trust-pq1, resolved from the same JWKS as an RFC 9964 AKP entry.

XRPL checks: When xrplWallet is provided, RLUSD, USDC and OUSG 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. Every wallet in the batch is read at the same block on each EVM chain. Supports partial success.

ParameterTypeDescription
walletsarray requiredArray of 1-10 objects, each with wallet (required) and the same optional solanaWallet, xrplWallet, bitcoinWallet, tronWallet, stellarWallet, suiWallet as the single endpoint.
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": "0x1601843c5E9bC251A3272907010AFa41Fa18347E", "solanaWallet": "DXK4yMpigbTSqv33nJk1tJucXB4E3rDmTXn3yZmiFAXt" },
      { "wallet": "0xBBBBBbbBBb9cC5e90e3b3Af64bdAF62C37EEFFCb" },
      { "wallet": "0xB561B1e79E448bC3A7aC4Dc377EeECBc99505f60" }
    ]
  }'
Response
{
  "ok": true,
  "data": {
    "results": [
      {
        "trust": { "id": "TRST-74167", "wallet": "0x1601...347E", "conditionSetVersion": "2026-10-08", "dimensions": { /* ... 11 dimensions */ },
          "summary": { "totalChecks": 169, "totalPassed": 17, "totalFailed": 147, "totalNotEvaluated": 5, "dimensionsWithActivity": 4, "dimensionsChecked": 11 } },
        "sig": "4Xypl4ass9TZ...",
        "kid": "insumer-trust-v2",
        "pqSig": "TrXZeKWtOiMZ...",
        "pqKid": "insumer-trust-pq1"
      },
      {
        "trust": { "id": "TRST-C7EA2", "wallet": "0xBBBB...FFCb", "conditionSetVersion": "2026-10-08", "dimensions": { /* ... 10 dimensions */ },
          "summary": { "totalChecks": 155, "totalPassed": 30, "totalFailed": 118, "totalNotEvaluated": 7, "dimensionsWithActivity": 7, "dimensionsChecked": 10 } },
        "sig": "jVwn0YACkn5+...",
        "kid": "insumer-trust-v2",
        "pqSig": "x9U9KJpFpDtB...",
        "pqKid": "insumer-trust-pq1"
      },
      {
        "trust": { "id": "TRST-CFD45", "wallet": "0xB561...5f60", "conditionSetVersion": "2026-10-08", "dimensions": { /* ... 10 dimensions */ },
          "summary": { "totalChecks": 155, "totalPassed": 5, "totalFailed": 143, "totalNotEvaluated": 7, "dimensionsWithActivity": 3, "dimensionsChecked": 10 } },
        "sig": "VFHD7D2z9nAa...",
        "kid": "insumer-trust-v2",
        "pqSig": "K6QNMraa1mOe...",
        "pqKid": "insumer-trust-pq1"
      }
    ],
    "summary": {
      "requested": 3,
      "succeeded": 3,
      "failed": 0
    }
  },
  "meta": {
    "creditsRemaining": 853,
    "creditsCharged": 9,
    "version": "1.0",
    "timestamp": "2026-10-07T21:53:03.926Z"
  }
}
Pricing: 3 credits per wallet ($0.12 each). The entire batch counts as 1 request toward rate limits.

See how this endpoint fits the full API → API Topology