Features

Burning Assets

Last updated September 3, 2026

This guide shows how to burn Core Assets on Solana using the Metaplex Core SDK. Permanently destroy Assets and recover most of the rent deposit.

What You'll Learn

  • Burn an Asset and recover rent
  • Handle burning for Assets in Collections
  • Understand Burn Delegate permissions
  • Know what happens to the account after burning
  • Empty the Asset Signer PDA before burning

Withdraw Asset Signer balances before burning

Burning a Core Asset makes execute fail. SOL, tokens, or other assets still held by the Asset Signer PDA become stranded with no recovery path. Transfer them out first.

Summary

Burn a Core Asset to permanently destroy it and recover rent. Only the owner (or Burn Delegate) can burn an Asset.

  • Call burn(umi, { asset }) to destroy the Asset
  • The account's rent is returned to the burn transaction's payer
  • A small amount (~0.0009 SOL) remains to prevent account reuse
  • Burning is permanent and irreversible
  • Empty the Asset Signer PDA first — execute cannot move those funds after burn

Out of Scope

Token Metadata burning (use mpl-token-metadata), compressed NFT burning (use Bubblegum), and Collection burning (Collections have their own burn process).

Quick Start

Jump to: Burn Asset · Burn in Collection

  1. Install: npm install @metaplex-foundation/mpl-core @metaplex-foundation/umi
  2. Fetch the Asset to verify ownership
  3. If the Asset Signer PDA holds funds, transfer them out with execute
  4. Call burn(umi, { asset }) as the owner
  5. Rent is automatically returned to your wallet

Prerequisites

  • Umi configured with a signer that owns the Asset (or is its Burn Delegate)
  • Asset address of the Asset to burn
  • Collection address (if the Asset is in a Collection) Assets can be burnt using the burn instruction. This refunds the Asset account's rent deposit to the transaction payer. Only the one-byte rent-exempt minimum (0.00089784 SOL) stays in the account to prevent it from being reopened; any lamports above that remain there too.

Only rent is refunded

burn refunds the rent-exempt balance for the account's data size minus the 1-byte floor to the payer. The account is resized to a 1-byte uninitialized account rather than deleted, to prevent address reopen attacks. Any lamports above rent, such as not-yet-collected protocol fees, stay in that 1-byte uninitialized account until swept by the Metaplex fee collector.

Code Example

Here is how you can use our SDKs to burn a Core asset. The snippet assumes that you are the owner of the asset.

1import { createUmi } from '@metaplex-foundation/umi-bundle-defaults'
2import { burn } from '@metaplex-foundation/mpl-core'
3import { mplCore } from '@metaplex-foundation/mpl-core'
4import { publicKey } from '@metaplex-foundation/umi'
5
6const umi = createUmi('https://api.devnet.solana.com').use(mplCore())
7const assetAddress = publicKey('AssetAddressHere...')
8
9// Permanently destroy/burn an NFT asset
10const result = await burn(umi, {
11 asset: assetAddress,
12}).sendAndConfirm(umi)
13
14console.log('Asset burned successfully')

Burning an Asset that is part of a Collection

Here is how you can use our SDKs to burn a Core asset that is part of a collection. The snippet assumes that you are the owner of the asset.

Burning an Asset that is part of a collection

import { publicKey } from '@metaplex-foundation/umi'
import {
burn,
fetchAsset,
collectionAddress,
fetchCollection,
} from '@metaplex-foundation/mpl-core'
const assetId = publicKey('11111111111111111111111111111111')
const asset = await fetchAsset(umi, assetId)
const collectionId = collectionAddress(asset)
let collection = undefined
if (collectionId) {
collection = await fetchCollection(umi, collectionId)
}
await burn(umi, {
asset,
collection,
}).sendAndConfirm(umi)

Common Errors

Authority mismatch

You're not the owner or Burn Delegate of the Asset. Check ownership:

const asset = await fetchAsset(umi, assetAddress)
console.log(asset.owner) // Must match your signer

Asset is frozen

The Asset has a Freeze Delegate plugin and is currently frozen. The freeze authority must unfreeze it before burning.

Missing collection parameter

For Assets in a Collection, you must pass the collection address. Fetch the Asset first to get the collection:

const asset = await fetchAsset(umi, assetAddress)
const collectionId = collectionAddress(asset)

Notes

  • Burning is permanent and irreversible - the Asset cannot be recovered
  • Rent is returned to the payer (amount varies based on asset size and plugins)
  • Only rent is refunded. Any lamports above the rent-exempt minimum are not returned to the owner
  • The remaining SOL prevents the account address from being reused
  • Burn Delegates can burn on behalf of owners (via the Burn Delegate plugin)
  • Frozen Assets must be unfrozen before burning
  • Empty the Asset Signer PDA before burning — execute fails afterward and remaining balances are stranded

Quick Reference

Burn Parameters

ParameterRequiredDescription
assetYesAsset address or fetched object
collectionIf in collectionCollection address
authorityNoDefaults to signer (use for delegates)

Who Can Burn?

AuthorityCan Burn?
Asset OwnerYes
Burn DelegateYes
Transfer DelegateNo
Update AuthorityNo

Rent Recovery

ItemAmount
Returned to payerBase + plugin storage rent
Remaining in account~0.0009 SOL
Lamports above rentNot refunded

FAQ

Can I recover the ~0.0009 SOL left in the account?

No. This small amount is intentionally left to mark the account as "burned" and prevent its address from being reused for a new Asset.

What happens to the Asset's metadata after burning?

The on-chain account is cleared (zeroed out). The off-chain metadata remains accessible via the original URI, but there's no on-chain record linking to it.

Can a Burn Delegate burn without the owner's approval?

Yes. Once an owner assigns a Burn Delegate via the plugin, the delegate can burn the Asset at any time. Owners should only assign trusted addresses as Burn Delegates.

Does burning affect the Collection's count?

Yes. The Collection's currentSize is decremented when an Asset is burned. The numMinted counter remains unchanged (it tracks total ever minted).

Can I burn multiple Assets at once?

Not in a single instruction. You can batch multiple burn instructions in one transaction (up to transaction size limits).

What happens to SOL and tokens in the Asset Signer PDA when I burn?

Burning disables execute. Empty the Asset Signer PDA first or those balances are stranded with no recovery path.

Glossary

TermDefinition
BurnPermanently destroy an Asset and recover rent
Burn DelegateAn account authorized to burn on behalf of the owner
RentSOL deposited to keep an account alive on Solana
FrozenAn Asset state where burns and transfers are blocked
CollectionA group account that the Asset may belong to
Asset Signer PDAA wallet attached to the Asset that signs via execute. Burning strands any remaining balances.