{"templateId":"markdown","sharedDataIds":{"sidebar":"sidebar-products/wallet/sidebars.yaml"},"props":{"metadata":{"markdoc":{"tagList":["admonition"]},"type":"markdown"},"seo":{"title":"Approvals","description":"User guides, API reference, and support resources.","siteUrl":"https://docs.ripple.com","lang":"en-US","llmstxt":{"hide":false,"sections":[{"title":"Table of contents","includeFiles":["**/*"],"excludeFiles":[]}],"excludeFiles":[]}},"dynamicMarkdocComponents":[],"compilationErrors":[],"ast":{"$$mdtype":"Tag","name":"article","attributes":{},"children":[{"$$mdtype":"Tag","name":"Heading","attributes":{"level":1,"id":"approvals","__idx":0},"children":["Approvals"]},{"$$mdtype":"Tag","name":"Admonition","attributes":{"type":"info","name":"In this section"},"children":[{"$$mdtype":"Tag","name":"ul","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"/products/wallet/governance-and-controls/approvals/configure-approval-flows"},"children":["Configure approval flows"]}," – Create, update, and delete approval groups, and set wallet-level approvers"]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"/products/wallet/governance-and-controls/approvals/step-up-approvals"},"children":["Step-up approvals"]}," – Require specific approvers for transactions of more than an amount"]}]}]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Approvals in Ripple Custody (Wallet) add human review to transactions and sensitive organization changes. When an approval group applies to an action, the action remains pending until enough approvers authorize it in the Ripple Custody (Wallet) web console or mobile app."]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Approvers are organized within approval groups. Most approval groups use selected users as approvers. The ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Approval groups"]}," approval type uses active organization owners as approvers and protects changes to approval groups themselves."]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"what-approval-groups-govern","__idx":1},"children":["What approval groups govern"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Each approval group applies to one entity type:"]},{"$$mdtype":"Tag","name":"div","attributes":{"className":"md-table-wrapper"},"children":[{"$$mdtype":"Tag","name":"table","attributes":{"className":"md"},"children":[{"$$mdtype":"Tag","name":"thead","attributes":{},"children":[{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"th","attributes":{"data-label":"Entity type"},"children":["Entity type"]},{"$$mdtype":"Tag","name":"th","attributes":{"data-label":"What requires approval"},"children":["What requires approval"]}]}]},{"$$mdtype":"Tag","name":"tbody","attributes":{},"children":[{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Transactions"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Designated approvers must approve outgoing transactions before the MPC quorum signs them and Ripple Custody (Wallet) broadcasts them to the blockchain."]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Addresses"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Designated approvers must approve new address book entries before they become active, and address deletions before they take effect."]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Policy rules"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Designated approvers must approve new policy rules before they take effect, and policy rule deletions before they're removed."]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["API credentials"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Designated approvers must approve new API credentials before integrations can use them."]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Users"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Designated approvers must approve new user invitations before Ripple Custody (Wallet) sends the invitation."]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Devices"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Designated approvers must approve new device registrations before the device can join a quorum."]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Approval groups"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Active organization owners approve approval group changes before Ripple Custody (Wallet) applies them."]}]}]}]}]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Every change to one of these entity types goes through an approval request. If the entity type has no approval group, Ripple Custody (Wallet) approves the request automatically, so the console can show ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Approval pending"]}," briefly before the change takes effect."]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Each entity type can have one default approval group that applies organization-wide. ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Only transaction approval groups support wallet-level overrides."]}," All other entity types are organization-wide only."]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["You can't change the approval type of an existing approval group. To change the type, delete the approval group and create a new one."]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["To create approval groups, see ",{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"/products/wallet/governance-and-controls/approvals/configure-approval-flows#create-an-approval-group-via-the-console"},"children":["Configure approval flows"]},"."]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"wallet-level-transaction-approvals","__idx":2},"children":["Wallet-level transaction approvals"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["By default, the organization's transaction approval group applies to all wallets. Each wallet can override it with one of these options on its ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Approvers"]}," tab:"]},{"$$mdtype":"Tag","name":"ul","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Do not use an approval group"]},": No approvals apply to transactions from this wallet."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Use default approval group"]},": The wallet uses the organization-level transaction approval group."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Use a custom list of approvers for this wallet"]},": The wallet uses wallet-specific approvers and threshold settings."]}]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["To require different approvers only for transactions of more than an amount, use ",{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"/products/wallet/governance-and-controls/approvals/step-up-approvals"},"children":["step-up approvals"]},". When a step-up approval rule applies, its approvers replace the wallet's transaction approval group for that transaction."]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["For the procedure, see ",{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"/products/wallet/governance-and-controls/approvals/configure-approval-flows#add-an-approval-group-to-a-wallet-via-the-console"},"children":["Add an approval group to a wallet"]},"."]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"approval-group-change-protection","__idx":3},"children":["Approval group change protection"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["The ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Approval groups"]}," type is a special organization-wide control. It governs approval groups themselves, including wallet-level transaction approval group overrides. This control protects the settings that decide who can approve transactions, addresses, policies, API credentials, users, devices, and approval group changes. Ripple Custody (Wallet) manages its approver list and uses the organization's active owners. You set only the required approval threshold and timeout."]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["The first ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Approval groups"]}," approval group turns on this requirement. After it exists, Ripple Custody (Wallet) applies creations, updates, and deletions of organization-level approval groups, and changes to wallet-level transaction approval group overrides, only after enough active owners approve them. While a change is pending, the current configuration stays in effect."]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["To turn on this requirement, see ",{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"/products/wallet/governance-and-controls/approvals/configure-approval-flows#require-approval-for-approval-group-changes-via-the-console"},"children":["Require approval for approval group changes"]},"."]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"how-approvals-work-at-runtime","__idx":4},"children":["How approvals work at runtime"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["When a user or API credential performs an action governed by an approval group:"]},{"$$mdtype":"Tag","name":"ol","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":["The action enters a ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["pending"]}," state."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Approvers receive notifications in the Ripple Custody (Wallet) web console and on their registered mobile devices, if they have one."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Approvers review and approve or reject the action."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["If the minimum number of approvals is met within the timeout window, the action proceeds."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["If the timeout expires before the action receives enough approvals, Ripple Custody (Wallet) automatically rejects the action."]}]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Each approval group sets its own timeout. The default timeout is 1 hour."]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["For how approvals fit together with MPC signing, see ",{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"/products/wallet/governance-and-controls"},"children":["Governance and controls overview"]},"."]}]},"headings":[{"value":"Approvals","id":"approvals","depth":1},{"value":"What approval groups govern","id":"what-approval-groups-govern","depth":2},{"value":"Wallet-level transaction approvals","id":"wallet-level-transaction-approvals","depth":2},{"value":"Approval group change protection","id":"approval-group-change-protection","depth":2},{"value":"How approvals work at runtime","id":"how-approvals-work-at-runtime","depth":2}],"frontmatter":{"title":"Approvals","seo":{"title":"Approvals"}},"lastModified":"2026-10-09T11:09:54.000Z","pagePropGetterError":{"message":"","name":""}},"slug":"/products/wallet/governance-and-controls/approvals","userData":{"isAuthenticated":false,"teams":["anonymous"]},"isPublic":true}