The easiest way to get started with selling or airdropping NFTs is to use the developer console to deploy and manage your NFT contracts.

Create a Crossmint NFT Collection

This guide will deploy an ERC-721 contract on the Polygon Amoy testnet. Currently, you can also deploy to the mainnets and testsnets for Polygon, Base, Optimism, and Solana directly from the console. Additional chains are supported when deploying via the create-collection API.
1

Navigate to Token collections and click `New collection`

New collections screenshot
2

Enter Collection Information

This information is displayed in the Hosted Checkout, Storefront, and Claim pages. You can edit it later.
Collection info screenshot
3

Select `Create a new contract` option

Create Collection screenshot
4

Select `Sell NFTs` option

You can select both options if you want to sell NFTs and also allow users to claim them for free. If you want to use this collection exclusively with the Minting Tools, select the Airdrop NFTs option only.
Select sell or airdrop NFTs screenshot
5

Select preferred Blockchain

Crossmint has staging and production environments to facilitate working in testnets or mainnets.
Select blockchain screenshot

When creating a new collection on production you’ll need some API credits to cover the gas cost of contract deployment.
6

Configure Payment Settings

NFT Price

Enter the price you want to charge for your NFT. When using the staging environment, please set very low test prices to help use preserve our testnet currency. Everything works the same in staging and production, so you can test your collection with low prices in staging and then deploy to production with higher prices. In production, there is a lower bound limit of USD 0.75,andanupperboundlimitofUSD0.75, and an upper bound limit of USD 1,500 per transaction. You can find more information if you need to increase this limit.

USDC

Several chains support USDC for the currency. This option is useful for price stability and to receive payouts in a stable token. You can find more info on configuring USDC here.
Crossmint collection nft-price configuration

Fee Sponsorship

This option enables you to control who pays the fees of the NFT purchase including gas and credit card transaction fees. The default option is “Buyer”, which means that if you set a price of 10 USDC, the final price the buyer pays will be 10 USDC plus fees.If you want to provide a consistent price for your customers, select the “You” option to sponsor the fees. When you sponsor the fees they will be deducted from the amount the buyer pays and the remainder will be paid to the recipient wallet you set in the next step.
Crossmint collection fee sponsorship configuration

Recipient Address

Enter the wallet address where you want to receive payments. This is the address where Crossmint will send the proceeds from NFT sales.
Want to split payments across multiple addresses? Use a splits.org address as the payout recipient.
Crossmint collection payments settings screenshot
7

Review details and click `Deploy contract` to complete

Make sure you review the Content policy. When launching in production you’ll need to submit collection verification information to ensure your collection is compliant with our Content Policy. You can find more information about everything required for your production launch in the Production Launch section.
Crossmint collection complete screenshot

Adding NFTs

This is required before you can sell or airdrop the NFTs. Without this step there is not any actual information to use for creating the NFTs yet. You can create unique NFT metadata per token or an Open Edition style NFT where all tokens share the same metadata.
1

Select `Manual upload` option

manual upload screenshot
2

Fill out Metadata

NFT Name

The name of your NFT (max 32 characters).

Supply

For unique per NFT, enter 1. You will need to configure the metadata for each NFT. You can do this via the developer console individually. For projects with many unique NFTs you should use the Create Template API with a script.For an Open Edition NFT, enter the total quantity, or select the Unlimited checkbox. This will be the only metadata you need to configure.

Description

The description of your NFT (max 64 characters).

Image

Upload an image for your NFT.Recommended image formats are: JPEG, PNG, WEBP, or GIF. In most cases, the medium in which NFTs are displayed don’t require extremely high resolution files. Strike a balance and lean towards file sizes that do not require significant bandwidth to download (below 10 MB for example).

Attributes optional

Additional attributes of the NFT. Add as few or as many as you like. You can refer to the OpenSea metadata standards page for detailed explanations of how to use these in your project.
Entering metadata screenshot
Click the Create NFT button to complete.
1

Select `Batch upload` option

batch upload screenshot
2

Prepare Metadata CSV

You can download an example of how your file should be structured here: batch-upload-example.zip.
upload csv screenshot
You can upload a maximum of 1000 items at a time. For collections that require more than 1000 tokens, you can repeat the batch upload process multiple times.
The CSV should include a header row with the following fields:
  • name - The name for the token.
  • image - The filename of the image, which will be uploaded in the next step.
  • description - A description for the token.
  • supply - How many of the token should be available.
  • animation_url - (optional)
You can add attributes via additional columns in the spreadsheet. For example, to add an attribute named weapon, include an additional column with the attribute name for the header row. You can refer to the example file linked above to see this in action.Once you have your CSV ready, upload it to move on to the next step for media files.
3

Prepare Media Files

The image file names must match the value(s) in the image column of the uploaded CSV file. These files should be in a flat folder structure for upload (no sub-folders).Click the “Upload media files” button and then select all of the images referenced in the metadata.csv file you uploaded in the previous step.
upload media files screenshot
4

Complete the Batch Upload

Click the “Upload” button to upload the CSV and media files. If any media files are missing you’ll be notified which ones they are in the UI.
batch upload complete screenshot
5

Done!

If you need to upload additional token metadata click the “New batch upload” button. Otherwise select “View my NFTS” to close the modal and view the metadata for your tokens.
batch upload finish screenshot
You can also perform bulk uploading by calling the create-template API using a script that loops through your metadata.csv file. You’ll need to have an API key with the nfts.create scope enabled.Below is an example script that will keep your request volume below the 120/min rate limit.
This code example is available as a repository on GitHub also: crossmint/bulk-uploader
Before running this script you’ll need to upload your media files to a service that can host the files, such as Pinata.The image column of your metadata.csv should include the full URL to the file instead of only a file name like the batch upload option above.
bulkUploader.js
const fs = require("fs");
const csv = require("csv-parser");
require("dotenv").config();

const collectionId = process.env.COLLECTION_ID;
const apiKey = process.env.API_KEY;
const apiUrl = `https://staging.crossmint.com/api/2022-06-09/collections/${collectionId}/templates`;

// Rate limiting setup
const rateLimit = 100; // requests per minute
const interval = 60000 / rateLimit; // interval in milliseconds

async function sendRequest(data) {
    try {
        const response = await fetch(apiUrl, {
            method: "POST",
            headers: {
                "Content-Type": "application/json",
                "X-API-KEY": `${apiKey}`,
            },
            body: JSON.stringify(data),
        });
        const responseData = await response.json();
        console.log("Success:", responseData);
    } catch (error) {
        console.error("Error:", error.message);
    }
}

// Read and process the CSV file
function processFile() {
    let promise = Promise.resolve();
    fs.createReadStream("metadata.csv")
        .pipe(csv())
        .on("data", (row) => {
            promise = promise.then(() => {
                const postData = {
                    metadata: {
                        name: row.name,
                        image: row.image, // this should be a publicly accessible URL
                        description: row.description,
                    },
                    supply: { limit: Number(row.supply) },
                    reuploadLinkedFiles: false, // this is optional
                };
                return sendRequest(postData).then(() => new Promise((resolve) => setTimeout(resolve, interval)));
            });
        })
        .on("end", () => {
            promise.then(() => {
                console.log("Finished processing file.");
            });
        });
}

processFile();
Run the script to bulk upload your template metadata.
node bulkUploader.js

Send a Test NFT

Once you have added metadata you can send a test NFT to yourself or another user. The interface to mint and send from the console supports email and wallet address for the recipient.
1

Mint and send a test NFT

You can mint and send a test NFT to an email address or wallet to make sure everything is working as expected.
Mint and Send NFT screenshot
2

Enter email or wallet

If you enter an email address the NFT will be sent to a unique Crossmint custodial wallet associated with that email address. The owner of this email can log in to Crossmint to view their NFT. The wallet option will send directly to the wallet address.
Crossmint does not send an email to the user when you airdrop NFTs from the console.
Enter an email and Send NFT screenshot
3

Done!

That’s all there is to it. Check below for recommended next steps.

Next steps

Integrate the Crossmint SDK to start selling from your website. You can do this in three ways:
  1. EASY: Use the Storefront to start accepting payments without writing any code.
  2. MID: Add a Hosted Checkout into your existing site or app, which opens a Crossmint branded checkout flow in a pop-up or new tab.
  3. ADVANCED: Craft an Embedded Checkout with custom UI into your website or app.
  1. If you selected the Airdrop NFTs option when deploying your collection you should checkout the No Code Claims Page to learn how to enable a claims page for your collection.