Menu

Compliance Gating

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

View on Smithery · GitHub repo

What this does

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.

Compliance template attest call

POST /v1/attest
Node.js
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
Python
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
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", ... } }

Compliance Templates

Each template maps to a specific EAS schema, attester address, and chain. Pass the template field instead of configuring those values manually.

coinbase_verified_account Base (8453)
Coinbase

Verify wallet has completed Coinbase KYC. Most widely issued on-chain identity credential.

coinbase_verified_country Base (8453)
Coinbase

Verify country associated with Coinbase-verified wallet. For geo-restricted compliance gating.

coinbase_one Base (8453)
Coinbase

Verify Coinbase One membership status. Gate premium features for Coinbase One subscribers.

gitcoin_passport_score Optimism (10)
Gitcoin

Verify Gitcoin Passport humanity score is 20 or above. Uses GitcoinPassportDecoder contract. On-chain Sybil resistance.

gitcoin_passport_active Optimism (10)
Gitcoin

Check wallet has active Gitcoin Passport with any positive score. Lighter check for basic humanity verification.

Farcaster Identity

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.

Node.js
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
Python
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
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", ... } }

Gating Patterns

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.

Node.js
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);
Python
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
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