
What can be delegated
4 minDifficulty Checked 2026-11-10- A permission is either a whole transaction type or a granular slice of one.
- Transactions that change keys, signers or delegates can never be delegated.
- Granular permissions are fixed in the protocol. Adding one takes an amendment.
A permission comes in two sizes.
Whole type. "You may send Payment transactions for me." That covers every kind of payment from your account. It is a wide door.
A slice. "You may approve trust lines for me." That is one narrow part of a bigger transaction type. The delegate can approve holders. It cannot change limits or freeze anyone. These slices are called granular permissions.
The ledger offers twelve slices today. They cover jobs token issuers do all day:
- Approve, freeze or unfreeze one trust line.
- Mint new tokens or burn them with a payment.
- Lock or unlock an MPT balance.
- Change a few account settings: domain, transfer fee, tick size.
You cannot invent your own slice. "Payments in this one currency only" is not on the list, so you cannot grant it.
Some doors never open to a delegate. A delegate can never:
- Change your keys.
- Change your signer list.
- Add or change delegates.
- Delete your account.
- Change your account settings as a whole.
The rule behind the list: nothing that hands out more control. A delegate cannot promote itself.
One delegate holds ten permissions at most. If a job needs more, xrpl.org suggests multi-signing instead.
A PermissionValue is a 32-bit number. In JSON, use the string name.
Transaction type permissions have values 1 to 65536. The value is the transaction type's number plus one. "Payment" is transaction type 0 and permission value 1. The value 0 means full permissions and cannot be delegated.
Granular permissions start at 65537.
| Value | Name | Transaction type |
|---|---|---|
| 65537 | TrustlineAuthorize | TrustSet |
| 65538 | TrustlineFreeze | TrustSet |
| 65539 | TrustlineUnfreeze | TrustSet |
| 65540 | AccountDomainSet | AccountSet |
| 65541 | AccountEmailHashSet | AccountSet |
| 65542 | AccountMessageKeySet | AccountSet |
| 65543 | AccountTransferRateSet | AccountSet |
| 65544 | AccountTickSizeSet | AccountSet |
| 65545 | PaymentMint | Payment |
| 65546 | PaymentBurn | Payment |
| 65547 | MPTokenIssuanceLock | MPTokenIssuanceSet |
| 65548 | MPTokenIssuanceUnlock | MPTokenIssuanceSet |
PaymentBurn cannot burn past a zero balance.
Non-delegable transaction types include AccountSet, SetRegularKey, SignerListSet, DelegateSet, AccountDelete and Batch. The list also holds every pseudo-transaction, plus the vault, lending and SponsorshipTransfer types from amendments still in voting. AccountSet as a whole is blocked, yet five of its settings are delegable as granular permissions.
Batch itself cannot be delegated. A delegate can still send inner transactions it has permission for.
Other limits
- Up to 10 permissions per delegate.
- No delegation to a pseudo-account, such as an AMM or a vault.
- Delegated transactions cannot wait in the transaction queue. One that cannot enter the open ledger at once fails with
telCAN_NOT_QUEUE. - The number of delegates is limited by the owner reserve.
Check which transaction types a server knows, and their numbers, in the TRANSACTION_TYPES field of server_definitions.
Related: Batch transactions, Freeze, Deep Freeze and Clawback, Multi-Purpose Tokens.
- Permission ValuesRead 2026-11-10
- Permission DelegationRead 2026-11-10
- Transaction QueueRead 2026-11-10
- XLS-75 Permission DelegationRead 2026-11-10
