# DelegateSet [[Source]](https://github.com/XRPLF/rippled/blob/1e01cd34f7a216092ed779f291b43324c167167a/src/xrpld/app/tx/detail/DelegateSet.cpp) [Delegate permissions](/docs/concepts/accounts/permission-delegation) to another account to send transactions on your behalf. This transaction type can grant, change, or revoke permissions; it creates, modifies, or deletes a [Delegate ledger entry](/docs/references/protocol/ledger-data/ledger-entry-types/delegate) accordingly. PermissionDelegation ## Example JSON ```json { "TransactionType": "DelegateSet", "Account": "rw81qtsfF9rws4RbmYepf5394gp81TQv5Y", "Authorize": "r9GAKojMTyexqvy8DXFWYq63Mod5k5wnkT", "Fee": "1", "Flags": 0, "LastLedgerSequence": 4747822, "Permissions": [ { "Permission": { "PermissionValue": "AccountDomainSet" } } ], "Sequence": 4747802 } ``` ## Fields In addition to the [common fields](/docs/references/protocol/transactions/common-fields), transactions use the following fields: | Field | Required? | JSON Type | Internal Type | Description | | --- | --- | --- | --- | --- | | `Authorize` | Yes | String - [Address](/docs/references/protocol/data-types/basic-data-types#addresses) | AccountID | The account being granted permissions, also called the *delegate*. | | `Permissions` | Yes | Array | Array | A list of up to 10 [Permission objects](#permission-objects) each specifying a different permission granted to the delegate. The delegate's permissions are updated to match this set of permissions exactly. To revoke all permissions, use an empty array. | If a [Delegate ledger entry](/docs/references/protocol/ledger-data/ledger-entry-types/delegate) does not exist to record the granted permissions, this transaction creates one. If it already exists, the transaction updates the set of permissions to match the list in the transaction: any permissions not listed are revoked. If all permissions are revoked, the transaction deletes the Delegate ledger entry. Tip If you want to delegate more than 10 permissions, consider using [multi-signing](/docs/concepts/accounts/multi-signing) instead. ### Permission Objects Each item in the `Permissions` array is an inner object with the following nested field: | Field | JSON Type | [Internal Type](/docs/references/protocol/binary-format) | Required? | Description | | --- | --- | --- | --- | --- | | `PermissionValue` | String or Number | UInt32 | Yes | A permission to grant to the delegate, which can be either a transaction type or a granular permission. See [Permission Values](/docs/references/protocol/data-types/permission-values) for a full list. | ## Error Cases Besides errors that can occur for all transactions, transactions can result in the following [transaction result codes](/docs/references/protocol/transactions/transaction-results): | Error Code | Description | | --- | --- | | `tecDIR_FULL` | The sender owns too many items in the ledger already. | | `tecINSUFFICIENT_RESERVE` | The sender does not have enough XRP to meet the [reserve requirement](/docs/concepts/accounts/reserves) of creating a new Delegate ledger entry. | | `tecNO_PERMISSION` | At least one permission in the `Permissions` list is not delegatable. See [Permission Values](/docs/references/protocol/data-types/permission-values) for which permissions are not delegatable. | | `tecNO_TARGET` | The account specified in the `Authorize` field does not exist in the ledger. | | `temARRAY_TOO_LARGE` | The `Permissions` list is too large. It cannot contain more than 10 entries. | | `temDISABLED` | The [Permission Delegation amendment][] is not enabled. | | `temMALFORMED` | The transaction was invalid. For example, the `Authorize` account is the same as the sender of the transaction, the `Permissions` list contains duplicate entries, or one of the permissions in the list is not a valid permission. | ## See Also - [Delegate ledger entry](/docs/references/protocol/ledger-data/ledger-entry-types/delegate)