Collections & Verification
Collections group NFTs under a shared identity. Verification proves an asset truly belongs to that collection - critical because unverified collection fields can be spoofed by anyone.
Search across all documentation pages
Collections group NFTs under a shared identity. Verification proves an asset truly belongs to that collection - critical because unverified collection fields can be spoofed by anyone.
// Core: create Collection, mint Asset with collection plugin, verify
import { createCollection, create, addPlugin } from "@metaplex-foundation/mpl-core";
// Token Metadata: set collection on metadata + verifyCollectionV1When to reach for this:
getAssetsByGroupimport { createUmi } from "@metaplex-foundation/umi-bundle-defaults";
import { mplCore } from "@metaplex-foundation/mpl-core";
import {
createCollection,
create,
fetchCollection,
ruleSetNone,
} from "@metaplex-foundation/mpl-core";
import { generateSigner } from "@metaplex-foundation/umi";
const umi = createUmi("https://api.devnet.solana.com").use(mplCore());
const collection = generateSigner(umi);
await createCollection(umi, {
collection,
name: "Demo Collection",
uri: "https://arweave.net/collection.json",
}).sendAndConfirm(umi);
const asset = generateSigner(umi);
await create(umi, {
asset,
name: "Item #1",
uri: "https://arweave.net/1.json",
collection: collection.publicKey,
}).sendAndConfirm(umi);
const col = await fetchCollection(umi, collection.publicKey);
console.log(col.name, col.numMinted);// DAS: query by collection
await dasRpc("getAssetsByGroup", {
groupKey: "collection",
groupValue: collection.publicKey.toString(),
page: 1,
limit: 100,
});What this demonstrates:
collection field on metadata + verified: bool after authority signs verifygrouping / collection for verified sets| State | Marketplace trust |
|---|---|
| Unverified | Low - anyone can set field |
| Verified | High - collection authority signed |
| No collection | Standalone 1/1 |
// After mint, run verify instruction if not auto-verified in your SDK flow
// Token-gate: getAssetsByOwner + filter grouping.key === "collection"| Alternative | Use When | Don't Use When |
|---|---|---|
| Off-chain collection id | MVP only | On-chain verification required |
| Merkle allowlist | Mint gate only | Post-mint provenance display |
| Single shared trait in JSON | Analytics hack | Security-critical gating |
Without verification, attackers set collection field to famous collection names on unrelated NFTs.
Different account types - pick one standard per project.
Collection update authority / collection authority per program rules.
Yes - grouping metadata includes verified flag where applicable.
Generally requires authority operations - not casual metadata edit.
getAssetsByGroup or filter owner assets by collection grouping.
No on-chain hard cap - operational limits from rent and indexer performance.
Product pattern - often separate collection accounts or trait conventions.
Yes - batch verify instructions common in reveal workflows.
Many read DAS - ensure your collection verifies on-chain for badge display.
Re-run verify with correct authority if mint succeeded but verify tx failed.
Bubblegum supports collection metadata in compressed mint - see cNFT section.
Stack versions: This page was written for Agave 4.1.1, Solana CLI 3.0.10, Anchor 0.32.1, anchor-lang 0.32.1, Rust 1.91.1, @solana/kit 7.0.0, Surfpool 0.12.0, and LiteSVM 0.6.x.
Reviewed by Chris St. John·Last updated Jul 16, 2026