One API call verifies token balances across 38 blockchains, NFT ownership across 34, and EAS attestations on 6. Every result is ECDSA-signed. Verify it client-side. No trust required. No country restriction: the API reads public chain state, so it works the same from anywhere.
Get a free API key. Replace YOUR_API_KEY. Run this.
AI agents: buy a key autonomously with USDC via POST /v1/keys/buy — no email required. EVM agents that hold the Insumer Access pass can then sign requests with Authorization: Wallet instead of X-API-Key on five endpoints (/v1/attest, /v1/trust, /v1/trust/batch, GET /v1/credits, /v1/credits/buy) — see Authentication.
// npm install node-fetch (or use native fetch in Node 18+) 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.dimensions); // { stablecoins, governance, nfts, staking, institutional_stablecoins }
import requests res = requests.post( "https://api.insumermodel.com/v1/trust", headers={"x-api-key": "YOUR_API_KEY"}, json={ "wallet": "0xd8dA6BF26964aF9D7eEd9e03E53415D37aA96045" } ) data = res.json()["data"] print(data["trust"]["dimensions"]) # { stablecoins, governance, nfts, staking, institutional_stablecoins }
curl -X POST https://api.insumermodel.com/v1/trust \ -H "Content-Type: application/json" \ -H "x-api-key: YOUR_API_KEY" \ -d '{ "wallet": "0xd8dA6BF26964aF9D7eEd9e03E53415D37aA96045" }' # Response: { "ok": true, "data": { "trust": { "dimensions": {...}, "summary": {...} }, "sig": "...", "kid": "..." }, "meta": {...} }
44 checks across 25 chains in 5 dimensions (up to 49 across 27 in 9 with optional Solana/XRPL/Bitcoin/Tron wallets). Just a wallet address — no contract or chain config needed. Both endpoints also run keyless via x402 pay-per-call ($0.05 per attestation, USDC on Base, Polygon, Arbitrum, or Solana), and attest covers agent standing: erc8004_agent registration and erc7710_delegation delegation validity. See trust profiles → | Custom conditions →
Every response is ECDSA-signed, with a post-quantum companion signature beside it. Verify it client-side so you don't have to trust the network.
// npm install insumer-verify import { verifyAttestation } from "insumer-verify"; // Pass the full API response envelope, not response.data const response = await res.json(); const result = await verifyAttestation(response, { jwksUrl: "https://api.insumermodel.com/v1/jwks" }); console.log(result.valid); // true — signature matches JWKS public key console.log(result.checks); // per-check breakdown (signature, conditionHashes, freshness, expiry)
# pip install cryptography requests import json, requests from cryptography.hazmat.primitives.asymmetric import ec, utils from cryptography.hazmat.primitives import hashes import base64 # V1-ONLY WALKTHROUGH. This covers kid insumer-attest-v1 responses # (pre-cutover keys) only. Keys minted today sign with kid # insumer-attest-v2 over a domain-separated, canonical preimage: # verify those with insumer-verify, or follow the verification # algorithm in the OpenAPI spec. insumer-verify handles all three kids. # insumer-verify 1.8.1+ also checks the pqSig/pqKid companion (ML-DSA-65). data = res.json()["data"] # res = your POST /v1/attest response assert data["kid"] == "insumer-attest-v1" # Fetch the public key from JWKS jwks = requests.get("https://api.insumermodel.com/v1/jwks").json() # Resolve the key by the kid on the response, never by position. key = next(k for k in jwks["keys"] if k["kid"] == data["kid"]) # Reconstruct the signed bytes. v1 signs exactly these four fields, # keys in their original order. Do NOT sort them. att = data["attestation"] signed = {"id": att["id"], "pass": att["pass"], "results": att["results"], "attestedAt": att["attestedAt"]} payload = json.dumps(signed, separators=(",", ":"), ensure_ascii=False).encode() # Decode the raw r||s signature and re-encode as DER for cryptography sig_bytes = base64.b64decode(data["sig"]) der_sig = utils.encode_dss_signature( int.from_bytes(sig_bytes[:32], "big"), int.from_bytes(sig_bytes[32:], "big")) # Build EC public key from JWK x/y coordinates x = base64.urlsafe_b64decode(key["x"] + "==") y = base64.urlsafe_b64decode(key["y"] + "==") pub = ec.EllipticCurvePublicNumbers(x=int.from_bytes(x, "big"), y=int.from_bytes(y, "big"), curve=ec.SECP256R1()).public_key() pub.verify(der_sig, payload, ec.ECDSA(hashes.SHA256())) # raises on mismatch print("Signature valid")
The JWKS publishes five entries over two keys. Three key IDs share the same P-256 key: insumer-attest-v1, insumer-attest-v2 and insumer-trust-v2, followed since September 2026 by two RFC 9964 AKP entries, insumer-attest-pq1 and insumer-trust-pq1, for the ML-DSA-65 post-quantum companion key (pqSig/pqKid on every response). Resolve the key by the kid on the response you are verifying, never by position; the kid also tells you which verification rules to apply. Static copy also at /.well-known/jwks.json. insumer-verify on npm →
In production: AsterPay KYA, SettlementWitness, and Revettr use InsumerAPI in production.
Every endpoint maps to this pipeline. Blockchain state in, signed attestation out.
38 chains via RPC
Tokens on 38, NFTs on 34, EAS on 6
ECDSA P-256 attestation
or ES256 JWT via JWKS
44–49 checks → 5–9 dimensions
Signed wallet profiles
Commerce, compliance
Access control, agent trust
POST /v1/attest → Read + Sign ·
POST /v1/trust → Read + Sign + Trust ·
POST /v1/acp/discount → Full pipeline
Get an API key and make your first attestation call in under 5 minutes. No setup required.
Start here →Boolean attestation across nine condition types: token balances, NFT ownership, EAS attestations, Farcaster identity, view calls, ratio rules, and agent standing. ECDSA-signed, optional Merkle proofs.
Verification docs →44 curated checks across 25 chains in 5 dimensions (up to 49 across 27 in 9 with optional chains). ECDSA-signed fact profiles for agent-to-agent trust. Single and batch endpoints.
Trust docs →Verify KYC attestations on-chain. Pre-configured templates for Coinbase Verifications, Gitcoin Passport, and Farcaster identity.
Compliance docs →ACP and UCP protocol integration. Verify holdings, generate discount codes, validate at checkout. Built for autonomous agents.
Commerce docs →Programmatic merchant setup. Create, verify domain, configure tokens and NFTs, publish to directory. No dashboard needed.
Onboarding docs →Complete reference for the core endpoints. Auth, response format, rate limits, and every parameter documented.
Full reference →Gate any API on wallet state using standard JWT bearer tokens. Compatible with any OAuth-compatible gateway or middleware. No blockchain knowledge required.
Wallet Auth docs →A fifth protocol module for Tether's Wallet Development Kit alongside Swap, Bridge, Lending, and Fiat. Pre-transaction condition checks for any WDK-based wallet. Live on npm.
WDK docs →Interactive visual graph of the core endpoints. See how they connect across the reference patterns with credit costs and data flows.
Explore topology →See what shipped and when on the changelog. Or read the AI agent verification guide for a complete walkthrough.
Helps Claude Code write correct, signature-verifying integration code into your project. Activates on phrases like "add wallet auth", "gate by token holdings", or "verify wallet eligibility". Includes hard-stop guardrails on inline keys and unverified responses.
smithery skill add douglasborthwick/insumer-skill
View on Smithery →
View source on GitHub →
27 tools covering all endpoints. Verify holdings, EAS attestations, compliance templates, wallet trust profiles, batch trust, ACP/UCP commerce, and onboard merchants.
npx -y mcp-server-insumer
View on npm →
View source on GitHub →
View on Glama →
26 tools covering all endpoints. Verify holdings, EAS attestations, compliance templates, wallet trust profiles, batch trust, ACP/UCP commerce, domain verification, and code validation. Also available via langchain-community.
pip install langchain-insumer
View on PyPI →
View source on GitHub →
Single InsumerToolSpec with six methods: attest_wallet, get_trust_profile, list_compliance_templates, get_jwks, buy_api_key, buy_credits. Wallet auth plus full agentic commerce loop — agents can buy their own API key on-chain (USDC or BTC) and top up credits, no human in the loop.
pip install llama-index-tools-insumer
View on PyPI →
View source on GitHub →
Use the OpenAPI spec directly in GPT Actions. Available via the GPT Store for end-user access.
insumermodel.com/openapi.yaml
Reference library to independently verify attestation signatures, condition hashes, block freshness, and expiry. Verifies both raw ECDSA attestations and Wallet Auth JWT tokens — auto-detected. Zero dependencies.
npm install insumer-verify
10 actions covering the full agent lifecycle — key purchase, merchant onboarding, verification, trust profiling, ACP/UCP commerce.
npm install @insumermodel/plugin-eliza
View on npm →
Browse code examples on GitHub.
Also listed in awesome-mcp-servers, TensorBlock MCP directory, and awesome-erc8004.
Free tier: 10 free verifications plus 100 reads/day. Pro ($29/mo, 1,000 credits) and Enterprise ($99/mo, 5,000 credits) for production. Agents can buy credits directly with USDC, USDT, or BTC.
Know Your Agent hook for ERC-8183 agentic commerce. One POST /v1/attest call evaluates 4 conditions—USDC balance, Coinbase KYC, Coinbase country-of-residence attestation, Gitcoin Passport—feeding their KYA trust score. JWT verified via JWKS.
Settlement Attestation Records for agent commerce. POST /v1/attest qualifies the wallet before a transaction, then verifies state change after settlement. ECDSA-signed pre/post pair.
Pre-payment risk assessment for AI agent transactions. Calls POST /v1/trust to profile counterparty wallets across 5 dimensions, up to 9 with optional wallets, before agents settle via x402.
Cold-start identity signal in the Coinbase x402 ecosystem. Uses POST /v1/attest to check Base USDC balance as one dimension of an agent trust score.
KCP defines how AI agents discover and access structured knowledge. We contributed the attestation_url pattern to RFC-0004, enabling any KCP manifest to require attestation verification before granting agent access. InsumerAPI is the first production implementation. The pattern is mechanism-agnostic: on-chain tokens, Verifiable Credentials, OIDC, or SPIFFE all fit.
We submitted comments to the NIST National Cybersecurity Center of Excellence proposing on-chain attestation verification as a complement to OAuth, OIDC, and SPIFFE for AI agent identity. The submission addresses all six question areas in NIST's concept paper, from cold-start trust to prompt injection resistance.
Wallet auth is in active standards work across UCP, A2A, Ethereum ERCs, and the IETF. See the standards page.