Plugins

Update Delegate Plugin

Last updated April 28, 2026

The Update Delegate Plugin allows you to grant update permissions to additional addresses. Useful when third parties need to modify Asset metadata without being the primary update authority.

What You'll Learn

  • Add the Update Delegate plugin to Assets and Collections
  • Grant update permissions to additional addresses
  • Understand what additional delegates can and cannot do
  • Update and manage the delegates list
  • Add and remove Assets from Collections as a delegate

Summary

The Update Delegate is an Authority Managed plugin that allows the update authority to grant update permissions to other addresses. Additional delegates can modify most Asset data — including collection membership — but cannot change core authority settings.

  • Grant update permissions to third parties
  • Add multiple additional delegates
  • Works with both Assets and Collections
  • Delegates with Collection authority can add/remove Assets from Collections
  • Delegates cannot modify the root update authority

Out of Scope

Permanent update delegation, owner-level permissions (this is authority managed), and Token Metadata update authority (different system).

Quick Start

Jump to: Add to Asset · Update Delegates · Collection · Collection Membership

  1. Add the Update Delegate plugin with the delegate address
  2. Optionally add additional delegates
  3. Delegates can now update Asset metadata

When to Use Update Delegate

ScenarioSolution
Third-party needs to update metadata✅ Update Delegate
Game program needs to modify stats✅ Update Delegate (delegate to program)
Multiple team members need update access✅ Additional Delegates
Permanent irrevocable update access❌ Not supported (use multisig authority)
Owner should control updates❌ Use default authority
Use Update Delegate when you need to grant update permissions to programs or third parties without transferring the root authority.

Common Use Cases

  • Third-party services: Allow platforms to update metadata on your behalf
  • Game programs: Grant your game program authority to modify Asset attributes
  • Team collaboration: Multiple team members can update without sharing keys
  • Marketplaces: Allow marketplaces to update listing-related metadata
  • Dynamic content: Services that automatically update Asset data

Works With

MPL Core Asset
MPL Core Collection

Arguments

additionalDelegatespublickey[]

additionalDelegates

Additional delegates allow you to add more than one delegate to the updateDelegate plugin. Additional delegates can do everything that the update authority can do except:

  • add or change the additional delegates array (apart from remove themselves).
  • change the plugin authority of the updateAuthority plugin.
  • change the root update authority of the collection.

Adding the Update Delegate Plugin to an Asset

Adding a Update Delegate Plugin to an MPL Core Asset

import { publicKey } from '@metaplex-foundation/umi'
import { addPlugin } from '@metaplex-foundation/mpl-core'
const assetAddress = publicKey('11111111111111111111111111111111')
const delegate = publicKey('22222222222222222222222222222222')
await addPlugin(umi, {
asset: assetAddress,
plugin: {
type: 'UpdateDelegate',
authority: { type: 'Address', address: delegate },
additionalDelegates: [],
},
}).sendAndConfirm(umi)

Updating the Update Delegate Plugin

The Update Delegate Plugin can be updated to modify the list of additional delegates or change the plugin authority.

Updating Update Delegate Plugin on Asset

import { publicKey } from '@metaplex-foundation/umi'
import { updatePlugin } from '@metaplex-foundation/mpl-core'
const assetAddress = publicKey('11111111111111111111111111111111')
const newDelegate = publicKey('33333333333333333333333333333333')
const existingDelegate = publicKey('22222222222222222222222222222222')
await updatePlugin(umi, {
asset: assetAddress,
plugin: {
type: 'UpdateDelegate',
additionalDelegates: [existingDelegate, newDelegate], // Add or remove delegates
},
}).sendAndConfirm(umi)

Updating Update Delegate Plugin on Collection

Updating Update Delegate Plugin on Collection

import { publicKey } from '@metaplex-foundation/umi'
import { updateCollectionPlugin } from '@metaplex-foundation/mpl-core'
const collectionAddress = publicKey('11111111111111111111111111111111')
const delegate1 = publicKey('22222222222222222222222222222222')
const delegate2 = publicKey('33333333333333333333333333333333')
await updateCollectionPlugin(umi, {
collection: collectionAddress,
plugin: {
type: 'UpdateDelegate',
additionalDelegates: [delegate1, delegate2], // Updated delegates list
},
}).sendAndConfirm(umi)

Managing Collection Membership as an Update Delegate

The UpdateDelegate plugin on a Collection grants authority to add and remove Assets from that Collection without the root update authority's signature. This is the primary pattern for programs and services that manage collection membership autonomously — for example, a game server that assigns Assets to guilds, or a launchpad that mints directly into a collection.

  • Remove any Asset from the Collection — Collection UpdateDelegate alone is sufficient.
  • Add an Asset to the Collection — Collection UpdateDelegate plus authority over the Asset (as its update authority, or via the Asset's own UpdateDelegate plugin).

It is the Collection's UpdateDelegate plugin that controls membership, not the Asset's. A delegate on the Asset alone cannot add or remove it from a Collection — collection-side authority is required.

Adding an Asset to a Collection as a Collection Update Delegate

The signer must be listed in the Collection's UpdateDelegate additionalDelegates array, and must also hold authority over the Asset — either as the Asset's update authority (e.g. the program created the Asset) or as a delegate listed in the Asset's UpdateDelegate plugin.

1import { publicKey } from '@metaplex-foundation/umi'
2import {
3 update,
4 fetchAsset,
5 updateAuthority,
6} from '@metaplex-foundation/mpl-core'
7
8const assetId = publicKey('11111111111111111111111111111111')
9const collectionId = publicKey('22222222222222222222222222222222')
10
11const asset = await fetchAsset(umi, assetId)
12
13// umi.identity must be in the Collection's UpdateDelegate additionalDelegates
14// AND hold the Asset's update authority (or be in the Asset's UpdateDelegate additionalDelegates)
15await update(umi, {
16 asset,
17 newCollection: collectionId,
18 newUpdateAuthority: updateAuthority('Collection', [collectionId]),
19}).sendAndConfirm(umi)
20
21console.log('Asset added to collection')

Removing an Asset from a Collection as a Collection Update Delegate

The signer only needs to be listed in the Collection's UpdateDelegate additionalDelegates array. Asset-level authority is not required to remove an Asset.

Fetch the asset and its current collection, then call update. The authority parameter identifies the Collection delegate explicitly.

1import { publicKey } from '@metaplex-foundation/umi'
2import {
3 update,
4 fetchAsset,
5 fetchCollection,
6 collectionAddress,
7 updateAuthority,
8} from '@metaplex-foundation/mpl-core'
9
10const assetId = publicKey('11111111111111111111111111111111')
11
12const asset = await fetchAsset(umi, assetId)
13
14const currentCollectionId = collectionAddress(asset)
15if (!currentCollectionId) {
16 throw new Error('Asset does not belong to a collection')
17}
18const collection = await fetchCollection(umi, currentCollectionId)
19
20// collectionDelegate only needs to be in the Collection's UpdateDelegate additionalDelegates
21const collectionDelegate = umi.identity // replace with your delegate signer if different
22await update(umi, {
23 asset,
24 collection,
25 newUpdateAuthority: updateAuthority('Address', [umi.identity.publicKey]),
26 authority: collectionDelegate,
27}).sendAndConfirm(umi)
28
29console.log('Asset removed from collection')

Common Errors

Authority mismatch

Only the update authority (or existing plugin authority) can add/modify the Update Delegate plugin.

Cannot modify root authority

Additional delegates cannot change the root update authority or modify the additional delegates list (except removing themselves).

Notes

  • Authority Managed: update authority can add without owner signature
  • Additional delegates have almost full update permissions over the Asset or Collection they are delegated on
  • A Collection UpdateDelegate can remove any Asset from the Collection, and add Assets it also has authority over
  • Delegates cannot change the root update authority
  • Delegates cannot modify the additional delegates list (except remove themselves)
  • Works on both Assets and Collections

Quick Reference

Asset Update Delegate Permissions

ActionAllowed?
Update name/URI
Add plugins
Update plugins
Remove plugins
Change root update authority
Modify additional delegates❌ (except self-removal)
Change plugin authority

Collection Update Delegate Permissions

ActionAllowed?
Remove any Asset from the Collection
Add an Asset (you have authority over) to the Collection
Update Collection metadata
Update Collection plugins
Change the Collection's root update authority
Modify the Collection's additional delegates❌ (except self-removal)

FAQ

What can additional delegates do?

Almost everything the update authority can do: update metadata, add/remove plugins, etc. They cannot change the root update authority, modify the additional delegates list, or change the Update Delegate plugin authority.

Can additional delegates add more delegates?

No. Only the root update authority (or plugin authority) can add or remove additional delegates.

How do I remove myself as an additional delegate?

Additional delegates can remove themselves from the list by updating the plugin without their address in the additionalDelegates array.

Is there a limit to additional delegates?

There's no hard limit, but more delegates increase account size and rent. Keep the list reasonable.

Does Update Delegate work on Collections?

Yes. Adding Update Delegate to a Collection allows delegates to update collection metadata and collection-level plugins.

Can a Collection Update Delegate add or remove Assets from a Collection?

Yes. A delegate listed in the Collection's UpdateDelegate plugin can remove any Asset from the Collection, and can add Assets they have authority over — either as the Asset's update authority (e.g. the delegate created the Asset) or as a delegate listed in the Asset's own UpdateDelegate plugin. See Managing Collection Membership as an Update Delegate.

Does the Collection UpdateDelegate need authority over individual Assets to remove them?

No. Collection-level delegate authority is sufficient to remove any Asset from the Collection. Asset-level authority is only required when adding an Asset (since the Asset must also accept the change).

Glossary

TermDefinition
Update DelegateAuthority Managed plugin for granting update permissions
Additional DelegatesExtra addresses with update permissions
Authority ManagedPlugin type controlled by update authority
Root Update AuthorityThe primary update authority of the Asset/Collection