Verify KYC credentials on-chain using EAS attestation conditions. Pre-configured compliance templates abstract away schema IDs, attester addresses, and decoder contracts.
Uses POST /v1/attest with pre-configured compliance templates.
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
Use eas_attestation conditions with compliance templates to verify Coinbase Verifications, Gitcoin Passport status, and other on-chain identity credentials. One API call confirms identity without handling PII.
const res = await fetch("https://api.insumermodel.com/v1/attest", { method: "POST", headers: { "Content-Type": "application/json", "x-api-key": "YOUR_API_KEY" }, body: JSON.stringify({ wallet: "0xd8dA6BF26964aF9D7eEd9e03E53415D37aA96045", conditions: [{ type: "eas_attestation", template: "coinbase_verified_account", label: "KYC verified" }] }) }); const { data } = await res.json(); console.log(data.attestation.pass); // true if wallet has Coinbase KYC
import requests res = requests.post( "https://api.insumermodel.com/v1/attest", headers={"x-api-key": "YOUR_API_KEY"}, json={ "wallet": "0xd8dA6BF26964aF9D7eEd9e03E53415D37aA96045", "conditions": [{ "type": "eas_attestation", "template": "coinbase_verified_account", "label": "KYC verified" }] } ) data = res.json()["data"] print(data["attestation"]["pass"]) # True if wallet has Coinbase KYC
curl -X POST https://api.insumermodel.com/v1/attest \ -H "Content-Type: application/json" \ -H "x-api-key: YOUR_API_KEY" \ -d '{ "wallet": "0xd8dA6BF26964aF9D7eEd9e03E53415D37aA96045", "conditions": [{ "type": "eas_attestation", "template": "coinbase_verified_account", "label": "KYC verified" }] }' # Response: { "ok": true, "data": { "attestation": { "pass": true }, "sig": "...", "kid": "..." }, "meta": { "version": "1.0", ... } }
Each template maps to a specific EAS schema, attester address, and chain. Pass the template field instead of configuring those values manually.
Verify wallet has completed Coinbase KYC. Most widely issued on-chain identity credential.
Verify country associated with Coinbase-verified wallet. For geo-restricted compliance gating.
Verify Coinbase One membership status. Gate premium features for Coinbase One subscribers.
Verify Gitcoin Passport humanity score is 20 or above. Uses GitcoinPassportDecoder contract. On-chain Sybil resistance.
Check wallet has active Gitcoin Passport with any positive score. Lighter check for basic humanity verification.
farcaster_id is a standalone condition type, not a template. It uses the IdRegistry contract on Optimism. The contract's idOf(address) method returns the wallet's Farcaster ID (FID), or 0 if unregistered. No contractAddress or chainId is needed in the condition.
const res = await fetch("https://api.insumermodel.com/v1/attest", { method: "POST", headers: { "Content-Type": "application/json", "x-api-key": "YOUR_API_KEY" }, body: JSON.stringify({ wallet: "0xd8dA6BF26964aF9D7eEd9e03E53415D37aA96045", conditions: [{ type: "farcaster_id", label: "Farcaster user" }] }) }); const { data } = await res.json(); console.log(data.attestation.pass); // true if wallet has a Farcaster ID
import requests res = requests.post( "https://api.insumermodel.com/v1/attest", headers={"x-api-key": "YOUR_API_KEY"}, json={ "wallet": "0xd8dA6BF26964aF9D7eEd9e03E53415D37aA96045", "conditions": [{ "type": "farcaster_id", "label": "Farcaster user" }] } ) data = res.json()["data"] print(data["attestation"]["pass"]) # True if wallet has a Farcaster ID
curl -X POST https://api.insumermodel.com/v1/attest \ -H "Content-Type: application/json" \ -H "x-api-key: YOUR_API_KEY" \ -d '{ "wallet": "0xd8dA6BF26964aF9D7eEd9e03E53415D37aA96045", "conditions": [{ "type": "farcaster_id", "label": "Farcaster user" }] }' # Response: { "ok": true, "data": { "attestation": { "pass": true }, "sig": "...", "kid": "..." }, "meta": { "version": "1.0", ... } }
Combine compliance templates with other condition types in the same conditions array. The attestation passes only when ALL conditions are met. This lets you gate on KYC status and token holdings together for regulated use cases.
const res = await fetch("https://api.insumermodel.com/v1/attest", { method: "POST", headers: { "Content-Type": "application/json", "x-api-key": "YOUR_API_KEY" }, body: JSON.stringify({ wallet: "0xd8dA6BF26964aF9D7eEd9e03E53415D37aA96045", conditions: [ { type: "eas_attestation", template: "coinbase_verified_account", label: "KYC verified" }, { type: "token_balance", contractAddress: "0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48", chainId: 1, threshold: 1000, decimals: 6, label: "Holds 1000+ USDC" } ] }) }); const { data } = await res.json(); // pass is true only when BOTH conditions are met console.log(data.attestation.pass);
import requests res = requests.post( "https://api.insumermodel.com/v1/attest", headers={"x-api-key": "YOUR_API_KEY"}, json={ "wallet": "0xd8dA6BF26964aF9D7eEd9e03E53415D37aA96045", "conditions": [ { "type": "eas_attestation", "template": "coinbase_verified_account", "label": "KYC verified" }, { "type": "token_balance", "contractAddress": "0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48", "chainId": 1, "threshold": 1000, "decimals": 6, "label": "Holds 1000+ USDC" } ] } ) data = res.json()["data"] # pass is True only when BOTH conditions are met print(data["attestation"]["pass"])
curl -X POST https://api.insumermodel.com/v1/attest \ -H "Content-Type: application/json" \ -H "x-api-key: YOUR_API_KEY" \ -d '{ "wallet": "0xd8dA6BF26964aF9D7eEd9e03E53415D37aA96045", "conditions": [ { "type": "eas_attestation", "template": "coinbase_verified_account", "label": "KYC verified" }, { "type": "token_balance", "contractAddress": "0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48", "chainId": 1, "threshold": 1000, "decimals": 6, "label": "Holds 1000+ USDC" } ] }' # pass is true only when BOTH conditions are met
See how this endpoint fits the full API → API Topology