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
- Add
PermanentTransferDelegateplugin at Asset/Collection creation - Set the authority to your program or delegate address
- The delegate can transfer the Asset at any time, unlimited times
Permanent vs Regular Transfer Delegate
| Feature | Transfer Delegate | Permanent 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
| Arg | Value |
|---|---|
| frozen | bool |
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.
Related Plugins
- Transfer Delegate - One-time transfer authority
- Permanent Freeze Delegate - Permanent freeze authority
- Permanent Burn Delegate - Permanent burn authority
Glossary
| Term | Definition |
|---|---|
| Permanent Plugin | Plugin that can only be added at creation and persists forever |
| forceApprove | Validation that overrides other plugin rejections |
| Collection Transfer | Ability to transfer any Asset in a Collection |
