Curated checks across up to 7 dimensions. ECDSA-signed fact profiles. No score, no opinion, just verifiable evidence.
Same ECDSA signing and JWKS verification as the attestation endpoint.
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. 36 checks across stablecoins (USDC and USDT), governance tokens, NFTs, and staking positions, each signed with ECDSA P-256.
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" }'
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.
Optional solanaWallet adds USDC on Solana. Optional xrplWallet adds RLUSD + USDC on XRP Ledger. Optional bitcoinWallet adds native BTC balance check. Up to 40 checks total.
Runs curated on-chain checks against a single wallet and returns an ECDSA-signed trust profile with boolean facts across up to 7 dimensions.
| 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
}
},
"summary": {
"totalChecks": 17,
"totalPassed": 5,
"totalFailed": 12,
"dimensionsWithActivity": 3,
"dimensionsChecked": 4
},
"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": 17, "totalPassed": 5, "totalFailed": 12 } },
"sig": "MEUCIQ...",
"kid": "insumer-attest-v1"
},
{
"trust": { "id": "TRST-3B7C9", "wallet": "0xAb58...eC9B", "dimensions": { /* ... */ },
"summary": { "totalChecks": 17, "totalPassed": 2, "totalFailed": 15 } },
"sig": "MEQCIAo...",
"kid": "insumer-attest-v1"
},
{
"trust": { "id": "TRST-D41E6", "wallet": "0xd8dA6BF26964aF9D7eEd9e03E53415D37aA96045", "dimensions": { /* ... */ },
"summary": { "totalChecks": 20, "totalPassed": 7, "totalFailed": 13 } },
"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