Paper offers 3 main ways to implement an allowlist, which depend on the type of contract that was used in Step1: Add a Smart Contract.

Contract Type

Allowlist method

Pre-existing Contract

Signature Minting or Merkle roots

If your whitelist simply requires you to pass certain parameters to your contract, use the custom contract in conjuction with our React SDK.

See the Code snippet in any of the React SDK components for how to use it with custom contract.

One-time link or React SDK with a Only-Paper Restricted Function
If you think that signature minting or Merkle roots are too much work, you can restrict access to the checkout by either generating a one-time link or showing the React SDK when you ensured that the user is allowed to mint.

On the contract, your function should be restricted to only Paper so that users cannot go to the scanners themselves to mint


Signature Minting. See thirdweb's guide for more.

Note that you're required to use the Signature Drop or the Edition contract type in conjunction with our React SDK. See the Code snippet there for an example

Candy Machine

The whitelist solution in Candy Machine Works as intended.

Users will be required to have the whitelist token in an existing wallet and during checkout, the token will be transferred to us for use on behalf of the user if they are paying via crypto or credit card

One-time link

If your allowlist data is stored off-chain, consider creating unique links that each only allow one purchase. Your checkout won't be publicly accessible, and buyers without a One-Time Purchase link will be redirected to your landing page. When creating a link, you can lock certain fields like walletAddress and email to ensure your purchase is made by the right buyer.

By allowing you to gate purchases, you can support the following behaviors (some may require disabling native mints):

  • Use your own off-chain data for presale and allowlists
  • Ensure a buyer can only make a certain number of purchases

In order to create a one-time purchase link, you will need to create a checkout. We recommend doing this by creating a API Checkout. We also recommend you to use Only-Paper Restricted Functions when using one-time purchase links to ensure that only Paper will be able to call your minting function. This endpoint will allow you to manage one-time purchase links directly from code. From here you should be able to do the following: