One round trip, every time
Independent contracts, different protocols. Every read in an expression is batched into a single Multicall3 call per chain.
1 request4 reads1 round trip
Same behavior on every chain we support.
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.
token.balanceOf(wallet) >= parseUnits("1000000", 6)Works over REST and MCP · Discord, your app, your backend
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.
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.
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.
The gate lives inside someone's bot and role model. Your Discord rule can't guard your app, your airdrop, or your API.
"Staked more than 30 days" or "health factor above 1.5" forces you to write and host your own contract-reading backend.
Write the condition once and get true or false back, across any verified contract on Ethereum, Base, BNB Smart Chain, or Polygon.
Balances, allowances, staking, governance power, NFT traits, DeFi health. If it's onchain, it's a gate.
AND, OR, thresholds, filters. Compose the exact rule you need in one expression, not a chain of integrations.
Paste an address. Proxies resolve automatically, without RPC keys or per-token setup.
Even a gate reading several contracts resolves in a single Multicall3 round trip.
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.
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" } }Read any EVM contract without wiring providers, ABIs, or decoders by hand.
Independent contracts, different protocols. Every read in an expression is batched into a single Multicall3 call per chain.
1 request4 reads1 round trip
Same behavior on every chain we support.
Read state by address. No ABI files, ever.
Solidity structs decode into fields you dot straight into.
EIP-1967, transparent, beacon: resolved automatically.
10 of 44 major contracts we checked resolve through a proxy.
The same expression language on every surface. Learn it once, query from anywhere.
execute_query and describe_schema are the same two tools behind REST and n8n.
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.
Build and test gating conditions in a purpose-built expression editor, so you are not writing the rule blind.
We scope the gate with you and help wire it into your surface, instead of leaving the hard parts to self-serve.
A direct line for teams running gates in production, not just docs and a contact form.
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.
Yes. An expression can only read from the contracts declared in your schema: no signing, no state changes, nothing that spends gas or moves funds. A malicious or broken expression just returns the wrong boolean or an error, and per-key rate limits keep one bad actor from hammering the check for everyone else.
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, BNB Smart Chain, and Polygon 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.
Free tier included. No credit card. Write your condition, get true or false.