{"templateId":"markdown","sharedDataIds":{"sidebar":"sidebar-products/wallet/sidebars.yaml"},"props":{"metadata":{"markdoc":{"tagList":["admonition"]},"type":"markdown"},"seo":{"title":"Wallet ID policy matcher","description":"User guides, API reference, and support resources.","siteUrl":"https://docs.ripple.com/products/custody","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":"wallet-id-policy-matcher","__idx":0},"children":["Wallet ID policy matcher"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Currently we have ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["addressID"]}," matcher which can accept both addressIDs (from address book) and walletIDs (internal wallets). From now on, this will need to be specified in separate fields:"]},{"$$mdtype":"Tag","name":"ol","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["addressID"]}," for addresses in address book."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["walletID"]}," for internal wallets."]}]},{"$$mdtype":"Tag","name":"Admonition","attributes":{"type":"success"},"children":[{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Any existing policies will be migrated automatically and require no action on your part."]}]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"impact","__idx":1},"children":["Impact"]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"behaviour","__idx":2},"children":["Behaviour"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["While previously, a single policy having an ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["addressID"]}," matcher can take multiple values, each value being either a ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["addressID"]}," or ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["walletID"]},", this change will require you to specify two distinct matchers, one containing all addressIDs and another containing walletIDs respectively."]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["For example, the following policy matcher, where ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["4a2b6f8b-5077-4d52-8368-07b342c651b3"]}," is addressID and ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["25ca96e0-9ff5-46d0-9496-2c555593fc99"]}," is an internal walletID, would have been valid before, is now invalid:"]},{"$$mdtype":"Tag","name":"CodeBlock","attributes":{"data-language":"json","header":{"controls":{"copy":{}}},"source":"[\n\t{\n\t  \"type\": \"ADDRESS_ID\",\n\t  \"values\": [\n\t  \"4a2b6f8b-5077-4d52-8368-07b342c651b3\", \n\t  \"25ca96e0-9ff5-46d0-9496-2c555593fc99\"\n\t  ]\n\t}\n]\n","lang":"json"},"children":[]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Instead, the new policy matcher will have to have one policy for addressIDs:"]},{"$$mdtype":"Tag","name":"CodeBlock","attributes":{"data-language":"json","header":{"controls":{"copy":{}}},"source":"[\n\t{\n\t  \"type\": \"ADDRESS_ID\",\n\t  \"values\": [\n\t  \"4a2b6f8b-5077-4d52-8368-07b342c651b3\"\n\t  ]\n\t}\n]\n","lang":"json"},"children":[]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["and another policy for walletIDs:"]},{"$$mdtype":"Tag","name":"CodeBlock","attributes":{"data-language":"json","header":{"controls":{"copy":{}}},"source":"[\n\t{\n\t  \"type\": \"WALLET_ID\",\n\t  \"values\": [\n\t  \"25ca96e0-9ff5-46d0-9496-2c555593fc99\"\n\t  ]\n\t}\n]\n","lang":"json"},"children":[]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"api-driven-flows","__idx":3},"children":["API driven flows"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["If you are using APIs to manage your policies, you will need to change the requests in order to fit the new model as described in the behaviour section above."]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Particularly, if you are using one policy matcher of ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["ADDRESS_ID"]}," to fit addressIDs (from address book) and walletIDs (from internal wallets), then you will need to instead create two policies, one with ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["ADDRESS_ID"]}," matcher type whose values contain address book addressIDs only, and another with ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["WALLET_ID"]}," type whose values contain internal walletIDs only."]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"action-items","__idx":4},"children":["Action items"]},{"$$mdtype":"Tag","name":"ul","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"input","attributes":{"checked":false,"type":"checkbox","readOnly":true},"children":[]}," Ensure all programmatic policy creation is updated to create two distinct policies for ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["ADDRESS_ID"]}," type and ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["WALLET_ID"]}," type matchers instead of a single policy."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"input","attributes":{"checked":false,"type":"checkbox","readOnly":true},"children":[]}," Verify existing policies to ensure the behaviour is as expected."]}]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"timeline","__idx":5},"children":["Timeline"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Sandbox deployment: ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["22nd January 2025"]}]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Production deployment: ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["24th January 2025"]}]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"references","__idx":6},"children":["References"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Create wallet limit API documentation: ",{"$$mdtype":"Tag","name":"a","attributes":{"href":"/products/wallet/api-docs/palisade-api/palisade-api"},"children":["Wallet-as-a-Service (Palisade) API"]}]}]},"headings":[{"value":"Wallet ID policy matcher","id":"wallet-id-policy-matcher","depth":1},{"value":"Impact","id":"impact","depth":2},{"value":"Behaviour","id":"behaviour","depth":2},{"value":"API driven flows","id":"api-driven-flows","depth":2},{"value":"Action items","id":"action-items","depth":2},{"value":"Timeline","id":"timeline","depth":2},{"value":"References","id":"references","depth":2}],"frontmatter":{"title":"Wallet ID policy matcher","seo":{"title":"Wallet ID policy matcher"}},"lastModified":"2026-01-29T15:53:00.000Z","pagePropGetterError":{"message":"","name":""}},"slug":"/products/wallet/changelogs/wallet-id-policy-matcher","userData":{"isAuthenticated":false,"teams":["anonymous"]},"isPublic":true}