Token Gating
Token gating lets you restrict who can fill out your form based on their on-chain token holdings. Only wallets that meet your rules can access and submit the form.
How it works
Respondent connects their wallet at the form URL
forms.wtf reads the respondent's on-chain token balances (read-only, no transaction)
If the balance meets your rules, the form unlocks
If not, they see a "You don't meet the requirements" message
Setting up token gating
Open the form builder and click Settings
Toggle Token Gating on
Click Add Rule
Configure the rule:
Chain
Ethereum (mainnet)
Contract address
The token's smart contract address
Token type
ERC-20, ERC-721, or ERC-1155
Token ID
For ERC-1155 only — specific token ID
Minimum balance
How many tokens the wallet must hold
Click Save
Gate logic
When you have multiple rules, choose how they're combined:
ALL rules (AND) — respondent must meet every rule to access the form
ANY rule (OR) — respondent meets at least one rule to access the form
Example:
Rule 1: Hold ≥1 BoredApe NFT
Rule 2: Hold ≥100 $APE tokens
With AND: must have both
With OR: must have either
Token types
ERC-20 (Fungible tokens)
Used for governance tokens, utility tokens, stablecoins.
Set a minimum balance (e.g. 100 tokens)
Decimal amounts are supported
Example: Gate to wallets holding ≥500 $UNI
ERC-721 (NFTs)
Used for standard NFT collections where each token is unique.
Set minimum balance to
1to require any NFT from the collectionSet higher to require multiple NFTs
Example: Gate to CryptoPunks holders
ERC-1155 (Multi-token)
Used for NFT collections with multiple editions per token ID.
Requires a specific Token ID
Set the minimum balance for that specific token ID
Example: Gate to holders of Token ID 42 with balance ≥2
Plan limits
Free
1
Pro
Unlimited
Team
Unlimited
Business
Unlimited
What respondents see
If a respondent visits a gated form and their wallet doesn't qualify:
They see a clear message explaining they don't meet the requirements
The gate rules are shown (contract address, required balance)
They are not able to proceed to the form
If they disconnect and reconnect with a different wallet, the gate is re-checked.
Notes
Token balances are checked at the time of form access and again at submission
Balance is read live from the chain — no caching
Only Ethereum mainnet is currently supported for token gating
ENS names are resolved server-side for display purposes only; gating uses the raw wallet address
Gate checks are performed server-side via RPC — respondents cannot spoof their balance
Last updated
Was this helpful?