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
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.
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 }
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 -X POST https://api.insumermodel.com/v1/trust \ -H "Content-Type: application/json" \ -H "x-api-key: YOUR_API_KEY" \ -d '{ "wallet": "0xd8dA6BF26964aF9D7eEd9e03E53415D37aA96045" }'
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.
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.
UNI, AAVE, ARB, OP governance tokens. Balance > 0.
BAYC, Pudgy Penguins, Wrapped CryptoPunks. Balance > 0.
stETH, rETH, cbETH liquid staking positions. Balance > 0.
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.
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).
| Parameter | Type | Description |
|---|---|---|
| wallet | string required | EVM wallet address (0x...). |
| solanaWallet | string optional | Solana wallet address. Adds USDC on Solana check. |
| xrplWallet | string optional | XRPL wallet address (r-address). Adds RLUSD + USDC on XRP Ledger checks. |
| bitcoinWallet | string optional | Bitcoin address (P2PKH, P2SH, bech32, or Taproot). Adds Bitcoin Holdings dimension. |
| proof | string optional | Set to "merkle" for Merkle storage proofs on RPC chains. 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": "0xd8dA6BF26964aF9D7eEd9e03E53415D37aA96045" }'
{
"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.
proof: "merkle": 6 credits ($0.24).
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.
| Parameter | Type | Description |
|---|---|---|
| wallets | array required | Array of 1-10 objects, each with wallet (required), solanaWallet (optional), and xrplWallet (optional). |
| 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": "0xd8dA6BF26964aF9D7eEd9e03E53415D37aA96045" }, { "wallet": "0xAb5801a7D398351b8bE11C439e05C5B3259aeC9B" }, { "wallet": "0x1f9090aaE28b8a3dCeaDf281B0F12828e676c326" } ] }'
{
"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"
}
}
See how this endpoint fits the full API → API Topology