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
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.
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 }
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 -X POST https://api.insumermodel.com/v1/trust \ -H "Content-Type: application/json" \ -H "x-api-key: YOUR_API_KEY" \ -d '{ "wallet": "0xd8dA6BF26964aF9D7eEd9e03E53415D37aA96045" }'
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.
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.
UNI, AAVE, ARB, OP, ENS, LDO, SKY, COMP governance tokens. Presence detection.
BAYC, Pudgy Penguins, Wrapped CryptoPunks. NFT held.
stETH, wstETH, rETH, cbETH, weETH liquid staking positions. Presence detection.
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.)
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.)
Aave v3 aUSDC and aUSDT receipts across 13 chains, sUSDS, sDAI, and listed Morpho USDC vaults on Ethereum and Base. Presence detection.
cbBTC, WBTC, tBTC across Ethereum, Base, Arbitrum, Optimism, Polygon, Avalanche and Robinhood Chain. Presence detection.
ENS .eth names on Ethereum and Basenames on Base. NFT held.
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.
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).
| Parameter | Type | Description |
|---|---|---|
| wallet | string required | EVM wallet address (0x...). |
| solanaWallet | string optional | Solana wallet address. Adds the 14-check solana dimension and evaluates the Solana rows in institutional_stablecoins. |
| xrplWallet | string optional | XRPL wallet address (r-address). Adds the xrpl dimension (RLUSD, USDC, OUSG) and evaluates EURCV on XRPL. |
| bitcoinWallet | string optional | Bitcoin address (P2PKH, P2SH, bech32, or Taproot). Adds the bitcoin dimension (native BTC). |
| tronWallet | string optional | Tron T-address. Adds the tron dimension (USDT, USD1, WBTC). |
| stellarWallet | string optional | Stellar G-address. Adds no dimension; evaluates USDC and BENJI on Stellar inside institutional_stablecoins. |
| suiWallet | string optional | Sui address (0x + 64 hex). Adds no dimension; evaluates USDC on Sui (institutional_stablecoins) and USDY on Sui (tokenized_treasuries). |
| proof | string optional | Set 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. |
curl -X POST https://api.insumermodel.com/v1/trust \ -H "Content-Type: application/json" \ -H "x-api-key: YOUR_API_KEY" \ -d '{ "wallet": "0x1601843c5E9bC251A3272907010AFa41Fa18347E" }'
{
"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.
proof: "merkle": 6 credits ($0.24).
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.
| Parameter | Type | Description |
|---|---|---|
| wallets | array required | Array of 1-10 objects, each with wallet (required) and the same optional solanaWallet, xrplWallet, bitcoinWallet, tronWallet, stellarWallet, suiWallet as the single endpoint. |
| proof | string optional | Set to "merkle" for Merkle proofs. Applies to all wallets in the batch. |
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" } ] }'
{
"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"
}
}
See how this endpoint fits the full API → API Topology