{"templateId":"markdown","sharedDataIds":{"sidebar":"sidebar-products/wallet/sidebars.yaml"},"props":{"metadata":{"markdoc":{"tagList":["admonition"]},"type":"markdown"},"seo":{"title":"Manage policies via the console","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":"manage-policies-via-the-console","__idx":0},"children":["Manage policies via the console"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Transaction policies define the rules that govern outgoing transactions from your wallets. Without an applicable policy for a given asset, Ripple Custody (Wallet) blocks all outgoing transactions for that asset. Design policies that balance operational flexibility with security controls."]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["This page explains how to create, change, and delete policy rules in the Ripple Custody (Wallet) console: limit rules, approval rules, and Travel Rule rules. For how the rule kinds work together, see ",{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"/products/wallet/governance-and-controls/policies#rule-kinds"},"children":["Policies"]},". To manage rules with the API, see ",{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"/products/wallet/governance-and-controls/policies/manage-policies-api"},"children":["Manage policy rules via the API"]},"."]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"policy-actions","__idx":1},"children":["Policy actions"]},{"$$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":"Action"},"children":["Action"]},{"$$mdtype":"Tag","name":"th","attributes":{"data-label":"Console role"},"children":["Console role"]},{"$$mdtype":"Tag","name":"th","attributes":{"data-label":"Console procedure"},"children":["Console procedure"]},{"$$mdtype":"Tag","name":"th","attributes":{"data-label":"API procedure"},"children":["API procedure"]}]}]},{"$$mdtype":"Tag","name":"tbody","attributes":{},"children":[{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Create a limit, approval, or Travel Rule rule"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Owner, Administrator"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"#create-a-policy-via-the-console"},"children":["Create a policy"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"/products/wallet/governance-and-controls/policies/manage-policies-api#create-a-policy-rule-via-the-api"},"children":["Create a policy rule"]}]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Check rule status"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["All except Viewer"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"#view-policy-status-via-the-console"},"children":["View policy status"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"/products/wallet/governance-and-controls/policies/manage-policies-api#list-a-wallets-policy-rules-via-the-api"},"children":["List a wallet's policy rules"]}]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Get a policy rule"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["All except Viewer"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Open the wallet's ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Policy"]}," tab."]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"/products/wallet/governance-and-controls/policies/manage-policies-api#get-a-policy-rule-via-the-api"},"children":["Get a policy rule"]}]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Change a rule"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Owner, Administrator"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"#modify-a-policy-via-the-console"},"children":["Modify a policy"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"/products/wallet/governance-and-controls/policies/manage-policies-api#change-a-policy-rule-via-the-api"},"children":["Change a policy rule"]}]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Delete a rule"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Owner, Administrator"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"#delete-a-policy-via-the-console"},"children":["Delete a policy"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"/products/wallet/governance-and-controls/policies/manage-policies-api#delete-a-policy-rule-via-the-api"},"children":["Delete a policy rule"]}]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Manage wallet limits"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["-"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["-"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"/products/wallet/governance-and-controls/policies/manage-policies-api#use-the-wallet-limits-endpoints-via-the-api"},"children":["Use the wallet limits endpoints"]}]}]}]}]}]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Permissions:"]}," In the console, owners and administrators can create and delete policy rules. Owners, administrators, proposers, and approvers can approve them, and every role except viewer can view them. See ",{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"/products/wallet/organization-and-access/users-and-roles#policies"},"children":["User roles and permissions"]},". The API procedures need an API credential of type ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["CONTROLS"]},". See ",{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"/products/wallet/governance-and-controls/policies/manage-policies-api#prerequisites"},"children":["Prerequisites"]},"."]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"before-you-begin","__idx":2},"children":["Before you begin"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Complete these prerequisites before creating policies:"]},{"$$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":"Requirement"},"children":["Requirement"]},{"$$mdtype":"Tag","name":"th","attributes":{"data-label":"Description"},"children":["Description"]}]}]},{"$$mdtype":"Tag","name":"tbody","attributes":{},"children":[{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Vault created"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["You need an existing vault. See ",{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"/products/wallet/get-started/console/create-your-first-vault"},"children":["Create your first vault"]},"."]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Wallet created"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["You need an existing wallet within the vault. See ",{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"/products/wallet/get-started/console/create-your-first-wallet"},"children":["Create your first wallet"]},"."]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Console access"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["You need the Owner or Administrator role to create or delete policy rules. The ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Add a new rule"]}," button appears only for these roles."]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["API credentials (for API usage)"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Credentials with the ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["policy:create"]},", ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["policy:read"]},", and ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["policy:delete"]}," permissions for the policy rules API, or ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["keylimit:create"]},", ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["keylimit:read"]},", and ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["keylimit:delete"]}," for the older wallet limits endpoints. See ",{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"/products/wallet/governance-and-controls/policies/manage-policies-api#prerequisites"},"children":["Manage policy rules via the API"]},"."]}]}]}]}]},{"$$mdtype":"Tag","name":"Admonition","attributes":{"type":"warning","name":"Wallets are deposit-only by default"},"children":[{"$$mdtype":"Tag","name":"p","attributes":{},"children":["You must create a policy for an asset before you can send outgoing transactions with that asset."]}]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"how-policies-work","__idx":3},"children":["How policies work"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["When a user or API credential submits a transaction, the Ripple Custody (Wallet) policy engine automatically evaluates it against the wallet's active policies. The engine checks:"]},{"$$mdtype":"Tag","name":"ol","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Does a policy exist for this asset?"]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Does the transaction amount fall within the policy's limit?"]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Is the destination permitted by the policy?"]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Is the initiator permitted by the policy (if restricted)?"]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Do any other policy matchers, such as transaction type, signing address, or chain ID, match the transaction?"]}]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["If a policy with matchers matches the transaction, only the matching policies with matchers apply. Otherwise, the policies without matchers apply. The transaction must satisfy ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["every"]}," applicable policy. If no policy applies, or the transaction exceeds any applicable policy, the platform blocks it. See ",{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"/products/wallet/governance-and-controls/policies#evaluation-order"},"children":["Policy evaluation"]},"."]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"create-a-policy-via-the-console","__idx":4},"children":["Create a policy via the console"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Required role:"]}," Owner or Administrator."]},{"$$mdtype":"Tag","name":"ol","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Open the wallet in the Ripple Custody (Wallet) console and go to the ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Policy"]}," tab."]}]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Select ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Add a new rule"]},"."]}]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"p","attributes":{},"children":["On the ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Direction"]}," step, select ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Outbound"]}," for transfers from this wallet, or ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Inbound"]}," for deposits into this wallet. Only Travel Rule rules support ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Inbound"]},". Select ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Next"]},"."]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":[{"$$mdtype":"Tag","name":"img","attributes":{"src":"/assets/policy-stepper-direction.0b7cce0c07b4d56b9bcbdf2cf98f08b2813e5e964024b1277aaf48c022e2e9a1.9fccc40d.png","alt":"The Direction step of the Add policy rule form, with the Outbound and Inbound options"},"children":[]}]}]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"p","attributes":{},"children":["On the ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Rule"]}," step, select ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Limit"]},", ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Approval"]},", or ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Travel rule"]},", and then select ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Next"]},". ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Travel rule"]}," is unavailable until you connect a Travel Rule provider."]}]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"p","attributes":{},"children":["On the ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Conditions"]}," step, select the asset the rule applies to. The list shows assets currently held in the wallet."]},{"$$mdtype":"Tag","name":"Admonition","attributes":{"type":"info","name":"Non-standard assets"},"children":[{"$$mdtype":"Tag","name":"p","attributes":{},"children":["If the asset you need isn't listed, select ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Add asset"]}," and enter the asset's blockchain, standard, symbol, and contract address."]}]}]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Set the conditions for the rule:"]},{"$$mdtype":"Tag","name":"ul","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"p","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Limit:"]}," Enter the ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Value limit"]}," in the asset's native units (for example, ETH, not wei), and then select the limit type. See ",{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"/products/wallet/governance-and-controls/policies/policy-reference#limit-types"},"children":["Policy reference"]}," for details on each limit 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":"Limit type"},"children":["Limit type"]},{"$$mdtype":"Tag","name":"th","attributes":{"data-label":"What it controls"},"children":["What it controls"]},{"$$mdtype":"Tag","name":"th","attributes":{"data-label":"Example"},"children":["Example"]}]}]},{"$$mdtype":"Tag","name":"tbody","attributes":{},"children":[{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Per transaction"]}," (API: ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["SINGLE_TX"]},")"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Maximum amount for any single transaction"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["No single transaction can exceed 10 ETH"]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Rolling"]}," (API: ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["ROLLING"]},")"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Maximum amount within a time window"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["No more than 100 ETH per 24 hours"]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Max total value"]}," (API: ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["TOTAL"]},")"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Lifetime cap on total withdrawals"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["No more than 1,000 ETH can ever leave this wallet"]}]}]}]}]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["For ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Rolling"]},", select a ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Duration"]},": 1 hour, 1 day, 1 week, 2 weeks, 1 month, 3 months, 6 months, or 1 year. To enter another window, select ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Custom..."]},", enter a number, and select ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Hours"]},", ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Days"]},", ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Weeks"]},", ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Months"]},", or ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Years"]},". The window must be shorter than one year. The console offers ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["1 year"]},", but Ripple Custody (Wallet) rejects a rule with that duration."]}]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"p","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Approval:"]}," See ",{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"/products/wallet/governance-and-controls/approvals/step-up-approvals#create-a-step-up-approval-rule-via-the-console"},"children":["Create a step-up approval rule via the console"]},"."]}]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"p","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Travel rule:"]}," See ",{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"/products/wallet/compliance/travel-rule/set-up-travel-rule#create-a-travel-rule-policy-rule-via-the-console"},"children":["Create a Travel Rule policy rule via the console"]},"."]}]}]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Select ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Next"]},"."]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":[{"$$mdtype":"Tag","name":"img","attributes":{"src":"/assets/policy-stepper-limit-conditions.ba87923f8bd7aa2513f26033825cf1b8ae2f7b294ad45980d917e2255a831330.9fccc40d.png","alt":"The Conditions step with a Rolling limit of 1000 XRP over 1 day"},"children":[]}]}]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"p","attributes":{},"children":["On the ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Scope"]}," step, under ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["To"]},", select the destinations the rule applies to:"]},{"$$mdtype":"Tag","name":"ul","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["All counterparties and wallets"]},": Selected by default. The broadest option, which covers every destination."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["All counterparties"]},": Covers transactions to any counterparty and all its addresses. It doesn't cover transfers to your own wallets. In the API, this is the ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["ALL_COUNTERPARTIES"]}," matcher."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Selected counterparties"]},": Covers transactions only to specific counterparties and all addresses on those counterparty records. In the API, this is the ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["COUNTERPARTY_ID"]}," matcher."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Selected addresses"]},": Covers transactions only to specific addresses from your address book."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Selected wallets"]},": Covers transactions only to specific wallets within your organization."]}]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["You can also narrow the rule by ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Sign for address"]}," and ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Transaction types"]},", and, on an EVM wallet, by ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Chain IDs"]},". To enter a signing address that isn't listed, turn on ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Use a custom address"]},". Leave a field empty to apply the rule to all values. Select ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Next"]},". Approval rules skip the ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Scope"]}," and ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Advanced"]}," steps, because they don't support matchers."]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":[{"$$mdtype":"Tag","name":"img","attributes":{"src":"/assets/policy-stepper-scope.f372d6e396cd961709b105b551fd5ab56b8f063ae808a59ee0893f2c6fb7b14e.9fccc40d.png","alt":"The Scope step with destination options, including All counterparties"},"children":[]}]},{"$$mdtype":"Tag","name":"Admonition","attributes":{"type":"warning","name":"Cross-chain raw signing requires Chain ID"},"children":[{"$$mdtype":"Tag","name":"p","attributes":{},"children":["For cross-chain raw signing to an EVM chain that Ripple Custody (Wallet) doesn't natively support, add the target chain ID under ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Chain IDs"]}," (the ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["CHAIN_ID"]}," matcher). Rules without a matching ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["CHAIN_ID"]}," matcher don't authorize those transactions."]}]}]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"p","attributes":{},"children":["On the ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Advanced"]}," step, leave ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["All"]}," selected, or restrict the rule to one ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["User"]}," or ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["API credential"]},". Select ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Next"]},"."]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Each option in the ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Scope"]}," and ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Advanced"]}," steps sets a matcher:"]},{"$$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":"Option"},"children":["Option"]},{"$$mdtype":"Tag","name":"th","attributes":{"data-label":"API value"},"children":["API value"]},{"$$mdtype":"Tag","name":"th","attributes":{"data-label":"What it controls"},"children":["What it controls"]}]}]},{"$$mdtype":"Tag","name":"tbody","attributes":{},"children":[{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Transaction types"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["TRANSACTION_TYPE"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Applies the rule only to selected transaction types (for example, ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["OfferCreate"]}," only on an XRP Ledger wallet)."]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["User"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["USER"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Applies the rule only to transactions initiated by the selected user."]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["API credential"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["API_CREDENTIAL"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Applies the rule only to transactions initiated by the selected API credential."]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Sign for address"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["SIGN_FOR"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Applies the rule only to transactions signed for selected addresses (multi-signature scenarios)."]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Selected counterparties"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["COUNTERPARTY_ID"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Applies the rule only to selected counterparties and their registered addresses."]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Selected addresses"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["ADDRESS_ID"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Applies the rule only to selected address book entries."]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Selected wallets"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["WALLET_ID"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Applies the rule only to selected wallets in your organization."]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Chain IDs"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["CHAIN_ID"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Applies the rule only to selected EVM chain IDs for cross-chain raw signing."]}]}]}]}]}]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"p","attributes":{},"children":["On the ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Confirm"]}," step, review the rule, and then select ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Add policy rule"]},"."]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":[{"$$mdtype":"Tag","name":"img","attributes":{"src":"/assets/policy-stepper-limit-confirm.0f60f2bbb48edc7ac939a5aad137aaf4aff1da35be3461da6009c2b187606464.9fccc40d.png","alt":"The Confirm step for a Rolling limit rule"},"children":[]}]}]}]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"after-you-create-a-policy","__idx":5},"children":["After you create a policy"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["What happens next depends on your organization's approval configuration:"]},{"$$mdtype":"Tag","name":"ul","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"p","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["With approval groups configured:"]}," The policy shows ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Inactive | Approval pending"]},". Designated approvers receive a notification to review the policy, and find the request under ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Notifications"]}," > ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Approvals"]},". After the required number of approvers authorize it, the policy shows ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Active | Enabled"]},". If approvers don't respond within the timeout window, or if too many skip, the policy is rejected."]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":[{"$$mdtype":"Tag","name":"img","attributes":{"src":"/assets/policy-rule-approval-requests.e7404b86b6e2737369099a11a14b64d941d18f282b0f2bfa65713488d6e3fdf0.9fccc40d.png","alt":"Notifications showing three pending Policy rule approval requests"},"children":[]}]}]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"p","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Without approval groups configured:"]}," The policy ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["activates immediately"]}," after creation. You can start using it right away."]}]}]},{"$$mdtype":"Tag","name":"Admonition","attributes":{"type":"warning","name":"Active policies take effect immediately"},"children":[{"$$mdtype":"Tag","name":"p","attributes":{},"children":["The policy engine evaluates every outgoing transaction against a policy the moment the policy becomes active. Ripple Custody (Wallet) blocks any transaction that exceeds the limits or targets an unpermitted destination."]}]},{"$$mdtype":"Tag","name":"Admonition","attributes":{"type":"info","name":"Check your approval configuration"},"children":[{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Go to ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Controls > Approval groups"]}," to see if an approval group exists for Policy rules. 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"]}," to create one."]}]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"view-policy-status-via-the-console","__idx":6},"children":["View policy status via the console"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Each policy displays its current status in the ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Active"]}," column of the ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Policy"]}," tab. For example, a policy shows ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Inactive | Approval pending"]}," while its creation waits for approval, ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Active | Enabled"]}," while it's active, and ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Active | Approval pending"]}," while its deletion waits for approval. After a deletion takes effect, the policy no longer appears in the list. See ",{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"/products/wallet/governance-and-controls/policies/policy-reference#rule-statuses"},"children":["Rule statuses"]}," for the complete status reference."]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":[{"$$mdtype":"Tag","name":"img","attributes":{"src":"/assets/policy-rules-list.2199fd0f166e36eb7b0e211a125cc62798b2bef6bc71498767b7cb2f950e3255.9fccc40d.png","alt":"The Policy tab listing Approval, Travel rule, and Limit rules, all Active and Enabled"},"children":[]}]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"modify-a-policy-via-the-console","__idx":7},"children":["Modify a policy via the console"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Policies are immutable. You can't edit an existing policy. To change a policy:"]},{"$$mdtype":"Tag","name":"ol","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Create a new policy for the same asset with the updated values."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Wait for the new policy to be approved, if your organization requires approval, and become active."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Delete the old policy."]}]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":[{"$$mdtype":"Tag","name":"img","attributes":{"src":"/assets/policy-replace-rule.ff1af70397a7afd5a17c55f3a1ff2fd111c38123fec55c8c9c2b7b1d184c98bd.9fccc40d.png","alt":"The Policy tab with two Limit rules for XRP, both Active and Enabled"},"children":[]}]},{"$$mdtype":"Tag","name":"Admonition","attributes":{"type":"warning","name":"Avoid protection gaps"},"children":[{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Create the new policy before deleting the old one. This ensures continuous protection with no window where no policy applies."]}]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["See ",{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"/products/wallet/governance-and-controls/policies#policy-immutability"},"children":["Policy concepts"]}," for why policies are immutable."]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"delete-a-policy-via-the-console","__idx":8},"children":["Delete a policy via the console"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Required role:"]}," Owner or Administrator."]},{"$$mdtype":"Tag","name":"ol","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Open the wallet and go to the ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Policy"]}," tab."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Find the policy in the table."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Open the ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Actions"]}," menu (three dots) on the policy row and select ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Delete"]},"."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["In the ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Delete policy"]}," dialog, select ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Submit"]},"."]}]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":[{"$$mdtype":"Tag","name":"img","attributes":{"src":"/assets/policy-delete-dialog.c309a3bf75b1185aeedb7da2be002cd7ca35f68bd5c2ec9f22c14ff615707c69.9fccc40d.png","alt":"The Delete policy dialog with the Cancel and Submit buttons"},"children":[]}]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["What happens after deletion:"]}]},{"$$mdtype":"Tag","name":"ul","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["With approval groups:"]}," The policy shows ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Active | Approval pending"]},". It continues enforcing transactions until approvers authorize the deletion."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Without approval groups:"]}," The policy is deleted immediately and stops enforcing."]}]},{"$$mdtype":"Tag","name":"Admonition","attributes":{"type":"warning","name":"Removing the last policy blocks all sends"},"children":[{"$$mdtype":"Tag","name":"p","attributes":{},"children":["If you delete the only policy for an asset, the wallet can no longer send that asset until you create a new policy."]}]},{"$$mdtype":"Tag","name":"Admonition","attributes":{"type":"warning","name":"Cannot delete pending policies"},"children":[{"$$mdtype":"Tag","name":"p","attributes":{},"children":["You can't delete a policy that is still pending creation approval. Wait for it to be approved or rejected first."]}]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"manage-policies-with-the-api","__idx":9},"children":["Manage policies with the API"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["To create, list, get, and delete policy rules programmatically, see ",{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"/products/wallet/governance-and-controls/policies/manage-policies-api"},"children":["Manage policy rules via the API"]},"."]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"multiple-policies-for-the-same-asset","__idx":10},"children":["Multiple policies for the same asset"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["You can create multiple policies for the same asset in a wallet when:"]},{"$$mdtype":"Tag","name":"ul","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":["The policies have ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["different limit types"]}," (for example, one per-transaction and one rolling policy)"]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["The policies have ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["different filters"]}," (for example, one for all transactions and one for a specific user)"]}]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["When a user or API credential submits a transaction, the transaction must pass every applicable policy. This lets you create layered policies. For example:"]},{"$$mdtype":"Tag","name":"ul","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":["A ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["per transaction"]}," policy limiting individual sends to 10 ETH"]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["A ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["rolling"]}," policy limiting total sends to 100 ETH per 24 hours"]}]},{"$$mdtype":"Tag","name":"Admonition","attributes":{"type":"warning","name":"Scoped policies replace unscoped ones"},"children":[{"$$mdtype":"Tag","name":"p","attributes":{},"children":["When a policy with matchers applies to a transaction, policies without matchers don't apply to it. For example, if you add a 5 ETH policy for one API credential, Ripple Custody (Wallet) checks that credential's transactions against the 5 ETH policy only, not against the 10 ETH or 100 ETH policies. To keep a rolling cap for that credential, add a rolling policy with the same matcher."]}]},{"$$mdtype":"Tag","name":"Admonition","attributes":{"type":"info","name":"Policy matching"},"children":[{"$$mdtype":"Tag","name":"p","attributes":{},"children":["A policy matches a transaction if the wallet, asset, and all configured filters align with the transaction details. See ",{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"/products/wallet/governance-and-controls/policies#policy-evaluation"},"children":["Policy concepts"]}," for how policy evaluation works."]}]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"design-effective-policies","__idx":11},"children":["Design effective policies"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Consider these strategies when designing your policy structure:"]},{"$$mdtype":"Tag","name":"ul","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Layer multiple rule types."]}," Combine per-transaction limits with rolling limits and lifetime caps for defense in depth. Scoped policies replace unscoped ones, so repeat each layer with the same matchers."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Restrict destinations."]}," Use selected counterparties or addresses instead of \"all\" to limit where funds can go."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Restrict initiators."]}," Assign specific policies to specific users or API credentials. This prevents unauthorized users from initiating high-value transactions."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Start conservative."]}," Begin with low limits in sandbox, validate your operations, then adjust limits upward as needed."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Pair with approval groups."]}," Policies control allowed actions; approval groups add human oversight. Use both together. See ",{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"/products/wallet/governance-and-controls/approvals/configure-approval-flows"},"children":["Configure approval flows"]},"."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Escalate large transactions."]}," Use ",{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"/products/wallet/governance-and-controls/approvals/step-up-approvals"},"children":["step-up approvals"]}," to require specific approvers for transactions of more than an amount, instead of blocking them."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Meet Travel Rule obligations."]}," If your organization is a regulated VASP, use ",{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"/products/wallet/compliance/travel-rule"},"children":["Travel Rule"]}," policy rules to exchange originator and beneficiary information through Notabene."]}]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["For more patterns, see ",{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"/products/wallet/governance-and-controls/policies/best-practices"},"children":["Policy best practices"]},"."]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"related-documentation","__idx":12},"children":["Related documentation"]},{"$$mdtype":"Tag","name":"ul","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"/products/wallet/governance-and-controls/policies"},"children":["Policies"]}," - Understand scope, lifecycle, and evaluation"]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"/products/wallet/governance-and-controls/policies/policy-reference"},"children":["Policy reference"]}," - Complete reference for limit types, matchers, statuses, permissions, and error codes"]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"/products/wallet/governance-and-controls/policies/manage-policies-api"},"children":["Manage policy rules via the API"]}," - Create, list, get, and delete policy rules with the API"]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"/products/wallet/governance-and-controls/policies/best-practices"},"children":["Policy best practices"]}," - Recommended patterns and troubleshooting"]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"/products/wallet/get-started/console/unlock-outgoing-transactions"},"children":["Unlock outgoing transactions"]}," - Full walkthrough including policy setup"]}]}]},"headings":[{"value":"Manage policies via the console","id":"manage-policies-via-the-console","depth":1},{"value":"Policy actions","id":"policy-actions","depth":2},{"value":"Before you begin","id":"before-you-begin","depth":2},{"value":"How policies work","id":"how-policies-work","depth":2},{"value":"Create a policy via the console","id":"create-a-policy-via-the-console","depth":2},{"value":"After you create a policy","id":"after-you-create-a-policy","depth":2},{"value":"View policy status via the console","id":"view-policy-status-via-the-console","depth":2},{"value":"Modify a policy via the console","id":"modify-a-policy-via-the-console","depth":2},{"value":"Delete a policy via the console","id":"delete-a-policy-via-the-console","depth":2},{"value":"Manage policies with the API","id":"manage-policies-with-the-api","depth":2},{"value":"Multiple policies for the same asset","id":"multiple-policies-for-the-same-asset","depth":2},{"value":"Design effective policies","id":"design-effective-policies","depth":2},{"value":"Related documentation","id":"related-documentation","depth":2}],"frontmatter":{"title":"Manage policies via the console","seo":{"title":"Manage policies via the console"}},"lastModified":"2026-10-09T11:28:55.000Z","pagePropGetterError":{"message":"","name":""}},"slug":"/products/wallet/governance-and-controls/policies/manage-policies","userData":{"isAuthenticated":false,"teams":["anonymous"]},"isPublic":true}