Features

Updating Assets

Last updated January 31, 2026

This guide shows how to update Core Asset metadata on Solana using the Metaplex Core SDK. Modify the name, URI, or collection membership of Assets you control.

What You'll Learn

  • Update Asset name and metadata URI
  • Move an Asset to a different Collection
  • Make an Asset immutable (permanent)
  • Understand update authority requirements

Summary

Update a Core Asset's metadata using the update instruction. Only the update authority (or an authorized delegate) can modify an Asset.

  • Change name and uri to update metadata
  • Use newCollection to move Assets between Collections
  • Set updateAuthority to None to make immutable
  • Updates are free (no rent cost) unless changing account size

Out of Scope

Updating Token Metadata NFTs (use mpl-token-metadata), plugin modifications (see Plugins), and ownership transfers (see Transferring Assets).

Quick Start

Jump to: Update Asset · Change Collection · Make Immutable

  1. Install: npm install @metaplex-foundation/mpl-core @metaplex-foundation/umi
  2. Fetch the Asset to get current state
  3. Call update(umi, { asset, name, uri }) with new values
  4. Verify changes with fetchAsset()

Prerequisites

  • Umi configured with a signer that is the Asset's update authority
  • Asset address of the Asset to update
  • New metadata uploaded to Arweave/IPFS (if changing URI) The update authority or delegate of a Core Asset has the ability to change some of the Asset's data.

Updating a Core Asset

Here is how you can use our SDKs to update an MPL Core Asset.

1import { createUmi } from '@metaplex-foundation/umi-bundle-defaults'
2import { update } 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// Update an existing NFT asset's metadata
10const result = await update(umi, {
11 asset: assetAddress,
12 name: 'Updated NFT Name',
13 uri: 'https://updated-example.com/metadata.json',
14}).sendAndConfirm(umi)
15
16console.log('Asset updated successfully')

Change the Collection of a Core Asset

Here is how you can use our SDKs to change the collection of a Core Asset.

Change the collection of a Core Asset

import { publicKey } from "@metaplex-foundation/umi";
import {
update,
fetchAsset,
fetchCollection,
collectionAddress,
updateAuthority
} from "@metaplex-foundation/mpl-core";
const assetId = publicKey("11111111111111111111111111111111");
const asset = await fetchAsset(umi, assetId);
const collectionId = collectionAddress(asset)
if (!collectionId) {
console.log("Collection not found");
return;
}
const collection = await fetchCollection(umi, collectionId);
const newCollectionId = publicKey("22222222222222222222222222222222")
const updateTx = await update(umi, {
asset,
collection,
newCollection: newCollectionId,
newUpdateAuthority: updateAuthority('Collection', [newCollectionId]),
}).sendAndConfirm(umi);

Making a Core Asset Data Immutable

Here is how you can use our SDKs to make a Core Asset fully immutable. Be aware that there are different levels of immutability described in the immutability Guide.

Important

This is a destructive action and will remove the ability to update the asset. It will also remove the asset from any collections it was in. To make collection assets immutable you will need to change the update authority of the collection.

Make a Core Asset Immutable

import { publicKey } from '@metaplex-foundation/umi'
import { update, fetchAsset } from '@metaplex-foundation/mpl-core'
const assetId = publicKey('11111111111111111111111111111111')
const asset = await fetchAsset(umi, asset)
await update(umi, {
asset: asset,
newUpdateAuthority: updateAuthority('None'),
}).sendAndConfirm(umi)

Common Errors

Authority mismatch

You're not the update authority of the Asset. Check:

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

Collection authority required

When changing Collections, you need authority on both the Asset and the target Collection.

Asset is immutable

The Asset's update authority is set to None. This cannot be reversed.

Notes

  • Fetch the Asset before updating to ensure you have the current state
  • Only the update authority (or delegate) can update an Asset
  • Making an Asset immutable is permanent and irreversible
  • Changing Collections may affect inherited plugins (royalties, etc.)
  • Updates don't change the Asset's owner

Quick Reference

Update Parameters

ParameterDescription
assetThe Asset to update (address or fetched object)
nameNew name for the Asset
uriNew metadata URI
newCollectionTarget Collection address
newUpdateAuthorityNew authority (or None for immutable)

Authority Types

TypeDescription
AddressA specific public key
CollectionThe Collection's update authority
NoneImmutable - no updates allowed

FAQ

Can I undo making an Asset immutable?

No. Setting the update authority to None is permanent. The Asset's name, URI, and collection membership are frozen forever. Only do this when you're certain.

How do I update only the name without changing the URI?

Pass only the fields you want to change. Omit uri to keep the current value:

await update(umi, { asset, name: 'New Name' }).sendAndConfirm(umi)

What's the difference between updating and transferring?

Update changes the Asset's metadata (name, URI). Transfer changes ownership. They're separate operations with different authority requirements.

Can a delegate update an Asset?

Yes, if they have been assigned as an Update Delegate via the Update Delegate plugin.

Does updating cost SOL?

Updates are free unless the new data is larger than the current account size (rare). The transaction fee (~0.000005 SOL) still applies.

Glossary

TermDefinition
Update AuthorityThe account authorized to modify an Asset's metadata
ImmutableAn Asset that cannot be updated (update authority is None)
URIThe URL pointing to off-chain metadata JSON
DelegateAn account granted specific permissions via a plugin
Collection MembershipThe Collection an Asset belongs to