<!-- Markdown copy of https://insumermodel.com/developers/trust/ for agents. -->

> One call returns signed facts about a wallet's holdings in ten dimensions: 155 checks on 27 chains, from stablecoins to account code. Batch up to 10.
>
> Page: https://insumermodel.com/developers/trust/ · API: https://api.insumermodel.com · OpenAPI: https://insumermodel.com/openapi.json · Index for agents: https://insumermodel.com/llms.txt

[Developers](https://insumermodel.com/developers/) [API Map](https://insumermodel.com/workbench/) › Wallet Trust Profiles

# 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](https://insumermodel.com/developers/verification/), 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 →](https://insumermodel.com/developers/api-reference/#auth)

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

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

[View on Smithery](https://smithery.ai/skills/douglasborthwick/insumer-skill) · [GitHub repo](https://github.com/insumerapi/insumer-skill)

## 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

```javascript
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 }
```

```bash
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).

| 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. |

Request:

```bash
curl -X POST https://api.insumermodel.com/v1/trust \
  -H "Content-Type: application/json" \
  -H "x-api-key: YOUR_API_KEY" \
  -d '{
    "wallet": "0x1601843c5E9bC251A3272907010AFa41Fa18347E"
  }'
```

```json
{
  "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](https://insumermodel.com/developers/verification/) 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](https://insumermodel.com/developers/verification/#what-a-result-shows). `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.

| 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. |

Request:

```bash
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" }
    ]
  }'
```

```json
{
  "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.

## From the blog

[Wallet Trust Profiles: Agent-to-Agent Trust Without Scores or Opinions](https://insumermodel.com/blog/wallet-trust-profiles-agent-to-agent-trust.html) [Wallet Trust Scores: Verify Any Wallet with Wallet Auth (Python, curl, JS)](https://insumermodel.com/blog/wallet-trust-score-api.html) [Wallet Auth for AI Agents: Python + LangChain Tutorial](https://insumermodel.com/blog/wallet-authentication-ai-agents.html)

See how this endpoint fits the full API → [API Topology](https://insumermodel.com/workbench/)

[← Verification](https://insumermodel.com/developers/verification/) [Next: Compliance →](https://insumermodel.com/developers/compliance/)
