Plugins

Permanent Transfer Delegate

Last updated January 31, 2026

The Permanent Transfer Delegate Plugin provides irrevocable transfer authority that persists forever. Unlike regular Transfer Delegate, this authority is never revoked and can transfer Assets repeatedly.

What You'll Learn

  • Create Assets with permanent transfer capability
  • Enable collection-wide transfer authority
  • Use cases: games, subscriptions, automated systems
  • Understand permanent vs regular transfer delegate

Summary

The Permanent Transfer Delegate is a permanent plugin that can only be added at creation time. The delegate can transfer the Asset unlimited times without owner approval.

  • Can only be added at Asset/Collection creation
  • Authority persists forever (never revoked)
  • Uses forceApprove - can transfer even when frozen
  • Collection-level: allows transfer of any Asset in the Collection

Out of Scope

Regular transfer delegate (see Transfer Delegate), escrowless listings (use regular delegate), and Token Metadata transfer authority.

Quick Start

Jump to: Create Asset

  1. Add PermanentTransferDelegate plugin at Asset/Collection creation
  2. Set the authority to your program or delegate address
  3. The delegate can transfer the Asset at any time, unlimited times

Permanent vs Regular Transfer Delegate

FeatureTransfer DelegatePermanent Transfer Delegate
Add after creation✅ Yes❌ Creation only
Authority persists on transfer❌ Revokes after 1 transfer✅ Persists forever
Multiple transfers❌ One-time✅ Unlimited
Can transfer frozen Assets❌ No✅ Yes (forceApprove)
Works with Collections❌ No✅ Yes
Choose Transfer Delegate for one-time escrowless sales.
Choose Permanent Transfer Delegate for games, rentals, or automated systems needing repeated transfers.

Common Use Cases

  • Game mechanics: Transfer Assets when game events occur (losing battles, trading)
  • Rental returns: Automatically return rented NFTs to the owner
  • Subscription management: Transfer tokens when subscriptions end or renew
  • DAO treasury management: Allow DAOs to manage Asset distribution
  • Automated systems: Programs that need to move Assets without per-transfer approval

Works With

MPL Core Asset
MPL Core Collection

Behaviours

  • Asset: Allows transferring of the Asset using the delegated address.
  • Collection: Allows transferring of any Asset in the collection using the collection authority. It does not transfer all at once.

Arguments

ArgValue
frozenbool

Creating a MPL Core Asset with a Permanent Transfer Plugin

Creating a MPL Core Asset with a Permanent Transfer Plugin

import { publicKey } from '@metaplex-foundation/umi'
import { create } from '@metaplex-foundation/mpl-core'
const assetSigner = generateSigner(umi)
const delegate = publicKey('33333333333333333333333333333')
await create(umi, {
asset: assetSigner,
name: 'My Asset',
uri: 'https://example.com/my-asset.json',
plugins: [
{
type: 'PermanentTransferDelegate',
authority: { type: 'Address', address: delegate },
},
],
}).sendAndConfirm(umi)

Common Errors

Cannot add permanent plugin after creation

Permanent plugins can only be added at Asset/Collection creation. You cannot add a Permanent Transfer Delegate to an existing Asset.

Authority mismatch

Only the plugin authority can transfer. Verify you're signing with the correct keypair.

Notes

  • On creation only: Cannot be added after Asset/Collection exists
  • Force approve: Can transfer even when frozen
  • Collection behavior: Can transfer any Asset in the Collection individually
  • Persists forever: Authority is never revoked
  • Unlimited transfers: No limit on how many times the delegate can transfer

FAQ

What's the difference between Transfer Delegate and Permanent Transfer Delegate?

Regular Transfer Delegate is revoked after one transfer. Permanent Transfer Delegate persists forever and can transfer unlimited times.

Can Permanent Transfer Delegate transfer frozen Assets?

Yes. Permanent plugins use forceApprove, which overrides freeze rejections.

Can I add this to an existing Asset?

No. Permanent plugins can only be added at Asset creation time. Use regular Transfer Delegate for existing Assets.

How does Collection-level Permanent Transfer Delegate work?

The delegate can transfer any individual Asset in the Collection, but not all at once. Each transfer is a separate transaction.

Glossary

TermDefinition
Permanent PluginPlugin that can only be added at creation and persists forever
forceApproveValidation that overrides other plugin rejections
Collection TransferAbility to transfer any Asset in a Collection