Skip to main content
NFT/Token gating is a feature of access control, just like access lists. It restricts access to users who hold certain NFTs or tokens. For example, you can:
  • Restrict page or site access based on users’ NFTs or tokens.
  • Add a list of scopes to the user’s JWT based on their NFTs or tokens.
Gates are the rules you define; they combine one or more criteria. When a user meets a gate’s criteria, you can either allow/block site access or add a scope to their JWT. Gates can use:
  • Access list membership – User is on a list of emails, wallet addresses, or other identifiers.
  • NFT or token ownership – User holds a certain NFT or token amount on a supported chain.
You can create multiple gates; between gates the logic is OR (the user must satisfy at least one gate). Within a single gate, all criteria are AND (the user must satisfy every criterion).

Where to configure

Use the same Access Control page in your developer dashboard.

Two outcomes

Same as for access lists:
  • Allow Site Access – Users who do not meet the gate’s criteria are blocked at sign-in (no JWT). Works with any integration.
  • Return scope – Users who meet the criteria get a scope added to their JWT. Use in-app for fine-grained UI; reading scopes is SDK-specific.

NFT and token gates

  1. Click Create new gate.
  2. Name the gate.
  3. Choose Allow Site Access or Return scope.
  4. Select the chain (for example, Ethereum, Polygon, Optimism, Arbitrum).
  5. Choose the criteria type:
    • Token – User must hold a selected token and meet an amount.
    • NFT – User must hold an NFT from a given contract address.
  6. Enter the contract address and, for tokens, the required amount.
  7. Save and enable the toggle.
When gates are enabled, Dynamic evaluates them at authentication time. For Allow Site Access, users who do not meet any gate are blocked. For Return scope, the scope is added to the JWT; use your SDK to read it and adjust your UI.

Advanced usage

For working with scopes and custom UI in your app:

API

To manage gates programmatically, use the Gates API.