Skip to content

Gate access on any smart contract.

Token balances, staking, governance power, NFT traits, DeFi positions · if it's onchain, it's a gate. You write the condition, evmquery returns true or false.

Ethereum
token.balanceOf(wallet) >= parseUnits("1000000", 6)

Works over REST and MCP · Discord, your app, your backend

Why this exists

Your gate is only as good as their checklist.

Most gating tools ship a fixed menu: holds token X, owns NFT Y. The moment your condition isn't on that list, you're stuck writing custom code.

A fixed menu of conditions

Holds token X or owns NFT Y and nothing past that. Staking duration, LP positions, vesting schedules, voting power. None of it is on the menu.

Every token is an integration

A new contract means new setup. Proxies and custom ABIs silently break the check, and you find out when a real member gets locked out.

Locked to one platform

The gate lives inside someone's bot and role model. Your Discord rule can't guard your app, your airdrop, or your API.

Exotic conditions mean custom code

“Staked more than 30 days” or “health factor above 1.5” forces you to write and host your own contract-reading backend.

What evmquery does

A gate is just an expression.

Write the condition once and get true or false back, across any verified contract on Ethereum, Base, or BNB Smart Chain.

  • Any condition, not a checklist

    Balances, allowances, staking, governance power, NFT traits, DeFi health. If it's onchain, it's a gate.

  • Combine with plain logic

    AND, OR, thresholds, filters. Compose the exact rule you need in one expression, not a chain of integrations.

  • Any contract, no ABIs

    Paste an address. Proxies resolve automatically. No RPC keys, no per-token setup.

  • One call, one round trip

    Even a gate reading several contracts resolves in a single Multicall3 round trip.

  • Bring your own surface

    Returns a boolean over REST or MCP, so you guard a Discord role, an app route, an airdrop claim, or a waitlist and evmquery just decides.

bash
curl -X POST https://api.evmquery.com/api/v1/query \
  -H "x-api-key: YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "chain": "evm_ethereum",
    "schema": {
      "contracts": { "token": { "address": "0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48" } },
      "context": { "wallet": "sol_address" }
    },
    "context": { "wallet": "0x40ec5B33f54e0E8A33A975908C5BA1c14e5BbbDf" },
    "expression": "token.balanceOf(wallet) >= parseUnits(\"1000000\", 6)"
  }'

# { "result": { "value": true, "type": "bool" } }
One POST returns true or false. Enforce it wherever your gate lives.

Everything you reach for, in one expression.

Read any EVM contract without wiring providers, ABIs, or decoders by hand.

One round trip, every time

Independent contracts, different protocols. Every read in an expression is batched into a single Multicall3 call per chain.

token.name()token.symbol()token.decimals()token.totalSupply()
Multicall3Ethereum

1 request4 reads1 round trip

Any contract

Read state by address. No ABI files, ever.

usdc.balanceOf(vitalik)
37.19 USDC

Typed results

BigInt, address, struct: decoded and ready.

{
  "value": "37192124",
  "type": "sol_int"
}

Proxy-aware

EIP-1967, transparent, beacon: resolved automatically.

0xA0b869…eB48
slot0x360894…82bbc
0x435068…402dd

resolved via EIP-1967 slot

Drop it in your agent

The same expression language on every surface. Learn it once, query from anywhere.

MCPClaudeCursorVS CodeWindsurf
HTTPRESTn8n
Beyond self-serve

Rather not build the gate alone?

The free tier is fully self-serve. When the condition gets gnarly or you would rather not own the integration, we help you build it and wire it in.

  • An editor for your expressions

    Build and test gating conditions in a purpose-built expression editor, so you are not writing the rule blind.

  • Custom integration on request

    We scope the gate with you and help wire it into your surface, instead of leaving the hard parts to self-serve.

  • Dedicated support

    A direct line for teams running gates in production, not just docs and a contact form.

Frequently asked questions

Anything readable from a verified contract: token balances, staking positions, governance votes, NFT traits, DeFi health factors, LP positions. Write the condition as an expression and evmquery evaluates it.

Any surface you control. evmquery returns a plain boolean over REST or MCP, so you wire it into a Discord bot, your app's middleware, an airdrop claim flow, or a waitlist. You bring the surface.

No. A balance check is one expression among many. Combine multiple reads with AND and OR, add thresholds, or gate on something that has nothing to do with balances, like a vote or a health factor.

Paste the address. Proxies resolve automatically, so there's no ABI hunting or per-token onboarding before the gate works.

Ethereum, Base, and BNB Smart Chain today. If a contract is verified on one of these, it can be a gate condition.

Yes. Even a gate that reads several contracts resolves in a single batched Multicall3 round trip, so you can evaluate it on every request without stitching together multiple calls.

Gate on anything onchain.

Free tier included. No credit card. Write your condition, get true or false.

Free tier includedNo credit cardNo monthly cap