Plugins

Delegating and Revoking Plugins

Last updated January 31, 2026

This guide shows how to delegate and revoke plugin authorities on Core Assets. Transfer control of plugins to other addresses or make plugin data permanently immutable.

What You'll Learn

  • Delegate plugin authority to another address
  • Revoke delegated authority
  • Understand revocation behavior for different plugin types
  • Make plugin data immutable

Summary

Delegate plugin authority using approvePluginAuthority() and revoke with revokePluginAuthority(). Different plugin types have different revocation behaviors.

  • Owner Managed: Revokes back to Owner authority
  • Authority Managed: Revokes back to UpdateAuthority
  • Set authority to None to make plugin immutable
  • Owner Managed plugins auto-revoke on Asset transfer

Out of Scope

Plugin removal (see Removing Plugins), adding plugins (see Adding Plugins), and permanent plugin authority changes.

Quick Start

Jump to: Delegate Authority · Revoke Authority · Make Immutable

  1. Call approvePluginAuthority() with the new authority address
  2. To revoke: call revokePluginAuthority()
  3. To make immutable: set authority to None

Delegating an Authority

Plugins can be delegated to another address with a Delegate Authority instruction update. Delegated plugins allow addresses other than the main authority to have control over that plugins functionality.

Delegate a Plugin Authority

import { publicKey } from '@metaplex-foundation/umi'
import { approvePluginAuthority } from '@metaplex-foundation/mpl-core'
const assetAddress = publicKey('11111111111111111111111111111111')
const delegate = publicKey('33333333333333333333333333333')
await approvePluginAuthority(umi, {
asset: assetAddress,
plugin: { type: 'Attributes' },
newAuthority: { type: 'Address', address: delegate },
}).sendAndConfirm(umi)

Revoking an Authority

Revoking an Authority on a plugin results in different behaviours depending on the plugin type that's being revoked.

  • Owner Managed Plugins: If an address is revoked from an Owner Managed Plugin then the plugin will default back to the Owner authority type.
  • Authority Managed Plugins: If an address is revoked from an Authority Managed Plugin then the plugin will default back to the UpdateAuthority authority type.

Who can Revoke a Plugin?

Owner Managed Plugins

  • An Owner Managed Plugin can be revoked by the owner which revokes the delegate and sets the pluginAuthority type to Owner.
  • The delegated Authority of the plugin can revoke themselves which then sets the plugin authority type to Owner.
  • On Transfer, delegated Authorities of owner managed plugins are automatically revoked back to the Owner Authority type.

Authority Managed Plugins

  • The Update Authority of an Asset can revoke a delegate which thens sets the pluginAuthority type to UpdateAuthority.
  • The delegated Authority of the plugin can revoke themselves which then sets the plugin authority type to UpdateAuthority. A list of plugins and their types can be viewed on the Plugins Overview page.

Revoking a Plugin Authority

import { publicKey } from '@metaplex-foundation/umi'
import { revokePluginAuthority } from '@metaplex-foundation/mpl-core'
await revokePluginAuthority(umi, {
asset: asset.publicKey,
plugin: { type: 'Attributes' },
}).sendAndConfirm(umi)

Delegate Resets Upon Asset Transfer

All Owner Managed plugins will have their delegated authorities revoked and set back to the authority type of Owner upon Transfer of an Asset. This includes:

  • Freeze Delegate
  • Transfer Delegate
  • Burn Delegate

Making Plugin Data Immutable

By updating your plugin's authority to a None value will effectively make your plugin's data immutable.

WARNING - Doing so will leave your plugin data immutable. Proceed with caution!

Making a Plugin Immutable

import {
approvePluginAuthority
} from '@metaplex-foundation/mpl-core'
await approvePluginAuthority(umi, {
asset: asset.publicKey,
plugin: { type: 'FreezeDelegate' },
newAuthority: { type: 'None' },
}).sendAndConfirm(umi)

Common Errors

Authority mismatch

You don't have permission to delegate or revoke this plugin. Only the current authority can delegate; only owner/authority can revoke.

Plugin not found

The Asset/Collection doesn't have this plugin type attached.

Cannot revoke None authority

A plugin with None authority is immutable. There's no authority to revoke.

Notes

  • Delegation transfers control but doesn't remove the original authority's ability to revoke
  • Setting authority to None is permanent and irreversible
  • Owner Managed plugins auto-revoke when the Asset transfers to a new owner
  • Revocation returns authority to the default type (Owner or UpdateAuthority)

Quick Reference

Revocation Behavior by Plugin Type

Plugin TypeRevokes To
Owner ManagedOwner authority
Authority ManagedUpdateAuthority

Who Can Delegate/Revoke

ActionOwner ManagedAuthority Managed
DelegateOwnerUpdate Authority
RevokeOwner or DelegateUpdate Authority or Delegate

FAQ

What's the difference between revoking and removing a plugin?

Revoking only changes who controls the plugin—the plugin and its data remain. Removing deletes the plugin entirely.

Can I delegate to multiple addresses?

No. Each plugin has only one authority at a time. Delegating to a new address replaces the previous authority.

What happens to delegated plugins when I transfer an Asset?

Owner Managed plugins automatically revoke back to Owner authority. Authority Managed plugins remain unchanged.

Can I undo setting authority to None?

No. Setting authority to None makes the plugin permanently immutable. This cannot be reversed.

Can a delegate revoke themselves?

Yes. A delegated authority can revoke their own access, which returns control to the default authority type.

Glossary

TermDefinition
DelegateAddress given temporary control of a plugin
RevokeRemove delegated authority, returning to default
None AuthoritySpecial authority type making plugin immutable
Auto-revokeAutomatic revocation of Owner Managed plugins on transfer
Plugin AuthorityCurrent address with control over a plugin