{"docsConfig":{"theme":"palm","$schema":"https://mintlify.com/docs.json","name":"DFNS documentation","description":"DFNS documentation","colors":{"primary":"#442599","light":"#AA8BFF","dark":"#170C33"},"logo":{"light":"https://mintcdn.com/dfns-6d8c7466/nK-LFGxQwVjg0flm/images/logo/dfnsdocs-light.svg?fit=max\u0026auto=format\u0026n=nK-LFGxQwVjg0flm\u0026q=85\u0026s=3dc89a5cca38026355ba1f7435c733d4","dark":"https://mintcdn.com/dfns-6d8c7466/nK-LFGxQwVjg0flm/images/logo/dfnsdocs-dark.svg?fit=max\u0026auto=format\u0026n=nK-LFGxQwVjg0flm\u0026q=85\u0026s=3a8ce8faa31e336af786238250ba6645"},"favicon":{"light":"https://mintcdn.com/dfns-6d8c7466/nK-LFGxQwVjg0flm/favicon.png?fit=max\u0026auto=format\u0026n=nK-LFGxQwVjg0flm\u0026q=85\u0026s=baf24d895161cf680f52d298fc95eaee","dark":"https://mintcdn.com/dfns-6d8c7466/nK-LFGxQwVjg0flm/favicon.png?fit=max\u0026auto=format\u0026n=nK-LFGxQwVjg0flm\u0026q=85\u0026s=baf24d895161cf680f52d298fc95eaee"},"appearance":{"default":"system","strict":false},"navbar":{"links":[{"icon":"newspaper","href":"https://www.dfns.co/blog","label":"Blog"},{"icon":"life-ring","href":"https://support.dfns.co","label":"Support"},{"icon":"house","href":"https://app.dfns.io","label":"Dashboard"}],"primary":{"type":"button","label":"Get started","href":"https://app.dfns.io/get-started"}},"footer":{"socials":{"x":"https://x.com/dfnsHQ","github":"https://github.com/dfns","linkedin":"https://linkedin.com/company/dfnshq"}},"fonts":{"family":"SuisseIntl","source":"fonts/SuisseIntl-Regular.woff2","format":"woff2"},"icons":{"library":"fontawesome"},"styling":{"eyebrows":"breadcrumbs","latex":true},"contextual":{"options":["copy","mcp","cursor","vscode","claude","chatgpt"],"display":"header"},"thumbnails":{"appearance":"light","background":"https://mintlify.s3.us-west-1.amazonaws.com/dfns-6d8c7466/%23F0F1F4"},"metadata":{"timestamp":true},"navigation":{"pages":[]}},"deployment":{"deploymentMetadataValue":{"subdomain":"dfns-6d8c7466","hasAudioNarration":false,"actualSubdomain":"dfns-6d8c7466","customDomains":["docs.dfns.co"],"gitSource":{"type":"github","owner":"dfns","repo":"docs","deployBranch":"m","contentDirectory":"","isPrivate":true,"mountPath":"","label":""},"chroma":{"liveDeploymentHistoryId":"6ae45844c2eaceb0e344455f","collectionId":"ebe92302-033a-47e3-9f7c-03e602bce5c1","schemaVersion":"v3","latestBuiltDeploymentHistoryId":"6ae45844c2eaceb0e344455f"},"feedback":{"thumbs":true,"edits":false,"issues":false,"agentFeedback":true},"entitlements":{"AI_CHAT":{"status":"ENABLED"},"WEB_MCP":{"status":"ENABLED"},"NARRATION":{"status":"ENABLED"}},"buildId":"6ae45844c2eaceb0e344455f","clientVersion":"0.0.4021","searchFilterCounts":[{"language":"default","tag":"API reference","count":378},{"language":"default","tag":"Wallets \u0026 Transactions","count":215},{"language":"default","tag":"Documentation","count":142},{"language":"default","tag":"Identity \u0026 Access Management","count":89},{"language":"default","tag":"Guides","count":60},{"language":"default","tag":"Webhooks","count":54},{"language":"default","tag":"Wallets","count":38},{"language":"default","tag":"Management","count":36},{"language":"default","tag":"Examples per chain","count":33},{"language":"default","tag":"Networks","count":32}]},"assistantConfig":{},"basePath":"","hasChatPermissions":true,"hasWebMcpPermissions":true,"toggles":[{"name":"kill-isr","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-mintlify-slack","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-integrations-settings","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-pr-grouping","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"custom-prefix","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"analytics-v7","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"user-flows-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"no-publish-flow","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-onboarding","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"llms-txt-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving-live","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"stripTemperatureMiddleware","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"support-platform-pylon-zendesk","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"instant-rollback","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications-server","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-fable","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fixed-ai-action-pricing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automation-resolve-merge-conflict","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"scoped-publishing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"mintql","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"page-level-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-version-history-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"billing-page-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workspace-projects","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"assistant-v5","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"byok-sep-25","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fork-pr-previews","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"revalidation-jwt","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"vite-origin","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"billing-updated-9-15","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-sso-scim","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"hobby-abuse-scan","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"dashboard-inbox","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-signup","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-enabled","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"approve-review-flow","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false}],"googleFontsInlined":false},"customCss":[{"filePath":"style.css","content":"@font-face{font-family:\"SuisseIntl\";src:url(/fonts/SuisseIntl-Regular.woff2) format(\"woff2\");font-weight:400;font-display:swap}@font-face{font-family:\"SuisseIntl\";src:url(/fonts/SuisseIntl-Medium.woff2) format(\"woff2\");font-weight:500;font-display:swap}@font-face{font-family:\"SuisseIntl\";src:url(/fonts/SuisseIntl-Semibold.woff2) format(\"woff2\");font-weight:600;font-display:swap}@font-face{font-family:\"SuisseIntl\";src:url(/fonts/SuisseIntl-Bold.woff2) format(\"woff2\");font-weight:700;font-display:swap}@property --text-size{syntax:\"\u003clength>\";inherits:false;initial-value:1rem}html{scroll-behavior:smooth}body{font-size:var(--text-size);letter-spacing:-.01rem}#banner{background-color:#e0e3f0}#banner *{color:#1e202e}#table-of-contents-layout:has(div){border:1px solid rgb(var(--gray-200));background-color:#f0f1f4;padding-top:1rem;padding-bottom:1rem;padding-left:2rem}#table-of-contents-layout:has(div):is(.dark *){border:1px solid rgb(var(--gray-600));background-color:rgb(var(--gray-800))}#table-of-contents-layout:has(div)>#table-of-contents.-mt-10{margin-top:0}#table-of-contents-layout:has(div)>#table-of-contents.pt-10{padding-top:1rem}#table-of-contents-layout:has(div)>#table-of-contents>div{padding-top:1rem;padding-bottom:1rem}h1,h2,h3,h4,h5,h6{letter-spacing:-.01rem!important;font-weight:700}#content-container{scroll-margin-top:5rem}#content-area table:not(.token-kinds-allowed){display:table;border-collapse:collapse;width:100%;border-top-left-radius:.5rem;border-top-right-radius:.5rem;overflow:hidden}#content-area table:not(.token-kinds-allowed) a{overflow-wrap:anywhere}#content-area table:not(.token-kinds-allowed) tr:nth-child(even){background-color:#f0f1f4}#content-area table:not(.token-kinds-allowed) tr:nth-child(even):is(.dark *){background-color:rgb(var(--gray-900))}#content-area table:not(.token-kinds-allowed) th{background-color:rgb(var(--gray-200));font-weight:700;vertical-align:middle}#content-area table:not(.token-kinds-allowed) th:is(.dark *){background-color:rgb(var(--gray-600))}#content-area table:not(.token-kinds-allowed) td,#content-area table:not(.token-kinds-allowed) th{border:1px solid rgb(var(--gray-200));padding:.5rem 1rem;min-width:0}#content-area table:not(.token-kinds-allowed) td:is(.dark *),#content-area table:not(.token-kinds-allowed) th:is(.dark *){border:1px solid rgb(var(--gray-600))}#content-area table.token-kinds-allowed td:nth-child(1){line-height:2.5em;white-space:nowrap;width:1%;padding-right:1rem}#content-area table.token-kinds-allowed td:nth-child(2){border-left:3px solid rgb(var(--gray-200));padding-left:1rem}#content-area table.token-kinds-allowed td:nth-child(2):is(.dark *){border-left:3px solid rgb(var(--gray-600))}#endpoint-token-kinds-allowed{display:flex;flex-direction:row;flex-wrap:wrap;line-height:2.5em}#endpoint-token-kinds-allowed #endpoint-user-tokens{padding-right:1.5rem;flex:initial}#endpoint-token-kinds-allowed #endpoint-user-kinds{padding-left:1rem;flex:auto;display:flex;flex-direction:column;align-content:flex-start;border-left:3px solid rgb(var(--gray-200));flex-wrap:wrap;justify-content:space-around;align-items:flex-start;line-height:normal}#endpoint-token-kinds-allowed #endpoint-user-kinds *{color:rgb(var(--gray-600))}#endpoint-token-kinds-allowed #endpoint-user-kinds:is(.dark *){border-left:3px solid rgb(var(--gray-600))}#endpoint-token-kinds-allowed #endpoint-other-tokens{flex-basis:100%}.api-section .tabs>ul{width:1px;max-width:100%}#navbar:is(.dark *){--background-dark:var(--gray-800)}#mobile-nav,#sidebar-content{background-color:#f0f1f4}#mobile-nav:is(.dark *),#sidebar-content:is(.dark *){background-color:rgb(var(--gray-800))}#navigation-items li>a:has(:nth-child(2))>:first-child{mask-size:contain!important;flex-basis:2rem}#navigation-items div.sidebar-group-header:has(svg){margin-left:-1.5rem;font-weight:600}#navigation-items .sidebar-group-header+ul>li[data-group-tag]>button,#navigation-items .sidebar-group-header+ul>li[data-group-tag]>div{margin-left:-18px;padding-left:16px!important}#navigation-items .sidebar-group-header+ul>li>ul>li{margin-left:1.5px}#navigation-items .sidebar-group-header+ul>li>ul>li ul>li>a,#navigation-items .sidebar-group-header+ul>li>ul>li ul>li[data-group-tag]>button,#navigation-items .sidebar-group-header+ul>li>ul>li ul>li[data-group-tag]>div,#navigation-items .sidebar-group-header+ul>li>ul>li>a,#navigation-items .sidebar-group-header+ul>li>ul>li[data-group-tag]>button,#navigation-items .sidebar-group-header+ul>li>ul>li[data-group-tag]>div{padding-left:13.5px!important}#navigation-items .sidebar-group-header+ul>li>ul>li ul>li{margin-left:17.5px}#navigation-items .sidebar-group-header+ul>li li{border-left:1px solid rgb(var(--gray-300))}#navigation-items .sidebar-group-header+ul>li li:is(.dark *){border-color:rgb(var(--gray-600))}#content-area:has(#homepage) #homepage .card:hover img[data-component-part=card-image],#navigation-items .sidebar-group-header+ul>li li:has(>a.font-semibold){border-color:rgb(var(--primary))}#content-area:has(#homepage) #homepage .card:hover img[data-component-part=card-image]:is(.dark *),#navigation-items .sidebar-group-header+ul>li li:has(>a.font-semibold):is(.dark *){border-color:rgb(var(--primary-light))}#navigation-items [data-group-tag]>div:hover,#navigation-items a:hover{background-color:#e8eaf0;border-radius:.25rem}#navigation-items [data-group-tag]>div:hover:is(.dark *),#navigation-items a:hover:is(.dark *){background-color:rgb(var(--gray-700))}#navigation-items [data-group-tag]>button[aria-expanded=true]>.flex-1{font-weight:600}#navigation-items a.font-semibold{font-weight:500}.nav-tag-pill>.nav-tag-pill-text[data-nav-tag=Deprecated]{background-color:#fffaeb;color:#b45309;border:1px solid #fcd34d;font-weight:400}.deprecated{opacity:.75}.callout strong{color:inherit}#content-area header>.text-lg{font-size:var(--text-size);line-height:1.5rem}.prose{font-size:var(--text-size)}.callout div[data-component-part=callout-content],.prose{line-height:1.5}.callout div[data-component-part=callout-content] a,.prose .callout div[data-component-part=callout-content] a{border-bottom:0;text-decoration:underline;text-decoration-color:rgb(var(--primary));text-underline-offset:2px;text-decoration-thickness:1px}.callout div[data-component-part=callout-content] a:is(.dark *),.prose .callout div[data-component-part=callout-content] a:is(.dark *){text-decoration-color:rgb(var(--primary-light))}.callout div[data-component-part=callout-content] a:hover,.prose .callout div[data-component-part=callout-content] a:hover{color:rgb(var(--primary))!important}.callout div[data-component-part=callout-content] a:hover:is(.dark *),.prose .callout div[data-component-part=callout-content] a:hover:is(.dark *){color:rgb(var(--primary-light))!important}#banner a,.api-section>div:not(.api-section-heading) a:not([aria-label=\"Navigate to header\"]),.prose a:not([aria-label=\"Navigate to header\"]):not(.nav-tabs-item),a.link:not(.nav-tabs-item){color:rgb(var(--primary))}#banner a:is(.dark *),.api-section>div:not(.api-section-heading) a:not([aria-label=\"Navigate to header\"]):is(.dark *),.prose a:not([aria-label=\"Navigate to header\"]):not(.nav-tabs-item):is(.dark *),a.link:not(.nav-tabs-item):is(.dark *){color:rgb(var(--primary-light))}#banner a,.api-section>div:not(.api-section-heading) a:not([aria-label=\"Navigate to header\"]),.prose a:not([aria-label=\"Navigate to header\"]):not(.nav-tabs-item),a.link:not(.nav-tabs-item){font-weight:var(--font-weight-body-custom);border-bottom:0;text-decoration:none;padding-right:1px}#banner a code,.api-section>div:not(.api-section-heading) a:not([aria-label=\"Navigate to header\"]) code,.prose a:not([aria-label=\"Navigate to header\"]):not(.nav-tabs-item) code,a.link:not(.nav-tabs-item) code{text-decoration:none}#banner a:hover:not(:has(img:only-child)),.api-section>div:not(.api-section-heading) a:not([aria-label=\"Navigate to header\"]):hover:not(:has(img:only-child)),.prose a:not([aria-label=\"Navigate to header\"]):not(.nav-tabs-item):hover:not(:has(img:only-child)),a.link:not(.nav-tabs-item):hover:not(:has(img:only-child)){text-decoration:underline;text-decoration-color:rgb(var(--primary));text-underline-offset:2px;text-decoration-thickness:1px}#banner a:hover:not(:has(img:only-child)):is(.dark *),.api-section>div:not(.api-section-heading) a:not([aria-label=\"Navigate to header\"]):hover:not(:has(img:only-child)):is(\n .dark *\n ),.prose a:not([aria-label=\"Navigate to header\"]):not(.nav-tabs-item):hover:not(:has(img:only-child)):is(.dark *),a.link:not(.nav-tabs-item):hover:not(:has(img:only-child)):is(.dark *){text-decoration-color:rgb(var(--primary-light))}#banner a:is([target=\"_blank\"]:not(:has(img:only-child)), .api-section>div:not(.api-section-heading) a:not([href^=\"https://docs.dfns.co\"]))::before,.api-section>div:not(.api-section-heading) a:not([aria-label=\"Navigate to header\"]):is([target=\"_blank\"]:not(:has(img:only-child)), .api-section>div:not(.api-section-heading) a:not([href^=\"https://docs.dfns.co\"]))::before,.prose a:not([aria-label=\"Navigate to header\"]):not(.nav-tabs-item):is([target=\"_blank\"]:not(:has(img:only-child)), .api-section>div:not(.api-section-heading) a:not([href^=\"https://docs.dfns.co\"]))::before,a.link:not(.nav-tabs-item):is([target=\"_blank\"]:not(:has(img:only-child)), .api-section>div:not(.api-section-heading) a:not([href^=\"https://docs.dfns.co\"]))::before{content:\"\\29C9 \";padding-right:2px;padding-left:1px}#content-area ul>li li:before{background-color:rgb(var(--background-light));border-color:#1e202e;border-width:1px;border-style:solid}#content-area ul>li li:is(.dark *):before{background-color:rgb(var(--background-dark));border-color:rgb(var(--gray-400))}div:has(>select[aria-label=\"Select base URL\"]):not([data-testid=api-playground-modal] *){display:none}div:has(+.tryit-button) [data-component-part=scroll-area-content]>div:last-child{display:block;white-space:nowrap}div:has(+.tryit-button) [data-component-part=scroll-area-content]>div:last-child>div:not(.absolute){display:inline-block;vertical-align:middle}.card>.flex>div[data-component-part=card-icon]{align-self:start}.card div[data-component-part=card-icon]>svg{background-color:rgb(var(--gray-600))}.nav-logo{height:2rem}.steps div[data-component-part=step-number]>div{background-color:#1e202e;color:#fff;font-size:large}.steps div[data-component-part=step-number]>div:is(.dark *){background-color:rgb(var(--gray-600))}h4#authentication,h4#required-permissions,h4#token-kinds-allowed,h4#user-kinds-allowed{row-gap:1rem;padding-bottom:.625rem;border-color:rgb(var(--gray-100));border-bottom-width:1px;align-items:baseline;width:100%}h4#authentication:is(.dark *),h4#required-permissions:is(.dark *),h4#token-kinds-allowed:is(.dark *),h4#user-kinds-allowed:is(.dark *){border-color:rgb(var(--gray-800))}h4#authentication+span,h4#required-permissions+span,h4#token-kinds-allowed+span,h4#user-kinds-allowed+span{padding-top:1.5rem;padding-bottom:1.5rem}div[data-testid=code-group-select]>div.flex{flex-direction:column-reverse}div[data-testid=code-group-select] button.group[aria-haspopup=menu]:has(+div[data-testid=code-group-select-copy-button])::before{content:\"Example: \"}div[data-component-part=code-group-tab-bar] button.group[aria-haspopup=menu]::before,div[data-testid=code-group-select] button.group[aria-haspopup=menu]::before{content:\"Language:\"}.footnotes [id^=user-content-fn-]{display:list-item;font-size:.875rem;line-height:1.25rem;color:rgb(var(--gray-600))}.footnotes [id^=user-content-fn-]:is(.dark *){color:rgb(var(--gray-400))}#navigation-items+div:has(button[aria-label=\"Toggle dark mode\"])::before{content:\"Powered by Mintlify\";font-size:x-small;color:rgb(var(--gray-300))}#navigation-items+div:has(button[aria-label=\"Toggle dark mode\"]):is(.dark *)::before{color:rgb(var(--gray-600))}#content-area #pagination,#content-area footer{display:none}.object-param-field .py-6,.primitive-param-field .py-6{padding-top:1rem;padding-bottom:1rem}.object-param-field .mt-4,.object-param-field .mt-6,.primitive-param-field .mt-4,.primitive-param-field .mt-6{margin-top:.75rem}.object-param-field>.py-6>:last-child>:not(:first-child),.primitive-param-field>.py-6>:last-child>:not(:first-child){font-size:13px}.object-param-field>.py-6>:last-child>:not(:first-child) code,.object-param-field>.py-6>:last-child>:not(:first-child) code>span,.primitive-param-field>.py-6>:last-child>:not(:first-child) code,.primitive-param-field>.py-6>:last-child>:not(:first-child) code>span{font-size:12px;font-weight:400}.api-section>div.api-section-heading~div div:has(>div.tabs)+div:has(>details.expandable:only-child)>details.expandable{margin-bottom:-1rem;margin-left:-1rem;margin-right:-1rem;width:calc(100% + 2rem);border:0;border-radius:0}.api-section>div.api-section-heading~div div:has(>div.tabs)+div:has(>details.expandable:only-child)>details.expandable summary{border-top-left-radius:0;border-top-right-radius:0}.api-section>div.api-section-heading~div div.dropdown-from-tabs-container{display:flex;align-items:center;width:calc(100% + 2rem);min-height:2.5rem;margin-top:-1rem;margin-left:-1rem;margin-right:-1rem;padding-left:1rem;padding-right:1rem;border-top-left-radius:1rem;border-top-right-radius:1rem;background-color:rgb(var(--gray-50));color:rgb(var(--primary))}.api-section>div.api-section-heading~div div.dropdown-from-tabs-container:is(.dark *){background-color:rgb(var(--gray-800));color:rgb(var(--primary-light))}.api-section>div.api-section-heading~div div.dropdown-from-tabs-container label.dropdown-from-tabs-label{font-size:.75rem;line-height:.75rem;align-self:center}.api-section>div.api-section-heading~div div.dropdown-from-tabs-container select.dropdown-from-tabs{appearance:none;background-color:transparent;background-repeat:no-repeat;background-position:right center;margin-left:.5rem;font-weight:700;flex-grow:1;width:100%;text-overflow:ellipsis;font-size:14px;font-family:var(--font-jetbrains-mono),ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,\"Liberation Mono\",\"Courier New\",monospace;background-image:url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' viewBox='0 0 24 24' fill='none' stroke='%23170C33' stroke-width='3' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpolyline points='6 9 12 15 18 9'%3E%3C/polyline%3E%3C/svg%3E\")}.api-section>div.api-section-heading~div div.dropdown-from-tabs-container select.dropdown-from-tabs:is(.dark *){background-image:url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' viewBox='0 0 24 24' fill='none' stroke='%23AA8BFF' stroke-width='3' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpolyline points='6 9 12 15 18 9'%3E%3C/polyline%3E%3C/svg%3E\")}.api-section>div.api-section-heading~div div.dropdown-from-tabs-container div[id^=authorization-]>*,.api-section>div.api-section-heading~div div.dropdown-from-tabs-container div[id^=body-]>*,.api-section>div.api-section-heading~div div.dropdown-from-tabs-container div[id^=parameter-]>*,.api-section>div.api-section-heading~div div.dropdown-from-tabs-container div[id^=response-]>*{margin-bottom:.5rem}.api-section>div.api-section-heading~div div.dropdown-from-tabs-container div[id^=authorization-]~div.mt-4>.mt-6,.api-section>div.api-section-heading~div div.dropdown-from-tabs-container div[id^=authorization-]~div:not(.mt-4),.api-section>div.api-section-heading~div div.dropdown-from-tabs-container div[id^=body-]~div.mt-4>.mt-6,.api-section>div.api-section-heading~div div.dropdown-from-tabs-container div[id^=body-]~div:not(.mt-4),.api-section>div.api-section-heading~div div.dropdown-from-tabs-container div[id^=parameter-]~div.mt-4>.mt-6,.api-section>div.api-section-heading~div div.dropdown-from-tabs-container div[id^=parameter-]~div:not(.mt-4),.api-section>div.api-section-heading~div div.dropdown-from-tabs-container div[id^=response-]~div.mt-4>.mt-6,.api-section>div.api-section-heading~div div.dropdown-from-tabs-container div[id^=response-]~div:not(.mt-4){font-size:small}.api-section>div.api-section-heading~div div.dropdown-from-tabs-container div[id^=authorization-]~div.mt-4>.mt-6 code,.api-section>div.api-section-heading~div div.dropdown-from-tabs-container div[id^=authorization-]~div.mt-4>.mt-6 code>*,.api-section>div.api-section-heading~div div.dropdown-from-tabs-container div[id^=authorization-]~div:not(.mt-4) code,.api-section>div.api-section-heading~div div.dropdown-from-tabs-container div[id^=authorization-]~div:not(.mt-4) code>*,.api-section>div.api-section-heading~div div.dropdown-from-tabs-container div[id^=body-]~div.mt-4>.mt-6 code,.api-section>div.api-section-heading~div div.dropdown-from-tabs-container div[id^=body-]~div.mt-4>.mt-6 code>*,.api-section>div.api-section-heading~div div.dropdown-from-tabs-container div[id^=body-]~div:not(.mt-4) code,.api-section>div.api-section-heading~div div.dropdown-from-tabs-container div[id^=body-]~div:not(.mt-4) code>*,.api-section>div.api-section-heading~div div.dropdown-from-tabs-container div[id^=parameter-]~div.mt-4>.mt-6 code,.api-section>div.api-section-heading~div div.dropdown-from-tabs-container div[id^=parameter-]~div.mt-4>.mt-6 code>*,.api-section>div.api-section-heading~div div.dropdown-from-tabs-container div[id^=parameter-]~div:not(.mt-4) code,.api-section>div.api-section-heading~div div.dropdown-from-tabs-container div[id^=parameter-]~div:not(.mt-4) code>*,.api-section>div.api-section-heading~div div.dropdown-from-tabs-container div[id^=response-]~div.mt-4>.mt-6 code,.api-section>div.api-section-heading~div div.dropdown-from-tabs-container div[id^=response-]~div.mt-4>.mt-6 code>*,.api-section>div.api-section-heading~div div.dropdown-from-tabs-container div[id^=response-]~div:not(.mt-4) code,.api-section>div.api-section-heading~div div.dropdown-from-tabs-container div[id^=response-]~div:not(.mt-4) code>*{font-size:x-small}.api-section>div.api-section-heading~div div.dropdown-from-tabs-container div[id^=authorization-]~div .mt-6,.api-section>div.api-section-heading~div div.dropdown-from-tabs-container div[id^=authorization-]~div.mt-4,.api-section>div.api-section-heading~div div.dropdown-from-tabs-container div[id^=authorization-]~div.mt-6 .api-section>div.api-section-heading~div div.dropdown-from-tabs-container div[id^=authorization-]~div .mt-4,.api-section>div.api-section-heading~div div.dropdown-from-tabs-container div[id^=body-]~div .mt-6,.api-section>div.api-section-heading~div div.dropdown-from-tabs-container div[id^=body-]~div.mt-4,.api-section>div.api-section-heading~div div.dropdown-from-tabs-container div[id^=body-]~div.mt-6 .api-section>div.api-section-heading~div div.dropdown-from-tabs-container div[id^=body-]~div .mt-4,.api-section>div.api-section-heading~div div.dropdown-from-tabs-container div[id^=parameter-]~div .mt-6,.api-section>div.api-section-heading~div div.dropdown-from-tabs-container div[id^=parameter-]~div.mt-4,.api-section>div.api-section-heading~div div.dropdown-from-tabs-container div[id^=parameter-]~div.mt-6 .api-section>div.api-section-heading~div div.dropdown-from-tabs-container div[id^=parameter-]~div .mt-4,.api-section>div.api-section-heading~div div.dropdown-from-tabs-container div[id^=response-]~div .mt-6,.api-section>div.api-section-heading~div div.dropdown-from-tabs-container div[id^=response-]~div.mt-4,.api-section>div.api-section-heading~div div.dropdown-from-tabs-container div[id^=response-]~div.mt-6 .api-section>div.api-section-heading~div div.dropdown-from-tabs-container div[id^=response-]~div .mt-4{margin-top:0}.api-section>div.api-section-heading~div div.dropdown-from-tabs-container div[id^=authorization-]~div .mt-6 .prose:not(.flex),.api-section>div.api-section-heading~div div.dropdown-from-tabs-container div[id^=authorization-]~div.mt-4 .prose:not(.flex),.api-section>div.api-section-heading~div div.dropdown-from-tabs-container div[id^=authorization-]~div.mt-6 .api-section>div.api-section-heading~div div.dropdown-from-tabs-container div[id^=authorization-]~div .mt-4 .prose:not(.flex),.api-section>div.api-section-heading~div div.dropdown-from-tabs-container div[id^=body-]~div .mt-6 .prose:not(.flex),.api-section>div.api-section-heading~div div.dropdown-from-tabs-container div[id^=body-]~div.mt-4 .prose:not(.flex),.api-section>div.api-section-heading~div div.dropdown-from-tabs-container div[id^=body-]~div.mt-6 .api-section>div.api-section-heading~div div.dropdown-from-tabs-container div[id^=body-]~div .mt-4 .prose:not(.flex),.api-section>div.api-section-heading~div div.dropdown-from-tabs-container div[id^=parameter-]~div .mt-6 .prose:not(.flex),.api-section>div.api-section-heading~div div.dropdown-from-tabs-container div[id^=parameter-]~div.mt-4 .prose:not(.flex),.api-section>div.api-section-heading~div div.dropdown-from-tabs-container div[id^=parameter-]~div.mt-6 .api-section>div.api-section-heading~div div.dropdown-from-tabs-container div[id^=parameter-]~div .mt-4 .prose:not(.flex),.api-section>div.api-section-heading~div div.dropdown-from-tabs-container div[id^=response-]~div .mt-6 .prose:not(.flex),.api-section>div.api-section-heading~div div.dropdown-from-tabs-container div[id^=response-]~div.mt-4 .prose:not(.flex),.api-section>div.api-section-heading~div div.dropdown-from-tabs-container div[id^=response-]~div.mt-6 .api-section>div.api-section-heading~div div.dropdown-from-tabs-container div[id^=response-]~div .mt-4 .prose:not(.flex){margin-bottom:.5rem}#content-area:has(#homepage){background-image:url(/images/GridHome.svg);background-position:top center;background-size:68rem;background-repeat:no-repeat}#content-area:has(#homepage) #homepage{max-width:48rem;margin:0 auto;text-align:center}#content-area:has(#homepage) #homepage h1{display:flex;align-items:center;justify-content:center;margin-top:6rem;margin-bottom:4rem;font-size:xxx-large}#content-area:has(#homepage) #homepage .card-group{margin:4rem auto}#content-area:has(#homepage) #homepage .card-group.gap-x-4{column-gap:3rem;row-gap:2rem}#content-area:has(#homepage) #homepage .card{border:0;margin:0}#content-area:has(#homepage) #homepage .card:hover div[data-component-part=card-cta] button{color:rgb(var(--primary))}#content-area:has(#homepage) #homepage .card:hover div[data-component-part=card-cta] button:is(.dark *){color:rgb(var(--primary-light))}#content-area:has(#homepage) #homepage .card img[data-component-part=card-image]{border-radius:1rem;border-width:1px;border-color:rgb(var(--gray-300))}#content-area:has(#homepage) #homepage .card img[data-component-part=card-image]:is(.dark *){border-color:rgb(var(--gray-600))}#content-area:has(#homepage) #homepage .card div[data-component-part=card-content-container]{padding-top:0;padding-bottom:0}#content-area:has(#homepage) #homepage .card div[data-component-part=card-cta]{margin-top:0}#content-area:has(#homepage) #homepage .card div[data-component-part=card-cta] button{color:rgb(var(--gray-600))}#content-area:has(#homepage) #homepage .card div[data-component-part=card-cta] button:is(.dark *){color:rgb(var(--gray-300))}#content-area:has(#homepage) #homepage img#signature{margin:0 auto;max-width:30%}"}],"page":{"pagePath":"api-reference/policies/list-policies","slug":"/api-reference/policies/list-policies","pageMetadata":{"title":"List Policies","description":"Retrieve the list of policies on your organization.","deprecated":null,"version":null,"openapi":"/openapi.yaml get /v2/policies","href":"/api-reference/policies/list-policies","autogeneratedByOpenApi":true},"description":{"compiledSource":"\"use strict\";\nconst {jsx: _jsx} = arguments[0];\nconst {useMDXComponents: _provideComponents} = arguments[0];\nfunction _createMdxContent(props) {\n const _components = {\n p: \"p\",\n ..._provideComponents(),\n ...props.components\n };\n return _jsx(_components.p, {\n children: \"Retrieve the list of policies on your organization.\"\n });\n}\nfunction MDXContent(props = {}) {\n const {wrapper: MDXLayout} = {\n ..._provideComponents(),\n ...props.components\n };\n return MDXLayout ? _jsx(MDXLayout, {\n ...props,\n children: _jsx(_createMdxContent, {\n ...props\n })\n }) : _createMdxContent(props);\n}\nreturn {\n default: MDXContent\n};\n","frontmatter":{},"scope":{}},"pageType":"default","mdx":{"mdxSource":{"compiledSource":"\"use strict\";const{Fragment:_Fragment,jsx:_jsx,jsxs:_jsxs}=arguments[0];const{useMDXComponents:_provideComponents}=arguments[0];function _createMdxContent(props){const _components={br:`br`,code:`code`,p:`p`,..._provideComponents(),...props.components},{Heading}=_components;if(!Heading)_missingMdxReference(`Heading`,true);return _jsxs(_Fragment,{children:[_jsx(Heading,{level:`4`,id:`authentication`,children:`Authentication`}),`\n`,_jsxs(_components.p,{children:[`✅ Tenant User (`,_jsx(_components.code,{children:`TenantUser`}),`)`,_jsx(_components.br,{}),`\n`,`✅ Organization User (`,_jsx(_components.code,{children:`CustomerEmployee`}),`)`,_jsx(_components.br,{}),`\n`,`❌ End User (`,_jsx(_components.code,{children:`EndUser`}),`)`,_jsx(_components.br,{}),`\n`,`✅ Service Account`]}),`\n`,_jsx(Heading,{level:`4`,id:`required-permissions`,children:`Required Permissions`}),`\n`,_jsxs(_components.p,{children:[_jsx(_components.code,{children:`Policies:Read`}),`: Always required.`]})]})}function MDXContent(props={}){const{wrapper:MDXLayout}={..._provideComponents(),...props.components};return MDXLayout?_jsx(MDXLayout,{...props,children:_jsx(_createMdxContent,{...props})}):_createMdxContent(props)}return{default:MDXContent};function _missingMdxReference(id,component){throw new Error(`Expected `+(component?`component`:`object`)+\" `\"+id+\"` to be defined: you likely forgot to import, pass, or provide it.\")}","frontmatter":{},"scope":{"config":{},"pageMetadata":{"title":"List Policies","description":"Retrieve the list of policies on your organization.","deprecated":null,"version":null,"openapi":"/openapi.yaml get /v2/policies","href":"/api-reference/policies/list-policies","autogeneratedByOpenApi":true}}},"mdxSourceWithNoJs":null},"mdxExtracts":{"tableOfContents":[{"title":"Authentication","slug":"authentication","depth":4,"children":[]},{"title":"Required Permissions","slug":"required-permissions","depth":4,"children":[]}],"codeExamples":{}},"jsLinks":["/_mintlify/custom/dfns-6d8c7466/2a48cccc2e1fe877/script.js"],"openApiReferenceData":{"operation":{"operationId":"listPolicies","summary":"List Policies","tags":["Policies"],"security":["9ab00ef7-ff61-4b14-aec7-a8e9e41adac9"],"description":"Retrieve the list of policies on your organization.","x-mint":{"content":"#### Authentication\n\n✅ Tenant User (`TenantUser`) \n✅ Organization User (`CustomerEmployee`) \n❌ End User (`EndUser`) \n✅ Service Account\n\n#### Required Permissions\n\n`Policies:Read`: Always required."},"parameters":["f196f345-d730-431c-9bfc-5d69a0d8f6f7","9313b95f-c4c8-46a9-8c01-98e775fb63de","adc61ed5-98c7-4c4b-9eda-052d3bbf8c98"],"responses":{"200":"7888031b-7042-4152-b334-fdd9fdacef87"},"method":"get","type":"path","servers":["2602c3b3-eb43-4e3c-b815-397392a0961e","c96f0f9f-2ddd-4d9d-9865-734cc07b61ea","fa081b12-059b-418e-83d2-ffad92338341"],"path":"/v2/policies","baseUrlOptions":["https://api.dfns.io","https://api.uae.dfns.io","https://api.dfns.ninja"],"title":"List Policies","codeSamples":[],"requiredOnlyExamples":false,"requestExampleType":"generated","responseExampleType":"generated"},"dependencies":{"parameters":{"f196f345-d730-431c-9bfc-5d69a0d8f6f7":{"schema":{"type":"string","pattern":"^\\d+$","isRequired":false,"uniqueKey":"","typeLabel":"string"},"required":false,"name":"limit","in":"query"},"9313b95f-c4c8-46a9-8c01-98e775fb63de":{"schema":{"type":"string","minLength":1,"isRequired":false,"uniqueKey":"","typeLabel":"string"},"required":false,"name":"paginationToken","in":"query"},"adc61ed5-98c7-4c4b-9eda-052d3bbf8c98":{"schema":{"type":"string","enum":["Active","Archived"],"isRequired":false,"uniqueKey":"","typeLabel":"enum\u003cstring>"},"required":false,"name":"status","in":"query"}},"responses":{"7888031b-7042-4152-b334-fdd9fdacef87":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"items":{"type":"array","items":{"oneOf":[{"type":"object","title":"Registry:Addresses:Modify","required":["id","name","status","activityKind","rule","action"],"properties":{"id":{"type":"string","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.0.id","typeLabel":"string"},"name":{"type":"string","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.0.name","typeLabel":"string"},"status":{"type":"string","enum":["Active","Archived"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.0.status","typeLabel":"enum\u003cstring>"},"activityKind":{"type":"string","enum":["Registry:Addresses:Modify"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.0.activityKind","typeLabel":"enum\u003cstring>"},"rule":{"type":"object","properties":{"kind":{"type":"string","enum":["AlwaysTrigger"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.0.rule.kind","typeLabel":"enum\u003cstring>"},"configuration":{"type":"object","properties":{},"additionalProperties":false,"uniqueKey":"\\items.items.[INDEX].oneOf.0.rule.configuration","typeLabel":"object"}},"required":["kind"],"additionalProperties":false,"description":"This rule will always be triggered, meaning that if this rule is defined on a policy, the policy will always trigger the policy action, regardless of the activity details.","title":"AlwaysTrigger","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.0.rule","typeLabel":"AlwaysTrigger · object"},"action":{"oneOf":[{"type":"object","title":"RequestApproval","description":"\nThis action means that activity will first require an Approval process to be completed before it can be executed (or be aborted if someone rejects it during the approval process).\n\nOne or several groups of approvers need to be specified. These groups define who is allowed to approve / reject an activity.\n\nThe activity will only be executed if all approver groups reach their \"quorum\" of approvals. Otherwise, if any one user within any approver group rejects, then the activity is aborted and the call is not executed.\n\nThe example below shows a `RequestApproval` action, configured with one approval group requiring 2 approvals amongst three specific users.\n\n```json\n{\n \"action\": {\n \"kind\": \"RequestApproval\",\n \"autoRejectTimeout\": 60, // minutes\n \"approvalGroups\": [\n {\n \"name\": \"Admins\",\n \"quorum\": 2, // only 2 approvers required in that group \n \"approvers\": {\n \"userId\": {\n \"in\": [\"us-...1\", \"us-...2\", \"us-...3\"],\n }\n }\n }\n ],\n\n }\n}\n```\n\n**Don't lock yourself up**\n\nBy default, users cannot approve an activity they initiated themselves, even if they are in an approval group. To allow this, you must set `initiatorCanApprove: true`.\n\n*Example 1:* For any wallet transfer, a policy is setup to require approval from **1 specific admin user** (eg. the CEO). `initiatorCanApprove` was not set to `true`. If the CEO himself initiates a transfer, no-one can approve his transfer and it's stuck.\n\n*Example 2:* Company has only 3 users. A policy is setup to require approval from **any 3 users** (`quorum: 3`) for any modification of a policy. `initiatorCanApprove` was not set to `true`. In this case, they are locked, and the policy cannot be modified: whoever requests a modification cannot approve, and the policy is therefore always missing one approver. To unlock, they would need to invite a new user and give him the rights to approve as well.\n ","required":["kind","approvalGroups"],"properties":{"kind":{"type":"string","enum":["RequestApproval"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.0.action.oneOf.0.kind","typeLabel":"enum\u003cstring>"},"approvalGroups":{"type":"array","items":{"type":"object","properties":{"quorum":{"type":"integer","minimum":1,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.0.action.oneOf.0.approvalGroups.items.[INDEX].quorum","typeLabel":"integer"},"approvers":{"type":"object","properties":{"userId":{"type":"object","properties":{"in":{"type":"array","items":{"type":"string","minLength":1,"uniqueKey":"\\items.items.[INDEX].oneOf.0.action.oneOf.0.approvalGroups.items.[INDEX].approvers.userId.in.items.[INDEX]","typeLabel":"string"},"minItems":1,"maxItems":100,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.0.action.oneOf.0.approvalGroups.items.[INDEX].approvers.userId.in","typeLabel":"string[]"}},"required":["in"],"additionalProperties":false,"description":"Users and service accounts who may approve.","uniqueKey":"\\items.items.[INDEX].oneOf.0.action.oneOf.0.approvalGroups.items.[INDEX].approvers.userId","typeLabel":"object"},"userGroupId":{"type":"object","properties":{"in":{"type":"array","items":{"type":"string","minLength":1,"maxLength":64,"pattern":"^ug-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"User group id.","example":"ug-139tf-f58l8-lsbt6dp47lfsdvgh","uniqueKey":"\\items.items.[INDEX].oneOf.0.action.oneOf.0.approvalGroups.items.[INDEX].approvers.userGroupId.in.items.[INDEX]","typeLabel":"string"},"minItems":1,"maxItems":100,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.0.action.oneOf.0.approvalGroups.items.[INDEX].approvers.userGroupId.in","typeLabel":"string[]"}},"required":["in"],"additionalProperties":false,"description":"User groups whose members may approve.","uniqueKey":"\\items.items.[INDEX].oneOf.0.action.oneOf.0.approvalGroups.items.[INDEX].approvers.userGroupId","typeLabel":"object"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.0.action.oneOf.0.approvalGroups.items.[INDEX].approvers","typeLabel":"object"},"name":{"type":"string","uniqueKey":"\\items.items.[INDEX].oneOf.0.action.oneOf.0.approvalGroups.items.[INDEX].name","typeLabel":"string"},"initiatorCanApprove":{"type":"boolean","description":"Whether the initiator of the activity can participate in the approval.","uniqueKey":"\\items.items.[INDEX].oneOf.0.action.oneOf.0.approvalGroups.items.[INDEX].initiatorCanApprove","typeLabel":"boolean"},"serviceAccountsCanApprove":{"type":"boolean","description":"Whether service accounts can participate in the approval for this group.","uniqueKey":"\\items.items.[INDEX].oneOf.0.action.oneOf.0.approvalGroups.items.[INDEX].serviceAccountsCanApprove","typeLabel":"boolean"}},"required":["quorum","approvers"],"additionalProperties":false,"uniqueKey":"\\items.items.[INDEX].oneOf.0.action.oneOf.0.approvalGroups.items.[INDEX]","typeLabel":"object"},"minItems":1,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.0.action.oneOf.0.approvalGroups","typeLabel":"object[]"},"autoRejectTimeout":{"oneOf":[{"type":"integer","minimum":1,"uniqueKey":"\\items.items.[INDEX].oneOf.0.action.oneOf.0.autoRejectTimeout.oneOf.0","typeLabel":"integer"},{"type":"null","minimum":1,"uniqueKey":"\\items.items.[INDEX].oneOf.0.action.oneOf.0.autoRejectTimeout.oneOf.1","typeLabel":"null"}],"uniqueKey":"\\items.items.[INDEX].oneOf.0.action.oneOf.0.autoRejectTimeout","typeLabel":"integer | null"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.0.action.oneOf.0","typeLabel":"RequestApproval · object"},{"type":"object","title":"Block","description":"This action means that the activity will be blocked if the policy is triggered.\n\n```json\n{\n \"action\": {\n \"kind\": \"Block\"\n }\n}\n```\n","required":["kind"],"properties":{"kind":{"type":"string","enum":["Block"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.0.action.oneOf.1.kind","typeLabel":"enum\u003cstring>"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.0.action.oneOf.1","typeLabel":"Block · object"}],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.0.action","typeLabel":"RequestApproval · object | Block · object"},"dateCreated":{"type":"string","uniqueKey":"\\items.items.[INDEX].oneOf.0.dateCreated","typeLabel":"string"},"dateUpdated":{"type":"string","uniqueKey":"\\items.items.[INDEX].oneOf.0.dateUpdated","typeLabel":"string"},"filters":{"type":"object","properties":{},"uniqueKey":"\\items.items.[INDEX].oneOf.0.filters","typeLabel":"object"},"pendingChangeRequest":{"type":"object","properties":{"id":{"type":"string","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.0.pendingChangeRequest.id","typeLabel":"string"},"requester":{"type":"object","properties":{"userId":{"type":"string","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.0.pendingChangeRequest.requester.userId","typeLabel":"string"},"tokenId":{"type":"string","uniqueKey":"\\items.items.[INDEX].oneOf.0.pendingChangeRequest.requester.tokenId","typeLabel":"string"},"appId":{"type":"string","uniqueKey":"\\items.items.[INDEX].oneOf.0.pendingChangeRequest.requester.appId","typeLabel":"string"}},"required":["userId"],"description":"The user who initiated the change request.","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.0.pendingChangeRequest.requester","typeLabel":"object"},"kind":{"type":"string","enum":["Policy"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.0.pendingChangeRequest.kind","typeLabel":"enum\u003cstring>"},"operationKind":{"type":"string","enum":["Update"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.0.pendingChangeRequest.operationKind","typeLabel":"enum\u003cstring>"},"status":{"type":"string","enum":["Applied","Failed","Pending","Rejected"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.0.pendingChangeRequest.status","typeLabel":"enum\u003cstring>"},"entityId":{"type":"string","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.0.pendingChangeRequest.entityId","typeLabel":"string"},"dateCreated":{"type":"string","format":"date-time","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.0.pendingChangeRequest.dateCreated","typeLabel":"string\u003cdate-time>"},"body":{"oneOf":[{"type":"object","title":"Registry:Addresses:Modify","required":["id","name","status","activityKind","rule","action"],"properties":{"id":{"type":"string","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.0.pendingChangeRequest.body.oneOf.0.id","typeLabel":"string"},"name":{"type":"string","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.0.pendingChangeRequest.body.oneOf.0.name","typeLabel":"string"},"status":{"type":"string","enum":["Active","Archived"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.0.pendingChangeRequest.body.oneOf.0.status","typeLabel":"enum\u003cstring>"},"activityKind":{"type":"string","enum":["Registry:Addresses:Modify"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.0.pendingChangeRequest.body.oneOf.0.activityKind","typeLabel":"enum\u003cstring>"},"rule":{"type":"object","properties":{"kind":{"type":"string","enum":["AlwaysTrigger"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.0.pendingChangeRequest.body.oneOf.0.rule.kind","typeLabel":"enum\u003cstring>"},"configuration":{"type":"object","properties":{},"additionalProperties":false,"uniqueKey":"\\items.items.[INDEX].oneOf.0.pendingChangeRequest.body.oneOf.0.rule.configuration","typeLabel":"object"}},"required":["kind"],"additionalProperties":false,"description":"This rule will always be triggered, meaning that if this rule is defined on a policy, the policy will always trigger the policy action, regardless of the activity details.","title":"AlwaysTrigger","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.0.pendingChangeRequest.body.oneOf.0.rule","typeLabel":"AlwaysTrigger · object"},"action":{"oneOf":[{"type":"object","title":"RequestApproval","description":"\nThis action means that activity will first require an Approval process to be completed before it can be executed (or be aborted if someone rejects it during the approval process).\n\nOne or several groups of approvers need to be specified. These groups define who is allowed to approve / reject an activity.\n\nThe activity will only be executed if all approver groups reach their \"quorum\" of approvals. Otherwise, if any one user within any approver group rejects, then the activity is aborted and the call is not executed.\n\nThe example below shows a `RequestApproval` action, configured with one approval group requiring 2 approvals amongst three specific users.\n\n```json\n{\n \"action\": {\n \"kind\": \"RequestApproval\",\n \"autoRejectTimeout\": 60, // minutes\n \"approvalGroups\": [\n {\n \"name\": \"Admins\",\n \"quorum\": 2, // only 2 approvers required in that group \n \"approvers\": {\n \"userId\": {\n \"in\": [\"us-...1\", \"us-...2\", \"us-...3\"],\n }\n }\n }\n ],\n\n }\n}\n```\n\n**Don't lock yourself up**\n\nBy default, users cannot approve an activity they initiated themselves, even if they are in an approval group. To allow this, you must set `initiatorCanApprove: true`.\n\n*Example 1:* For any wallet transfer, a policy is setup to require approval from **1 specific admin user** (eg. the CEO). `initiatorCanApprove` was not set to `true`. If the CEO himself initiates a transfer, no-one can approve his transfer and it's stuck.\n\n*Example 2:* Company has only 3 users. A policy is setup to require approval from **any 3 users** (`quorum: 3`) for any modification of a policy. `initiatorCanApprove` was not set to `true`. In this case, they are locked, and the policy cannot be modified: whoever requests a modification cannot approve, and the policy is therefore always missing one approver. To unlock, they would need to invite a new user and give him the rights to approve as well.\n ","required":["kind","approvalGroups"],"properties":{"kind":{"type":"string","enum":["RequestApproval"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.0.pendingChangeRequest.body.oneOf.0.action.oneOf.0.kind","typeLabel":"enum\u003cstring>"},"approvalGroups":{"type":"array","items":{"type":"object","properties":{"quorum":{"type":"integer","minimum":1,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.0.pendingChangeRequest.body.oneOf.0.action.oneOf.0.approvalGroups.items.[INDEX].quorum","typeLabel":"integer"},"approvers":{"type":"object","properties":{"userId":{"type":"object","properties":{"in":{"type":"array","items":{"type":"string","minLength":1,"uniqueKey":"\\items.items.[INDEX].oneOf.0.pendingChangeRequest.body.oneOf.0.action.oneOf.0.approvalGroups.items.[INDEX].approvers.userId.in.items.[INDEX]","typeLabel":"string"},"minItems":1,"maxItems":100,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.0.pendingChangeRequest.body.oneOf.0.action.oneOf.0.approvalGroups.items.[INDEX].approvers.userId.in","typeLabel":"string[]"}},"required":["in"],"additionalProperties":false,"description":"Users and service accounts who may approve.","uniqueKey":"\\items.items.[INDEX].oneOf.0.pendingChangeRequest.body.oneOf.0.action.oneOf.0.approvalGroups.items.[INDEX].approvers.userId","typeLabel":"object"},"userGroupId":{"type":"object","properties":{"in":{"type":"array","items":{"type":"string","minLength":1,"maxLength":64,"pattern":"^ug-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"User group id.","example":"ug-139tf-f58l8-lsbt6dp47lfsdvgh","uniqueKey":"\\items.items.[INDEX].oneOf.0.pendingChangeRequest.body.oneOf.0.action.oneOf.0.approvalGroups.items.[INDEX].approvers.userGroupId.in.items.[INDEX]","typeLabel":"string"},"minItems":1,"maxItems":100,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.0.pendingChangeRequest.body.oneOf.0.action.oneOf.0.approvalGroups.items.[INDEX].approvers.userGroupId.in","typeLabel":"string[]"}},"required":["in"],"additionalProperties":false,"description":"User groups whose members may approve.","uniqueKey":"\\items.items.[INDEX].oneOf.0.pendingChangeRequest.body.oneOf.0.action.oneOf.0.approvalGroups.items.[INDEX].approvers.userGroupId","typeLabel":"object"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.0.pendingChangeRequest.body.oneOf.0.action.oneOf.0.approvalGroups.items.[INDEX].approvers","typeLabel":"object"},"name":{"type":"string","uniqueKey":"\\items.items.[INDEX].oneOf.0.pendingChangeRequest.body.oneOf.0.action.oneOf.0.approvalGroups.items.[INDEX].name","typeLabel":"string"},"initiatorCanApprove":{"type":"boolean","description":"Whether the initiator of the activity can participate in the approval.","uniqueKey":"\\items.items.[INDEX].oneOf.0.pendingChangeRequest.body.oneOf.0.action.oneOf.0.approvalGroups.items.[INDEX].initiatorCanApprove","typeLabel":"boolean"},"serviceAccountsCanApprove":{"type":"boolean","description":"Whether service accounts can participate in the approval for this group.","uniqueKey":"\\items.items.[INDEX].oneOf.0.pendingChangeRequest.body.oneOf.0.action.oneOf.0.approvalGroups.items.[INDEX].serviceAccountsCanApprove","typeLabel":"boolean"}},"required":["quorum","approvers"],"additionalProperties":false,"uniqueKey":"\\items.items.[INDEX].oneOf.0.pendingChangeRequest.body.oneOf.0.action.oneOf.0.approvalGroups.items.[INDEX]","typeLabel":"object"},"minItems":1,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.0.pendingChangeRequest.body.oneOf.0.action.oneOf.0.approvalGroups","typeLabel":"object[]"},"autoRejectTimeout":{"oneOf":[{"type":"integer","minimum":1,"uniqueKey":"\\items.items.[INDEX].oneOf.0.pendingChangeRequest.body.oneOf.0.action.oneOf.0.autoRejectTimeout.oneOf.0","typeLabel":"integer"},{"type":"null","minimum":1,"uniqueKey":"\\items.items.[INDEX].oneOf.0.pendingChangeRequest.body.oneOf.0.action.oneOf.0.autoRejectTimeout.oneOf.1","typeLabel":"null"}],"uniqueKey":"\\items.items.[INDEX].oneOf.0.pendingChangeRequest.body.oneOf.0.action.oneOf.0.autoRejectTimeout","typeLabel":"integer | null"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.0.pendingChangeRequest.body.oneOf.0.action.oneOf.0","typeLabel":"RequestApproval · object"},{"type":"object","title":"Block","description":"This action means that the activity will be blocked if the policy is triggered.\n\n```json\n{\n \"action\": {\n \"kind\": \"Block\"\n }\n}\n```\n","required":["kind"],"properties":{"kind":{"type":"string","enum":["Block"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.0.pendingChangeRequest.body.oneOf.0.action.oneOf.1.kind","typeLabel":"enum\u003cstring>"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.0.pendingChangeRequest.body.oneOf.0.action.oneOf.1","typeLabel":"Block · object"}],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.0.pendingChangeRequest.body.oneOf.0.action","typeLabel":"RequestApproval · object | Block · object"},"dateCreated":{"type":"string","uniqueKey":"\\items.items.[INDEX].oneOf.0.pendingChangeRequest.body.oneOf.0.dateCreated","typeLabel":"string"},"dateUpdated":{"type":"string","uniqueKey":"\\items.items.[INDEX].oneOf.0.pendingChangeRequest.body.oneOf.0.dateUpdated","typeLabel":"string"},"filters":{"type":"object","properties":{},"uniqueKey":"\\items.items.[INDEX].oneOf.0.pendingChangeRequest.body.oneOf.0.filters","typeLabel":"object"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.0.pendingChangeRequest.body.oneOf.0","typeLabel":"Registry:Addresses:Modify · object"},{"type":"object","title":"Permissions:Assign","required":["id","name","status","activityKind","rule","action"],"properties":{"id":{"type":"string","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.0.pendingChangeRequest.body.oneOf.1.id","typeLabel":"string"},"name":{"type":"string","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.0.pendingChangeRequest.body.oneOf.1.name","typeLabel":"string"},"status":{"type":"string","enum":["Active","Archived"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.0.pendingChangeRequest.body.oneOf.1.status","typeLabel":"enum\u003cstring>"},"activityKind":{"type":"string","enum":["Permissions:Assign"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.0.pendingChangeRequest.body.oneOf.1.activityKind","typeLabel":"enum\u003cstring>"},"rule":{"type":"object","properties":{"kind":{"type":"string","enum":["AlwaysTrigger"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.0.pendingChangeRequest.body.oneOf.1.rule.kind","typeLabel":"enum\u003cstring>"},"configuration":{"type":"object","properties":{},"additionalProperties":false,"uniqueKey":"\\items.items.[INDEX].oneOf.0.pendingChangeRequest.body.oneOf.1.rule.configuration","typeLabel":"object"}},"required":["kind"],"additionalProperties":false,"description":"This rule will always be triggered, meaning that if this rule is defined on a policy, the policy will always trigger the policy action, regardless of the activity details.","title":"AlwaysTrigger","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.0.pendingChangeRequest.body.oneOf.1.rule","typeLabel":"AlwaysTrigger · object"},"action":{"oneOf":[{"type":"object","title":"RequestApproval","description":"\nThis action means that activity will first require an Approval process to be completed before it can be executed (or be aborted if someone rejects it during the approval process).\n\nOne or several groups of approvers need to be specified. These groups define who is allowed to approve / reject an activity.\n\nThe activity will only be executed if all approver groups reach their \"quorum\" of approvals. Otherwise, if any one user within any approver group rejects, then the activity is aborted and the call is not executed.\n\nThe example below shows a `RequestApproval` action, configured with one approval group requiring 2 approvals amongst three specific users.\n\n```json\n{\n \"action\": {\n \"kind\": \"RequestApproval\",\n \"autoRejectTimeout\": 60, // minutes\n \"approvalGroups\": [\n {\n \"name\": \"Admins\",\n \"quorum\": 2, // only 2 approvers required in that group \n \"approvers\": {\n \"userId\": {\n \"in\": [\"us-...1\", \"us-...2\", \"us-...3\"],\n }\n }\n }\n ],\n\n }\n}\n```\n\n**Don't lock yourself up**\n\nBy default, users cannot approve an activity they initiated themselves, even if they are in an approval group. To allow this, you must set `initiatorCanApprove: true`.\n\n*Example 1:* For any wallet transfer, a policy is setup to require approval from **1 specific admin user** (eg. the CEO). `initiatorCanApprove` was not set to `true`. If the CEO himself initiates a transfer, no-one can approve his transfer and it's stuck.\n\n*Example 2:* Company has only 3 users. A policy is setup to require approval from **any 3 users** (`quorum: 3`) for any modification of a policy. `initiatorCanApprove` was not set to `true`. In this case, they are locked, and the policy cannot be modified: whoever requests a modification cannot approve, and the policy is therefore always missing one approver. To unlock, they would need to invite a new user and give him the rights to approve as well.\n ","required":["kind","approvalGroups"],"properties":{"kind":{"type":"string","enum":["RequestApproval"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.0.pendingChangeRequest.body.oneOf.1.action.oneOf.0.kind","typeLabel":"enum\u003cstring>"},"approvalGroups":{"type":"array","items":{"type":"object","properties":{"quorum":{"type":"integer","minimum":1,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.0.pendingChangeRequest.body.oneOf.1.action.oneOf.0.approvalGroups.items.[INDEX].quorum","typeLabel":"integer"},"approvers":{"type":"object","properties":{"userId":{"type":"object","properties":{"in":{"type":"array","items":{"type":"string","minLength":1,"uniqueKey":"\\items.items.[INDEX].oneOf.0.pendingChangeRequest.body.oneOf.1.action.oneOf.0.approvalGroups.items.[INDEX].approvers.userId.in.items.[INDEX]","typeLabel":"string"},"minItems":1,"maxItems":100,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.0.pendingChangeRequest.body.oneOf.1.action.oneOf.0.approvalGroups.items.[INDEX].approvers.userId.in","typeLabel":"string[]"}},"required":["in"],"additionalProperties":false,"description":"Users and service accounts who may approve.","uniqueKey":"\\items.items.[INDEX].oneOf.0.pendingChangeRequest.body.oneOf.1.action.oneOf.0.approvalGroups.items.[INDEX].approvers.userId","typeLabel":"object"},"userGroupId":{"type":"object","properties":{"in":{"type":"array","items":{"type":"string","minLength":1,"maxLength":64,"pattern":"^ug-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"User group id.","example":"ug-139tf-f58l8-lsbt6dp47lfsdvgh","uniqueKey":"\\items.items.[INDEX].oneOf.0.pendingChangeRequest.body.oneOf.1.action.oneOf.0.approvalGroups.items.[INDEX].approvers.userGroupId.in.items.[INDEX]","typeLabel":"string"},"minItems":1,"maxItems":100,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.0.pendingChangeRequest.body.oneOf.1.action.oneOf.0.approvalGroups.items.[INDEX].approvers.userGroupId.in","typeLabel":"string[]"}},"required":["in"],"additionalProperties":false,"description":"User groups whose members may approve.","uniqueKey":"\\items.items.[INDEX].oneOf.0.pendingChangeRequest.body.oneOf.1.action.oneOf.0.approvalGroups.items.[INDEX].approvers.userGroupId","typeLabel":"object"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.0.pendingChangeRequest.body.oneOf.1.action.oneOf.0.approvalGroups.items.[INDEX].approvers","typeLabel":"object"},"name":{"type":"string","uniqueKey":"\\items.items.[INDEX].oneOf.0.pendingChangeRequest.body.oneOf.1.action.oneOf.0.approvalGroups.items.[INDEX].name","typeLabel":"string"},"initiatorCanApprove":{"type":"boolean","description":"Whether the initiator of the activity can participate in the approval.","uniqueKey":"\\items.items.[INDEX].oneOf.0.pendingChangeRequest.body.oneOf.1.action.oneOf.0.approvalGroups.items.[INDEX].initiatorCanApprove","typeLabel":"boolean"},"serviceAccountsCanApprove":{"type":"boolean","description":"Whether service accounts can participate in the approval for this group.","uniqueKey":"\\items.items.[INDEX].oneOf.0.pendingChangeRequest.body.oneOf.1.action.oneOf.0.approvalGroups.items.[INDEX].serviceAccountsCanApprove","typeLabel":"boolean"}},"required":["quorum","approvers"],"additionalProperties":false,"uniqueKey":"\\items.items.[INDEX].oneOf.0.pendingChangeRequest.body.oneOf.1.action.oneOf.0.approvalGroups.items.[INDEX]","typeLabel":"object"},"minItems":1,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.0.pendingChangeRequest.body.oneOf.1.action.oneOf.0.approvalGroups","typeLabel":"object[]"},"autoRejectTimeout":{"oneOf":[{"type":"integer","minimum":1,"uniqueKey":"\\items.items.[INDEX].oneOf.0.pendingChangeRequest.body.oneOf.1.action.oneOf.0.autoRejectTimeout.oneOf.0","typeLabel":"integer"},{"type":"null","minimum":1,"uniqueKey":"\\items.items.[INDEX].oneOf.0.pendingChangeRequest.body.oneOf.1.action.oneOf.0.autoRejectTimeout.oneOf.1","typeLabel":"null"}],"uniqueKey":"\\items.items.[INDEX].oneOf.0.pendingChangeRequest.body.oneOf.1.action.oneOf.0.autoRejectTimeout","typeLabel":"integer | null"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.0.pendingChangeRequest.body.oneOf.1.action.oneOf.0","typeLabel":"RequestApproval · object"},{"type":"object","title":"Block","description":"This action means that the activity will be blocked if the policy is triggered.\n\n```json\n{\n \"action\": {\n \"kind\": \"Block\"\n }\n}\n```\n","required":["kind"],"properties":{"kind":{"type":"string","enum":["Block"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.0.pendingChangeRequest.body.oneOf.1.action.oneOf.1.kind","typeLabel":"enum\u003cstring>"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.0.pendingChangeRequest.body.oneOf.1.action.oneOf.1","typeLabel":"Block · object"}],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.0.pendingChangeRequest.body.oneOf.1.action","typeLabel":"RequestApproval · object | Block · object"},"dateCreated":{"type":"string","uniqueKey":"\\items.items.[INDEX].oneOf.0.pendingChangeRequest.body.oneOf.1.dateCreated","typeLabel":"string"},"dateUpdated":{"type":"string","uniqueKey":"\\items.items.[INDEX].oneOf.0.pendingChangeRequest.body.oneOf.1.dateUpdated","typeLabel":"string"},"filters":{"type":"object","properties":{"permissionId":{"type":"object","properties":{"in":{"type":"array","items":{"type":"string","minLength":1,"uniqueKey":"\\items.items.[INDEX].oneOf.0.pendingChangeRequest.body.oneOf.1.filters.permissionId.in.items.[INDEX]","typeLabel":"string"},"minItems":1,"maxItems":100,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.0.pendingChangeRequest.body.oneOf.1.filters.permissionId.in","typeLabel":"string[]"}},"required":["in"],"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.0.pendingChangeRequest.body.oneOf.1.filters.permissionId","typeLabel":"object"}},"required":["permissionId"],"additionalProperties":false,"uniqueKey":"\\items.items.[INDEX].oneOf.0.pendingChangeRequest.body.oneOf.1.filters","typeLabel":"object"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.0.pendingChangeRequest.body.oneOf.1","typeLabel":"Permissions:Assign · object"},{"type":"object","title":"Permissions:Modify","required":["id","name","status","activityKind","rule","action"],"properties":{"id":{"type":"string","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.0.pendingChangeRequest.body.oneOf.2.id","typeLabel":"string"},"name":{"type":"string","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.0.pendingChangeRequest.body.oneOf.2.name","typeLabel":"string"},"status":{"type":"string","enum":["Active","Archived"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.0.pendingChangeRequest.body.oneOf.2.status","typeLabel":"enum\u003cstring>"},"activityKind":{"type":"string","enum":["Permissions:Modify"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.0.pendingChangeRequest.body.oneOf.2.activityKind","typeLabel":"enum\u003cstring>"},"rule":{"type":"object","properties":{"kind":{"type":"string","enum":["AlwaysTrigger"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.0.pendingChangeRequest.body.oneOf.2.rule.kind","typeLabel":"enum\u003cstring>"},"configuration":{"type":"object","properties":{},"additionalProperties":false,"uniqueKey":"\\items.items.[INDEX].oneOf.0.pendingChangeRequest.body.oneOf.2.rule.configuration","typeLabel":"object"}},"required":["kind"],"additionalProperties":false,"description":"This rule will always be triggered, meaning that if this rule is defined on a policy, the policy will always trigger the policy action, regardless of the activity details.","title":"AlwaysTrigger","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.0.pendingChangeRequest.body.oneOf.2.rule","typeLabel":"AlwaysTrigger · object"},"action":{"oneOf":[{"type":"object","title":"RequestApproval","description":"\nThis action means that activity will first require an Approval process to be completed before it can be executed (or be aborted if someone rejects it during the approval process).\n\nOne or several groups of approvers need to be specified. These groups define who is allowed to approve / reject an activity.\n\nThe activity will only be executed if all approver groups reach their \"quorum\" of approvals. Otherwise, if any one user within any approver group rejects, then the activity is aborted and the call is not executed.\n\nThe example below shows a `RequestApproval` action, configured with one approval group requiring 2 approvals amongst three specific users.\n\n```json\n{\n \"action\": {\n \"kind\": \"RequestApproval\",\n \"autoRejectTimeout\": 60, // minutes\n \"approvalGroups\": [\n {\n \"name\": \"Admins\",\n \"quorum\": 2, // only 2 approvers required in that group \n \"approvers\": {\n \"userId\": {\n \"in\": [\"us-...1\", \"us-...2\", \"us-...3\"],\n }\n }\n }\n ],\n\n }\n}\n```\n\n**Don't lock yourself up**\n\nBy default, users cannot approve an activity they initiated themselves, even if they are in an approval group. To allow this, you must set `initiatorCanApprove: true`.\n\n*Example 1:* For any wallet transfer, a policy is setup to require approval from **1 specific admin user** (eg. the CEO). `initiatorCanApprove` was not set to `true`. If the CEO himself initiates a transfer, no-one can approve his transfer and it's stuck.\n\n*Example 2:* Company has only 3 users. A policy is setup to require approval from **any 3 users** (`quorum: 3`) for any modification of a policy. `initiatorCanApprove` was not set to `true`. In this case, they are locked, and the policy cannot be modified: whoever requests a modification cannot approve, and the policy is therefore always missing one approver. To unlock, they would need to invite a new user and give him the rights to approve as well.\n ","required":["kind","approvalGroups"],"properties":{"kind":{"type":"string","enum":["RequestApproval"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.0.pendingChangeRequest.body.oneOf.2.action.oneOf.0.kind","typeLabel":"enum\u003cstring>"},"approvalGroups":{"type":"array","items":{"type":"object","properties":{"quorum":{"type":"integer","minimum":1,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.0.pendingChangeRequest.body.oneOf.2.action.oneOf.0.approvalGroups.items.[INDEX].quorum","typeLabel":"integer"},"approvers":{"type":"object","properties":{"userId":{"type":"object","properties":{"in":{"type":"array","items":{"type":"string","minLength":1,"uniqueKey":"\\items.items.[INDEX].oneOf.0.pendingChangeRequest.body.oneOf.2.action.oneOf.0.approvalGroups.items.[INDEX].approvers.userId.in.items.[INDEX]","typeLabel":"string"},"minItems":1,"maxItems":100,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.0.pendingChangeRequest.body.oneOf.2.action.oneOf.0.approvalGroups.items.[INDEX].approvers.userId.in","typeLabel":"string[]"}},"required":["in"],"additionalProperties":false,"description":"Users and service accounts who may approve.","uniqueKey":"\\items.items.[INDEX].oneOf.0.pendingChangeRequest.body.oneOf.2.action.oneOf.0.approvalGroups.items.[INDEX].approvers.userId","typeLabel":"object"},"userGroupId":{"type":"object","properties":{"in":{"type":"array","items":{"type":"string","minLength":1,"maxLength":64,"pattern":"^ug-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"User group id.","example":"ug-139tf-f58l8-lsbt6dp47lfsdvgh","uniqueKey":"\\items.items.[INDEX].oneOf.0.pendingChangeRequest.body.oneOf.2.action.oneOf.0.approvalGroups.items.[INDEX].approvers.userGroupId.in.items.[INDEX]","typeLabel":"string"},"minItems":1,"maxItems":100,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.0.pendingChangeRequest.body.oneOf.2.action.oneOf.0.approvalGroups.items.[INDEX].approvers.userGroupId.in","typeLabel":"string[]"}},"required":["in"],"additionalProperties":false,"description":"User groups whose members may approve.","uniqueKey":"\\items.items.[INDEX].oneOf.0.pendingChangeRequest.body.oneOf.2.action.oneOf.0.approvalGroups.items.[INDEX].approvers.userGroupId","typeLabel":"object"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.0.pendingChangeRequest.body.oneOf.2.action.oneOf.0.approvalGroups.items.[INDEX].approvers","typeLabel":"object"},"name":{"type":"string","uniqueKey":"\\items.items.[INDEX].oneOf.0.pendingChangeRequest.body.oneOf.2.action.oneOf.0.approvalGroups.items.[INDEX].name","typeLabel":"string"},"initiatorCanApprove":{"type":"boolean","description":"Whether the initiator of the activity can participate in the approval.","uniqueKey":"\\items.items.[INDEX].oneOf.0.pendingChangeRequest.body.oneOf.2.action.oneOf.0.approvalGroups.items.[INDEX].initiatorCanApprove","typeLabel":"boolean"},"serviceAccountsCanApprove":{"type":"boolean","description":"Whether service accounts can participate in the approval for this group.","uniqueKey":"\\items.items.[INDEX].oneOf.0.pendingChangeRequest.body.oneOf.2.action.oneOf.0.approvalGroups.items.[INDEX].serviceAccountsCanApprove","typeLabel":"boolean"}},"required":["quorum","approvers"],"additionalProperties":false,"uniqueKey":"\\items.items.[INDEX].oneOf.0.pendingChangeRequest.body.oneOf.2.action.oneOf.0.approvalGroups.items.[INDEX]","typeLabel":"object"},"minItems":1,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.0.pendingChangeRequest.body.oneOf.2.action.oneOf.0.approvalGroups","typeLabel":"object[]"},"autoRejectTimeout":{"oneOf":[{"type":"integer","minimum":1,"uniqueKey":"\\items.items.[INDEX].oneOf.0.pendingChangeRequest.body.oneOf.2.action.oneOf.0.autoRejectTimeout.oneOf.0","typeLabel":"integer"},{"type":"null","minimum":1,"uniqueKey":"\\items.items.[INDEX].oneOf.0.pendingChangeRequest.body.oneOf.2.action.oneOf.0.autoRejectTimeout.oneOf.1","typeLabel":"null"}],"uniqueKey":"\\items.items.[INDEX].oneOf.0.pendingChangeRequest.body.oneOf.2.action.oneOf.0.autoRejectTimeout","typeLabel":"integer | null"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.0.pendingChangeRequest.body.oneOf.2.action.oneOf.0","typeLabel":"RequestApproval · object"},{"type":"object","title":"Block","description":"This action means that the activity will be blocked if the policy is triggered.\n\n```json\n{\n \"action\": {\n \"kind\": \"Block\"\n }\n}\n```\n","required":["kind"],"properties":{"kind":{"type":"string","enum":["Block"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.0.pendingChangeRequest.body.oneOf.2.action.oneOf.1.kind","typeLabel":"enum\u003cstring>"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.0.pendingChangeRequest.body.oneOf.2.action.oneOf.1","typeLabel":"Block · object"}],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.0.pendingChangeRequest.body.oneOf.2.action","typeLabel":"RequestApproval · object | Block · object"},"dateCreated":{"type":"string","uniqueKey":"\\items.items.[INDEX].oneOf.0.pendingChangeRequest.body.oneOf.2.dateCreated","typeLabel":"string"},"dateUpdated":{"type":"string","uniqueKey":"\\items.items.[INDEX].oneOf.0.pendingChangeRequest.body.oneOf.2.dateUpdated","typeLabel":"string"},"filters":{"type":"object","properties":{"permissionId":{"type":"object","properties":{"in":{"type":"array","items":{"type":"string","minLength":1,"uniqueKey":"\\items.items.[INDEX].oneOf.0.pendingChangeRequest.body.oneOf.2.filters.permissionId.in.items.[INDEX]","typeLabel":"string"},"minItems":1,"maxItems":100,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.0.pendingChangeRequest.body.oneOf.2.filters.permissionId.in","typeLabel":"string[]"}},"required":["in"],"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.0.pendingChangeRequest.body.oneOf.2.filters.permissionId","typeLabel":"object"}},"required":["permissionId"],"additionalProperties":false,"uniqueKey":"\\items.items.[INDEX].oneOf.0.pendingChangeRequest.body.oneOf.2.filters","typeLabel":"object"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.0.pendingChangeRequest.body.oneOf.2","typeLabel":"Permissions:Modify · object"},{"type":"object","title":"Policies:Modify","required":["id","name","status","activityKind","rule","action"],"properties":{"id":{"type":"string","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.0.pendingChangeRequest.body.oneOf.3.id","typeLabel":"string"},"name":{"type":"string","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.0.pendingChangeRequest.body.oneOf.3.name","typeLabel":"string"},"status":{"type":"string","enum":["Active","Archived"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.0.pendingChangeRequest.body.oneOf.3.status","typeLabel":"enum\u003cstring>"},"activityKind":{"type":"string","enum":["Policies:Modify"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.0.pendingChangeRequest.body.oneOf.3.activityKind","typeLabel":"enum\u003cstring>"},"rule":{"type":"object","properties":{"kind":{"type":"string","enum":["AlwaysTrigger"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.0.pendingChangeRequest.body.oneOf.3.rule.kind","typeLabel":"enum\u003cstring>"},"configuration":{"type":"object","properties":{},"additionalProperties":false,"uniqueKey":"\\items.items.[INDEX].oneOf.0.pendingChangeRequest.body.oneOf.3.rule.configuration","typeLabel":"object"}},"required":["kind"],"additionalProperties":false,"description":"This rule will always be triggered, meaning that if this rule is defined on a policy, the policy will always trigger the policy action, regardless of the activity details.","title":"AlwaysTrigger","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.0.pendingChangeRequest.body.oneOf.3.rule","typeLabel":"AlwaysTrigger · object"},"action":{"type":"object","properties":{"kind":{"type":"string","enum":["RequestApproval"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.0.pendingChangeRequest.body.oneOf.3.action.kind","typeLabel":"enum\u003cstring>"},"approvalGroups":{"type":"array","items":{"type":"object","properties":{"quorum":{"type":"integer","minimum":1,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.0.pendingChangeRequest.body.oneOf.3.action.approvalGroups.items.[INDEX].quorum","typeLabel":"integer"},"approvers":{"type":"object","properties":{"userId":{"type":"object","properties":{"in":{"type":"array","items":{"type":"string","minLength":1,"uniqueKey":"\\items.items.[INDEX].oneOf.0.pendingChangeRequest.body.oneOf.3.action.approvalGroups.items.[INDEX].approvers.userId.in.items.[INDEX]","typeLabel":"string"},"minItems":1,"maxItems":100,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.0.pendingChangeRequest.body.oneOf.3.action.approvalGroups.items.[INDEX].approvers.userId.in","typeLabel":"string[]"}},"required":["in"],"additionalProperties":false,"description":"Users and service accounts who may approve.","uniqueKey":"\\items.items.[INDEX].oneOf.0.pendingChangeRequest.body.oneOf.3.action.approvalGroups.items.[INDEX].approvers.userId","typeLabel":"object"},"userGroupId":{"type":"object","properties":{"in":{"type":"array","items":{"type":"string","minLength":1,"maxLength":64,"pattern":"^ug-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"User group id.","example":"ug-139tf-f58l8-lsbt6dp47lfsdvgh","uniqueKey":"\\items.items.[INDEX].oneOf.0.pendingChangeRequest.body.oneOf.3.action.approvalGroups.items.[INDEX].approvers.userGroupId.in.items.[INDEX]","typeLabel":"string"},"minItems":1,"maxItems":100,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.0.pendingChangeRequest.body.oneOf.3.action.approvalGroups.items.[INDEX].approvers.userGroupId.in","typeLabel":"string[]"}},"required":["in"],"additionalProperties":false,"description":"User groups whose members may approve.","uniqueKey":"\\items.items.[INDEX].oneOf.0.pendingChangeRequest.body.oneOf.3.action.approvalGroups.items.[INDEX].approvers.userGroupId","typeLabel":"object"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.0.pendingChangeRequest.body.oneOf.3.action.approvalGroups.items.[INDEX].approvers","typeLabel":"object"},"name":{"type":"string","uniqueKey":"\\items.items.[INDEX].oneOf.0.pendingChangeRequest.body.oneOf.3.action.approvalGroups.items.[INDEX].name","typeLabel":"string"},"initiatorCanApprove":{"type":"boolean","description":"Whether the initiator of the activity can participate in the approval.","uniqueKey":"\\items.items.[INDEX].oneOf.0.pendingChangeRequest.body.oneOf.3.action.approvalGroups.items.[INDEX].initiatorCanApprove","typeLabel":"boolean"},"serviceAccountsCanApprove":{"type":"boolean","description":"Whether service accounts can participate in the approval for this group.","uniqueKey":"\\items.items.[INDEX].oneOf.0.pendingChangeRequest.body.oneOf.3.action.approvalGroups.items.[INDEX].serviceAccountsCanApprove","typeLabel":"boolean"}},"required":["quorum","approvers"],"additionalProperties":false,"uniqueKey":"\\items.items.[INDEX].oneOf.0.pendingChangeRequest.body.oneOf.3.action.approvalGroups.items.[INDEX]","typeLabel":"object"},"minItems":1,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.0.pendingChangeRequest.body.oneOf.3.action.approvalGroups","typeLabel":"object[]"},"autoRejectTimeout":{"oneOf":[{"type":"integer","minimum":1,"uniqueKey":"\\items.items.[INDEX].oneOf.0.pendingChangeRequest.body.oneOf.3.action.autoRejectTimeout.oneOf.0","typeLabel":"integer"},{"type":"null","minimum":1,"uniqueKey":"\\items.items.[INDEX].oneOf.0.pendingChangeRequest.body.oneOf.3.action.autoRejectTimeout.oneOf.1","typeLabel":"null"}],"uniqueKey":"\\items.items.[INDEX].oneOf.0.pendingChangeRequest.body.oneOf.3.action.autoRejectTimeout","typeLabel":"integer | null"}},"required":["kind","approvalGroups"],"additionalProperties":false,"description":"\nThis action means that activity will first require an Approval process to be completed before it can be executed (or be aborted if someone rejects it during the approval process).\n\nOne or several groups of approvers need to be specified. These groups define who is allowed to approve / reject an activity.\n\nThe activity will only be executed if all approver groups reach their \"quorum\" of approvals. Otherwise, if any one user within any approver group rejects, then the activity is aborted and the call is not executed.\n\nThe example below shows a `RequestApproval` action, configured with one approval group requiring 2 approvals amongst three specific users.\n\n```json\n{\n \"action\": {\n \"kind\": \"RequestApproval\",\n \"autoRejectTimeout\": 60, // minutes\n \"approvalGroups\": [\n {\n \"name\": \"Admins\",\n \"quorum\": 2, // only 2 approvers required in that group \n \"approvers\": {\n \"userId\": {\n \"in\": [\"us-...1\", \"us-...2\", \"us-...3\"],\n }\n }\n }\n ],\n\n }\n}\n```\n\n**Don't lock yourself up**\n\nBy default, users cannot approve an activity they initiated themselves, even if they are in an approval group. To allow this, you must set `initiatorCanApprove: true`.\n\n*Example 1:* For any wallet transfer, a policy is setup to require approval from **1 specific admin user** (eg. the CEO). `initiatorCanApprove` was not set to `true`. If the CEO himself initiates a transfer, no-one can approve his transfer and it's stuck.\n\n*Example 2:* Company has only 3 users. A policy is setup to require approval from **any 3 users** (`quorum: 3`) for any modification of a policy. `initiatorCanApprove` was not set to `true`. In this case, they are locked, and the policy cannot be modified: whoever requests a modification cannot approve, and the policy is therefore always missing one approver. To unlock, they would need to invite a new user and give him the rights to approve as well.\n ","title":"RequestApproval","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.0.pendingChangeRequest.body.oneOf.3.action","typeLabel":"RequestApproval · object"},"dateCreated":{"type":"string","uniqueKey":"\\items.items.[INDEX].oneOf.0.pendingChangeRequest.body.oneOf.3.dateCreated","typeLabel":"string"},"dateUpdated":{"type":"string","uniqueKey":"\\items.items.[INDEX].oneOf.0.pendingChangeRequest.body.oneOf.3.dateUpdated","typeLabel":"string"},"filters":{"type":"object","properties":{"policyId":{"type":"object","properties":{"in":{"type":"array","items":{"type":"string","minLength":1,"uniqueKey":"\\items.items.[INDEX].oneOf.0.pendingChangeRequest.body.oneOf.3.filters.policyId.in.items.[INDEX]","typeLabel":"string"},"minItems":1,"maxItems":100,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.0.pendingChangeRequest.body.oneOf.3.filters.policyId.in","typeLabel":"string[]"}},"required":["in"],"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.0.pendingChangeRequest.body.oneOf.3.filters.policyId","typeLabel":"object"}},"required":["policyId"],"additionalProperties":false,"uniqueKey":"\\items.items.[INDEX].oneOf.0.pendingChangeRequest.body.oneOf.3.filters","typeLabel":"object"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.0.pendingChangeRequest.body.oneOf.3","typeLabel":"Policies:Modify · object"},{"type":"object","title":"Registry:ContractSchemas:Modify","required":["id","name","status","activityKind","rule","action"],"properties":{"id":{"type":"string","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.0.pendingChangeRequest.body.oneOf.4.id","typeLabel":"string"},"name":{"type":"string","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.0.pendingChangeRequest.body.oneOf.4.name","typeLabel":"string"},"status":{"type":"string","enum":["Active","Archived"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.0.pendingChangeRequest.body.oneOf.4.status","typeLabel":"enum\u003cstring>"},"activityKind":{"type":"string","enum":["Registry:ContractSchemas:Modify"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.0.pendingChangeRequest.body.oneOf.4.activityKind","typeLabel":"enum\u003cstring>"},"rule":{"type":"object","properties":{"kind":{"type":"string","enum":["AlwaysTrigger"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.0.pendingChangeRequest.body.oneOf.4.rule.kind","typeLabel":"enum\u003cstring>"},"configuration":{"type":"object","properties":{},"additionalProperties":false,"uniqueKey":"\\items.items.[INDEX].oneOf.0.pendingChangeRequest.body.oneOf.4.rule.configuration","typeLabel":"object"}},"required":["kind"],"additionalProperties":false,"description":"This rule will always be triggered, meaning that if this rule is defined on a policy, the policy will always trigger the policy action, regardless of the activity details.","title":"AlwaysTrigger","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.0.pendingChangeRequest.body.oneOf.4.rule","typeLabel":"AlwaysTrigger · object"},"action":{"oneOf":[{"type":"object","title":"RequestApproval","description":"\nThis action means that activity will first require an Approval process to be completed before it can be executed (or be aborted if someone rejects it during the approval process).\n\nOne or several groups of approvers need to be specified. These groups define who is allowed to approve / reject an activity.\n\nThe activity will only be executed if all approver groups reach their \"quorum\" of approvals. Otherwise, if any one user within any approver group rejects, then the activity is aborted and the call is not executed.\n\nThe example below shows a `RequestApproval` action, configured with one approval group requiring 2 approvals amongst three specific users.\n\n```json\n{\n \"action\": {\n \"kind\": \"RequestApproval\",\n \"autoRejectTimeout\": 60, // minutes\n \"approvalGroups\": [\n {\n \"name\": \"Admins\",\n \"quorum\": 2, // only 2 approvers required in that group \n \"approvers\": {\n \"userId\": {\n \"in\": [\"us-...1\", \"us-...2\", \"us-...3\"],\n }\n }\n }\n ],\n\n }\n}\n```\n\n**Don't lock yourself up**\n\nBy default, users cannot approve an activity they initiated themselves, even if they are in an approval group. To allow this, you must set `initiatorCanApprove: true`.\n\n*Example 1:* For any wallet transfer, a policy is setup to require approval from **1 specific admin user** (eg. the CEO). `initiatorCanApprove` was not set to `true`. If the CEO himself initiates a transfer, no-one can approve his transfer and it's stuck.\n\n*Example 2:* Company has only 3 users. A policy is setup to require approval from **any 3 users** (`quorum: 3`) for any modification of a policy. `initiatorCanApprove` was not set to `true`. In this case, they are locked, and the policy cannot be modified: whoever requests a modification cannot approve, and the policy is therefore always missing one approver. To unlock, they would need to invite a new user and give him the rights to approve as well.\n ","required":["kind","approvalGroups"],"properties":{"kind":{"type":"string","enum":["RequestApproval"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.0.pendingChangeRequest.body.oneOf.4.action.oneOf.0.kind","typeLabel":"enum\u003cstring>"},"approvalGroups":{"type":"array","items":{"type":"object","properties":{"quorum":{"type":"integer","minimum":1,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.0.pendingChangeRequest.body.oneOf.4.action.oneOf.0.approvalGroups.items.[INDEX].quorum","typeLabel":"integer"},"approvers":{"type":"object","properties":{"userId":{"type":"object","properties":{"in":{"type":"array","items":{"type":"string","minLength":1,"uniqueKey":"\\items.items.[INDEX].oneOf.0.pendingChangeRequest.body.oneOf.4.action.oneOf.0.approvalGroups.items.[INDEX].approvers.userId.in.items.[INDEX]","typeLabel":"string"},"minItems":1,"maxItems":100,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.0.pendingChangeRequest.body.oneOf.4.action.oneOf.0.approvalGroups.items.[INDEX].approvers.userId.in","typeLabel":"string[]"}},"required":["in"],"additionalProperties":false,"description":"Users and service accounts who may approve.","uniqueKey":"\\items.items.[INDEX].oneOf.0.pendingChangeRequest.body.oneOf.4.action.oneOf.0.approvalGroups.items.[INDEX].approvers.userId","typeLabel":"object"},"userGroupId":{"type":"object","properties":{"in":{"type":"array","items":{"type":"string","minLength":1,"maxLength":64,"pattern":"^ug-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"User group id.","example":"ug-139tf-f58l8-lsbt6dp47lfsdvgh","uniqueKey":"\\items.items.[INDEX].oneOf.0.pendingChangeRequest.body.oneOf.4.action.oneOf.0.approvalGroups.items.[INDEX].approvers.userGroupId.in.items.[INDEX]","typeLabel":"string"},"minItems":1,"maxItems":100,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.0.pendingChangeRequest.body.oneOf.4.action.oneOf.0.approvalGroups.items.[INDEX].approvers.userGroupId.in","typeLabel":"string[]"}},"required":["in"],"additionalProperties":false,"description":"User groups whose members may approve.","uniqueKey":"\\items.items.[INDEX].oneOf.0.pendingChangeRequest.body.oneOf.4.action.oneOf.0.approvalGroups.items.[INDEX].approvers.userGroupId","typeLabel":"object"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.0.pendingChangeRequest.body.oneOf.4.action.oneOf.0.approvalGroups.items.[INDEX].approvers","typeLabel":"object"},"name":{"type":"string","uniqueKey":"\\items.items.[INDEX].oneOf.0.pendingChangeRequest.body.oneOf.4.action.oneOf.0.approvalGroups.items.[INDEX].name","typeLabel":"string"},"initiatorCanApprove":{"type":"boolean","description":"Whether the initiator of the activity can participate in the approval.","uniqueKey":"\\items.items.[INDEX].oneOf.0.pendingChangeRequest.body.oneOf.4.action.oneOf.0.approvalGroups.items.[INDEX].initiatorCanApprove","typeLabel":"boolean"},"serviceAccountsCanApprove":{"type":"boolean","description":"Whether service accounts can participate in the approval for this group.","uniqueKey":"\\items.items.[INDEX].oneOf.0.pendingChangeRequest.body.oneOf.4.action.oneOf.0.approvalGroups.items.[INDEX].serviceAccountsCanApprove","typeLabel":"boolean"}},"required":["quorum","approvers"],"additionalProperties":false,"uniqueKey":"\\items.items.[INDEX].oneOf.0.pendingChangeRequest.body.oneOf.4.action.oneOf.0.approvalGroups.items.[INDEX]","typeLabel":"object"},"minItems":1,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.0.pendingChangeRequest.body.oneOf.4.action.oneOf.0.approvalGroups","typeLabel":"object[]"},"autoRejectTimeout":{"oneOf":[{"type":"integer","minimum":1,"uniqueKey":"\\items.items.[INDEX].oneOf.0.pendingChangeRequest.body.oneOf.4.action.oneOf.0.autoRejectTimeout.oneOf.0","typeLabel":"integer"},{"type":"null","minimum":1,"uniqueKey":"\\items.items.[INDEX].oneOf.0.pendingChangeRequest.body.oneOf.4.action.oneOf.0.autoRejectTimeout.oneOf.1","typeLabel":"null"}],"uniqueKey":"\\items.items.[INDEX].oneOf.0.pendingChangeRequest.body.oneOf.4.action.oneOf.0.autoRejectTimeout","typeLabel":"integer | null"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.0.pendingChangeRequest.body.oneOf.4.action.oneOf.0","typeLabel":"RequestApproval · object"},{"type":"object","title":"Block","description":"This action means that the activity will be blocked if the policy is triggered.\n\n```json\n{\n \"action\": {\n \"kind\": \"Block\"\n }\n}\n```\n","required":["kind"],"properties":{"kind":{"type":"string","enum":["Block"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.0.pendingChangeRequest.body.oneOf.4.action.oneOf.1.kind","typeLabel":"enum\u003cstring>"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.0.pendingChangeRequest.body.oneOf.4.action.oneOf.1","typeLabel":"Block · object"}],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.0.pendingChangeRequest.body.oneOf.4.action","typeLabel":"RequestApproval · object | Block · object"},"dateCreated":{"type":"string","uniqueKey":"\\items.items.[INDEX].oneOf.0.pendingChangeRequest.body.oneOf.4.dateCreated","typeLabel":"string"},"dateUpdated":{"type":"string","uniqueKey":"\\items.items.[INDEX].oneOf.0.pendingChangeRequest.body.oneOf.4.dateUpdated","typeLabel":"string"},"filters":{"type":"object","properties":{},"uniqueKey":"\\items.items.[INDEX].oneOf.0.pendingChangeRequest.body.oneOf.4.filters","typeLabel":"object"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.0.pendingChangeRequest.body.oneOf.4","typeLabel":"Registry:ContractSchemas:Modify · object"},{"type":"object","title":"Wallets:Sign","required":["id","name","status","activityKind","rule","action"],"properties":{"id":{"type":"string","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.0.pendingChangeRequest.body.oneOf.5.id","typeLabel":"string"},"name":{"type":"string","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.0.pendingChangeRequest.body.oneOf.5.name","typeLabel":"string"},"status":{"type":"string","enum":["Active","Archived"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.0.pendingChangeRequest.body.oneOf.5.status","typeLabel":"enum\u003cstring>"},"activityKind":{"type":"string","enum":["Wallets:Sign"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.0.pendingChangeRequest.body.oneOf.5.activityKind","typeLabel":"enum\u003cstring>"},"rule":{"oneOf":[{"type":"object","title":"AlwaysTrigger","description":"This rule will always be triggered, meaning that if this rule is defined on a policy, the policy will always trigger the policy action, regardless of the activity details.","required":["kind"],"properties":{"kind":{"type":"string","enum":["AlwaysTrigger"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.0.pendingChangeRequest.body.oneOf.5.rule.oneOf.0.kind","typeLabel":"enum\u003cstring>"},"configuration":{"type":"object","properties":{},"additionalProperties":false,"uniqueKey":"\\items.items.[INDEX].oneOf.0.pendingChangeRequest.body.oneOf.5.rule.oneOf.0.configuration","typeLabel":"object"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.0.pendingChangeRequest.body.oneOf.5.rule.oneOf.0","typeLabel":"AlwaysTrigger · object"},{"type":"object","title":"TransactionRecipientWhitelist","description":"This rule will trigger if the destination address *is NOT whitelisted*.","required":["kind","configuration"],"properties":{"kind":{"type":"string","enum":["TransactionRecipientWhitelist"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.0.pendingChangeRequest.body.oneOf.5.rule.oneOf.1.kind","typeLabel":"enum\u003cstring>"},"configuration":{"type":"object","properties":{"addresses":{"type":"array","items":{"type":"string","minLength":1,"uniqueKey":"\\items.items.[INDEX].oneOf.0.pendingChangeRequest.body.oneOf.5.rule.oneOf.1.configuration.addresses.items.[INDEX]","typeLabel":"string"},"description":"Whitelisted recipient addresses","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.0.pendingChangeRequest.body.oneOf.5.rule.oneOf.1.configuration.addresses","typeLabel":"string[]"}},"required":["addresses"],"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.0.pendingChangeRequest.body.oneOf.5.rule.oneOf.1.configuration","typeLabel":"object"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.0.pendingChangeRequest.body.oneOf.5.rule.oneOf.1","typeLabel":"TransactionRecipientWhitelist · object"},{"type":"object","title":"TransactionAmountLimit","description":"This rule will trigger if the wallet activity detected is transferring some value whose amount is equal to or greater than a given limit. The limit is inclusive: a transfer whose value exactly equals the limit also triggers.\n\nThe limit is expressed in a fiat `currency` and evaluated against the market value of the transfer. To set a threshold in the asset's own units instead, use `TransactionAmountLimitNominal`.\n\nNote: If the amount of the wallet activity cannot be evaluated for any reason (eg. market prices are not available, or eg. the amount cannot be inferred from a wallet signature request, etc.), by default the rule will trigger the policy (this is called \"failing closed\" and is generally considered a security best practice).","required":["kind","configuration"],"properties":{"kind":{"type":"string","enum":["TransactionAmountLimit"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.0.pendingChangeRequest.body.oneOf.5.rule.oneOf.2.kind","typeLabel":"enum\u003cstring>"},"configuration":{"type":"object","properties":{"limit":{"type":"number","description":"Amount limit in `currency`","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.0.pendingChangeRequest.body.oneOf.5.rule.oneOf.2.configuration.limit","typeLabel":"number"},"currency":{"type":"string","enum":["USD"],"description":"Fiat currency, currently only `USD`","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.0.pendingChangeRequest.body.oneOf.5.rule.oneOf.2.configuration.currency","typeLabel":"enum\u003cstring>"}},"required":["limit","currency"],"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.0.pendingChangeRequest.body.oneOf.5.rule.oneOf.2.configuration","typeLabel":"object"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.0.pendingChangeRequest.body.oneOf.5.rule.oneOf.2","typeLabel":"TransactionAmountLimit · object"},{"type":"object","title":"TransactionAmountLimitNominal","description":"This rule will trigger if the wallet activity detected is transferring more of a listed asset than that asset's limit.\n\nEach limit is expressed in the minimum denomination of its own asset and compared against the transferred amount directly, so the verdict needs no market data and does not move with a price. To set a threshold on the fiat value of a transfer instead, use `TransactionAmountLimit`.\n\nLimits are asset exact: an asset is identified by its network and its Dfns token identifier, so a wrapped or staked derivative is a different asset from the thing it tracks, and a transfer of an asset the rule does not list will not trigger it.\n\nNote: If the transferred amount or the asset cannot be determined for any reason, by default the rule will trigger the policy (this is called \"failing closed\" and is generally considered a security best practice).","required":["kind","configuration"],"properties":{"kind":{"type":"string","enum":["TransactionAmountLimitNominal"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.0.pendingChangeRequest.body.oneOf.5.rule.oneOf.3.kind","typeLabel":"enum\u003cstring>"},"configuration":{"type":"object","properties":{"assets":{"type":"array","items":{"type":"object","properties":{"network":{"type":"string","title":"Network","description":"The network the asset lives on.","enum":["Algorand","AlgorandTestnet","Aptos","AptosTestnet","ArbitrumOne","ArbitrumSepolia","Arc","ArcTestnet","Areum","AvalancheC","AvalancheCFuji","Base","BaseSepolia","Berachain","BerachainBepolia","Bitcoin","BitcoinSignet","BitcoinTestnet4","BitcoinCash","Bob","BobSepolia","Bsc","BscTestnet","Canton","CantonTestnet","Cardano","CardanoPreprod","Concordium","ConcordiumTestnet","Celo","CeloSepolia","Codex","CodexSepolia","CosmosHub4","CosmosIcsTestnet","Dogecoin","DogecoinTestnet","Ethereum","EthereumClassic","EthereumClassicMordor","EthereumSepolia","EthereumHoodi","FlareC","FlareCCoston2","FlowEvm","FlowEvmTestnet","Hedera","HederaTestnet","HyperEvm","HyperEvmTestnet","Ink","InkSepolia","InternetComputer","Ion","IonTestnet","Iota","IotaTestnet","Kusama","KusamaAssetHub","Litecoin","LitecoinTestnet","Monad","MonadTestnet","Movement","MovementTestnet","Near","NearTestnet","Optimism","OptimismSepolia","Origyn","Plasma","PlasmaTestnet","Plume","PlumeSepolia","Paseo","PaseoAssetHub","Polkadot","PolkadotAssetHub","Polygon","PolygonAmoy","Polymesh","PolymeshTestnet","Rayls","RaylsTestnet","Robinhood","RobinhoodSepolia","SeiAtlantic2","SeiPacific1","Solana","SolanaDevnet","Sonic","SonicTestnet","Starknet","StarknetSepolia","Stellar","StellarTestnet","Sui","SuiTestnet","Tezos","TezosShadownet","Tempo","TempoModerato","Tsc","TscTestnet1","Ton","TonTestnet","Tron","TronNile","Westend","WestendAssetHub","Xdc","XdcApothem","XLayer","XLayerSepolia","XrpLedger","XrpLedgerTestnet"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.0.pendingChangeRequest.body.oneOf.5.rule.oneOf.3.configuration.assets.items.[INDEX].network","typeLabel":"enum\u003cstring>"},"tid":{"type":"string","minLength":1,"maxLength":200,"pattern":"^[a-z0-9_]+:[^\\s](?:[ ]?[^\\s])*$","description":"The Dfns token identifier of the asset, for example `native:eth` or `erc20:0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48`. Must be canonical: token contract addresses on hex based networks are lower cased.","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.0.pendingChangeRequest.body.oneOf.5.rule.oneOf.3.configuration.assets.items.[INDEX].tid","typeLabel":"string"},"limit":{"type":"string","pattern":"^\\d+$","description":"Amount limit in the minimum denomination of the asset, as an integer string, matching how a transfer expresses its amount. For an 18 decimal token `\"5000000000000000000\"` is 5 whole tokens.","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.0.pendingChangeRequest.body.oneOf.5.rule.oneOf.3.configuration.assets.items.[INDEX].limit","typeLabel":"string"}},"required":["network","tid","limit"],"additionalProperties":false,"uniqueKey":"\\items.items.[INDEX].oneOf.0.pendingChangeRequest.body.oneOf.5.rule.oneOf.3.configuration.assets.items.[INDEX]","typeLabel":"object"},"minItems":1,"maxItems":100,"description":"The assets this rule applies to, each with its own limit. A transfer of an asset that is not listed does not trigger the rule. The limit applies to each matching transfer individually; nothing is accumulated across transfers.","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.0.pendingChangeRequest.body.oneOf.5.rule.oneOf.3.configuration.assets","typeLabel":"object[]"}},"required":["assets"],"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.0.pendingChangeRequest.body.oneOf.5.rule.oneOf.3.configuration","typeLabel":"object"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.0.pendingChangeRequest.body.oneOf.5.rule.oneOf.3","typeLabel":"TransactionAmountLimitNominal · object"},{"type":"object","title":"TransactionAmountVelocity","description":"This rule will trigger if the cumulative amount transferred from a given wallet within a given timeframe is greater than a specified limit. The aggregate amount evaluated is based only on the wallet that triggered the policy.","required":["kind","configuration"],"properties":{"kind":{"type":"string","enum":["TransactionAmountVelocity"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.0.pendingChangeRequest.body.oneOf.5.rule.oneOf.4.kind","typeLabel":"enum\u003cstring>"},"configuration":{"type":"object","properties":{"limit":{"type":"number","description":"Amount limit in `currency`","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.0.pendingChangeRequest.body.oneOf.5.rule.oneOf.4.configuration.limit","typeLabel":"number"},"currency":{"type":"string","enum":["USD"],"description":"Currency for the amount limit above","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.0.pendingChangeRequest.body.oneOf.5.rule.oneOf.4.configuration.currency","typeLabel":"enum\u003cstring>"},"timeframe":{"type":"integer","minimum":1,"maximum":43200,"description":"Time period in minutes. Minimum 1, Maximum 43,200.","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.0.pendingChangeRequest.body.oneOf.5.rule.oneOf.4.configuration.timeframe","typeLabel":"integer"}},"required":["limit","currency","timeframe"],"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.0.pendingChangeRequest.body.oneOf.5.rule.oneOf.4.configuration","typeLabel":"object"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.0.pendingChangeRequest.body.oneOf.5.rule.oneOf.4","typeLabel":"TransactionAmountVelocity · object"},{"type":"object","title":"TransactionCountVelocity","description":"This rule will trigger if the number of wallet activities for a given wallet within a given timeframe, is greater than a specified limit. The aggregate number of transactions evaluated is based only on the wallet that triggered the policy.","required":["kind","configuration"],"properties":{"kind":{"type":"string","enum":["TransactionCountVelocity"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.0.pendingChangeRequest.body.oneOf.5.rule.oneOf.5.kind","typeLabel":"enum\u003cstring>"},"configuration":{"type":"object","properties":{"limit":{"type":"number","description":"Count limit","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.0.pendingChangeRequest.body.oneOf.5.rule.oneOf.5.configuration.limit","typeLabel":"number"},"timeframe":{"type":"integer","minimum":1,"maximum":43200,"description":"Time period in minutes. Minimum 1, Maximum 43,200.","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.0.pendingChangeRequest.body.oneOf.5.rule.oneOf.5.configuration.timeframe","typeLabel":"integer"}},"required":["limit","timeframe"],"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.0.pendingChangeRequest.body.oneOf.5.rule.oneOf.5.configuration","typeLabel":"object"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.0.pendingChangeRequest.body.oneOf.5.rule.oneOf.5","typeLabel":"TransactionCountVelocity · object"},{"type":"object","title":"ChainalysisTransactionPrescreening","description":"\n\u003cInfo>\nThis rule can only be used once the Chainalysis integration is activated from the Dfns dashboard settings. (see more on [Chainalysis](https://docs.dfns.co/integrations/aml-kyt/chainalysis) integration page).\n\u003c/Info>\n\nIt's a rule based on [Chainalysis](https://docs.dfns.co/integrations/aml-kyt/chainalysis) KYT integration (Know-Your-Transaction). Upon transfer attempt, we will first register the transfer with Chainalysis (as a [\"withdrawal attempt\"](https://docs.chainalysis.com/api/kyt/#registration-register-a-withdrawal-attempt)), and fetch the screening results (alerts, exposures, addresses detected). Based on the results, and the configuration of this rule, the policy will be triggered.\n\nIt's called \"Pre\"-screening, because the scanned transaction is not on chain yet, it's still a transaction attempt (before the transaction actually make it on chain).\n\n```json\n{\n \"rule\": {\n \"kind\": \"ChainalysisTransactionPrescreening\",\n \"configuration\": {\n \"alerts\": {\n \"alertLevel\": \"LOW\",\n \"categoryIds\": []\n },\n \"exposures\": {\n \"direct\": {\n \"categoryIds\": []\n }\n },\n \"addresses\": {\n \"categoryIds\": []\n },\n \"fallbackBehaviours\": {\n \"skipUnscreenableTransaction\": false,\n \"skipUnsupportedNetwork\": false,\n \"skipUnsupportedAsset\": false,\n \"skipChainalysisFailure\": false\n }\n }\n }\n}\n```\n\n**Configuration**\n\n| Property | Type | Description |\n| --- | --- | --- |\n| `alerts`\u003cbr>\u003cbr>`.alertLevel`* | `string` | Minimum alert level above which the rule should trigger, if any [alert is returned in Chainalysis results](https://docs.chainalysis.com/api/kyt/#withdrawal-attempts-get-alerts). Can be `LOW`, `MEDIUM`, `HIGH`, or `SEVERE` |\n| `alerts`\u003cbr>\u003cbr>`.categoryIds`* | list of integers | List of Chainalysis category IDs (see [here](https://docs.chainalysis.com/api/kyt/#categories)). If you leave this list empty, alerts of any category will trigger the rule. Otherwise, if you only want the rule to trigger on specific categories, you can specify some in the list. |\n| `exposures`\u003cbr>\u003cbr>`.direct`\u003cbr>\u003cbr>`.categoryIds`* | list of integers | List of Chainalysis category IDs (see [here](https://docs.chainalysis.com/api/kyt/#categories)). If you leave this list empty, a [direct exposure](https://docs.chainalysis.com/api/kyt/#withdrawal-attempts-get-direct-exposure) of any category detected by chainalysis will trigger the rule. Otherwise, if you only want the rule to trigger on specific categories, you can specify some in the list. |\n| `addresses`\u003cbr>\u003cbr>`.categoryIds`* | list of integers | List of Chainalysis category IDs (see [here](https://docs.chainalysis.com/api/kyt/#categories)). If you leave this list empty, an [address](https://docs.chainalysis.com/api/kyt/#withdrawal-attempts-get-address-identifications) of any category identified by chainalysis will trigger the rule. Otherwise, if you only want the rule to trigger on specific categories, you can specify some in the list. |\n| `fallbackBehaviours`\u003cbr>\u003cbr>`.skipUnscreenableTransaction`* | boolean | Behaviour if the wallet activity is not screenable (eg. if it's a signature request of a hash). If true, a transaction which is \"unscreenable\" will just be skipped, and policy will not trigger |\n| `fallbackBehaviours.skipUnsupportedNetwork`* | boolean | Behaviour if the wallet activity is on a network not supported by chainalysis, or not yet supported in the dfns-chainalysis integration. If true, an unsupported network will just be skipped, and policy will not trigger |\n| `fallbackBehaviours.skipUnsupportedAsset`* | boolean | Behaviour if the wallet activity is with a asset not supported by chainalysis, or not yet supported in the dfns-chainalysis integration. If true, an unsupported asset will just be skipped, and policy will not trigger |\n| `fallbackBehaviours.skipChainalysisFailure`* | boolean | Behaviour if any issue with Chainalysis calls (timeout, results took too long, rate limiting errors, any error). If true, will skip if any error happens |\n\n","required":["kind","configuration"],"properties":{"kind":{"type":"string","enum":["ChainalysisTransactionPrescreening"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.0.pendingChangeRequest.body.oneOf.5.rule.oneOf.6.kind","typeLabel":"enum\u003cstring>"},"configuration":{"type":"object","properties":{"alerts":{"type":"object","properties":{"alertLevel":{"type":"string","enum":["LOW","MEDIUM","HIGH","SEVERE"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.0.pendingChangeRequest.body.oneOf.5.rule.oneOf.6.configuration.alerts.alertLevel","typeLabel":"enum\u003cstring>"},"categoryIds":{"type":"array","items":{"type":"integer","exclusiveMinimum":0,"uniqueKey":"\\items.items.[INDEX].oneOf.0.pendingChangeRequest.body.oneOf.5.rule.oneOf.6.configuration.alerts.categoryIds.items.[INDEX]","typeLabel":"integer"},"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.0.pendingChangeRequest.body.oneOf.5.rule.oneOf.6.configuration.alerts.categoryIds","typeLabel":"integer[]"}},"required":["alertLevel","categoryIds"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.0.pendingChangeRequest.body.oneOf.5.rule.oneOf.6.configuration.alerts","typeLabel":"object"},"exposures":{"type":"object","properties":{"direct":{"type":"object","properties":{"categoryIds":{"type":"array","items":{"type":"integer","exclusiveMinimum":0,"uniqueKey":"\\items.items.[INDEX].oneOf.0.pendingChangeRequest.body.oneOf.5.rule.oneOf.6.configuration.exposures.direct.categoryIds.items.[INDEX]","typeLabel":"integer"},"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.0.pendingChangeRequest.body.oneOf.5.rule.oneOf.6.configuration.exposures.direct.categoryIds","typeLabel":"integer[]"}},"required":["categoryIds"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.0.pendingChangeRequest.body.oneOf.5.rule.oneOf.6.configuration.exposures.direct","typeLabel":"object"}},"required":["direct"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.0.pendingChangeRequest.body.oneOf.5.rule.oneOf.6.configuration.exposures","typeLabel":"object"},"addresses":{"type":"object","properties":{"categoryIds":{"type":"array","items":{"type":"integer","exclusiveMinimum":0,"uniqueKey":"\\items.items.[INDEX].oneOf.0.pendingChangeRequest.body.oneOf.5.rule.oneOf.6.configuration.addresses.categoryIds.items.[INDEX]","typeLabel":"integer"},"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.0.pendingChangeRequest.body.oneOf.5.rule.oneOf.6.configuration.addresses.categoryIds","typeLabel":"integer[]"}},"required":["categoryIds"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.0.pendingChangeRequest.body.oneOf.5.rule.oneOf.6.configuration.addresses","typeLabel":"object"},"fallbackBehaviours":{"type":"object","properties":{"skipUnscreenableTransaction":{"type":"boolean","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.0.pendingChangeRequest.body.oneOf.5.rule.oneOf.6.configuration.fallbackBehaviours.skipUnscreenableTransaction","typeLabel":"boolean"},"skipUnsupportedNetwork":{"type":"boolean","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.0.pendingChangeRequest.body.oneOf.5.rule.oneOf.6.configuration.fallbackBehaviours.skipUnsupportedNetwork","typeLabel":"boolean"},"skipUnsupportedAsset":{"type":"boolean","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.0.pendingChangeRequest.body.oneOf.5.rule.oneOf.6.configuration.fallbackBehaviours.skipUnsupportedAsset","typeLabel":"boolean"},"skipChainalysisFailure":{"type":"boolean","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.0.pendingChangeRequest.body.oneOf.5.rule.oneOf.6.configuration.fallbackBehaviours.skipChainalysisFailure","typeLabel":"boolean"}},"required":["skipUnscreenableTransaction","skipUnsupportedNetwork","skipUnsupportedAsset","skipChainalysisFailure"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.0.pendingChangeRequest.body.oneOf.5.rule.oneOf.6.configuration.fallbackBehaviours","typeLabel":"object"},"userIdTemplate":{"type":"string","minLength":1,"maxLength":50,"pattern":"^([a-zA-Z0-9_:-]|{wallet\\.id}|{wallet\\.externalId})+$","default":"dfns","description":"**Deprecated** — set `userIdTemplate` on the Chainalysis integration setting instead; when set there, the integration-level template takes precedence over this one.\n\nValue sent to Chainalysis as the \"user ID\". Used by Chainalysis for grouping transaction screenings.\n \nThis template can include variables, included in brackets. The following variables are currently supported: `{wallet.id}` and `{wallet.externalId}`.\nAs an example, if you set `userIdTemplate: \"dfns:{wallet.id}_{wallet.externalId}\"`, when your wallet receives a transaction that gets screened by a Chainalysis policy, the \"user ID\" sent to Chainalysis will be `dfns:wa-xxx_yyy` (`wa-xxx` being the wallet ID, and `yyy` being the wallet external ID).","uniqueKey":"\\items.items.[INDEX].oneOf.0.pendingChangeRequest.body.oneOf.5.rule.oneOf.6.configuration.userIdTemplate","typeLabel":"string"}},"required":["alerts","exposures","addresses","fallbackBehaviours"],"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.0.pendingChangeRequest.body.oneOf.5.rule.oneOf.6.configuration","typeLabel":"object"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.0.pendingChangeRequest.body.oneOf.5.rule.oneOf.6","typeLabel":"ChainalysisTransactionPrescreening · object"},{"type":"object","title":"EllipticTransactionPrescreening","description":"\n\u003cInfo>\nThis rule can only be used once the Elliptic integration is activated from the Dfns dashboard settings.\n\u003c/Info>\n\nThis rule uses Elliptic KYT for pre-screening outgoing transfers. Upon transfer attempt, we run a synchronous Elliptic wallet analysis of the destination address, and check the returned risk score against the configured threshold, plus any configured risk rules / categories. If at or above the threshold, or if a configured rule / category matched, the policy is triggered.\n\nIt's called \"Pre\"-screening, because the scanned transaction is not on chain yet, it's still a transaction attempt.","required":["kind","configuration"],"properties":{"kind":{"type":"string","enum":["EllipticTransactionPrescreening"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.0.pendingChangeRequest.body.oneOf.5.rule.oneOf.7.kind","typeLabel":"enum\u003cstring>"},"configuration":{"type":"object","properties":{"riskScoreThreshold":{"type":"number","minimum":0,"maximum":10,"description":"Risk score threshold (0-10, decimals allowed). The policy triggers if the Elliptic risk score is at or above the threshold.","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.0.pendingChangeRequest.body.oneOf.5.rule.oneOf.7.configuration.riskScoreThreshold","typeLabel":"number"},"triggeredRules":{"type":"object","properties":{"ruleIds":{"type":"array","items":{"type":"string","format":"uuid","uniqueKey":"\\items.items.[INDEX].oneOf.0.pendingChangeRequest.body.oneOf.5.rule.oneOf.7.configuration.triggeredRules.ruleIds.items.[INDEX]","typeLabel":"string\u003cuuid>"},"description":"IDs of risk rules from your Elliptic risk model. If any of these rules matched the analysis, the policy triggers regardless of the risk score. Leave empty to trigger on the risk score threshold only.","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.0.pendingChangeRequest.body.oneOf.5.rule.oneOf.7.configuration.triggeredRules.ruleIds","typeLabel":"string\u003cuuid>[]"},"categories":{"type":"array","items":{"type":"string","minLength":1,"uniqueKey":"\\items.items.[INDEX].oneOf.0.pendingChangeRequest.body.oneOf.5.rule.oneOf.7.configuration.triggeredRules.categories.items.[INDEX]","typeLabel":"string"},"description":"Elliptic category names (eg. \"Dark Market\"), matched case-insensitively. If a matched risk rule involves any of these categories, the policy triggers regardless of the risk score. Leave empty to trigger on the risk score threshold only.","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.0.pendingChangeRequest.body.oneOf.5.rule.oneOf.7.configuration.triggeredRules.categories","typeLabel":"string[]"}},"required":["ruleIds","categories"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.0.pendingChangeRequest.body.oneOf.5.rule.oneOf.7.configuration.triggeredRules","typeLabel":"object"},"fallbackBehaviours":{"type":"object","properties":{"skipUnscreenableTransaction":{"type":"boolean","description":"skip all wallet requests that cannot be screened (eg. raw signatures)","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.0.pendingChangeRequest.body.oneOf.5.rule.oneOf.7.configuration.fallbackBehaviours.skipUnscreenableTransaction","typeLabel":"boolean"},"skipUnsupportedNetwork":{"type":"boolean","description":"skip requests on a network not supported yet in our Elliptic integration","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.0.pendingChangeRequest.body.oneOf.5.rule.oneOf.7.configuration.fallbackBehaviours.skipUnsupportedNetwork","typeLabel":"boolean"},"skipEllipticFailure":{"type":"boolean","description":"skip any failure of the Elliptic analysis (timeout, rate limiting, any error)","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.0.pendingChangeRequest.body.oneOf.5.rule.oneOf.7.configuration.fallbackBehaviours.skipEllipticFailure","typeLabel":"boolean"}},"required":["skipUnscreenableTransaction","skipUnsupportedNetwork","skipEllipticFailure"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.0.pendingChangeRequest.body.oneOf.5.rule.oneOf.7.configuration.fallbackBehaviours","typeLabel":"object"}},"required":["riskScoreThreshold","triggeredRules","fallbackBehaviours"],"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.0.pendingChangeRequest.body.oneOf.5.rule.oneOf.7.configuration","typeLabel":"object"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.0.pendingChangeRequest.body.oneOf.5.rule.oneOf.7","typeLabel":"EllipticTransactionPrescreening · object"},{"type":"object","title":"GlobalLedgerTransactionPrescreening","description":"This rule uses GlobalLedger KYT for pre-screening outgoing transfers by checking the destination address risk score.\n\nUpon transfer attempt, we will query GlobalLedger's address risk API, and check if the risk score (0-100) is at or above the configured threshold, or if any alerts show up. If so, the policy will be triggered.\n\nIt's called \"Pre\"-screening, because the scanned transaction is not on chain yet, it's still a transaction attempt.","required":["kind","configuration"],"properties":{"kind":{"type":"string","enum":["GlobalLedgerTransactionPrescreening"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.0.pendingChangeRequest.body.oneOf.5.rule.oneOf.8.kind","typeLabel":"enum\u003cstring>"},"configuration":{"type":"object","properties":{"riskScoreThreshold":{"type":"integer","minimum":0,"maximum":100,"description":"Risk score threshold (0-100). Policy triggers if address/transaction risk score >= threshold","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.0.pendingChangeRequest.body.oneOf.5.rule.oneOf.8.configuration.riskScoreThreshold","typeLabel":"integer"},"fallbackBehaviours":{"type":"object","properties":{"skipUnscreenableTransaction":{"type":"boolean","description":"skip all wallet requests that cannot be screened (eg. raw signatures)","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.0.pendingChangeRequest.body.oneOf.5.rule.oneOf.8.configuration.fallbackBehaviours.skipUnscreenableTransaction","typeLabel":"boolean"},"skipUnsupportedNetwork":{"type":"boolean","description":"skip transfer requests to a network not supported yet in our GlobalLedger integration","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.0.pendingChangeRequest.body.oneOf.5.rule.oneOf.8.configuration.fallbackBehaviours.skipUnsupportedNetwork","typeLabel":"boolean"},"skipUnsupportedAsset":{"type":"boolean","description":"skip transfer requests of an asset not supported by our GlobalLedger integration","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.0.pendingChangeRequest.body.oneOf.5.rule.oneOf.8.configuration.fallbackBehaviours.skipUnsupportedAsset","typeLabel":"boolean"},"skipGlobalLedgerFailure":{"type":"boolean","description":"skips any errors from GlobalLedger API request","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.0.pendingChangeRequest.body.oneOf.5.rule.oneOf.8.configuration.fallbackBehaviours.skipGlobalLedgerFailure","typeLabel":"boolean"}},"required":["skipUnscreenableTransaction","skipUnsupportedNetwork","skipUnsupportedAsset","skipGlobalLedgerFailure"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.0.pendingChangeRequest.body.oneOf.5.rule.oneOf.8.configuration.fallbackBehaviours","typeLabel":"object"}},"required":["riskScoreThreshold","fallbackBehaviours"],"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.0.pendingChangeRequest.body.oneOf.5.rule.oneOf.8.configuration","typeLabel":"object"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.0.pendingChangeRequest.body.oneOf.5.rule.oneOf.8","typeLabel":"GlobalLedgerTransactionPrescreening · object"},{"type":"object","title":"TravelRuleTransactionPrescreening","description":"This rule applies a Travel Rule check to outgoing transfers through the vendor selected in `configuration.vendor`: [Notabene](https://docs.dfns.co/integrations/travel-rule/notabene) or Sumsub. It can only be used once that vendor's integration is activated from the Dfns dashboard settings.\n\nIt ***ONLY*** applies to Dfns [Transfer Asset](https://docs.dfns.co/api-reference/wallets/transfer-asset) Api Calls. It is NOT supported for Transfers initiated via the dashboard. Upon transfer attempt with a [TravelRule](https://docs.dfns.co/api-reference/wallets/transfer-asset#body-travel-rule) payload, we call the vendor's APIs on your behalf to validate and submit the travel rule message, then wait for its outcome. With Notabene, Dfns waits for a response from the counterparty (for custodial transfers) or from Notabene (for non-custodial transfers). With Sumsub, Dfns submits a Travel Rule message and waits for Sumsub to report its outcome. In both cases the wait is bounded by `configuration.autoTriggerTimeoutSeconds`, after which the policy's configured action is applied.\n\nThe transfer's `travelRule` payload must be of the kind matching `configuration.vendor` — a mismatch triggers the policy and applies its configured action. A given wallet must be covered by at most one travel-rule policy (of any vendor): if several travel-rule policies apply to the same transfer carrying a `travelRule` payload, it is treated as a misconfiguration and blocked without contacting any vendor. Signatures and transfers without a payload are not affected, since the rule does not apply to them.\n\nIt's called \"Pre\"-screening, because the transaction is not on chain yet, it's still a transaction attempt (before the transaction actually make it on chain).","required":["kind","configuration"],"properties":{"kind":{"type":"string","enum":["TravelRuleTransactionPrescreening"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.0.pendingChangeRequest.body.oneOf.5.rule.oneOf.9.kind","typeLabel":"enum\u003cstring>"},"configuration":{"oneOf":[{"type":"object","title":"TravelRuleNotabeneConfiguration","required":["vendor"],"properties":{"vendor":{"type":"string","enum":["Notabene"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.0.pendingChangeRequest.body.oneOf.5.rule.oneOf.9.configuration.oneOf.0.vendor","typeLabel":"enum\u003cstring>"},"autoTriggerTimeoutSeconds":{"type":"integer","minimum":0,"maximum":2592000,"default":86400,"description":"Seconds to wait for the vendor's verdict before the policy action applies. Maximum 2592000 (30 days). Defaults to 86400 (24 hours).","uniqueKey":"\\items.items.[INDEX].oneOf.0.pendingChangeRequest.body.oneOf.5.rule.oneOf.9.configuration.oneOf.0.autoTriggerTimeoutSeconds","typeLabel":"integer"},"autoClearAfterDeliveredTimeoutSeconds":{"type":"integer","minimum":0,"maximum":2592000,"description":"Seconds after delivery before a still-pending evaluation clears. Maximum 2592000 (30 days).","uniqueKey":"\\items.items.[INDEX].oneOf.0.pendingChangeRequest.body.oneOf.5.rule.oneOf.9.configuration.oneOf.0.autoClearAfterDeliveredTimeoutSeconds","typeLabel":"integer"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.0.pendingChangeRequest.body.oneOf.5.rule.oneOf.9.configuration.oneOf.0","typeLabel":"TravelRuleNotabeneConfiguration · object"},{"type":"object","title":"TravelRuleSumsubConfiguration","required":["vendor"],"properties":{"vendor":{"type":"string","enum":["Sumsub"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.0.pendingChangeRequest.body.oneOf.5.rule.oneOf.9.configuration.oneOf.1.vendor","typeLabel":"enum\u003cstring>"},"autoTriggerTimeoutSeconds":{"type":"integer","minimum":0,"maximum":2592000,"default":86400,"description":"Seconds to wait for the vendor's verdict before the policy action applies. Maximum 2592000 (30 days). Defaults to 86400 (24 hours).","uniqueKey":"\\items.items.[INDEX].oneOf.0.pendingChangeRequest.body.oneOf.5.rule.oneOf.9.configuration.oneOf.1.autoTriggerTimeoutSeconds","typeLabel":"integer"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.0.pendingChangeRequest.body.oneOf.5.rule.oneOf.9.configuration.oneOf.1","typeLabel":"TravelRuleSumsubConfiguration · object"}],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.0.pendingChangeRequest.body.oneOf.5.rule.oneOf.9.configuration","typeLabel":"TravelRuleNotabeneConfiguration · object | TravelRuleSumsubConfiguration · object"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.0.pendingChangeRequest.body.oneOf.5.rule.oneOf.9","typeLabel":"TravelRuleTransactionPrescreening · object"}],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.0.pendingChangeRequest.body.oneOf.5.rule","typeLabel":"AlwaysTrigger · object | TransactionRecipientWhitelist · object | TransactionAmountLimit · object | TransactionAmountLimitNominal · object | TransactionAmountVelocity · object | TransactionCountVelocity · object | ChainalysisTransactionPrescreening · object | EllipticTransactionPrescreening · object | GlobalLedgerTransactionPrescreening · object | TravelRuleTransactionPrescreening · object"},"action":{"oneOf":[{"type":"object","title":"RequestApproval","description":"\nThis action means that activity will first require an Approval process to be completed before it can be executed (or be aborted if someone rejects it during the approval process).\n\nOne or several groups of approvers need to be specified. These groups define who is allowed to approve / reject an activity.\n\nThe activity will only be executed if all approver groups reach their \"quorum\" of approvals. Otherwise, if any one user within any approver group rejects, then the activity is aborted and the call is not executed.\n\nThe example below shows a `RequestApproval` action, configured with one approval group requiring 2 approvals amongst three specific users.\n\n```json\n{\n \"action\": {\n \"kind\": \"RequestApproval\",\n \"autoRejectTimeout\": 60, // minutes\n \"approvalGroups\": [\n {\n \"name\": \"Admins\",\n \"quorum\": 2, // only 2 approvers required in that group \n \"approvers\": {\n \"userId\": {\n \"in\": [\"us-...1\", \"us-...2\", \"us-...3\"],\n }\n }\n }\n ],\n\n }\n}\n```\n\n**Don't lock yourself up**\n\nBy default, users cannot approve an activity they initiated themselves, even if they are in an approval group. To allow this, you must set `initiatorCanApprove: true`.\n\n*Example 1:* For any wallet transfer, a policy is setup to require approval from **1 specific admin user** (eg. the CEO). `initiatorCanApprove` was not set to `true`. If the CEO himself initiates a transfer, no-one can approve his transfer and it's stuck.\n\n*Example 2:* Company has only 3 users. A policy is setup to require approval from **any 3 users** (`quorum: 3`) for any modification of a policy. `initiatorCanApprove` was not set to `true`. In this case, they are locked, and the policy cannot be modified: whoever requests a modification cannot approve, and the policy is therefore always missing one approver. To unlock, they would need to invite a new user and give him the rights to approve as well.\n ","required":["kind","approvalGroups"],"properties":{"kind":{"type":"string","enum":["RequestApproval"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.0.pendingChangeRequest.body.oneOf.5.action.oneOf.0.kind","typeLabel":"enum\u003cstring>"},"approvalGroups":{"type":"array","items":{"type":"object","properties":{"quorum":{"type":"integer","minimum":1,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.0.pendingChangeRequest.body.oneOf.5.action.oneOf.0.approvalGroups.items.[INDEX].quorum","typeLabel":"integer"},"approvers":{"type":"object","properties":{"userId":{"type":"object","properties":{"in":{"type":"array","items":{"type":"string","minLength":1,"uniqueKey":"\\items.items.[INDEX].oneOf.0.pendingChangeRequest.body.oneOf.5.action.oneOf.0.approvalGroups.items.[INDEX].approvers.userId.in.items.[INDEX]","typeLabel":"string"},"minItems":1,"maxItems":100,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.0.pendingChangeRequest.body.oneOf.5.action.oneOf.0.approvalGroups.items.[INDEX].approvers.userId.in","typeLabel":"string[]"}},"required":["in"],"additionalProperties":false,"description":"Users and service accounts who may approve.","uniqueKey":"\\items.items.[INDEX].oneOf.0.pendingChangeRequest.body.oneOf.5.action.oneOf.0.approvalGroups.items.[INDEX].approvers.userId","typeLabel":"object"},"userGroupId":{"type":"object","properties":{"in":{"type":"array","items":{"type":"string","minLength":1,"maxLength":64,"pattern":"^ug-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"User group id.","example":"ug-139tf-f58l8-lsbt6dp47lfsdvgh","uniqueKey":"\\items.items.[INDEX].oneOf.0.pendingChangeRequest.body.oneOf.5.action.oneOf.0.approvalGroups.items.[INDEX].approvers.userGroupId.in.items.[INDEX]","typeLabel":"string"},"minItems":1,"maxItems":100,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.0.pendingChangeRequest.body.oneOf.5.action.oneOf.0.approvalGroups.items.[INDEX].approvers.userGroupId.in","typeLabel":"string[]"}},"required":["in"],"additionalProperties":false,"description":"User groups whose members may approve.","uniqueKey":"\\items.items.[INDEX].oneOf.0.pendingChangeRequest.body.oneOf.5.action.oneOf.0.approvalGroups.items.[INDEX].approvers.userGroupId","typeLabel":"object"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.0.pendingChangeRequest.body.oneOf.5.action.oneOf.0.approvalGroups.items.[INDEX].approvers","typeLabel":"object"},"name":{"type":"string","uniqueKey":"\\items.items.[INDEX].oneOf.0.pendingChangeRequest.body.oneOf.5.action.oneOf.0.approvalGroups.items.[INDEX].name","typeLabel":"string"},"initiatorCanApprove":{"type":"boolean","description":"Whether the initiator of the activity can participate in the approval.","uniqueKey":"\\items.items.[INDEX].oneOf.0.pendingChangeRequest.body.oneOf.5.action.oneOf.0.approvalGroups.items.[INDEX].initiatorCanApprove","typeLabel":"boolean"},"serviceAccountsCanApprove":{"type":"boolean","description":"Whether service accounts can participate in the approval for this group.","uniqueKey":"\\items.items.[INDEX].oneOf.0.pendingChangeRequest.body.oneOf.5.action.oneOf.0.approvalGroups.items.[INDEX].serviceAccountsCanApprove","typeLabel":"boolean"}},"required":["quorum","approvers"],"additionalProperties":false,"uniqueKey":"\\items.items.[INDEX].oneOf.0.pendingChangeRequest.body.oneOf.5.action.oneOf.0.approvalGroups.items.[INDEX]","typeLabel":"object"},"minItems":1,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.0.pendingChangeRequest.body.oneOf.5.action.oneOf.0.approvalGroups","typeLabel":"object[]"},"autoRejectTimeout":{"oneOf":[{"type":"integer","minimum":1,"uniqueKey":"\\items.items.[INDEX].oneOf.0.pendingChangeRequest.body.oneOf.5.action.oneOf.0.autoRejectTimeout.oneOf.0","typeLabel":"integer"},{"type":"null","minimum":1,"uniqueKey":"\\items.items.[INDEX].oneOf.0.pendingChangeRequest.body.oneOf.5.action.oneOf.0.autoRejectTimeout.oneOf.1","typeLabel":"null"}],"uniqueKey":"\\items.items.[INDEX].oneOf.0.pendingChangeRequest.body.oneOf.5.action.oneOf.0.autoRejectTimeout","typeLabel":"integer | null"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.0.pendingChangeRequest.body.oneOf.5.action.oneOf.0","typeLabel":"RequestApproval · object"},{"type":"object","title":"Block","description":"This action means that the activity will be blocked if the policy is triggered.\n\n```json\n{\n \"action\": {\n \"kind\": \"Block\"\n }\n}\n```\n","required":["kind"],"properties":{"kind":{"type":"string","enum":["Block"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.0.pendingChangeRequest.body.oneOf.5.action.oneOf.1.kind","typeLabel":"enum\u003cstring>"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.0.pendingChangeRequest.body.oneOf.5.action.oneOf.1","typeLabel":"Block · object"},{"type":"object","title":"NoAction","description":"\n This action kind means that nothing will happen after policy rule evaluation. It's meant to be used with policy rules \"`ChainalysisTransactionPrescreening`\" or \"`ChainalysisTransactionScreening`\". This action is for when you just want the KYT analysis rule to be run, and then if triggered, those result returned in a `policy.triggered` [Webhook Event](https://docs.dfns.co/api-reference/webhook-events).\n\n```json\n{\n \"action\": {\n \"kind\": \"NoAction\"\n }\n}\n```\n ","required":["kind"],"properties":{"kind":{"type":"string","enum":["NoAction"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.0.pendingChangeRequest.body.oneOf.5.action.oneOf.2.kind","typeLabel":"enum\u003cstring>"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.0.pendingChangeRequest.body.oneOf.5.action.oneOf.2","typeLabel":"NoAction · object"}],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.0.pendingChangeRequest.body.oneOf.5.action","typeLabel":"RequestApproval · object | Block · object | NoAction · object"},"dateCreated":{"type":"string","uniqueKey":"\\items.items.[INDEX].oneOf.0.pendingChangeRequest.body.oneOf.5.dateCreated","typeLabel":"string"},"dateUpdated":{"type":"string","uniqueKey":"\\items.items.[INDEX].oneOf.0.pendingChangeRequest.body.oneOf.5.dateUpdated","typeLabel":"string"},"filters":{"type":"object","properties":{"walletId":{"type":"object","properties":{"in":{"type":"array","items":{"type":"string","minLength":1,"uniqueKey":"\\items.items.[INDEX].oneOf.0.pendingChangeRequest.body.oneOf.5.filters.walletId.in.items.[INDEX]","typeLabel":"string"},"minItems":1,"maxItems":100,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.0.pendingChangeRequest.body.oneOf.5.filters.walletId.in","typeLabel":"string[]"}},"required":["in"],"additionalProperties":false,"uniqueKey":"\\items.items.[INDEX].oneOf.0.pendingChangeRequest.body.oneOf.5.filters.walletId","typeLabel":"object"},"walletTags":{"type":"object","properties":{"hasAny":{"type":"array","items":{"type":"string","minLength":1,"uniqueKey":"\\items.items.[INDEX].oneOf.0.pendingChangeRequest.body.oneOf.5.filters.walletTags.hasAny.items.[INDEX]","typeLabel":"string"},"minItems":1,"maxItems":100,"uniqueKey":"\\items.items.[INDEX].oneOf.0.pendingChangeRequest.body.oneOf.5.filters.walletTags.hasAny","typeLabel":"string[]"},"hasAll":{"type":"array","items":{"type":"string","minLength":1,"uniqueKey":"\\items.items.[INDEX].oneOf.0.pendingChangeRequest.body.oneOf.5.filters.walletTags.hasAll.items.[INDEX]","typeLabel":"string"},"minItems":1,"maxItems":100,"uniqueKey":"\\items.items.[INDEX].oneOf.0.pendingChangeRequest.body.oneOf.5.filters.walletTags.hasAll","typeLabel":"string[]"}},"additionalProperties":false,"uniqueKey":"\\items.items.[INDEX].oneOf.0.pendingChangeRequest.body.oneOf.5.filters.walletTags","typeLabel":"object"},"keyId":{"type":"object","properties":{"in":{"type":"array","items":{"type":"string","minLength":1,"maxLength":64,"pattern":"^key-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"Key id.","example":"key-01snl-t56gb-j8tsok0vn802p80i","uniqueKey":"\\items.items.[INDEX].oneOf.0.pendingChangeRequest.body.oneOf.5.filters.keyId.in.items.[INDEX]","typeLabel":"string"},"minItems":1,"maxItems":100,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.0.pendingChangeRequest.body.oneOf.5.filters.keyId.in","typeLabel":"string[]"}},"required":["in"],"additionalProperties":false,"uniqueKey":"\\items.items.[INDEX].oneOf.0.pendingChangeRequest.body.oneOf.5.filters.keyId","typeLabel":"object"},"keyStoreId":{"type":"object","properties":{"in":{"type":"array","items":{"type":"string","minLength":1,"maxLength":64,"pattern":"^store-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"Key store id.","example":"store-425nf-ebf0a-qq22t6qra51tj8j0","uniqueKey":"\\items.items.[INDEX].oneOf.0.pendingChangeRequest.body.oneOf.5.filters.keyStoreId.in.items.[INDEX]","typeLabel":"string"},"minItems":1,"maxItems":100,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.0.pendingChangeRequest.body.oneOf.5.filters.keyStoreId.in","typeLabel":"string[]"}},"required":["in"],"additionalProperties":false,"uniqueKey":"\\items.items.[INDEX].oneOf.0.pendingChangeRequest.body.oneOf.5.filters.keyStoreId","typeLabel":"object"}},"additionalProperties":false,"uniqueKey":"\\items.items.[INDEX].oneOf.0.pendingChangeRequest.body.oneOf.5.filters","typeLabel":"object"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.0.pendingChangeRequest.body.oneOf.5","typeLabel":"Wallets:Sign · object"},{"type":"object","title":"Wallets:IncomingTransaction","required":["id","name","status","activityKind","rule","action"],"properties":{"id":{"type":"string","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.0.pendingChangeRequest.body.oneOf.6.id","typeLabel":"string"},"name":{"type":"string","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.0.pendingChangeRequest.body.oneOf.6.name","typeLabel":"string"},"status":{"type":"string","enum":["Active","Archived"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.0.pendingChangeRequest.body.oneOf.6.status","typeLabel":"enum\u003cstring>"},"activityKind":{"type":"string","enum":["Wallets:IncomingTransaction"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.0.pendingChangeRequest.body.oneOf.6.activityKind","typeLabel":"enum\u003cstring>"},"rule":{"type":"object","title":"ChainalysisTransactionScreening","description":"\n\u003cInfo>\nThis rule can only be used once the Chainalysis integration is activated from the Dfns dashboard settings. (see more on [Chainalysis](https://docs.dfns.co/integrations/aml-kyt/chainalysis) integration page).\n\u003c/Info>\n\nThis rule can be used on a policy of `activityKind` = `Wallets:IncomingTransaction`, and with the action kind `NoAction`. It's a rule based on Chainalysis KYT integration (Know-Your-Transaction). Upon an incoming transaction detectedby our indexers, we will [register the transfer with Chainalysis](https://docs.chainalysis.com/api/kyt/#registration-register-a-transfer), and fetch the results of the analysis (alerts \u0026 exposures detected). Based on the results, and the configuration of this rule, the policy will be triggered.\n\nThe shape of the rule is almost like the `ChainalysisTransactionPrescreening` rule, expect the the `address` property is not supported.\n\n```json\n{\n \"rule\": {\n \"kind\": \"ChainalysisTransactionPrescreening\",\n \"configuration\": {\n \"alerts\": {\n \"alertLevel\": \"LOW\",\n \"categoryIds\": []\n },\n \"exposures\": {\n \"direct\": {\n \"categoryIds\": []\n }\n },\n \"fallbackBehaviours\": {\n \"skipUnscreenableTransaction\": false,\n \"skipUnsupportedNetwork\": false,\n \"skipUnsupportedAsset\": false,\n \"skipChainalysisFailure\": false\n }\n }\n }\n}\n```\n\n**Configuration**\n\nPlease refer to the configuration for the `ChainalysisTransactionPrescreening` rule.\n","required":["kind","configuration"],"properties":{"kind":{"type":"string","enum":["ChainalysisTransactionScreening"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.0.pendingChangeRequest.body.oneOf.6.rule.kind","typeLabel":"enum\u003cstring>"},"configuration":{"type":"object","properties":{"alerts":{"type":"object","properties":{"alertLevel":{"type":"string","enum":["LOW","MEDIUM","HIGH","SEVERE"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.0.pendingChangeRequest.body.oneOf.6.rule.configuration.alerts.alertLevel","typeLabel":"enum\u003cstring>"},"categoryIds":{"type":"array","items":{"type":"integer","exclusiveMinimum":0,"uniqueKey":"\\items.items.[INDEX].oneOf.0.pendingChangeRequest.body.oneOf.6.rule.configuration.alerts.categoryIds.items.[INDEX]","typeLabel":"integer"},"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.0.pendingChangeRequest.body.oneOf.6.rule.configuration.alerts.categoryIds","typeLabel":"integer[]"}},"required":["alertLevel","categoryIds"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.0.pendingChangeRequest.body.oneOf.6.rule.configuration.alerts","typeLabel":"object"},"exposures":{"type":"object","properties":{"direct":{"type":"object","properties":{"categoryIds":{"type":"array","items":{"type":"integer","exclusiveMinimum":0,"uniqueKey":"\\items.items.[INDEX].oneOf.0.pendingChangeRequest.body.oneOf.6.rule.configuration.exposures.direct.categoryIds.items.[INDEX]","typeLabel":"integer"},"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.0.pendingChangeRequest.body.oneOf.6.rule.configuration.exposures.direct.categoryIds","typeLabel":"integer[]"}},"required":["categoryIds"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.0.pendingChangeRequest.body.oneOf.6.rule.configuration.exposures.direct","typeLabel":"object"}},"required":["direct"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.0.pendingChangeRequest.body.oneOf.6.rule.configuration.exposures","typeLabel":"object"},"fallbackBehaviours":{"type":"object","properties":{"skipUnscreenableTransaction":{"type":"boolean","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.0.pendingChangeRequest.body.oneOf.6.rule.configuration.fallbackBehaviours.skipUnscreenableTransaction","typeLabel":"boolean"},"skipUnsupportedNetwork":{"type":"boolean","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.0.pendingChangeRequest.body.oneOf.6.rule.configuration.fallbackBehaviours.skipUnsupportedNetwork","typeLabel":"boolean"},"skipUnsupportedAsset":{"type":"boolean","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.0.pendingChangeRequest.body.oneOf.6.rule.configuration.fallbackBehaviours.skipUnsupportedAsset","typeLabel":"boolean"},"skipChainalysisFailure":{"type":"boolean","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.0.pendingChangeRequest.body.oneOf.6.rule.configuration.fallbackBehaviours.skipChainalysisFailure","typeLabel":"boolean"}},"required":["skipUnscreenableTransaction","skipUnsupportedNetwork","skipUnsupportedAsset","skipChainalysisFailure"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.0.pendingChangeRequest.body.oneOf.6.rule.configuration.fallbackBehaviours","typeLabel":"object"},"userIdTemplate":{"type":"string","minLength":1,"maxLength":50,"pattern":"^([a-zA-Z0-9_:-]|{wallet\\.id}|{wallet\\.externalId})+$","default":"dfns","description":"**Deprecated** — set `userIdTemplate` on the Chainalysis integration setting instead; when set there, the integration-level template takes precedence over this one.\n\nValue sent to Chainalysis as the \"user ID\". Used by Chainalysis for grouping transaction screenings.\n \nThis template can include variables, included in brackets. The following variables are currently supported: `{wallet.id}` and `{wallet.externalId}`.\nAs an example, if you set `userIdTemplate: \"dfns:{wallet.id}_{wallet.externalId}\"`, when your wallet receives a transaction that gets screened by a Chainalysis policy, the \"user ID\" sent to Chainalysis will be `dfns:wa-xxx_yyy` (`wa-xxx` being the wallet ID, and `yyy` being the wallet external ID).","uniqueKey":"\\items.items.[INDEX].oneOf.0.pendingChangeRequest.body.oneOf.6.rule.configuration.userIdTemplate","typeLabel":"string"}},"required":["alerts","exposures","fallbackBehaviours"],"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.0.pendingChangeRequest.body.oneOf.6.rule.configuration","typeLabel":"object"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.0.pendingChangeRequest.body.oneOf.6.rule","typeLabel":"ChainalysisTransactionScreening · object"},"action":{"type":"object","title":"NoAction","description":"\n This action kind means that nothing will happen after policy rule evaluation. It's meant to be used with policy rules \"`ChainalysisTransactionPrescreening`\" or \"`ChainalysisTransactionScreening`\". This action is for when you just want the KYT analysis rule to be run, and then if triggered, those result returned in a `policy.triggered` [Webhook Event](https://docs.dfns.co/api-reference/webhook-events).\n\n```json\n{\n \"action\": {\n \"kind\": \"NoAction\"\n }\n}\n```\n ","required":["kind"],"properties":{"kind":{"type":"string","enum":["NoAction"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.0.pendingChangeRequest.body.oneOf.6.action.kind","typeLabel":"enum\u003cstring>"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.0.pendingChangeRequest.body.oneOf.6.action","typeLabel":"NoAction · object"},"dateCreated":{"type":"string","uniqueKey":"\\items.items.[INDEX].oneOf.0.pendingChangeRequest.body.oneOf.6.dateCreated","typeLabel":"string"},"dateUpdated":{"type":"string","uniqueKey":"\\items.items.[INDEX].oneOf.0.pendingChangeRequest.body.oneOf.6.dateUpdated","typeLabel":"string"},"filters":{"type":"object","properties":{"walletId":{"type":"object","properties":{"in":{"type":"array","items":{"type":"string","minLength":1,"uniqueKey":"\\items.items.[INDEX].oneOf.0.pendingChangeRequest.body.oneOf.6.filters.walletId.in.items.[INDEX]","typeLabel":"string"},"minItems":1,"maxItems":100,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.0.pendingChangeRequest.body.oneOf.6.filters.walletId.in","typeLabel":"string[]"}},"required":["in"],"additionalProperties":false,"uniqueKey":"\\items.items.[INDEX].oneOf.0.pendingChangeRequest.body.oneOf.6.filters.walletId","typeLabel":"object"},"walletTags":{"type":"object","properties":{"hasAny":{"type":"array","items":{"type":"string","minLength":1,"uniqueKey":"\\items.items.[INDEX].oneOf.0.pendingChangeRequest.body.oneOf.6.filters.walletTags.hasAny.items.[INDEX]","typeLabel":"string"},"minItems":1,"maxItems":100,"uniqueKey":"\\items.items.[INDEX].oneOf.0.pendingChangeRequest.body.oneOf.6.filters.walletTags.hasAny","typeLabel":"string[]"},"hasAll":{"type":"array","items":{"type":"string","minLength":1,"uniqueKey":"\\items.items.[INDEX].oneOf.0.pendingChangeRequest.body.oneOf.6.filters.walletTags.hasAll.items.[INDEX]","typeLabel":"string"},"minItems":1,"maxItems":100,"uniqueKey":"\\items.items.[INDEX].oneOf.0.pendingChangeRequest.body.oneOf.6.filters.walletTags.hasAll","typeLabel":"string[]"}},"additionalProperties":false,"uniqueKey":"\\items.items.[INDEX].oneOf.0.pendingChangeRequest.body.oneOf.6.filters.walletTags","typeLabel":"object"},"keyId":{"type":"object","properties":{"in":{"type":"array","items":{"type":"string","minLength":1,"maxLength":64,"pattern":"^key-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"Key id.","example":"key-01snl-t56gb-j8tsok0vn802p80i","uniqueKey":"\\items.items.[INDEX].oneOf.0.pendingChangeRequest.body.oneOf.6.filters.keyId.in.items.[INDEX]","typeLabel":"string"},"minItems":1,"maxItems":100,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.0.pendingChangeRequest.body.oneOf.6.filters.keyId.in","typeLabel":"string[]"}},"required":["in"],"additionalProperties":false,"uniqueKey":"\\items.items.[INDEX].oneOf.0.pendingChangeRequest.body.oneOf.6.filters.keyId","typeLabel":"object"},"keyStoreId":{"type":"object","properties":{"in":{"type":"array","items":{"type":"string","minLength":1,"maxLength":64,"pattern":"^store-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"Key store id.","example":"store-425nf-ebf0a-qq22t6qra51tj8j0","uniqueKey":"\\items.items.[INDEX].oneOf.0.pendingChangeRequest.body.oneOf.6.filters.keyStoreId.in.items.[INDEX]","typeLabel":"string"},"minItems":1,"maxItems":100,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.0.pendingChangeRequest.body.oneOf.6.filters.keyStoreId.in","typeLabel":"string[]"}},"required":["in"],"additionalProperties":false,"uniqueKey":"\\items.items.[INDEX].oneOf.0.pendingChangeRequest.body.oneOf.6.filters.keyStoreId","typeLabel":"object"}},"additionalProperties":false,"uniqueKey":"\\items.items.[INDEX].oneOf.0.pendingChangeRequest.body.oneOf.6.filters","typeLabel":"object"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.0.pendingChangeRequest.body.oneOf.6","typeLabel":"Wallets:IncomingTransaction · object"},{"type":"object","title":"Vaults:ReleaseQuarantine","required":["id","name","status","activityKind","rule","action"],"properties":{"id":{"type":"string","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.0.pendingChangeRequest.body.oneOf.7.id","typeLabel":"string"},"name":{"type":"string","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.0.pendingChangeRequest.body.oneOf.7.name","typeLabel":"string"},"status":{"type":"string","enum":["Active","Archived"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.0.pendingChangeRequest.body.oneOf.7.status","typeLabel":"enum\u003cstring>"},"activityKind":{"type":"string","enum":["Vaults:ReleaseQuarantine"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.0.pendingChangeRequest.body.oneOf.7.activityKind","typeLabel":"enum\u003cstring>"},"rule":{"oneOf":[{"type":"object","title":"AlwaysTrigger","description":"This rule will always be triggered, meaning that if this rule is defined on a policy, the policy will always trigger the policy action, regardless of the activity details.","required":["kind"],"properties":{"kind":{"type":"string","enum":["AlwaysTrigger"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.0.pendingChangeRequest.body.oneOf.7.rule.oneOf.0.kind","typeLabel":"enum\u003cstring>"},"configuration":{"type":"object","properties":{},"additionalProperties":false,"uniqueKey":"\\items.items.[INDEX].oneOf.0.pendingChangeRequest.body.oneOf.7.rule.oneOf.0.configuration","typeLabel":"object"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.0.pendingChangeRequest.body.oneOf.7.rule.oneOf.0","typeLabel":"AlwaysTrigger · object"},{"type":"object","title":"ChainalysisQuarantineScreening","description":"\n\u003cInfo>\nThis rule can only be used once the Chainalysis integration is activated from the Dfns dashboard settings. (see more on [Chainalysis](https://docs.dfns.co/integrations/aml-kyt/chainalysis) integration page).\n\u003c/Info>\n\nThis rule can be used on a policy of `activityKind` = `Vaults:ReleaseQuarantine`. When a quarantined vault deposit was screened by Chainalysis KYT, the screening result (alerts \u0026 direct exposure) is stored with the quarantine. When a release of the quarantined funds is requested, this rule evaluates that **stored** result — no new Chainalysis call is made. Based on the stored result and the configuration of this rule, the policy will be triggered.\n\nIf the quarantine has **no stored KYT result** (the result was not received yet, the network/asset is not supported by the Chainalysis integration, or screening failed), the rule **always triggers** (fail closed): the release then follows the policy action (approval or block).\n\n```json\n{\n \"rule\": {\n \"kind\": \"ChainalysisQuarantineScreening\",\n \"configuration\": {\n \"alerts\": {\n \"alertLevel\": \"LOW\",\n \"categoryIds\": []\n },\n \"exposures\": {\n \"direct\": {\n \"categoryIds\": []\n }\n }\n }\n }\n}\n```\n\n**Configuration**\n\n| Property | Type | Description |\n| --- | --- | --- |\n| `alerts`\u003cbr>\u003cbr>`.alertLevel`* | `string` | Minimum alert level above which the rule should trigger, if any alert was returned in the stored Chainalysis results. Can be `LOW`, `MEDIUM`, `HIGH`, or `SEVERE` |\n| `alerts`\u003cbr>\u003cbr>`.categoryIds`* | list of integers | List of Chainalysis category IDs (see [here](https://docs.chainalysis.com/api/kyt/#categories)). If you leave this list empty, alerts of any category will trigger the rule. Otherwise, if you only want the rule to trigger on specific categories, you can specify some in the list. |\n| `exposures`\u003cbr>\u003cbr>`.direct`\u003cbr>\u003cbr>`.categoryIds`* | list of integers | List of Chainalysis category IDs (see [here](https://docs.chainalysis.com/api/kyt/#categories)). If you leave this list empty, a direct exposure of any category in the stored results will trigger the rule. Otherwise, if you only want the rule to trigger on specific categories, you can specify some in the list. |\n","required":["kind","configuration"],"properties":{"kind":{"type":"string","enum":["ChainalysisQuarantineScreening"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.0.pendingChangeRequest.body.oneOf.7.rule.oneOf.1.kind","typeLabel":"enum\u003cstring>"},"configuration":{"type":"object","properties":{"alerts":{"type":"object","properties":{"alertLevel":{"type":"string","enum":["LOW","MEDIUM","HIGH","SEVERE"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.0.pendingChangeRequest.body.oneOf.7.rule.oneOf.1.configuration.alerts.alertLevel","typeLabel":"enum\u003cstring>"},"categoryIds":{"type":"array","items":{"type":"integer","exclusiveMinimum":0,"uniqueKey":"\\items.items.[INDEX].oneOf.0.pendingChangeRequest.body.oneOf.7.rule.oneOf.1.configuration.alerts.categoryIds.items.[INDEX]","typeLabel":"integer"},"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.0.pendingChangeRequest.body.oneOf.7.rule.oneOf.1.configuration.alerts.categoryIds","typeLabel":"integer[]"}},"required":["alertLevel","categoryIds"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.0.pendingChangeRequest.body.oneOf.7.rule.oneOf.1.configuration.alerts","typeLabel":"object"},"exposures":{"type":"object","properties":{"direct":{"type":"object","properties":{"categoryIds":{"type":"array","items":{"type":"integer","exclusiveMinimum":0,"uniqueKey":"\\items.items.[INDEX].oneOf.0.pendingChangeRequest.body.oneOf.7.rule.oneOf.1.configuration.exposures.direct.categoryIds.items.[INDEX]","typeLabel":"integer"},"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.0.pendingChangeRequest.body.oneOf.7.rule.oneOf.1.configuration.exposures.direct.categoryIds","typeLabel":"integer[]"}},"required":["categoryIds"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.0.pendingChangeRequest.body.oneOf.7.rule.oneOf.1.configuration.exposures.direct","typeLabel":"object"}},"required":["direct"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.0.pendingChangeRequest.body.oneOf.7.rule.oneOf.1.configuration.exposures","typeLabel":"object"}},"required":["alerts","exposures"],"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.0.pendingChangeRequest.body.oneOf.7.rule.oneOf.1.configuration","typeLabel":"object"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.0.pendingChangeRequest.body.oneOf.7.rule.oneOf.1","typeLabel":"ChainalysisQuarantineScreening · object"}],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.0.pendingChangeRequest.body.oneOf.7.rule","typeLabel":"AlwaysTrigger · object | ChainalysisQuarantineScreening · object"},"action":{"oneOf":[{"type":"object","title":"RequestApproval","description":"\nThis action means that activity will first require an Approval process to be completed before it can be executed (or be aborted if someone rejects it during the approval process).\n\nOne or several groups of approvers need to be specified. These groups define who is allowed to approve / reject an activity.\n\nThe activity will only be executed if all approver groups reach their \"quorum\" of approvals. Otherwise, if any one user within any approver group rejects, then the activity is aborted and the call is not executed.\n\nThe example below shows a `RequestApproval` action, configured with one approval group requiring 2 approvals amongst three specific users.\n\n```json\n{\n \"action\": {\n \"kind\": \"RequestApproval\",\n \"autoRejectTimeout\": 60, // minutes\n \"approvalGroups\": [\n {\n \"name\": \"Admins\",\n \"quorum\": 2, // only 2 approvers required in that group \n \"approvers\": {\n \"userId\": {\n \"in\": [\"us-...1\", \"us-...2\", \"us-...3\"],\n }\n }\n }\n ],\n\n }\n}\n```\n\n**Don't lock yourself up**\n\nBy default, users cannot approve an activity they initiated themselves, even if they are in an approval group. To allow this, you must set `initiatorCanApprove: true`.\n\n*Example 1:* For any wallet transfer, a policy is setup to require approval from **1 specific admin user** (eg. the CEO). `initiatorCanApprove` was not set to `true`. If the CEO himself initiates a transfer, no-one can approve his transfer and it's stuck.\n\n*Example 2:* Company has only 3 users. A policy is setup to require approval from **any 3 users** (`quorum: 3`) for any modification of a policy. `initiatorCanApprove` was not set to `true`. In this case, they are locked, and the policy cannot be modified: whoever requests a modification cannot approve, and the policy is therefore always missing one approver. To unlock, they would need to invite a new user and give him the rights to approve as well.\n ","required":["kind","approvalGroups"],"properties":{"kind":{"type":"string","enum":["RequestApproval"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.0.pendingChangeRequest.body.oneOf.7.action.oneOf.0.kind","typeLabel":"enum\u003cstring>"},"approvalGroups":{"type":"array","items":{"type":"object","properties":{"quorum":{"type":"integer","minimum":1,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.0.pendingChangeRequest.body.oneOf.7.action.oneOf.0.approvalGroups.items.[INDEX].quorum","typeLabel":"integer"},"approvers":{"type":"object","properties":{"userId":{"type":"object","properties":{"in":{"type":"array","items":{"type":"string","minLength":1,"uniqueKey":"\\items.items.[INDEX].oneOf.0.pendingChangeRequest.body.oneOf.7.action.oneOf.0.approvalGroups.items.[INDEX].approvers.userId.in.items.[INDEX]","typeLabel":"string"},"minItems":1,"maxItems":100,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.0.pendingChangeRequest.body.oneOf.7.action.oneOf.0.approvalGroups.items.[INDEX].approvers.userId.in","typeLabel":"string[]"}},"required":["in"],"additionalProperties":false,"description":"Users and service accounts who may approve.","uniqueKey":"\\items.items.[INDEX].oneOf.0.pendingChangeRequest.body.oneOf.7.action.oneOf.0.approvalGroups.items.[INDEX].approvers.userId","typeLabel":"object"},"userGroupId":{"type":"object","properties":{"in":{"type":"array","items":{"type":"string","minLength":1,"maxLength":64,"pattern":"^ug-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"User group id.","example":"ug-139tf-f58l8-lsbt6dp47lfsdvgh","uniqueKey":"\\items.items.[INDEX].oneOf.0.pendingChangeRequest.body.oneOf.7.action.oneOf.0.approvalGroups.items.[INDEX].approvers.userGroupId.in.items.[INDEX]","typeLabel":"string"},"minItems":1,"maxItems":100,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.0.pendingChangeRequest.body.oneOf.7.action.oneOf.0.approvalGroups.items.[INDEX].approvers.userGroupId.in","typeLabel":"string[]"}},"required":["in"],"additionalProperties":false,"description":"User groups whose members may approve.","uniqueKey":"\\items.items.[INDEX].oneOf.0.pendingChangeRequest.body.oneOf.7.action.oneOf.0.approvalGroups.items.[INDEX].approvers.userGroupId","typeLabel":"object"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.0.pendingChangeRequest.body.oneOf.7.action.oneOf.0.approvalGroups.items.[INDEX].approvers","typeLabel":"object"},"name":{"type":"string","uniqueKey":"\\items.items.[INDEX].oneOf.0.pendingChangeRequest.body.oneOf.7.action.oneOf.0.approvalGroups.items.[INDEX].name","typeLabel":"string"},"initiatorCanApprove":{"type":"boolean","description":"Whether the initiator of the activity can participate in the approval.","uniqueKey":"\\items.items.[INDEX].oneOf.0.pendingChangeRequest.body.oneOf.7.action.oneOf.0.approvalGroups.items.[INDEX].initiatorCanApprove","typeLabel":"boolean"},"serviceAccountsCanApprove":{"type":"boolean","description":"Whether service accounts can participate in the approval for this group.","uniqueKey":"\\items.items.[INDEX].oneOf.0.pendingChangeRequest.body.oneOf.7.action.oneOf.0.approvalGroups.items.[INDEX].serviceAccountsCanApprove","typeLabel":"boolean"}},"required":["quorum","approvers"],"additionalProperties":false,"uniqueKey":"\\items.items.[INDEX].oneOf.0.pendingChangeRequest.body.oneOf.7.action.oneOf.0.approvalGroups.items.[INDEX]","typeLabel":"object"},"minItems":1,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.0.pendingChangeRequest.body.oneOf.7.action.oneOf.0.approvalGroups","typeLabel":"object[]"},"autoRejectTimeout":{"oneOf":[{"type":"integer","minimum":1,"uniqueKey":"\\items.items.[INDEX].oneOf.0.pendingChangeRequest.body.oneOf.7.action.oneOf.0.autoRejectTimeout.oneOf.0","typeLabel":"integer"},{"type":"null","minimum":1,"uniqueKey":"\\items.items.[INDEX].oneOf.0.pendingChangeRequest.body.oneOf.7.action.oneOf.0.autoRejectTimeout.oneOf.1","typeLabel":"null"}],"uniqueKey":"\\items.items.[INDEX].oneOf.0.pendingChangeRequest.body.oneOf.7.action.oneOf.0.autoRejectTimeout","typeLabel":"integer | null"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.0.pendingChangeRequest.body.oneOf.7.action.oneOf.0","typeLabel":"RequestApproval · object"},{"type":"object","title":"Block","description":"This action means that the activity will be blocked if the policy is triggered.\n\n```json\n{\n \"action\": {\n \"kind\": \"Block\"\n }\n}\n```\n","required":["kind"],"properties":{"kind":{"type":"string","enum":["Block"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.0.pendingChangeRequest.body.oneOf.7.action.oneOf.1.kind","typeLabel":"enum\u003cstring>"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.0.pendingChangeRequest.body.oneOf.7.action.oneOf.1","typeLabel":"Block · object"}],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.0.pendingChangeRequest.body.oneOf.7.action","typeLabel":"RequestApproval · object | Block · object"},"dateCreated":{"type":"string","uniqueKey":"\\items.items.[INDEX].oneOf.0.pendingChangeRequest.body.oneOf.7.dateCreated","typeLabel":"string"},"dateUpdated":{"type":"string","uniqueKey":"\\items.items.[INDEX].oneOf.0.pendingChangeRequest.body.oneOf.7.dateUpdated","typeLabel":"string"},"filters":{"type":"object","properties":{"vaultId":{"type":"object","properties":{"in":{"type":"array","items":{"type":"string","minLength":1,"uniqueKey":"\\items.items.[INDEX].oneOf.0.pendingChangeRequest.body.oneOf.7.filters.vaultId.in.items.[INDEX]","typeLabel":"string"},"minItems":1,"maxItems":100,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.0.pendingChangeRequest.body.oneOf.7.filters.vaultId.in","typeLabel":"string[]"}},"required":["in"],"additionalProperties":false,"uniqueKey":"\\items.items.[INDEX].oneOf.0.pendingChangeRequest.body.oneOf.7.filters.vaultId","typeLabel":"object"},"vaultTags":{"type":"object","properties":{"hasAny":{"type":"array","items":{"type":"string","minLength":1,"uniqueKey":"\\items.items.[INDEX].oneOf.0.pendingChangeRequest.body.oneOf.7.filters.vaultTags.hasAny.items.[INDEX]","typeLabel":"string"},"minItems":1,"maxItems":100,"uniqueKey":"\\items.items.[INDEX].oneOf.0.pendingChangeRequest.body.oneOf.7.filters.vaultTags.hasAny","typeLabel":"string[]"},"hasAll":{"type":"array","items":{"type":"string","minLength":1,"uniqueKey":"\\items.items.[INDEX].oneOf.0.pendingChangeRequest.body.oneOf.7.filters.vaultTags.hasAll.items.[INDEX]","typeLabel":"string"},"minItems":1,"maxItems":100,"uniqueKey":"\\items.items.[INDEX].oneOf.0.pendingChangeRequest.body.oneOf.7.filters.vaultTags.hasAll","typeLabel":"string[]"}},"additionalProperties":false,"uniqueKey":"\\items.items.[INDEX].oneOf.0.pendingChangeRequest.body.oneOf.7.filters.vaultTags","typeLabel":"object"}},"additionalProperties":false,"uniqueKey":"\\items.items.[INDEX].oneOf.0.pendingChangeRequest.body.oneOf.7.filters","typeLabel":"object"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.0.pendingChangeRequest.body.oneOf.7","typeLabel":"Vaults:ReleaseQuarantine · object"},{"type":"object","title":"Vaults:CreateLock","required":["id","name","status","activityKind","rule","action"],"properties":{"id":{"type":"string","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.0.pendingChangeRequest.body.oneOf.8.id","typeLabel":"string"},"name":{"type":"string","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.0.pendingChangeRequest.body.oneOf.8.name","typeLabel":"string"},"status":{"type":"string","enum":["Active","Archived"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.0.pendingChangeRequest.body.oneOf.8.status","typeLabel":"enum\u003cstring>"},"activityKind":{"type":"string","enum":["Vaults:CreateLock"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.0.pendingChangeRequest.body.oneOf.8.activityKind","typeLabel":"enum\u003cstring>"},"rule":{"type":"object","title":"AlwaysTrigger","description":"This rule will always be triggered, meaning that if this rule is defined on a policy, the policy will always trigger the policy action, regardless of the activity details.","required":["kind"],"properties":{"kind":{"type":"string","enum":["AlwaysTrigger"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.0.pendingChangeRequest.body.oneOf.8.rule.kind","typeLabel":"enum\u003cstring>"},"configuration":{"type":"object","properties":{},"additionalProperties":false,"uniqueKey":"\\items.items.[INDEX].oneOf.0.pendingChangeRequest.body.oneOf.8.rule.configuration","typeLabel":"object"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.0.pendingChangeRequest.body.oneOf.8.rule","typeLabel":"AlwaysTrigger · object"},"action":{"oneOf":[{"type":"object","title":"RequestApproval","description":"\nThis action means that activity will first require an Approval process to be completed before it can be executed (or be aborted if someone rejects it during the approval process).\n\nOne or several groups of approvers need to be specified. These groups define who is allowed to approve / reject an activity.\n\nThe activity will only be executed if all approver groups reach their \"quorum\" of approvals. Otherwise, if any one user within any approver group rejects, then the activity is aborted and the call is not executed.\n\nThe example below shows a `RequestApproval` action, configured with one approval group requiring 2 approvals amongst three specific users.\n\n```json\n{\n \"action\": {\n \"kind\": \"RequestApproval\",\n \"autoRejectTimeout\": 60, // minutes\n \"approvalGroups\": [\n {\n \"name\": \"Admins\",\n \"quorum\": 2, // only 2 approvers required in that group \n \"approvers\": {\n \"userId\": {\n \"in\": [\"us-...1\", \"us-...2\", \"us-...3\"],\n }\n }\n }\n ],\n\n }\n}\n```\n\n**Don't lock yourself up**\n\nBy default, users cannot approve an activity they initiated themselves, even if they are in an approval group. To allow this, you must set `initiatorCanApprove: true`.\n\n*Example 1:* For any wallet transfer, a policy is setup to require approval from **1 specific admin user** (eg. the CEO). `initiatorCanApprove` was not set to `true`. If the CEO himself initiates a transfer, no-one can approve his transfer and it's stuck.\n\n*Example 2:* Company has only 3 users. A policy is setup to require approval from **any 3 users** (`quorum: 3`) for any modification of a policy. `initiatorCanApprove` was not set to `true`. In this case, they are locked, and the policy cannot be modified: whoever requests a modification cannot approve, and the policy is therefore always missing one approver. To unlock, they would need to invite a new user and give him the rights to approve as well.\n ","required":["kind","approvalGroups"],"properties":{"kind":{"type":"string","enum":["RequestApproval"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.0.pendingChangeRequest.body.oneOf.8.action.oneOf.0.kind","typeLabel":"enum\u003cstring>"},"approvalGroups":{"type":"array","items":{"type":"object","properties":{"quorum":{"type":"integer","minimum":1,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.0.pendingChangeRequest.body.oneOf.8.action.oneOf.0.approvalGroups.items.[INDEX].quorum","typeLabel":"integer"},"approvers":{"type":"object","properties":{"userId":{"type":"object","properties":{"in":{"type":"array","items":{"type":"string","minLength":1,"uniqueKey":"\\items.items.[INDEX].oneOf.0.pendingChangeRequest.body.oneOf.8.action.oneOf.0.approvalGroups.items.[INDEX].approvers.userId.in.items.[INDEX]","typeLabel":"string"},"minItems":1,"maxItems":100,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.0.pendingChangeRequest.body.oneOf.8.action.oneOf.0.approvalGroups.items.[INDEX].approvers.userId.in","typeLabel":"string[]"}},"required":["in"],"additionalProperties":false,"description":"Users and service accounts who may approve.","uniqueKey":"\\items.items.[INDEX].oneOf.0.pendingChangeRequest.body.oneOf.8.action.oneOf.0.approvalGroups.items.[INDEX].approvers.userId","typeLabel":"object"},"userGroupId":{"type":"object","properties":{"in":{"type":"array","items":{"type":"string","minLength":1,"maxLength":64,"pattern":"^ug-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"User group id.","example":"ug-139tf-f58l8-lsbt6dp47lfsdvgh","uniqueKey":"\\items.items.[INDEX].oneOf.0.pendingChangeRequest.body.oneOf.8.action.oneOf.0.approvalGroups.items.[INDEX].approvers.userGroupId.in.items.[INDEX]","typeLabel":"string"},"minItems":1,"maxItems":100,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.0.pendingChangeRequest.body.oneOf.8.action.oneOf.0.approvalGroups.items.[INDEX].approvers.userGroupId.in","typeLabel":"string[]"}},"required":["in"],"additionalProperties":false,"description":"User groups whose members may approve.","uniqueKey":"\\items.items.[INDEX].oneOf.0.pendingChangeRequest.body.oneOf.8.action.oneOf.0.approvalGroups.items.[INDEX].approvers.userGroupId","typeLabel":"object"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.0.pendingChangeRequest.body.oneOf.8.action.oneOf.0.approvalGroups.items.[INDEX].approvers","typeLabel":"object"},"name":{"type":"string","uniqueKey":"\\items.items.[INDEX].oneOf.0.pendingChangeRequest.body.oneOf.8.action.oneOf.0.approvalGroups.items.[INDEX].name","typeLabel":"string"},"initiatorCanApprove":{"type":"boolean","description":"Whether the initiator of the activity can participate in the approval.","uniqueKey":"\\items.items.[INDEX].oneOf.0.pendingChangeRequest.body.oneOf.8.action.oneOf.0.approvalGroups.items.[INDEX].initiatorCanApprove","typeLabel":"boolean"},"serviceAccountsCanApprove":{"type":"boolean","description":"Whether service accounts can participate in the approval for this group.","uniqueKey":"\\items.items.[INDEX].oneOf.0.pendingChangeRequest.body.oneOf.8.action.oneOf.0.approvalGroups.items.[INDEX].serviceAccountsCanApprove","typeLabel":"boolean"}},"required":["quorum","approvers"],"additionalProperties":false,"uniqueKey":"\\items.items.[INDEX].oneOf.0.pendingChangeRequest.body.oneOf.8.action.oneOf.0.approvalGroups.items.[INDEX]","typeLabel":"object"},"minItems":1,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.0.pendingChangeRequest.body.oneOf.8.action.oneOf.0.approvalGroups","typeLabel":"object[]"},"autoRejectTimeout":{"oneOf":[{"type":"integer","minimum":1,"uniqueKey":"\\items.items.[INDEX].oneOf.0.pendingChangeRequest.body.oneOf.8.action.oneOf.0.autoRejectTimeout.oneOf.0","typeLabel":"integer"},{"type":"null","minimum":1,"uniqueKey":"\\items.items.[INDEX].oneOf.0.pendingChangeRequest.body.oneOf.8.action.oneOf.0.autoRejectTimeout.oneOf.1","typeLabel":"null"}],"uniqueKey":"\\items.items.[INDEX].oneOf.0.pendingChangeRequest.body.oneOf.8.action.oneOf.0.autoRejectTimeout","typeLabel":"integer | null"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.0.pendingChangeRequest.body.oneOf.8.action.oneOf.0","typeLabel":"RequestApproval · object"},{"type":"object","title":"Block","description":"This action means that the activity will be blocked if the policy is triggered.\n\n```json\n{\n \"action\": {\n \"kind\": \"Block\"\n }\n}\n```\n","required":["kind"],"properties":{"kind":{"type":"string","enum":["Block"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.0.pendingChangeRequest.body.oneOf.8.action.oneOf.1.kind","typeLabel":"enum\u003cstring>"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.0.pendingChangeRequest.body.oneOf.8.action.oneOf.1","typeLabel":"Block · object"}],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.0.pendingChangeRequest.body.oneOf.8.action","typeLabel":"RequestApproval · object | Block · object"},"dateCreated":{"type":"string","uniqueKey":"\\items.items.[INDEX].oneOf.0.pendingChangeRequest.body.oneOf.8.dateCreated","typeLabel":"string"},"dateUpdated":{"type":"string","uniqueKey":"\\items.items.[INDEX].oneOf.0.pendingChangeRequest.body.oneOf.8.dateUpdated","typeLabel":"string"},"filters":{"type":"object","properties":{"vaultId":{"type":"object","properties":{"in":{"type":"array","items":{"type":"string","minLength":1,"uniqueKey":"\\items.items.[INDEX].oneOf.0.pendingChangeRequest.body.oneOf.8.filters.vaultId.in.items.[INDEX]","typeLabel":"string"},"minItems":1,"maxItems":100,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.0.pendingChangeRequest.body.oneOf.8.filters.vaultId.in","typeLabel":"string[]"}},"required":["in"],"additionalProperties":false,"uniqueKey":"\\items.items.[INDEX].oneOf.0.pendingChangeRequest.body.oneOf.8.filters.vaultId","typeLabel":"object"},"vaultTags":{"type":"object","properties":{"hasAny":{"type":"array","items":{"type":"string","minLength":1,"uniqueKey":"\\items.items.[INDEX].oneOf.0.pendingChangeRequest.body.oneOf.8.filters.vaultTags.hasAny.items.[INDEX]","typeLabel":"string"},"minItems":1,"maxItems":100,"uniqueKey":"\\items.items.[INDEX].oneOf.0.pendingChangeRequest.body.oneOf.8.filters.vaultTags.hasAny","typeLabel":"string[]"},"hasAll":{"type":"array","items":{"type":"string","minLength":1,"uniqueKey":"\\items.items.[INDEX].oneOf.0.pendingChangeRequest.body.oneOf.8.filters.vaultTags.hasAll.items.[INDEX]","typeLabel":"string"},"minItems":1,"maxItems":100,"uniqueKey":"\\items.items.[INDEX].oneOf.0.pendingChangeRequest.body.oneOf.8.filters.vaultTags.hasAll","typeLabel":"string[]"}},"additionalProperties":false,"uniqueKey":"\\items.items.[INDEX].oneOf.0.pendingChangeRequest.body.oneOf.8.filters.vaultTags","typeLabel":"object"}},"additionalProperties":false,"uniqueKey":"\\items.items.[INDEX].oneOf.0.pendingChangeRequest.body.oneOf.8.filters","typeLabel":"object"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.0.pendingChangeRequest.body.oneOf.8","typeLabel":"Vaults:CreateLock · object"},{"type":"object","title":"Vaults:ReplaceLock","required":["id","name","status","activityKind","rule","action"],"properties":{"id":{"type":"string","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.0.pendingChangeRequest.body.oneOf.9.id","typeLabel":"string"},"name":{"type":"string","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.0.pendingChangeRequest.body.oneOf.9.name","typeLabel":"string"},"status":{"type":"string","enum":["Active","Archived"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.0.pendingChangeRequest.body.oneOf.9.status","typeLabel":"enum\u003cstring>"},"activityKind":{"type":"string","enum":["Vaults:ReplaceLock"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.0.pendingChangeRequest.body.oneOf.9.activityKind","typeLabel":"enum\u003cstring>"},"rule":{"type":"object","title":"AlwaysTrigger","description":"This rule will always be triggered, meaning that if this rule is defined on a policy, the policy will always trigger the policy action, regardless of the activity details.","required":["kind"],"properties":{"kind":{"type":"string","enum":["AlwaysTrigger"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.0.pendingChangeRequest.body.oneOf.9.rule.kind","typeLabel":"enum\u003cstring>"},"configuration":{"type":"object","properties":{},"additionalProperties":false,"uniqueKey":"\\items.items.[INDEX].oneOf.0.pendingChangeRequest.body.oneOf.9.rule.configuration","typeLabel":"object"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.0.pendingChangeRequest.body.oneOf.9.rule","typeLabel":"AlwaysTrigger · object"},"action":{"oneOf":[{"type":"object","title":"RequestApproval","description":"\nThis action means that activity will first require an Approval process to be completed before it can be executed (or be aborted if someone rejects it during the approval process).\n\nOne or several groups of approvers need to be specified. These groups define who is allowed to approve / reject an activity.\n\nThe activity will only be executed if all approver groups reach their \"quorum\" of approvals. Otherwise, if any one user within any approver group rejects, then the activity is aborted and the call is not executed.\n\nThe example below shows a `RequestApproval` action, configured with one approval group requiring 2 approvals amongst three specific users.\n\n```json\n{\n \"action\": {\n \"kind\": \"RequestApproval\",\n \"autoRejectTimeout\": 60, // minutes\n \"approvalGroups\": [\n {\n \"name\": \"Admins\",\n \"quorum\": 2, // only 2 approvers required in that group \n \"approvers\": {\n \"userId\": {\n \"in\": [\"us-...1\", \"us-...2\", \"us-...3\"],\n }\n }\n }\n ],\n\n }\n}\n```\n\n**Don't lock yourself up**\n\nBy default, users cannot approve an activity they initiated themselves, even if they are in an approval group. To allow this, you must set `initiatorCanApprove: true`.\n\n*Example 1:* For any wallet transfer, a policy is setup to require approval from **1 specific admin user** (eg. the CEO). `initiatorCanApprove` was not set to `true`. If the CEO himself initiates a transfer, no-one can approve his transfer and it's stuck.\n\n*Example 2:* Company has only 3 users. A policy is setup to require approval from **any 3 users** (`quorum: 3`) for any modification of a policy. `initiatorCanApprove` was not set to `true`. In this case, they are locked, and the policy cannot be modified: whoever requests a modification cannot approve, and the policy is therefore always missing one approver. To unlock, they would need to invite a new user and give him the rights to approve as well.\n ","required":["kind","approvalGroups"],"properties":{"kind":{"type":"string","enum":["RequestApproval"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.0.pendingChangeRequest.body.oneOf.9.action.oneOf.0.kind","typeLabel":"enum\u003cstring>"},"approvalGroups":{"type":"array","items":{"type":"object","properties":{"quorum":{"type":"integer","minimum":1,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.0.pendingChangeRequest.body.oneOf.9.action.oneOf.0.approvalGroups.items.[INDEX].quorum","typeLabel":"integer"},"approvers":{"type":"object","properties":{"userId":{"type":"object","properties":{"in":{"type":"array","items":{"type":"string","minLength":1,"uniqueKey":"\\items.items.[INDEX].oneOf.0.pendingChangeRequest.body.oneOf.9.action.oneOf.0.approvalGroups.items.[INDEX].approvers.userId.in.items.[INDEX]","typeLabel":"string"},"minItems":1,"maxItems":100,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.0.pendingChangeRequest.body.oneOf.9.action.oneOf.0.approvalGroups.items.[INDEX].approvers.userId.in","typeLabel":"string[]"}},"required":["in"],"additionalProperties":false,"description":"Users and service accounts who may approve.","uniqueKey":"\\items.items.[INDEX].oneOf.0.pendingChangeRequest.body.oneOf.9.action.oneOf.0.approvalGroups.items.[INDEX].approvers.userId","typeLabel":"object"},"userGroupId":{"type":"object","properties":{"in":{"type":"array","items":{"type":"string","minLength":1,"maxLength":64,"pattern":"^ug-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"User group id.","example":"ug-139tf-f58l8-lsbt6dp47lfsdvgh","uniqueKey":"\\items.items.[INDEX].oneOf.0.pendingChangeRequest.body.oneOf.9.action.oneOf.0.approvalGroups.items.[INDEX].approvers.userGroupId.in.items.[INDEX]","typeLabel":"string"},"minItems":1,"maxItems":100,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.0.pendingChangeRequest.body.oneOf.9.action.oneOf.0.approvalGroups.items.[INDEX].approvers.userGroupId.in","typeLabel":"string[]"}},"required":["in"],"additionalProperties":false,"description":"User groups whose members may approve.","uniqueKey":"\\items.items.[INDEX].oneOf.0.pendingChangeRequest.body.oneOf.9.action.oneOf.0.approvalGroups.items.[INDEX].approvers.userGroupId","typeLabel":"object"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.0.pendingChangeRequest.body.oneOf.9.action.oneOf.0.approvalGroups.items.[INDEX].approvers","typeLabel":"object"},"name":{"type":"string","uniqueKey":"\\items.items.[INDEX].oneOf.0.pendingChangeRequest.body.oneOf.9.action.oneOf.0.approvalGroups.items.[INDEX].name","typeLabel":"string"},"initiatorCanApprove":{"type":"boolean","description":"Whether the initiator of the activity can participate in the approval.","uniqueKey":"\\items.items.[INDEX].oneOf.0.pendingChangeRequest.body.oneOf.9.action.oneOf.0.approvalGroups.items.[INDEX].initiatorCanApprove","typeLabel":"boolean"},"serviceAccountsCanApprove":{"type":"boolean","description":"Whether service accounts can participate in the approval for this group.","uniqueKey":"\\items.items.[INDEX].oneOf.0.pendingChangeRequest.body.oneOf.9.action.oneOf.0.approvalGroups.items.[INDEX].serviceAccountsCanApprove","typeLabel":"boolean"}},"required":["quorum","approvers"],"additionalProperties":false,"uniqueKey":"\\items.items.[INDEX].oneOf.0.pendingChangeRequest.body.oneOf.9.action.oneOf.0.approvalGroups.items.[INDEX]","typeLabel":"object"},"minItems":1,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.0.pendingChangeRequest.body.oneOf.9.action.oneOf.0.approvalGroups","typeLabel":"object[]"},"autoRejectTimeout":{"oneOf":[{"type":"integer","minimum":1,"uniqueKey":"\\items.items.[INDEX].oneOf.0.pendingChangeRequest.body.oneOf.9.action.oneOf.0.autoRejectTimeout.oneOf.0","typeLabel":"integer"},{"type":"null","minimum":1,"uniqueKey":"\\items.items.[INDEX].oneOf.0.pendingChangeRequest.body.oneOf.9.action.oneOf.0.autoRejectTimeout.oneOf.1","typeLabel":"null"}],"uniqueKey":"\\items.items.[INDEX].oneOf.0.pendingChangeRequest.body.oneOf.9.action.oneOf.0.autoRejectTimeout","typeLabel":"integer | null"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.0.pendingChangeRequest.body.oneOf.9.action.oneOf.0","typeLabel":"RequestApproval · object"},{"type":"object","title":"Block","description":"This action means that the activity will be blocked if the policy is triggered.\n\n```json\n{\n \"action\": {\n \"kind\": \"Block\"\n }\n}\n```\n","required":["kind"],"properties":{"kind":{"type":"string","enum":["Block"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.0.pendingChangeRequest.body.oneOf.9.action.oneOf.1.kind","typeLabel":"enum\u003cstring>"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.0.pendingChangeRequest.body.oneOf.9.action.oneOf.1","typeLabel":"Block · object"}],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.0.pendingChangeRequest.body.oneOf.9.action","typeLabel":"RequestApproval · object | Block · object"},"dateCreated":{"type":"string","uniqueKey":"\\items.items.[INDEX].oneOf.0.pendingChangeRequest.body.oneOf.9.dateCreated","typeLabel":"string"},"dateUpdated":{"type":"string","uniqueKey":"\\items.items.[INDEX].oneOf.0.pendingChangeRequest.body.oneOf.9.dateUpdated","typeLabel":"string"},"filters":{"type":"object","properties":{"vaultId":{"type":"object","properties":{"in":{"type":"array","items":{"type":"string","minLength":1,"uniqueKey":"\\items.items.[INDEX].oneOf.0.pendingChangeRequest.body.oneOf.9.filters.vaultId.in.items.[INDEX]","typeLabel":"string"},"minItems":1,"maxItems":100,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.0.pendingChangeRequest.body.oneOf.9.filters.vaultId.in","typeLabel":"string[]"}},"required":["in"],"additionalProperties":false,"uniqueKey":"\\items.items.[INDEX].oneOf.0.pendingChangeRequest.body.oneOf.9.filters.vaultId","typeLabel":"object"},"vaultTags":{"type":"object","properties":{"hasAny":{"type":"array","items":{"type":"string","minLength":1,"uniqueKey":"\\items.items.[INDEX].oneOf.0.pendingChangeRequest.body.oneOf.9.filters.vaultTags.hasAny.items.[INDEX]","typeLabel":"string"},"minItems":1,"maxItems":100,"uniqueKey":"\\items.items.[INDEX].oneOf.0.pendingChangeRequest.body.oneOf.9.filters.vaultTags.hasAny","typeLabel":"string[]"},"hasAll":{"type":"array","items":{"type":"string","minLength":1,"uniqueKey":"\\items.items.[INDEX].oneOf.0.pendingChangeRequest.body.oneOf.9.filters.vaultTags.hasAll.items.[INDEX]","typeLabel":"string"},"minItems":1,"maxItems":100,"uniqueKey":"\\items.items.[INDEX].oneOf.0.pendingChangeRequest.body.oneOf.9.filters.vaultTags.hasAll","typeLabel":"string[]"}},"additionalProperties":false,"uniqueKey":"\\items.items.[INDEX].oneOf.0.pendingChangeRequest.body.oneOf.9.filters.vaultTags","typeLabel":"object"}},"additionalProperties":false,"uniqueKey":"\\items.items.[INDEX].oneOf.0.pendingChangeRequest.body.oneOf.9.filters","typeLabel":"object"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.0.pendingChangeRequest.body.oneOf.9","typeLabel":"Vaults:ReplaceLock · object"},{"type":"object","title":"UserAction","required":["id","name","status","activityKind","rule","action"],"properties":{"id":{"type":"string","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.0.pendingChangeRequest.body.oneOf.10.id","typeLabel":"string"},"name":{"type":"string","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.0.pendingChangeRequest.body.oneOf.10.name","typeLabel":"string"},"status":{"type":"string","enum":["Active","Archived"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.0.pendingChangeRequest.body.oneOf.10.status","typeLabel":"enum\u003cstring>"},"activityKind":{"type":"string","enum":["UserAction"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.0.pendingChangeRequest.body.oneOf.10.activityKind","typeLabel":"enum\u003cstring>"},"rule":{"type":"object","properties":{"kind":{"type":"string","enum":["UserAction"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.0.pendingChangeRequest.body.oneOf.10.rule.kind","typeLabel":"enum\u003cstring>"},"configuration":{"type":"object","properties":{"userActionKinds":{"type":"array","items":{"type":"string","uniqueKey":"\\items.items.[INDEX].oneOf.0.pendingChangeRequest.body.oneOf.10.rule.configuration.userActionKinds.items.[INDEX]","typeLabel":"string"},"minItems":1,"description":"The user actions this rule applies to. The rule triggers on any of them.","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.0.pendingChangeRequest.body.oneOf.10.rule.configuration.userActionKinds","typeLabel":"string[]"}},"required":["userActionKinds"],"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.0.pendingChangeRequest.body.oneOf.10.rule.configuration","typeLabel":"object"}},"required":["kind","configuration"],"additionalProperties":false,"title":"UserAction","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.0.pendingChangeRequest.body.oneOf.10.rule","typeLabel":"UserAction · object"},"action":{"oneOf":[{"type":"object","title":"RequestApproval","description":"\nThis action means that activity will first require an Approval process to be completed before it can be executed (or be aborted if someone rejects it during the approval process).\n\nOne or several groups of approvers need to be specified. These groups define who is allowed to approve / reject an activity.\n\nThe activity will only be executed if all approver groups reach their \"quorum\" of approvals. Otherwise, if any one user within any approver group rejects, then the activity is aborted and the call is not executed.\n\nThe example below shows a `RequestApproval` action, configured with one approval group requiring 2 approvals amongst three specific users.\n\n```json\n{\n \"action\": {\n \"kind\": \"RequestApproval\",\n \"autoRejectTimeout\": 60, // minutes\n \"approvalGroups\": [\n {\n \"name\": \"Admins\",\n \"quorum\": 2, // only 2 approvers required in that group \n \"approvers\": {\n \"userId\": {\n \"in\": [\"us-...1\", \"us-...2\", \"us-...3\"],\n }\n }\n }\n ],\n\n }\n}\n```\n\n**Don't lock yourself up**\n\nBy default, users cannot approve an activity they initiated themselves, even if they are in an approval group. To allow this, you must set `initiatorCanApprove: true`.\n\n*Example 1:* For any wallet transfer, a policy is setup to require approval from **1 specific admin user** (eg. the CEO). `initiatorCanApprove` was not set to `true`. If the CEO himself initiates a transfer, no-one can approve his transfer and it's stuck.\n\n*Example 2:* Company has only 3 users. A policy is setup to require approval from **any 3 users** (`quorum: 3`) for any modification of a policy. `initiatorCanApprove` was not set to `true`. In this case, they are locked, and the policy cannot be modified: whoever requests a modification cannot approve, and the policy is therefore always missing one approver. To unlock, they would need to invite a new user and give him the rights to approve as well.\n ","required":["kind","approvalGroups"],"properties":{"kind":{"type":"string","enum":["RequestApproval"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.0.pendingChangeRequest.body.oneOf.10.action.oneOf.0.kind","typeLabel":"enum\u003cstring>"},"approvalGroups":{"type":"array","items":{"type":"object","properties":{"quorum":{"type":"integer","minimum":1,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.0.pendingChangeRequest.body.oneOf.10.action.oneOf.0.approvalGroups.items.[INDEX].quorum","typeLabel":"integer"},"approvers":{"type":"object","properties":{"userId":{"type":"object","properties":{"in":{"type":"array","items":{"type":"string","minLength":1,"uniqueKey":"\\items.items.[INDEX].oneOf.0.pendingChangeRequest.body.oneOf.10.action.oneOf.0.approvalGroups.items.[INDEX].approvers.userId.in.items.[INDEX]","typeLabel":"string"},"minItems":1,"maxItems":100,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.0.pendingChangeRequest.body.oneOf.10.action.oneOf.0.approvalGroups.items.[INDEX].approvers.userId.in","typeLabel":"string[]"}},"required":["in"],"additionalProperties":false,"description":"Users and service accounts who may approve.","uniqueKey":"\\items.items.[INDEX].oneOf.0.pendingChangeRequest.body.oneOf.10.action.oneOf.0.approvalGroups.items.[INDEX].approvers.userId","typeLabel":"object"},"userGroupId":{"type":"object","properties":{"in":{"type":"array","items":{"type":"string","minLength":1,"maxLength":64,"pattern":"^ug-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"User group id.","example":"ug-139tf-f58l8-lsbt6dp47lfsdvgh","uniqueKey":"\\items.items.[INDEX].oneOf.0.pendingChangeRequest.body.oneOf.10.action.oneOf.0.approvalGroups.items.[INDEX].approvers.userGroupId.in.items.[INDEX]","typeLabel":"string"},"minItems":1,"maxItems":100,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.0.pendingChangeRequest.body.oneOf.10.action.oneOf.0.approvalGroups.items.[INDEX].approvers.userGroupId.in","typeLabel":"string[]"}},"required":["in"],"additionalProperties":false,"description":"User groups whose members may approve.","uniqueKey":"\\items.items.[INDEX].oneOf.0.pendingChangeRequest.body.oneOf.10.action.oneOf.0.approvalGroups.items.[INDEX].approvers.userGroupId","typeLabel":"object"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.0.pendingChangeRequest.body.oneOf.10.action.oneOf.0.approvalGroups.items.[INDEX].approvers","typeLabel":"object"},"name":{"type":"string","uniqueKey":"\\items.items.[INDEX].oneOf.0.pendingChangeRequest.body.oneOf.10.action.oneOf.0.approvalGroups.items.[INDEX].name","typeLabel":"string"},"initiatorCanApprove":{"type":"boolean","description":"Whether the initiator of the activity can participate in the approval.","uniqueKey":"\\items.items.[INDEX].oneOf.0.pendingChangeRequest.body.oneOf.10.action.oneOf.0.approvalGroups.items.[INDEX].initiatorCanApprove","typeLabel":"boolean"},"serviceAccountsCanApprove":{"type":"boolean","description":"Whether service accounts can participate in the approval for this group.","uniqueKey":"\\items.items.[INDEX].oneOf.0.pendingChangeRequest.body.oneOf.10.action.oneOf.0.approvalGroups.items.[INDEX].serviceAccountsCanApprove","typeLabel":"boolean"}},"required":["quorum","approvers"],"additionalProperties":false,"uniqueKey":"\\items.items.[INDEX].oneOf.0.pendingChangeRequest.body.oneOf.10.action.oneOf.0.approvalGroups.items.[INDEX]","typeLabel":"object"},"minItems":1,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.0.pendingChangeRequest.body.oneOf.10.action.oneOf.0.approvalGroups","typeLabel":"object[]"},"autoRejectTimeout":{"oneOf":[{"type":"integer","minimum":1,"uniqueKey":"\\items.items.[INDEX].oneOf.0.pendingChangeRequest.body.oneOf.10.action.oneOf.0.autoRejectTimeout.oneOf.0","typeLabel":"integer"},{"type":"null","minimum":1,"uniqueKey":"\\items.items.[INDEX].oneOf.0.pendingChangeRequest.body.oneOf.10.action.oneOf.0.autoRejectTimeout.oneOf.1","typeLabel":"null"}],"uniqueKey":"\\items.items.[INDEX].oneOf.0.pendingChangeRequest.body.oneOf.10.action.oneOf.0.autoRejectTimeout","typeLabel":"integer | null"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.0.pendingChangeRequest.body.oneOf.10.action.oneOf.0","typeLabel":"RequestApproval · object"},{"type":"object","title":"Block","description":"This action means that the activity will be blocked if the policy is triggered.\n\n```json\n{\n \"action\": {\n \"kind\": \"Block\"\n }\n}\n```\n","required":["kind"],"properties":{"kind":{"type":"string","enum":["Block"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.0.pendingChangeRequest.body.oneOf.10.action.oneOf.1.kind","typeLabel":"enum\u003cstring>"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.0.pendingChangeRequest.body.oneOf.10.action.oneOf.1","typeLabel":"Block · object"}],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.0.pendingChangeRequest.body.oneOf.10.action","typeLabel":"RequestApproval · object | Block · object"},"dateCreated":{"type":"string","uniqueKey":"\\items.items.[INDEX].oneOf.0.pendingChangeRequest.body.oneOf.10.dateCreated","typeLabel":"string"},"dateUpdated":{"type":"string","uniqueKey":"\\items.items.[INDEX].oneOf.0.pendingChangeRequest.body.oneOf.10.dateUpdated","typeLabel":"string"},"filters":{"type":"object","properties":{},"uniqueKey":"\\items.items.[INDEX].oneOf.0.pendingChangeRequest.body.oneOf.10.filters","typeLabel":"object"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.0.pendingChangeRequest.body.oneOf.10","typeLabel":"UserAction · object"}],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.0.pendingChangeRequest.body","typeLabel":"Registry:Addresses:Modify · object | Permissions:Assign · object | Permissions:Modify · object | Policies:Modify · object | Registry:ContractSchemas:Modify · object | Wallets:Sign · object | Wallets:IncomingTransaction · object | Vaults:ReleaseQuarantine · object | Vaults:CreateLock · object | Vaults:ReplaceLock · object | UserAction · object"},"dateResolved":{"type":"string","format":"date-time","uniqueKey":"\\items.items.[INDEX].oneOf.0.pendingChangeRequest.dateResolved","typeLabel":"string\u003cdate-time>"},"approvalId":{"type":"string","uniqueKey":"\\items.items.[INDEX].oneOf.0.pendingChangeRequest.approvalId","typeLabel":"string"}},"required":["id","requester","kind","operationKind","status","entityId","dateCreated","body"],"additionalProperties":false,"uniqueKey":"\\items.items.[INDEX].oneOf.0.pendingChangeRequest","typeLabel":"object"}},"additionalProperties":false,"uniqueKey":"\\items.items.[INDEX].oneOf.0","typeLabel":"Registry:Addresses:Modify · object"},{"type":"object","title":"Permissions:Assign","required":["id","name","status","activityKind","rule","action"],"properties":{"id":{"type":"string","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.1.id","typeLabel":"string"},"name":{"type":"string","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.1.name","typeLabel":"string"},"status":{"type":"string","enum":["Active","Archived"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.1.status","typeLabel":"enum\u003cstring>"},"activityKind":{"type":"string","enum":["Permissions:Assign"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.1.activityKind","typeLabel":"enum\u003cstring>"},"rule":{"type":"object","properties":{"kind":{"type":"string","enum":["AlwaysTrigger"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.1.rule.kind","typeLabel":"enum\u003cstring>"},"configuration":{"type":"object","properties":{},"additionalProperties":false,"uniqueKey":"\\items.items.[INDEX].oneOf.1.rule.configuration","typeLabel":"object"}},"required":["kind"],"additionalProperties":false,"description":"This rule will always be triggered, meaning that if this rule is defined on a policy, the policy will always trigger the policy action, regardless of the activity details.","title":"AlwaysTrigger","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.1.rule","typeLabel":"AlwaysTrigger · object"},"action":{"oneOf":[{"type":"object","title":"RequestApproval","description":"\nThis action means that activity will first require an Approval process to be completed before it can be executed (or be aborted if someone rejects it during the approval process).\n\nOne or several groups of approvers need to be specified. These groups define who is allowed to approve / reject an activity.\n\nThe activity will only be executed if all approver groups reach their \"quorum\" of approvals. Otherwise, if any one user within any approver group rejects, then the activity is aborted and the call is not executed.\n\nThe example below shows a `RequestApproval` action, configured with one approval group requiring 2 approvals amongst three specific users.\n\n```json\n{\n \"action\": {\n \"kind\": \"RequestApproval\",\n \"autoRejectTimeout\": 60, // minutes\n \"approvalGroups\": [\n {\n \"name\": \"Admins\",\n \"quorum\": 2, // only 2 approvers required in that group \n \"approvers\": {\n \"userId\": {\n \"in\": [\"us-...1\", \"us-...2\", \"us-...3\"],\n }\n }\n }\n ],\n\n }\n}\n```\n\n**Don't lock yourself up**\n\nBy default, users cannot approve an activity they initiated themselves, even if they are in an approval group. To allow this, you must set `initiatorCanApprove: true`.\n\n*Example 1:* For any wallet transfer, a policy is setup to require approval from **1 specific admin user** (eg. the CEO). `initiatorCanApprove` was not set to `true`. If the CEO himself initiates a transfer, no-one can approve his transfer and it's stuck.\n\n*Example 2:* Company has only 3 users. A policy is setup to require approval from **any 3 users** (`quorum: 3`) for any modification of a policy. `initiatorCanApprove` was not set to `true`. In this case, they are locked, and the policy cannot be modified: whoever requests a modification cannot approve, and the policy is therefore always missing one approver. To unlock, they would need to invite a new user and give him the rights to approve as well.\n ","required":["kind","approvalGroups"],"properties":{"kind":{"type":"string","enum":["RequestApproval"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.1.action.oneOf.0.kind","typeLabel":"enum\u003cstring>"},"approvalGroups":{"type":"array","items":{"type":"object","properties":{"quorum":{"type":"integer","minimum":1,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.1.action.oneOf.0.approvalGroups.items.[INDEX].quorum","typeLabel":"integer"},"approvers":{"type":"object","properties":{"userId":{"type":"object","properties":{"in":{"type":"array","items":{"type":"string","minLength":1,"uniqueKey":"\\items.items.[INDEX].oneOf.1.action.oneOf.0.approvalGroups.items.[INDEX].approvers.userId.in.items.[INDEX]","typeLabel":"string"},"minItems":1,"maxItems":100,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.1.action.oneOf.0.approvalGroups.items.[INDEX].approvers.userId.in","typeLabel":"string[]"}},"required":["in"],"additionalProperties":false,"description":"Users and service accounts who may approve.","uniqueKey":"\\items.items.[INDEX].oneOf.1.action.oneOf.0.approvalGroups.items.[INDEX].approvers.userId","typeLabel":"object"},"userGroupId":{"type":"object","properties":{"in":{"type":"array","items":{"type":"string","minLength":1,"maxLength":64,"pattern":"^ug-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"User group id.","example":"ug-139tf-f58l8-lsbt6dp47lfsdvgh","uniqueKey":"\\items.items.[INDEX].oneOf.1.action.oneOf.0.approvalGroups.items.[INDEX].approvers.userGroupId.in.items.[INDEX]","typeLabel":"string"},"minItems":1,"maxItems":100,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.1.action.oneOf.0.approvalGroups.items.[INDEX].approvers.userGroupId.in","typeLabel":"string[]"}},"required":["in"],"additionalProperties":false,"description":"User groups whose members may approve.","uniqueKey":"\\items.items.[INDEX].oneOf.1.action.oneOf.0.approvalGroups.items.[INDEX].approvers.userGroupId","typeLabel":"object"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.1.action.oneOf.0.approvalGroups.items.[INDEX].approvers","typeLabel":"object"},"name":{"type":"string","uniqueKey":"\\items.items.[INDEX].oneOf.1.action.oneOf.0.approvalGroups.items.[INDEX].name","typeLabel":"string"},"initiatorCanApprove":{"type":"boolean","description":"Whether the initiator of the activity can participate in the approval.","uniqueKey":"\\items.items.[INDEX].oneOf.1.action.oneOf.0.approvalGroups.items.[INDEX].initiatorCanApprove","typeLabel":"boolean"},"serviceAccountsCanApprove":{"type":"boolean","description":"Whether service accounts can participate in the approval for this group.","uniqueKey":"\\items.items.[INDEX].oneOf.1.action.oneOf.0.approvalGroups.items.[INDEX].serviceAccountsCanApprove","typeLabel":"boolean"}},"required":["quorum","approvers"],"additionalProperties":false,"uniqueKey":"\\items.items.[INDEX].oneOf.1.action.oneOf.0.approvalGroups.items.[INDEX]","typeLabel":"object"},"minItems":1,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.1.action.oneOf.0.approvalGroups","typeLabel":"object[]"},"autoRejectTimeout":{"oneOf":[{"type":"integer","minimum":1,"uniqueKey":"\\items.items.[INDEX].oneOf.1.action.oneOf.0.autoRejectTimeout.oneOf.0","typeLabel":"integer"},{"type":"null","minimum":1,"uniqueKey":"\\items.items.[INDEX].oneOf.1.action.oneOf.0.autoRejectTimeout.oneOf.1","typeLabel":"null"}],"uniqueKey":"\\items.items.[INDEX].oneOf.1.action.oneOf.0.autoRejectTimeout","typeLabel":"integer | null"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.1.action.oneOf.0","typeLabel":"RequestApproval · object"},{"type":"object","title":"Block","description":"This action means that the activity will be blocked if the policy is triggered.\n\n```json\n{\n \"action\": {\n \"kind\": \"Block\"\n }\n}\n```\n","required":["kind"],"properties":{"kind":{"type":"string","enum":["Block"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.1.action.oneOf.1.kind","typeLabel":"enum\u003cstring>"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.1.action.oneOf.1","typeLabel":"Block · object"}],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.1.action","typeLabel":"RequestApproval · object | Block · object"},"dateCreated":{"type":"string","uniqueKey":"\\items.items.[INDEX].oneOf.1.dateCreated","typeLabel":"string"},"dateUpdated":{"type":"string","uniqueKey":"\\items.items.[INDEX].oneOf.1.dateUpdated","typeLabel":"string"},"filters":{"type":"object","properties":{"permissionId":{"type":"object","properties":{"in":{"type":"array","items":{"type":"string","minLength":1,"uniqueKey":"\\items.items.[INDEX].oneOf.1.filters.permissionId.in.items.[INDEX]","typeLabel":"string"},"minItems":1,"maxItems":100,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.1.filters.permissionId.in","typeLabel":"string[]"}},"required":["in"],"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.1.filters.permissionId","typeLabel":"object"}},"required":["permissionId"],"additionalProperties":false,"uniqueKey":"\\items.items.[INDEX].oneOf.1.filters","typeLabel":"object"},"pendingChangeRequest":{"type":"object","properties":{"id":{"type":"string","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.1.pendingChangeRequest.id","typeLabel":"string"},"requester":{"type":"object","properties":{"userId":{"type":"string","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.1.pendingChangeRequest.requester.userId","typeLabel":"string"},"tokenId":{"type":"string","uniqueKey":"\\items.items.[INDEX].oneOf.1.pendingChangeRequest.requester.tokenId","typeLabel":"string"},"appId":{"type":"string","uniqueKey":"\\items.items.[INDEX].oneOf.1.pendingChangeRequest.requester.appId","typeLabel":"string"}},"required":["userId"],"description":"The user who initiated the change request.","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.1.pendingChangeRequest.requester","typeLabel":"object"},"kind":{"type":"string","enum":["Policy"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.1.pendingChangeRequest.kind","typeLabel":"enum\u003cstring>"},"operationKind":{"type":"string","enum":["Update"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.1.pendingChangeRequest.operationKind","typeLabel":"enum\u003cstring>"},"status":{"type":"string","enum":["Applied","Failed","Pending","Rejected"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.1.pendingChangeRequest.status","typeLabel":"enum\u003cstring>"},"entityId":{"type":"string","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.1.pendingChangeRequest.entityId","typeLabel":"string"},"dateCreated":{"type":"string","format":"date-time","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.1.pendingChangeRequest.dateCreated","typeLabel":"string\u003cdate-time>"},"body":{"oneOf":[{"type":"object","title":"Registry:Addresses:Modify","required":["id","name","status","activityKind","rule","action"],"properties":{"id":{"type":"string","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.1.pendingChangeRequest.body.oneOf.0.id","typeLabel":"string"},"name":{"type":"string","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.1.pendingChangeRequest.body.oneOf.0.name","typeLabel":"string"},"status":{"type":"string","enum":["Active","Archived"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.1.pendingChangeRequest.body.oneOf.0.status","typeLabel":"enum\u003cstring>"},"activityKind":{"type":"string","enum":["Registry:Addresses:Modify"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.1.pendingChangeRequest.body.oneOf.0.activityKind","typeLabel":"enum\u003cstring>"},"rule":{"type":"object","properties":{"kind":{"type":"string","enum":["AlwaysTrigger"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.1.pendingChangeRequest.body.oneOf.0.rule.kind","typeLabel":"enum\u003cstring>"},"configuration":{"type":"object","properties":{},"additionalProperties":false,"uniqueKey":"\\items.items.[INDEX].oneOf.1.pendingChangeRequest.body.oneOf.0.rule.configuration","typeLabel":"object"}},"required":["kind"],"additionalProperties":false,"description":"This rule will always be triggered, meaning that if this rule is defined on a policy, the policy will always trigger the policy action, regardless of the activity details.","title":"AlwaysTrigger","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.1.pendingChangeRequest.body.oneOf.0.rule","typeLabel":"AlwaysTrigger · object"},"action":{"oneOf":[{"type":"object","title":"RequestApproval","description":"\nThis action means that activity will first require an Approval process to be completed before it can be executed (or be aborted if someone rejects it during the approval process).\n\nOne or several groups of approvers need to be specified. These groups define who is allowed to approve / reject an activity.\n\nThe activity will only be executed if all approver groups reach their \"quorum\" of approvals. Otherwise, if any one user within any approver group rejects, then the activity is aborted and the call is not executed.\n\nThe example below shows a `RequestApproval` action, configured with one approval group requiring 2 approvals amongst three specific users.\n\n```json\n{\n \"action\": {\n \"kind\": \"RequestApproval\",\n \"autoRejectTimeout\": 60, // minutes\n \"approvalGroups\": [\n {\n \"name\": \"Admins\",\n \"quorum\": 2, // only 2 approvers required in that group \n \"approvers\": {\n \"userId\": {\n \"in\": [\"us-...1\", \"us-...2\", \"us-...3\"],\n }\n }\n }\n ],\n\n }\n}\n```\n\n**Don't lock yourself up**\n\nBy default, users cannot approve an activity they initiated themselves, even if they are in an approval group. To allow this, you must set `initiatorCanApprove: true`.\n\n*Example 1:* For any wallet transfer, a policy is setup to require approval from **1 specific admin user** (eg. the CEO). `initiatorCanApprove` was not set to `true`. If the CEO himself initiates a transfer, no-one can approve his transfer and it's stuck.\n\n*Example 2:* Company has only 3 users. A policy is setup to require approval from **any 3 users** (`quorum: 3`) for any modification of a policy. `initiatorCanApprove` was not set to `true`. In this case, they are locked, and the policy cannot be modified: whoever requests a modification cannot approve, and the policy is therefore always missing one approver. To unlock, they would need to invite a new user and give him the rights to approve as well.\n ","required":["kind","approvalGroups"],"properties":{"kind":{"type":"string","enum":["RequestApproval"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.1.pendingChangeRequest.body.oneOf.0.action.oneOf.0.kind","typeLabel":"enum\u003cstring>"},"approvalGroups":{"type":"array","items":{"type":"object","properties":{"quorum":{"type":"integer","minimum":1,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.1.pendingChangeRequest.body.oneOf.0.action.oneOf.0.approvalGroups.items.[INDEX].quorum","typeLabel":"integer"},"approvers":{"type":"object","properties":{"userId":{"type":"object","properties":{"in":{"type":"array","items":{"type":"string","minLength":1,"uniqueKey":"\\items.items.[INDEX].oneOf.1.pendingChangeRequest.body.oneOf.0.action.oneOf.0.approvalGroups.items.[INDEX].approvers.userId.in.items.[INDEX]","typeLabel":"string"},"minItems":1,"maxItems":100,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.1.pendingChangeRequest.body.oneOf.0.action.oneOf.0.approvalGroups.items.[INDEX].approvers.userId.in","typeLabel":"string[]"}},"required":["in"],"additionalProperties":false,"description":"Users and service accounts who may approve.","uniqueKey":"\\items.items.[INDEX].oneOf.1.pendingChangeRequest.body.oneOf.0.action.oneOf.0.approvalGroups.items.[INDEX].approvers.userId","typeLabel":"object"},"userGroupId":{"type":"object","properties":{"in":{"type":"array","items":{"type":"string","minLength":1,"maxLength":64,"pattern":"^ug-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"User group id.","example":"ug-139tf-f58l8-lsbt6dp47lfsdvgh","uniqueKey":"\\items.items.[INDEX].oneOf.1.pendingChangeRequest.body.oneOf.0.action.oneOf.0.approvalGroups.items.[INDEX].approvers.userGroupId.in.items.[INDEX]","typeLabel":"string"},"minItems":1,"maxItems":100,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.1.pendingChangeRequest.body.oneOf.0.action.oneOf.0.approvalGroups.items.[INDEX].approvers.userGroupId.in","typeLabel":"string[]"}},"required":["in"],"additionalProperties":false,"description":"User groups whose members may approve.","uniqueKey":"\\items.items.[INDEX].oneOf.1.pendingChangeRequest.body.oneOf.0.action.oneOf.0.approvalGroups.items.[INDEX].approvers.userGroupId","typeLabel":"object"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.1.pendingChangeRequest.body.oneOf.0.action.oneOf.0.approvalGroups.items.[INDEX].approvers","typeLabel":"object"},"name":{"type":"string","uniqueKey":"\\items.items.[INDEX].oneOf.1.pendingChangeRequest.body.oneOf.0.action.oneOf.0.approvalGroups.items.[INDEX].name","typeLabel":"string"},"initiatorCanApprove":{"type":"boolean","description":"Whether the initiator of the activity can participate in the approval.","uniqueKey":"\\items.items.[INDEX].oneOf.1.pendingChangeRequest.body.oneOf.0.action.oneOf.0.approvalGroups.items.[INDEX].initiatorCanApprove","typeLabel":"boolean"},"serviceAccountsCanApprove":{"type":"boolean","description":"Whether service accounts can participate in the approval for this group.","uniqueKey":"\\items.items.[INDEX].oneOf.1.pendingChangeRequest.body.oneOf.0.action.oneOf.0.approvalGroups.items.[INDEX].serviceAccountsCanApprove","typeLabel":"boolean"}},"required":["quorum","approvers"],"additionalProperties":false,"uniqueKey":"\\items.items.[INDEX].oneOf.1.pendingChangeRequest.body.oneOf.0.action.oneOf.0.approvalGroups.items.[INDEX]","typeLabel":"object"},"minItems":1,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.1.pendingChangeRequest.body.oneOf.0.action.oneOf.0.approvalGroups","typeLabel":"object[]"},"autoRejectTimeout":{"oneOf":[{"type":"integer","minimum":1,"uniqueKey":"\\items.items.[INDEX].oneOf.1.pendingChangeRequest.body.oneOf.0.action.oneOf.0.autoRejectTimeout.oneOf.0","typeLabel":"integer"},{"type":"null","minimum":1,"uniqueKey":"\\items.items.[INDEX].oneOf.1.pendingChangeRequest.body.oneOf.0.action.oneOf.0.autoRejectTimeout.oneOf.1","typeLabel":"null"}],"uniqueKey":"\\items.items.[INDEX].oneOf.1.pendingChangeRequest.body.oneOf.0.action.oneOf.0.autoRejectTimeout","typeLabel":"integer | null"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.1.pendingChangeRequest.body.oneOf.0.action.oneOf.0","typeLabel":"RequestApproval · object"},{"type":"object","title":"Block","description":"This action means that the activity will be blocked if the policy is triggered.\n\n```json\n{\n \"action\": {\n \"kind\": \"Block\"\n }\n}\n```\n","required":["kind"],"properties":{"kind":{"type":"string","enum":["Block"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.1.pendingChangeRequest.body.oneOf.0.action.oneOf.1.kind","typeLabel":"enum\u003cstring>"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.1.pendingChangeRequest.body.oneOf.0.action.oneOf.1","typeLabel":"Block · object"}],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.1.pendingChangeRequest.body.oneOf.0.action","typeLabel":"RequestApproval · object | Block · object"},"dateCreated":{"type":"string","uniqueKey":"\\items.items.[INDEX].oneOf.1.pendingChangeRequest.body.oneOf.0.dateCreated","typeLabel":"string"},"dateUpdated":{"type":"string","uniqueKey":"\\items.items.[INDEX].oneOf.1.pendingChangeRequest.body.oneOf.0.dateUpdated","typeLabel":"string"},"filters":{"type":"object","properties":{},"uniqueKey":"\\items.items.[INDEX].oneOf.1.pendingChangeRequest.body.oneOf.0.filters","typeLabel":"object"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.1.pendingChangeRequest.body.oneOf.0","typeLabel":"Registry:Addresses:Modify · object"},{"type":"object","title":"Permissions:Assign","required":["id","name","status","activityKind","rule","action"],"properties":{"id":{"type":"string","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.1.pendingChangeRequest.body.oneOf.1.id","typeLabel":"string"},"name":{"type":"string","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.1.pendingChangeRequest.body.oneOf.1.name","typeLabel":"string"},"status":{"type":"string","enum":["Active","Archived"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.1.pendingChangeRequest.body.oneOf.1.status","typeLabel":"enum\u003cstring>"},"activityKind":{"type":"string","enum":["Permissions:Assign"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.1.pendingChangeRequest.body.oneOf.1.activityKind","typeLabel":"enum\u003cstring>"},"rule":{"type":"object","properties":{"kind":{"type":"string","enum":["AlwaysTrigger"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.1.pendingChangeRequest.body.oneOf.1.rule.kind","typeLabel":"enum\u003cstring>"},"configuration":{"type":"object","properties":{},"additionalProperties":false,"uniqueKey":"\\items.items.[INDEX].oneOf.1.pendingChangeRequest.body.oneOf.1.rule.configuration","typeLabel":"object"}},"required":["kind"],"additionalProperties":false,"description":"This rule will always be triggered, meaning that if this rule is defined on a policy, the policy will always trigger the policy action, regardless of the activity details.","title":"AlwaysTrigger","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.1.pendingChangeRequest.body.oneOf.1.rule","typeLabel":"AlwaysTrigger · object"},"action":{"oneOf":[{"type":"object","title":"RequestApproval","description":"\nThis action means that activity will first require an Approval process to be completed before it can be executed (or be aborted if someone rejects it during the approval process).\n\nOne or several groups of approvers need to be specified. These groups define who is allowed to approve / reject an activity.\n\nThe activity will only be executed if all approver groups reach their \"quorum\" of approvals. Otherwise, if any one user within any approver group rejects, then the activity is aborted and the call is not executed.\n\nThe example below shows a `RequestApproval` action, configured with one approval group requiring 2 approvals amongst three specific users.\n\n```json\n{\n \"action\": {\n \"kind\": \"RequestApproval\",\n \"autoRejectTimeout\": 60, // minutes\n \"approvalGroups\": [\n {\n \"name\": \"Admins\",\n \"quorum\": 2, // only 2 approvers required in that group \n \"approvers\": {\n \"userId\": {\n \"in\": [\"us-...1\", \"us-...2\", \"us-...3\"],\n }\n }\n }\n ],\n\n }\n}\n```\n\n**Don't lock yourself up**\n\nBy default, users cannot approve an activity they initiated themselves, even if they are in an approval group. To allow this, you must set `initiatorCanApprove: true`.\n\n*Example 1:* For any wallet transfer, a policy is setup to require approval from **1 specific admin user** (eg. the CEO). `initiatorCanApprove` was not set to `true`. If the CEO himself initiates a transfer, no-one can approve his transfer and it's stuck.\n\n*Example 2:* Company has only 3 users. A policy is setup to require approval from **any 3 users** (`quorum: 3`) for any modification of a policy. `initiatorCanApprove` was not set to `true`. In this case, they are locked, and the policy cannot be modified: whoever requests a modification cannot approve, and the policy is therefore always missing one approver. To unlock, they would need to invite a new user and give him the rights to approve as well.\n ","required":["kind","approvalGroups"],"properties":{"kind":{"type":"string","enum":["RequestApproval"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.1.pendingChangeRequest.body.oneOf.1.action.oneOf.0.kind","typeLabel":"enum\u003cstring>"},"approvalGroups":{"type":"array","items":{"type":"object","properties":{"quorum":{"type":"integer","minimum":1,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.1.pendingChangeRequest.body.oneOf.1.action.oneOf.0.approvalGroups.items.[INDEX].quorum","typeLabel":"integer"},"approvers":{"type":"object","properties":{"userId":{"type":"object","properties":{"in":{"type":"array","items":{"type":"string","minLength":1,"uniqueKey":"\\items.items.[INDEX].oneOf.1.pendingChangeRequest.body.oneOf.1.action.oneOf.0.approvalGroups.items.[INDEX].approvers.userId.in.items.[INDEX]","typeLabel":"string"},"minItems":1,"maxItems":100,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.1.pendingChangeRequest.body.oneOf.1.action.oneOf.0.approvalGroups.items.[INDEX].approvers.userId.in","typeLabel":"string[]"}},"required":["in"],"additionalProperties":false,"description":"Users and service accounts who may approve.","uniqueKey":"\\items.items.[INDEX].oneOf.1.pendingChangeRequest.body.oneOf.1.action.oneOf.0.approvalGroups.items.[INDEX].approvers.userId","typeLabel":"object"},"userGroupId":{"type":"object","properties":{"in":{"type":"array","items":{"type":"string","minLength":1,"maxLength":64,"pattern":"^ug-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"User group id.","example":"ug-139tf-f58l8-lsbt6dp47lfsdvgh","uniqueKey":"\\items.items.[INDEX].oneOf.1.pendingChangeRequest.body.oneOf.1.action.oneOf.0.approvalGroups.items.[INDEX].approvers.userGroupId.in.items.[INDEX]","typeLabel":"string"},"minItems":1,"maxItems":100,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.1.pendingChangeRequest.body.oneOf.1.action.oneOf.0.approvalGroups.items.[INDEX].approvers.userGroupId.in","typeLabel":"string[]"}},"required":["in"],"additionalProperties":false,"description":"User groups whose members may approve.","uniqueKey":"\\items.items.[INDEX].oneOf.1.pendingChangeRequest.body.oneOf.1.action.oneOf.0.approvalGroups.items.[INDEX].approvers.userGroupId","typeLabel":"object"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.1.pendingChangeRequest.body.oneOf.1.action.oneOf.0.approvalGroups.items.[INDEX].approvers","typeLabel":"object"},"name":{"type":"string","uniqueKey":"\\items.items.[INDEX].oneOf.1.pendingChangeRequest.body.oneOf.1.action.oneOf.0.approvalGroups.items.[INDEX].name","typeLabel":"string"},"initiatorCanApprove":{"type":"boolean","description":"Whether the initiator of the activity can participate in the approval.","uniqueKey":"\\items.items.[INDEX].oneOf.1.pendingChangeRequest.body.oneOf.1.action.oneOf.0.approvalGroups.items.[INDEX].initiatorCanApprove","typeLabel":"boolean"},"serviceAccountsCanApprove":{"type":"boolean","description":"Whether service accounts can participate in the approval for this group.","uniqueKey":"\\items.items.[INDEX].oneOf.1.pendingChangeRequest.body.oneOf.1.action.oneOf.0.approvalGroups.items.[INDEX].serviceAccountsCanApprove","typeLabel":"boolean"}},"required":["quorum","approvers"],"additionalProperties":false,"uniqueKey":"\\items.items.[INDEX].oneOf.1.pendingChangeRequest.body.oneOf.1.action.oneOf.0.approvalGroups.items.[INDEX]","typeLabel":"object"},"minItems":1,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.1.pendingChangeRequest.body.oneOf.1.action.oneOf.0.approvalGroups","typeLabel":"object[]"},"autoRejectTimeout":{"oneOf":[{"type":"integer","minimum":1,"uniqueKey":"\\items.items.[INDEX].oneOf.1.pendingChangeRequest.body.oneOf.1.action.oneOf.0.autoRejectTimeout.oneOf.0","typeLabel":"integer"},{"type":"null","minimum":1,"uniqueKey":"\\items.items.[INDEX].oneOf.1.pendingChangeRequest.body.oneOf.1.action.oneOf.0.autoRejectTimeout.oneOf.1","typeLabel":"null"}],"uniqueKey":"\\items.items.[INDEX].oneOf.1.pendingChangeRequest.body.oneOf.1.action.oneOf.0.autoRejectTimeout","typeLabel":"integer | null"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.1.pendingChangeRequest.body.oneOf.1.action.oneOf.0","typeLabel":"RequestApproval · object"},{"type":"object","title":"Block","description":"This action means that the activity will be blocked if the policy is triggered.\n\n```json\n{\n \"action\": {\n \"kind\": \"Block\"\n }\n}\n```\n","required":["kind"],"properties":{"kind":{"type":"string","enum":["Block"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.1.pendingChangeRequest.body.oneOf.1.action.oneOf.1.kind","typeLabel":"enum\u003cstring>"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.1.pendingChangeRequest.body.oneOf.1.action.oneOf.1","typeLabel":"Block · object"}],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.1.pendingChangeRequest.body.oneOf.1.action","typeLabel":"RequestApproval · object | Block · object"},"dateCreated":{"type":"string","uniqueKey":"\\items.items.[INDEX].oneOf.1.pendingChangeRequest.body.oneOf.1.dateCreated","typeLabel":"string"},"dateUpdated":{"type":"string","uniqueKey":"\\items.items.[INDEX].oneOf.1.pendingChangeRequest.body.oneOf.1.dateUpdated","typeLabel":"string"},"filters":{"type":"object","properties":{"permissionId":{"type":"object","properties":{"in":{"type":"array","items":{"type":"string","minLength":1,"uniqueKey":"\\items.items.[INDEX].oneOf.1.pendingChangeRequest.body.oneOf.1.filters.permissionId.in.items.[INDEX]","typeLabel":"string"},"minItems":1,"maxItems":100,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.1.pendingChangeRequest.body.oneOf.1.filters.permissionId.in","typeLabel":"string[]"}},"required":["in"],"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.1.pendingChangeRequest.body.oneOf.1.filters.permissionId","typeLabel":"object"}},"required":["permissionId"],"additionalProperties":false,"uniqueKey":"\\items.items.[INDEX].oneOf.1.pendingChangeRequest.body.oneOf.1.filters","typeLabel":"object"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.1.pendingChangeRequest.body.oneOf.1","typeLabel":"Permissions:Assign · object"},{"type":"object","title":"Permissions:Modify","required":["id","name","status","activityKind","rule","action"],"properties":{"id":{"type":"string","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.1.pendingChangeRequest.body.oneOf.2.id","typeLabel":"string"},"name":{"type":"string","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.1.pendingChangeRequest.body.oneOf.2.name","typeLabel":"string"},"status":{"type":"string","enum":["Active","Archived"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.1.pendingChangeRequest.body.oneOf.2.status","typeLabel":"enum\u003cstring>"},"activityKind":{"type":"string","enum":["Permissions:Modify"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.1.pendingChangeRequest.body.oneOf.2.activityKind","typeLabel":"enum\u003cstring>"},"rule":{"type":"object","properties":{"kind":{"type":"string","enum":["AlwaysTrigger"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.1.pendingChangeRequest.body.oneOf.2.rule.kind","typeLabel":"enum\u003cstring>"},"configuration":{"type":"object","properties":{},"additionalProperties":false,"uniqueKey":"\\items.items.[INDEX].oneOf.1.pendingChangeRequest.body.oneOf.2.rule.configuration","typeLabel":"object"}},"required":["kind"],"additionalProperties":false,"description":"This rule will always be triggered, meaning that if this rule is defined on a policy, the policy will always trigger the policy action, regardless of the activity details.","title":"AlwaysTrigger","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.1.pendingChangeRequest.body.oneOf.2.rule","typeLabel":"AlwaysTrigger · object"},"action":{"oneOf":[{"type":"object","title":"RequestApproval","description":"\nThis action means that activity will first require an Approval process to be completed before it can be executed (or be aborted if someone rejects it during the approval process).\n\nOne or several groups of approvers need to be specified. These groups define who is allowed to approve / reject an activity.\n\nThe activity will only be executed if all approver groups reach their \"quorum\" of approvals. Otherwise, if any one user within any approver group rejects, then the activity is aborted and the call is not executed.\n\nThe example below shows a `RequestApproval` action, configured with one approval group requiring 2 approvals amongst three specific users.\n\n```json\n{\n \"action\": {\n \"kind\": \"RequestApproval\",\n \"autoRejectTimeout\": 60, // minutes\n \"approvalGroups\": [\n {\n \"name\": \"Admins\",\n \"quorum\": 2, // only 2 approvers required in that group \n \"approvers\": {\n \"userId\": {\n \"in\": [\"us-...1\", \"us-...2\", \"us-...3\"],\n }\n }\n }\n ],\n\n }\n}\n```\n\n**Don't lock yourself up**\n\nBy default, users cannot approve an activity they initiated themselves, even if they are in an approval group. To allow this, you must set `initiatorCanApprove: true`.\n\n*Example 1:* For any wallet transfer, a policy is setup to require approval from **1 specific admin user** (eg. the CEO). `initiatorCanApprove` was not set to `true`. If the CEO himself initiates a transfer, no-one can approve his transfer and it's stuck.\n\n*Example 2:* Company has only 3 users. A policy is setup to require approval from **any 3 users** (`quorum: 3`) for any modification of a policy. `initiatorCanApprove` was not set to `true`. In this case, they are locked, and the policy cannot be modified: whoever requests a modification cannot approve, and the policy is therefore always missing one approver. To unlock, they would need to invite a new user and give him the rights to approve as well.\n ","required":["kind","approvalGroups"],"properties":{"kind":{"type":"string","enum":["RequestApproval"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.1.pendingChangeRequest.body.oneOf.2.action.oneOf.0.kind","typeLabel":"enum\u003cstring>"},"approvalGroups":{"type":"array","items":{"type":"object","properties":{"quorum":{"type":"integer","minimum":1,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.1.pendingChangeRequest.body.oneOf.2.action.oneOf.0.approvalGroups.items.[INDEX].quorum","typeLabel":"integer"},"approvers":{"type":"object","properties":{"userId":{"type":"object","properties":{"in":{"type":"array","items":{"type":"string","minLength":1,"uniqueKey":"\\items.items.[INDEX].oneOf.1.pendingChangeRequest.body.oneOf.2.action.oneOf.0.approvalGroups.items.[INDEX].approvers.userId.in.items.[INDEX]","typeLabel":"string"},"minItems":1,"maxItems":100,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.1.pendingChangeRequest.body.oneOf.2.action.oneOf.0.approvalGroups.items.[INDEX].approvers.userId.in","typeLabel":"string[]"}},"required":["in"],"additionalProperties":false,"description":"Users and service accounts who may approve.","uniqueKey":"\\items.items.[INDEX].oneOf.1.pendingChangeRequest.body.oneOf.2.action.oneOf.0.approvalGroups.items.[INDEX].approvers.userId","typeLabel":"object"},"userGroupId":{"type":"object","properties":{"in":{"type":"array","items":{"type":"string","minLength":1,"maxLength":64,"pattern":"^ug-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"User group id.","example":"ug-139tf-f58l8-lsbt6dp47lfsdvgh","uniqueKey":"\\items.items.[INDEX].oneOf.1.pendingChangeRequest.body.oneOf.2.action.oneOf.0.approvalGroups.items.[INDEX].approvers.userGroupId.in.items.[INDEX]","typeLabel":"string"},"minItems":1,"maxItems":100,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.1.pendingChangeRequest.body.oneOf.2.action.oneOf.0.approvalGroups.items.[INDEX].approvers.userGroupId.in","typeLabel":"string[]"}},"required":["in"],"additionalProperties":false,"description":"User groups whose members may approve.","uniqueKey":"\\items.items.[INDEX].oneOf.1.pendingChangeRequest.body.oneOf.2.action.oneOf.0.approvalGroups.items.[INDEX].approvers.userGroupId","typeLabel":"object"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.1.pendingChangeRequest.body.oneOf.2.action.oneOf.0.approvalGroups.items.[INDEX].approvers","typeLabel":"object"},"name":{"type":"string","uniqueKey":"\\items.items.[INDEX].oneOf.1.pendingChangeRequest.body.oneOf.2.action.oneOf.0.approvalGroups.items.[INDEX].name","typeLabel":"string"},"initiatorCanApprove":{"type":"boolean","description":"Whether the initiator of the activity can participate in the approval.","uniqueKey":"\\items.items.[INDEX].oneOf.1.pendingChangeRequest.body.oneOf.2.action.oneOf.0.approvalGroups.items.[INDEX].initiatorCanApprove","typeLabel":"boolean"},"serviceAccountsCanApprove":{"type":"boolean","description":"Whether service accounts can participate in the approval for this group.","uniqueKey":"\\items.items.[INDEX].oneOf.1.pendingChangeRequest.body.oneOf.2.action.oneOf.0.approvalGroups.items.[INDEX].serviceAccountsCanApprove","typeLabel":"boolean"}},"required":["quorum","approvers"],"additionalProperties":false,"uniqueKey":"\\items.items.[INDEX].oneOf.1.pendingChangeRequest.body.oneOf.2.action.oneOf.0.approvalGroups.items.[INDEX]","typeLabel":"object"},"minItems":1,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.1.pendingChangeRequest.body.oneOf.2.action.oneOf.0.approvalGroups","typeLabel":"object[]"},"autoRejectTimeout":{"oneOf":[{"type":"integer","minimum":1,"uniqueKey":"\\items.items.[INDEX].oneOf.1.pendingChangeRequest.body.oneOf.2.action.oneOf.0.autoRejectTimeout.oneOf.0","typeLabel":"integer"},{"type":"null","minimum":1,"uniqueKey":"\\items.items.[INDEX].oneOf.1.pendingChangeRequest.body.oneOf.2.action.oneOf.0.autoRejectTimeout.oneOf.1","typeLabel":"null"}],"uniqueKey":"\\items.items.[INDEX].oneOf.1.pendingChangeRequest.body.oneOf.2.action.oneOf.0.autoRejectTimeout","typeLabel":"integer | null"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.1.pendingChangeRequest.body.oneOf.2.action.oneOf.0","typeLabel":"RequestApproval · object"},{"type":"object","title":"Block","description":"This action means that the activity will be blocked if the policy is triggered.\n\n```json\n{\n \"action\": {\n \"kind\": \"Block\"\n }\n}\n```\n","required":["kind"],"properties":{"kind":{"type":"string","enum":["Block"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.1.pendingChangeRequest.body.oneOf.2.action.oneOf.1.kind","typeLabel":"enum\u003cstring>"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.1.pendingChangeRequest.body.oneOf.2.action.oneOf.1","typeLabel":"Block · object"}],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.1.pendingChangeRequest.body.oneOf.2.action","typeLabel":"RequestApproval · object | Block · object"},"dateCreated":{"type":"string","uniqueKey":"\\items.items.[INDEX].oneOf.1.pendingChangeRequest.body.oneOf.2.dateCreated","typeLabel":"string"},"dateUpdated":{"type":"string","uniqueKey":"\\items.items.[INDEX].oneOf.1.pendingChangeRequest.body.oneOf.2.dateUpdated","typeLabel":"string"},"filters":{"type":"object","properties":{"permissionId":{"type":"object","properties":{"in":{"type":"array","items":{"type":"string","minLength":1,"uniqueKey":"\\items.items.[INDEX].oneOf.1.pendingChangeRequest.body.oneOf.2.filters.permissionId.in.items.[INDEX]","typeLabel":"string"},"minItems":1,"maxItems":100,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.1.pendingChangeRequest.body.oneOf.2.filters.permissionId.in","typeLabel":"string[]"}},"required":["in"],"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.1.pendingChangeRequest.body.oneOf.2.filters.permissionId","typeLabel":"object"}},"required":["permissionId"],"additionalProperties":false,"uniqueKey":"\\items.items.[INDEX].oneOf.1.pendingChangeRequest.body.oneOf.2.filters","typeLabel":"object"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.1.pendingChangeRequest.body.oneOf.2","typeLabel":"Permissions:Modify · object"},{"type":"object","title":"Policies:Modify","required":["id","name","status","activityKind","rule","action"],"properties":{"id":{"type":"string","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.1.pendingChangeRequest.body.oneOf.3.id","typeLabel":"string"},"name":{"type":"string","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.1.pendingChangeRequest.body.oneOf.3.name","typeLabel":"string"},"status":{"type":"string","enum":["Active","Archived"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.1.pendingChangeRequest.body.oneOf.3.status","typeLabel":"enum\u003cstring>"},"activityKind":{"type":"string","enum":["Policies:Modify"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.1.pendingChangeRequest.body.oneOf.3.activityKind","typeLabel":"enum\u003cstring>"},"rule":{"type":"object","properties":{"kind":{"type":"string","enum":["AlwaysTrigger"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.1.pendingChangeRequest.body.oneOf.3.rule.kind","typeLabel":"enum\u003cstring>"},"configuration":{"type":"object","properties":{},"additionalProperties":false,"uniqueKey":"\\items.items.[INDEX].oneOf.1.pendingChangeRequest.body.oneOf.3.rule.configuration","typeLabel":"object"}},"required":["kind"],"additionalProperties":false,"description":"This rule will always be triggered, meaning that if this rule is defined on a policy, the policy will always trigger the policy action, regardless of the activity details.","title":"AlwaysTrigger","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.1.pendingChangeRequest.body.oneOf.3.rule","typeLabel":"AlwaysTrigger · object"},"action":{"type":"object","properties":{"kind":{"type":"string","enum":["RequestApproval"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.1.pendingChangeRequest.body.oneOf.3.action.kind","typeLabel":"enum\u003cstring>"},"approvalGroups":{"type":"array","items":{"type":"object","properties":{"quorum":{"type":"integer","minimum":1,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.1.pendingChangeRequest.body.oneOf.3.action.approvalGroups.items.[INDEX].quorum","typeLabel":"integer"},"approvers":{"type":"object","properties":{"userId":{"type":"object","properties":{"in":{"type":"array","items":{"type":"string","minLength":1,"uniqueKey":"\\items.items.[INDEX].oneOf.1.pendingChangeRequest.body.oneOf.3.action.approvalGroups.items.[INDEX].approvers.userId.in.items.[INDEX]","typeLabel":"string"},"minItems":1,"maxItems":100,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.1.pendingChangeRequest.body.oneOf.3.action.approvalGroups.items.[INDEX].approvers.userId.in","typeLabel":"string[]"}},"required":["in"],"additionalProperties":false,"description":"Users and service accounts who may approve.","uniqueKey":"\\items.items.[INDEX].oneOf.1.pendingChangeRequest.body.oneOf.3.action.approvalGroups.items.[INDEX].approvers.userId","typeLabel":"object"},"userGroupId":{"type":"object","properties":{"in":{"type":"array","items":{"type":"string","minLength":1,"maxLength":64,"pattern":"^ug-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"User group id.","example":"ug-139tf-f58l8-lsbt6dp47lfsdvgh","uniqueKey":"\\items.items.[INDEX].oneOf.1.pendingChangeRequest.body.oneOf.3.action.approvalGroups.items.[INDEX].approvers.userGroupId.in.items.[INDEX]","typeLabel":"string"},"minItems":1,"maxItems":100,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.1.pendingChangeRequest.body.oneOf.3.action.approvalGroups.items.[INDEX].approvers.userGroupId.in","typeLabel":"string[]"}},"required":["in"],"additionalProperties":false,"description":"User groups whose members may approve.","uniqueKey":"\\items.items.[INDEX].oneOf.1.pendingChangeRequest.body.oneOf.3.action.approvalGroups.items.[INDEX].approvers.userGroupId","typeLabel":"object"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.1.pendingChangeRequest.body.oneOf.3.action.approvalGroups.items.[INDEX].approvers","typeLabel":"object"},"name":{"type":"string","uniqueKey":"\\items.items.[INDEX].oneOf.1.pendingChangeRequest.body.oneOf.3.action.approvalGroups.items.[INDEX].name","typeLabel":"string"},"initiatorCanApprove":{"type":"boolean","description":"Whether the initiator of the activity can participate in the approval.","uniqueKey":"\\items.items.[INDEX].oneOf.1.pendingChangeRequest.body.oneOf.3.action.approvalGroups.items.[INDEX].initiatorCanApprove","typeLabel":"boolean"},"serviceAccountsCanApprove":{"type":"boolean","description":"Whether service accounts can participate in the approval for this group.","uniqueKey":"\\items.items.[INDEX].oneOf.1.pendingChangeRequest.body.oneOf.3.action.approvalGroups.items.[INDEX].serviceAccountsCanApprove","typeLabel":"boolean"}},"required":["quorum","approvers"],"additionalProperties":false,"uniqueKey":"\\items.items.[INDEX].oneOf.1.pendingChangeRequest.body.oneOf.3.action.approvalGroups.items.[INDEX]","typeLabel":"object"},"minItems":1,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.1.pendingChangeRequest.body.oneOf.3.action.approvalGroups","typeLabel":"object[]"},"autoRejectTimeout":{"oneOf":[{"type":"integer","minimum":1,"uniqueKey":"\\items.items.[INDEX].oneOf.1.pendingChangeRequest.body.oneOf.3.action.autoRejectTimeout.oneOf.0","typeLabel":"integer"},{"type":"null","minimum":1,"uniqueKey":"\\items.items.[INDEX].oneOf.1.pendingChangeRequest.body.oneOf.3.action.autoRejectTimeout.oneOf.1","typeLabel":"null"}],"uniqueKey":"\\items.items.[INDEX].oneOf.1.pendingChangeRequest.body.oneOf.3.action.autoRejectTimeout","typeLabel":"integer | null"}},"required":["kind","approvalGroups"],"additionalProperties":false,"description":"\nThis action means that activity will first require an Approval process to be completed before it can be executed (or be aborted if someone rejects it during the approval process).\n\nOne or several groups of approvers need to be specified. These groups define who is allowed to approve / reject an activity.\n\nThe activity will only be executed if all approver groups reach their \"quorum\" of approvals. Otherwise, if any one user within any approver group rejects, then the activity is aborted and the call is not executed.\n\nThe example below shows a `RequestApproval` action, configured with one approval group requiring 2 approvals amongst three specific users.\n\n```json\n{\n \"action\": {\n \"kind\": \"RequestApproval\",\n \"autoRejectTimeout\": 60, // minutes\n \"approvalGroups\": [\n {\n \"name\": \"Admins\",\n \"quorum\": 2, // only 2 approvers required in that group \n \"approvers\": {\n \"userId\": {\n \"in\": [\"us-...1\", \"us-...2\", \"us-...3\"],\n }\n }\n }\n ],\n\n }\n}\n```\n\n**Don't lock yourself up**\n\nBy default, users cannot approve an activity they initiated themselves, even if they are in an approval group. To allow this, you must set `initiatorCanApprove: true`.\n\n*Example 1:* For any wallet transfer, a policy is setup to require approval from **1 specific admin user** (eg. the CEO). `initiatorCanApprove` was not set to `true`. If the CEO himself initiates a transfer, no-one can approve his transfer and it's stuck.\n\n*Example 2:* Company has only 3 users. A policy is setup to require approval from **any 3 users** (`quorum: 3`) for any modification of a policy. `initiatorCanApprove` was not set to `true`. In this case, they are locked, and the policy cannot be modified: whoever requests a modification cannot approve, and the policy is therefore always missing one approver. To unlock, they would need to invite a new user and give him the rights to approve as well.\n ","title":"RequestApproval","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.1.pendingChangeRequest.body.oneOf.3.action","typeLabel":"RequestApproval · object"},"dateCreated":{"type":"string","uniqueKey":"\\items.items.[INDEX].oneOf.1.pendingChangeRequest.body.oneOf.3.dateCreated","typeLabel":"string"},"dateUpdated":{"type":"string","uniqueKey":"\\items.items.[INDEX].oneOf.1.pendingChangeRequest.body.oneOf.3.dateUpdated","typeLabel":"string"},"filters":{"type":"object","properties":{"policyId":{"type":"object","properties":{"in":{"type":"array","items":{"type":"string","minLength":1,"uniqueKey":"\\items.items.[INDEX].oneOf.1.pendingChangeRequest.body.oneOf.3.filters.policyId.in.items.[INDEX]","typeLabel":"string"},"minItems":1,"maxItems":100,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.1.pendingChangeRequest.body.oneOf.3.filters.policyId.in","typeLabel":"string[]"}},"required":["in"],"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.1.pendingChangeRequest.body.oneOf.3.filters.policyId","typeLabel":"object"}},"required":["policyId"],"additionalProperties":false,"uniqueKey":"\\items.items.[INDEX].oneOf.1.pendingChangeRequest.body.oneOf.3.filters","typeLabel":"object"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.1.pendingChangeRequest.body.oneOf.3","typeLabel":"Policies:Modify · object"},{"type":"object","title":"Registry:ContractSchemas:Modify","required":["id","name","status","activityKind","rule","action"],"properties":{"id":{"type":"string","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.1.pendingChangeRequest.body.oneOf.4.id","typeLabel":"string"},"name":{"type":"string","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.1.pendingChangeRequest.body.oneOf.4.name","typeLabel":"string"},"status":{"type":"string","enum":["Active","Archived"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.1.pendingChangeRequest.body.oneOf.4.status","typeLabel":"enum\u003cstring>"},"activityKind":{"type":"string","enum":["Registry:ContractSchemas:Modify"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.1.pendingChangeRequest.body.oneOf.4.activityKind","typeLabel":"enum\u003cstring>"},"rule":{"type":"object","properties":{"kind":{"type":"string","enum":["AlwaysTrigger"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.1.pendingChangeRequest.body.oneOf.4.rule.kind","typeLabel":"enum\u003cstring>"},"configuration":{"type":"object","properties":{},"additionalProperties":false,"uniqueKey":"\\items.items.[INDEX].oneOf.1.pendingChangeRequest.body.oneOf.4.rule.configuration","typeLabel":"object"}},"required":["kind"],"additionalProperties":false,"description":"This rule will always be triggered, meaning that if this rule is defined on a policy, the policy will always trigger the policy action, regardless of the activity details.","title":"AlwaysTrigger","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.1.pendingChangeRequest.body.oneOf.4.rule","typeLabel":"AlwaysTrigger · object"},"action":{"oneOf":[{"type":"object","title":"RequestApproval","description":"\nThis action means that activity will first require an Approval process to be completed before it can be executed (or be aborted if someone rejects it during the approval process).\n\nOne or several groups of approvers need to be specified. These groups define who is allowed to approve / reject an activity.\n\nThe activity will only be executed if all approver groups reach their \"quorum\" of approvals. Otherwise, if any one user within any approver group rejects, then the activity is aborted and the call is not executed.\n\nThe example below shows a `RequestApproval` action, configured with one approval group requiring 2 approvals amongst three specific users.\n\n```json\n{\n \"action\": {\n \"kind\": \"RequestApproval\",\n \"autoRejectTimeout\": 60, // minutes\n \"approvalGroups\": [\n {\n \"name\": \"Admins\",\n \"quorum\": 2, // only 2 approvers required in that group \n \"approvers\": {\n \"userId\": {\n \"in\": [\"us-...1\", \"us-...2\", \"us-...3\"],\n }\n }\n }\n ],\n\n }\n}\n```\n\n**Don't lock yourself up**\n\nBy default, users cannot approve an activity they initiated themselves, even if they are in an approval group. To allow this, you must set `initiatorCanApprove: true`.\n\n*Example 1:* For any wallet transfer, a policy is setup to require approval from **1 specific admin user** (eg. the CEO). `initiatorCanApprove` was not set to `true`. If the CEO himself initiates a transfer, no-one can approve his transfer and it's stuck.\n\n*Example 2:* Company has only 3 users. A policy is setup to require approval from **any 3 users** (`quorum: 3`) for any modification of a policy. `initiatorCanApprove` was not set to `true`. In this case, they are locked, and the policy cannot be modified: whoever requests a modification cannot approve, and the policy is therefore always missing one approver. To unlock, they would need to invite a new user and give him the rights to approve as well.\n ","required":["kind","approvalGroups"],"properties":{"kind":{"type":"string","enum":["RequestApproval"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.1.pendingChangeRequest.body.oneOf.4.action.oneOf.0.kind","typeLabel":"enum\u003cstring>"},"approvalGroups":{"type":"array","items":{"type":"object","properties":{"quorum":{"type":"integer","minimum":1,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.1.pendingChangeRequest.body.oneOf.4.action.oneOf.0.approvalGroups.items.[INDEX].quorum","typeLabel":"integer"},"approvers":{"type":"object","properties":{"userId":{"type":"object","properties":{"in":{"type":"array","items":{"type":"string","minLength":1,"uniqueKey":"\\items.items.[INDEX].oneOf.1.pendingChangeRequest.body.oneOf.4.action.oneOf.0.approvalGroups.items.[INDEX].approvers.userId.in.items.[INDEX]","typeLabel":"string"},"minItems":1,"maxItems":100,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.1.pendingChangeRequest.body.oneOf.4.action.oneOf.0.approvalGroups.items.[INDEX].approvers.userId.in","typeLabel":"string[]"}},"required":["in"],"additionalProperties":false,"description":"Users and service accounts who may approve.","uniqueKey":"\\items.items.[INDEX].oneOf.1.pendingChangeRequest.body.oneOf.4.action.oneOf.0.approvalGroups.items.[INDEX].approvers.userId","typeLabel":"object"},"userGroupId":{"type":"object","properties":{"in":{"type":"array","items":{"type":"string","minLength":1,"maxLength":64,"pattern":"^ug-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"User group id.","example":"ug-139tf-f58l8-lsbt6dp47lfsdvgh","uniqueKey":"\\items.items.[INDEX].oneOf.1.pendingChangeRequest.body.oneOf.4.action.oneOf.0.approvalGroups.items.[INDEX].approvers.userGroupId.in.items.[INDEX]","typeLabel":"string"},"minItems":1,"maxItems":100,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.1.pendingChangeRequest.body.oneOf.4.action.oneOf.0.approvalGroups.items.[INDEX].approvers.userGroupId.in","typeLabel":"string[]"}},"required":["in"],"additionalProperties":false,"description":"User groups whose members may approve.","uniqueKey":"\\items.items.[INDEX].oneOf.1.pendingChangeRequest.body.oneOf.4.action.oneOf.0.approvalGroups.items.[INDEX].approvers.userGroupId","typeLabel":"object"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.1.pendingChangeRequest.body.oneOf.4.action.oneOf.0.approvalGroups.items.[INDEX].approvers","typeLabel":"object"},"name":{"type":"string","uniqueKey":"\\items.items.[INDEX].oneOf.1.pendingChangeRequest.body.oneOf.4.action.oneOf.0.approvalGroups.items.[INDEX].name","typeLabel":"string"},"initiatorCanApprove":{"type":"boolean","description":"Whether the initiator of the activity can participate in the approval.","uniqueKey":"\\items.items.[INDEX].oneOf.1.pendingChangeRequest.body.oneOf.4.action.oneOf.0.approvalGroups.items.[INDEX].initiatorCanApprove","typeLabel":"boolean"},"serviceAccountsCanApprove":{"type":"boolean","description":"Whether service accounts can participate in the approval for this group.","uniqueKey":"\\items.items.[INDEX].oneOf.1.pendingChangeRequest.body.oneOf.4.action.oneOf.0.approvalGroups.items.[INDEX].serviceAccountsCanApprove","typeLabel":"boolean"}},"required":["quorum","approvers"],"additionalProperties":false,"uniqueKey":"\\items.items.[INDEX].oneOf.1.pendingChangeRequest.body.oneOf.4.action.oneOf.0.approvalGroups.items.[INDEX]","typeLabel":"object"},"minItems":1,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.1.pendingChangeRequest.body.oneOf.4.action.oneOf.0.approvalGroups","typeLabel":"object[]"},"autoRejectTimeout":{"oneOf":[{"type":"integer","minimum":1,"uniqueKey":"\\items.items.[INDEX].oneOf.1.pendingChangeRequest.body.oneOf.4.action.oneOf.0.autoRejectTimeout.oneOf.0","typeLabel":"integer"},{"type":"null","minimum":1,"uniqueKey":"\\items.items.[INDEX].oneOf.1.pendingChangeRequest.body.oneOf.4.action.oneOf.0.autoRejectTimeout.oneOf.1","typeLabel":"null"}],"uniqueKey":"\\items.items.[INDEX].oneOf.1.pendingChangeRequest.body.oneOf.4.action.oneOf.0.autoRejectTimeout","typeLabel":"integer | null"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.1.pendingChangeRequest.body.oneOf.4.action.oneOf.0","typeLabel":"RequestApproval · object"},{"type":"object","title":"Block","description":"This action means that the activity will be blocked if the policy is triggered.\n\n```json\n{\n \"action\": {\n \"kind\": \"Block\"\n }\n}\n```\n","required":["kind"],"properties":{"kind":{"type":"string","enum":["Block"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.1.pendingChangeRequest.body.oneOf.4.action.oneOf.1.kind","typeLabel":"enum\u003cstring>"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.1.pendingChangeRequest.body.oneOf.4.action.oneOf.1","typeLabel":"Block · object"}],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.1.pendingChangeRequest.body.oneOf.4.action","typeLabel":"RequestApproval · object | Block · object"},"dateCreated":{"type":"string","uniqueKey":"\\items.items.[INDEX].oneOf.1.pendingChangeRequest.body.oneOf.4.dateCreated","typeLabel":"string"},"dateUpdated":{"type":"string","uniqueKey":"\\items.items.[INDEX].oneOf.1.pendingChangeRequest.body.oneOf.4.dateUpdated","typeLabel":"string"},"filters":{"type":"object","properties":{},"uniqueKey":"\\items.items.[INDEX].oneOf.1.pendingChangeRequest.body.oneOf.4.filters","typeLabel":"object"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.1.pendingChangeRequest.body.oneOf.4","typeLabel":"Registry:ContractSchemas:Modify · object"},{"type":"object","title":"Wallets:Sign","required":["id","name","status","activityKind","rule","action"],"properties":{"id":{"type":"string","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.1.pendingChangeRequest.body.oneOf.5.id","typeLabel":"string"},"name":{"type":"string","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.1.pendingChangeRequest.body.oneOf.5.name","typeLabel":"string"},"status":{"type":"string","enum":["Active","Archived"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.1.pendingChangeRequest.body.oneOf.5.status","typeLabel":"enum\u003cstring>"},"activityKind":{"type":"string","enum":["Wallets:Sign"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.1.pendingChangeRequest.body.oneOf.5.activityKind","typeLabel":"enum\u003cstring>"},"rule":{"oneOf":[{"type":"object","title":"AlwaysTrigger","description":"This rule will always be triggered, meaning that if this rule is defined on a policy, the policy will always trigger the policy action, regardless of the activity details.","required":["kind"],"properties":{"kind":{"type":"string","enum":["AlwaysTrigger"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.1.pendingChangeRequest.body.oneOf.5.rule.oneOf.0.kind","typeLabel":"enum\u003cstring>"},"configuration":{"type":"object","properties":{},"additionalProperties":false,"uniqueKey":"\\items.items.[INDEX].oneOf.1.pendingChangeRequest.body.oneOf.5.rule.oneOf.0.configuration","typeLabel":"object"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.1.pendingChangeRequest.body.oneOf.5.rule.oneOf.0","typeLabel":"AlwaysTrigger · object"},{"type":"object","title":"TransactionRecipientWhitelist","description":"This rule will trigger if the destination address *is NOT whitelisted*.","required":["kind","configuration"],"properties":{"kind":{"type":"string","enum":["TransactionRecipientWhitelist"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.1.pendingChangeRequest.body.oneOf.5.rule.oneOf.1.kind","typeLabel":"enum\u003cstring>"},"configuration":{"type":"object","properties":{"addresses":{"type":"array","items":{"type":"string","minLength":1,"uniqueKey":"\\items.items.[INDEX].oneOf.1.pendingChangeRequest.body.oneOf.5.rule.oneOf.1.configuration.addresses.items.[INDEX]","typeLabel":"string"},"description":"Whitelisted recipient addresses","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.1.pendingChangeRequest.body.oneOf.5.rule.oneOf.1.configuration.addresses","typeLabel":"string[]"}},"required":["addresses"],"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.1.pendingChangeRequest.body.oneOf.5.rule.oneOf.1.configuration","typeLabel":"object"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.1.pendingChangeRequest.body.oneOf.5.rule.oneOf.1","typeLabel":"TransactionRecipientWhitelist · object"},{"type":"object","title":"TransactionAmountLimit","description":"This rule will trigger if the wallet activity detected is transferring some value whose amount is equal to or greater than a given limit. The limit is inclusive: a transfer whose value exactly equals the limit also triggers.\n\nThe limit is expressed in a fiat `currency` and evaluated against the market value of the transfer. To set a threshold in the asset's own units instead, use `TransactionAmountLimitNominal`.\n\nNote: If the amount of the wallet activity cannot be evaluated for any reason (eg. market prices are not available, or eg. the amount cannot be inferred from a wallet signature request, etc.), by default the rule will trigger the policy (this is called \"failing closed\" and is generally considered a security best practice).","required":["kind","configuration"],"properties":{"kind":{"type":"string","enum":["TransactionAmountLimit"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.1.pendingChangeRequest.body.oneOf.5.rule.oneOf.2.kind","typeLabel":"enum\u003cstring>"},"configuration":{"type":"object","properties":{"limit":{"type":"number","description":"Amount limit in `currency`","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.1.pendingChangeRequest.body.oneOf.5.rule.oneOf.2.configuration.limit","typeLabel":"number"},"currency":{"type":"string","enum":["USD"],"description":"Fiat currency, currently only `USD`","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.1.pendingChangeRequest.body.oneOf.5.rule.oneOf.2.configuration.currency","typeLabel":"enum\u003cstring>"}},"required":["limit","currency"],"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.1.pendingChangeRequest.body.oneOf.5.rule.oneOf.2.configuration","typeLabel":"object"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.1.pendingChangeRequest.body.oneOf.5.rule.oneOf.2","typeLabel":"TransactionAmountLimit · object"},{"type":"object","title":"TransactionAmountLimitNominal","description":"This rule will trigger if the wallet activity detected is transferring more of a listed asset than that asset's limit.\n\nEach limit is expressed in the minimum denomination of its own asset and compared against the transferred amount directly, so the verdict needs no market data and does not move with a price. To set a threshold on the fiat value of a transfer instead, use `TransactionAmountLimit`.\n\nLimits are asset exact: an asset is identified by its network and its Dfns token identifier, so a wrapped or staked derivative is a different asset from the thing it tracks, and a transfer of an asset the rule does not list will not trigger it.\n\nNote: If the transferred amount or the asset cannot be determined for any reason, by default the rule will trigger the policy (this is called \"failing closed\" and is generally considered a security best practice).","required":["kind","configuration"],"properties":{"kind":{"type":"string","enum":["TransactionAmountLimitNominal"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.1.pendingChangeRequest.body.oneOf.5.rule.oneOf.3.kind","typeLabel":"enum\u003cstring>"},"configuration":{"type":"object","properties":{"assets":{"type":"array","items":{"type":"object","properties":{"network":{"type":"string","title":"Network","description":"The network the asset lives on.","enum":["Algorand","AlgorandTestnet","Aptos","AptosTestnet","ArbitrumOne","ArbitrumSepolia","Arc","ArcTestnet","Areum","AvalancheC","AvalancheCFuji","Base","BaseSepolia","Berachain","BerachainBepolia","Bitcoin","BitcoinSignet","BitcoinTestnet4","BitcoinCash","Bob","BobSepolia","Bsc","BscTestnet","Canton","CantonTestnet","Cardano","CardanoPreprod","Concordium","ConcordiumTestnet","Celo","CeloSepolia","Codex","CodexSepolia","CosmosHub4","CosmosIcsTestnet","Dogecoin","DogecoinTestnet","Ethereum","EthereumClassic","EthereumClassicMordor","EthereumSepolia","EthereumHoodi","FlareC","FlareCCoston2","FlowEvm","FlowEvmTestnet","Hedera","HederaTestnet","HyperEvm","HyperEvmTestnet","Ink","InkSepolia","InternetComputer","Ion","IonTestnet","Iota","IotaTestnet","Kusama","KusamaAssetHub","Litecoin","LitecoinTestnet","Monad","MonadTestnet","Movement","MovementTestnet","Near","NearTestnet","Optimism","OptimismSepolia","Origyn","Plasma","PlasmaTestnet","Plume","PlumeSepolia","Paseo","PaseoAssetHub","Polkadot","PolkadotAssetHub","Polygon","PolygonAmoy","Polymesh","PolymeshTestnet","Rayls","RaylsTestnet","Robinhood","RobinhoodSepolia","SeiAtlantic2","SeiPacific1","Solana","SolanaDevnet","Sonic","SonicTestnet","Starknet","StarknetSepolia","Stellar","StellarTestnet","Sui","SuiTestnet","Tezos","TezosShadownet","Tempo","TempoModerato","Tsc","TscTestnet1","Ton","TonTestnet","Tron","TronNile","Westend","WestendAssetHub","Xdc","XdcApothem","XLayer","XLayerSepolia","XrpLedger","XrpLedgerTestnet"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.1.pendingChangeRequest.body.oneOf.5.rule.oneOf.3.configuration.assets.items.[INDEX].network","typeLabel":"enum\u003cstring>"},"tid":{"type":"string","minLength":1,"maxLength":200,"pattern":"^[a-z0-9_]+:[^\\s](?:[ ]?[^\\s])*$","description":"The Dfns token identifier of the asset, for example `native:eth` or `erc20:0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48`. Must be canonical: token contract addresses on hex based networks are lower cased.","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.1.pendingChangeRequest.body.oneOf.5.rule.oneOf.3.configuration.assets.items.[INDEX].tid","typeLabel":"string"},"limit":{"type":"string","pattern":"^\\d+$","description":"Amount limit in the minimum denomination of the asset, as an integer string, matching how a transfer expresses its amount. For an 18 decimal token `\"5000000000000000000\"` is 5 whole tokens.","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.1.pendingChangeRequest.body.oneOf.5.rule.oneOf.3.configuration.assets.items.[INDEX].limit","typeLabel":"string"}},"required":["network","tid","limit"],"additionalProperties":false,"uniqueKey":"\\items.items.[INDEX].oneOf.1.pendingChangeRequest.body.oneOf.5.rule.oneOf.3.configuration.assets.items.[INDEX]","typeLabel":"object"},"minItems":1,"maxItems":100,"description":"The assets this rule applies to, each with its own limit. A transfer of an asset that is not listed does not trigger the rule. The limit applies to each matching transfer individually; nothing is accumulated across transfers.","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.1.pendingChangeRequest.body.oneOf.5.rule.oneOf.3.configuration.assets","typeLabel":"object[]"}},"required":["assets"],"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.1.pendingChangeRequest.body.oneOf.5.rule.oneOf.3.configuration","typeLabel":"object"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.1.pendingChangeRequest.body.oneOf.5.rule.oneOf.3","typeLabel":"TransactionAmountLimitNominal · object"},{"type":"object","title":"TransactionAmountVelocity","description":"This rule will trigger if the cumulative amount transferred from a given wallet within a given timeframe is greater than a specified limit. The aggregate amount evaluated is based only on the wallet that triggered the policy.","required":["kind","configuration"],"properties":{"kind":{"type":"string","enum":["TransactionAmountVelocity"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.1.pendingChangeRequest.body.oneOf.5.rule.oneOf.4.kind","typeLabel":"enum\u003cstring>"},"configuration":{"type":"object","properties":{"limit":{"type":"number","description":"Amount limit in `currency`","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.1.pendingChangeRequest.body.oneOf.5.rule.oneOf.4.configuration.limit","typeLabel":"number"},"currency":{"type":"string","enum":["USD"],"description":"Currency for the amount limit above","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.1.pendingChangeRequest.body.oneOf.5.rule.oneOf.4.configuration.currency","typeLabel":"enum\u003cstring>"},"timeframe":{"type":"integer","minimum":1,"maximum":43200,"description":"Time period in minutes. Minimum 1, Maximum 43,200.","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.1.pendingChangeRequest.body.oneOf.5.rule.oneOf.4.configuration.timeframe","typeLabel":"integer"}},"required":["limit","currency","timeframe"],"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.1.pendingChangeRequest.body.oneOf.5.rule.oneOf.4.configuration","typeLabel":"object"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.1.pendingChangeRequest.body.oneOf.5.rule.oneOf.4","typeLabel":"TransactionAmountVelocity · object"},{"type":"object","title":"TransactionCountVelocity","description":"This rule will trigger if the number of wallet activities for a given wallet within a given timeframe, is greater than a specified limit. The aggregate number of transactions evaluated is based only on the wallet that triggered the policy.","required":["kind","configuration"],"properties":{"kind":{"type":"string","enum":["TransactionCountVelocity"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.1.pendingChangeRequest.body.oneOf.5.rule.oneOf.5.kind","typeLabel":"enum\u003cstring>"},"configuration":{"type":"object","properties":{"limit":{"type":"number","description":"Count limit","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.1.pendingChangeRequest.body.oneOf.5.rule.oneOf.5.configuration.limit","typeLabel":"number"},"timeframe":{"type":"integer","minimum":1,"maximum":43200,"description":"Time period in minutes. Minimum 1, Maximum 43,200.","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.1.pendingChangeRequest.body.oneOf.5.rule.oneOf.5.configuration.timeframe","typeLabel":"integer"}},"required":["limit","timeframe"],"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.1.pendingChangeRequest.body.oneOf.5.rule.oneOf.5.configuration","typeLabel":"object"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.1.pendingChangeRequest.body.oneOf.5.rule.oneOf.5","typeLabel":"TransactionCountVelocity · object"},{"type":"object","title":"ChainalysisTransactionPrescreening","description":"\n\u003cInfo>\nThis rule can only be used once the Chainalysis integration is activated from the Dfns dashboard settings. (see more on [Chainalysis](https://docs.dfns.co/integrations/aml-kyt/chainalysis) integration page).\n\u003c/Info>\n\nIt's a rule based on [Chainalysis](https://docs.dfns.co/integrations/aml-kyt/chainalysis) KYT integration (Know-Your-Transaction). Upon transfer attempt, we will first register the transfer with Chainalysis (as a [\"withdrawal attempt\"](https://docs.chainalysis.com/api/kyt/#registration-register-a-withdrawal-attempt)), and fetch the screening results (alerts, exposures, addresses detected). Based on the results, and the configuration of this rule, the policy will be triggered.\n\nIt's called \"Pre\"-screening, because the scanned transaction is not on chain yet, it's still a transaction attempt (before the transaction actually make it on chain).\n\n```json\n{\n \"rule\": {\n \"kind\": \"ChainalysisTransactionPrescreening\",\n \"configuration\": {\n \"alerts\": {\n \"alertLevel\": \"LOW\",\n \"categoryIds\": []\n },\n \"exposures\": {\n \"direct\": {\n \"categoryIds\": []\n }\n },\n \"addresses\": {\n \"categoryIds\": []\n },\n \"fallbackBehaviours\": {\n \"skipUnscreenableTransaction\": false,\n \"skipUnsupportedNetwork\": false,\n \"skipUnsupportedAsset\": false,\n \"skipChainalysisFailure\": false\n }\n }\n }\n}\n```\n\n**Configuration**\n\n| Property | Type | Description |\n| --- | --- | --- |\n| `alerts`\u003cbr>\u003cbr>`.alertLevel`* | `string` | Minimum alert level above which the rule should trigger, if any [alert is returned in Chainalysis results](https://docs.chainalysis.com/api/kyt/#withdrawal-attempts-get-alerts). Can be `LOW`, `MEDIUM`, `HIGH`, or `SEVERE` |\n| `alerts`\u003cbr>\u003cbr>`.categoryIds`* | list of integers | List of Chainalysis category IDs (see [here](https://docs.chainalysis.com/api/kyt/#categories)). If you leave this list empty, alerts of any category will trigger the rule. Otherwise, if you only want the rule to trigger on specific categories, you can specify some in the list. |\n| `exposures`\u003cbr>\u003cbr>`.direct`\u003cbr>\u003cbr>`.categoryIds`* | list of integers | List of Chainalysis category IDs (see [here](https://docs.chainalysis.com/api/kyt/#categories)). If you leave this list empty, a [direct exposure](https://docs.chainalysis.com/api/kyt/#withdrawal-attempts-get-direct-exposure) of any category detected by chainalysis will trigger the rule. Otherwise, if you only want the rule to trigger on specific categories, you can specify some in the list. |\n| `addresses`\u003cbr>\u003cbr>`.categoryIds`* | list of integers | List of Chainalysis category IDs (see [here](https://docs.chainalysis.com/api/kyt/#categories)). If you leave this list empty, an [address](https://docs.chainalysis.com/api/kyt/#withdrawal-attempts-get-address-identifications) of any category identified by chainalysis will trigger the rule. Otherwise, if you only want the rule to trigger on specific categories, you can specify some in the list. |\n| `fallbackBehaviours`\u003cbr>\u003cbr>`.skipUnscreenableTransaction`* | boolean | Behaviour if the wallet activity is not screenable (eg. if it's a signature request of a hash). If true, a transaction which is \"unscreenable\" will just be skipped, and policy will not trigger |\n| `fallbackBehaviours.skipUnsupportedNetwork`* | boolean | Behaviour if the wallet activity is on a network not supported by chainalysis, or not yet supported in the dfns-chainalysis integration. If true, an unsupported network will just be skipped, and policy will not trigger |\n| `fallbackBehaviours.skipUnsupportedAsset`* | boolean | Behaviour if the wallet activity is with a asset not supported by chainalysis, or not yet supported in the dfns-chainalysis integration. If true, an unsupported asset will just be skipped, and policy will not trigger |\n| `fallbackBehaviours.skipChainalysisFailure`* | boolean | Behaviour if any issue with Chainalysis calls (timeout, results took too long, rate limiting errors, any error). If true, will skip if any error happens |\n\n","required":["kind","configuration"],"properties":{"kind":{"type":"string","enum":["ChainalysisTransactionPrescreening"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.1.pendingChangeRequest.body.oneOf.5.rule.oneOf.6.kind","typeLabel":"enum\u003cstring>"},"configuration":{"type":"object","properties":{"alerts":{"type":"object","properties":{"alertLevel":{"type":"string","enum":["LOW","MEDIUM","HIGH","SEVERE"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.1.pendingChangeRequest.body.oneOf.5.rule.oneOf.6.configuration.alerts.alertLevel","typeLabel":"enum\u003cstring>"},"categoryIds":{"type":"array","items":{"type":"integer","exclusiveMinimum":0,"uniqueKey":"\\items.items.[INDEX].oneOf.1.pendingChangeRequest.body.oneOf.5.rule.oneOf.6.configuration.alerts.categoryIds.items.[INDEX]","typeLabel":"integer"},"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.1.pendingChangeRequest.body.oneOf.5.rule.oneOf.6.configuration.alerts.categoryIds","typeLabel":"integer[]"}},"required":["alertLevel","categoryIds"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.1.pendingChangeRequest.body.oneOf.5.rule.oneOf.6.configuration.alerts","typeLabel":"object"},"exposures":{"type":"object","properties":{"direct":{"type":"object","properties":{"categoryIds":{"type":"array","items":{"type":"integer","exclusiveMinimum":0,"uniqueKey":"\\items.items.[INDEX].oneOf.1.pendingChangeRequest.body.oneOf.5.rule.oneOf.6.configuration.exposures.direct.categoryIds.items.[INDEX]","typeLabel":"integer"},"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.1.pendingChangeRequest.body.oneOf.5.rule.oneOf.6.configuration.exposures.direct.categoryIds","typeLabel":"integer[]"}},"required":["categoryIds"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.1.pendingChangeRequest.body.oneOf.5.rule.oneOf.6.configuration.exposures.direct","typeLabel":"object"}},"required":["direct"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.1.pendingChangeRequest.body.oneOf.5.rule.oneOf.6.configuration.exposures","typeLabel":"object"},"addresses":{"type":"object","properties":{"categoryIds":{"type":"array","items":{"type":"integer","exclusiveMinimum":0,"uniqueKey":"\\items.items.[INDEX].oneOf.1.pendingChangeRequest.body.oneOf.5.rule.oneOf.6.configuration.addresses.categoryIds.items.[INDEX]","typeLabel":"integer"},"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.1.pendingChangeRequest.body.oneOf.5.rule.oneOf.6.configuration.addresses.categoryIds","typeLabel":"integer[]"}},"required":["categoryIds"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.1.pendingChangeRequest.body.oneOf.5.rule.oneOf.6.configuration.addresses","typeLabel":"object"},"fallbackBehaviours":{"type":"object","properties":{"skipUnscreenableTransaction":{"type":"boolean","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.1.pendingChangeRequest.body.oneOf.5.rule.oneOf.6.configuration.fallbackBehaviours.skipUnscreenableTransaction","typeLabel":"boolean"},"skipUnsupportedNetwork":{"type":"boolean","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.1.pendingChangeRequest.body.oneOf.5.rule.oneOf.6.configuration.fallbackBehaviours.skipUnsupportedNetwork","typeLabel":"boolean"},"skipUnsupportedAsset":{"type":"boolean","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.1.pendingChangeRequest.body.oneOf.5.rule.oneOf.6.configuration.fallbackBehaviours.skipUnsupportedAsset","typeLabel":"boolean"},"skipChainalysisFailure":{"type":"boolean","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.1.pendingChangeRequest.body.oneOf.5.rule.oneOf.6.configuration.fallbackBehaviours.skipChainalysisFailure","typeLabel":"boolean"}},"required":["skipUnscreenableTransaction","skipUnsupportedNetwork","skipUnsupportedAsset","skipChainalysisFailure"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.1.pendingChangeRequest.body.oneOf.5.rule.oneOf.6.configuration.fallbackBehaviours","typeLabel":"object"},"userIdTemplate":{"type":"string","minLength":1,"maxLength":50,"pattern":"^([a-zA-Z0-9_:-]|{wallet\\.id}|{wallet\\.externalId})+$","default":"dfns","description":"**Deprecated** — set `userIdTemplate` on the Chainalysis integration setting instead; when set there, the integration-level template takes precedence over this one.\n\nValue sent to Chainalysis as the \"user ID\". Used by Chainalysis for grouping transaction screenings.\n \nThis template can include variables, included in brackets. The following variables are currently supported: `{wallet.id}` and `{wallet.externalId}`.\nAs an example, if you set `userIdTemplate: \"dfns:{wallet.id}_{wallet.externalId}\"`, when your wallet receives a transaction that gets screened by a Chainalysis policy, the \"user ID\" sent to Chainalysis will be `dfns:wa-xxx_yyy` (`wa-xxx` being the wallet ID, and `yyy` being the wallet external ID).","uniqueKey":"\\items.items.[INDEX].oneOf.1.pendingChangeRequest.body.oneOf.5.rule.oneOf.6.configuration.userIdTemplate","typeLabel":"string"}},"required":["alerts","exposures","addresses","fallbackBehaviours"],"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.1.pendingChangeRequest.body.oneOf.5.rule.oneOf.6.configuration","typeLabel":"object"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.1.pendingChangeRequest.body.oneOf.5.rule.oneOf.6","typeLabel":"ChainalysisTransactionPrescreening · object"},{"type":"object","title":"EllipticTransactionPrescreening","description":"\n\u003cInfo>\nThis rule can only be used once the Elliptic integration is activated from the Dfns dashboard settings.\n\u003c/Info>\n\nThis rule uses Elliptic KYT for pre-screening outgoing transfers. Upon transfer attempt, we run a synchronous Elliptic wallet analysis of the destination address, and check the returned risk score against the configured threshold, plus any configured risk rules / categories. If at or above the threshold, or if a configured rule / category matched, the policy is triggered.\n\nIt's called \"Pre\"-screening, because the scanned transaction is not on chain yet, it's still a transaction attempt.","required":["kind","configuration"],"properties":{"kind":{"type":"string","enum":["EllipticTransactionPrescreening"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.1.pendingChangeRequest.body.oneOf.5.rule.oneOf.7.kind","typeLabel":"enum\u003cstring>"},"configuration":{"type":"object","properties":{"riskScoreThreshold":{"type":"number","minimum":0,"maximum":10,"description":"Risk score threshold (0-10, decimals allowed). The policy triggers if the Elliptic risk score is at or above the threshold.","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.1.pendingChangeRequest.body.oneOf.5.rule.oneOf.7.configuration.riskScoreThreshold","typeLabel":"number"},"triggeredRules":{"type":"object","properties":{"ruleIds":{"type":"array","items":{"type":"string","format":"uuid","uniqueKey":"\\items.items.[INDEX].oneOf.1.pendingChangeRequest.body.oneOf.5.rule.oneOf.7.configuration.triggeredRules.ruleIds.items.[INDEX]","typeLabel":"string\u003cuuid>"},"description":"IDs of risk rules from your Elliptic risk model. If any of these rules matched the analysis, the policy triggers regardless of the risk score. Leave empty to trigger on the risk score threshold only.","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.1.pendingChangeRequest.body.oneOf.5.rule.oneOf.7.configuration.triggeredRules.ruleIds","typeLabel":"string\u003cuuid>[]"},"categories":{"type":"array","items":{"type":"string","minLength":1,"uniqueKey":"\\items.items.[INDEX].oneOf.1.pendingChangeRequest.body.oneOf.5.rule.oneOf.7.configuration.triggeredRules.categories.items.[INDEX]","typeLabel":"string"},"description":"Elliptic category names (eg. \"Dark Market\"), matched case-insensitively. If a matched risk rule involves any of these categories, the policy triggers regardless of the risk score. Leave empty to trigger on the risk score threshold only.","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.1.pendingChangeRequest.body.oneOf.5.rule.oneOf.7.configuration.triggeredRules.categories","typeLabel":"string[]"}},"required":["ruleIds","categories"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.1.pendingChangeRequest.body.oneOf.5.rule.oneOf.7.configuration.triggeredRules","typeLabel":"object"},"fallbackBehaviours":{"type":"object","properties":{"skipUnscreenableTransaction":{"type":"boolean","description":"skip all wallet requests that cannot be screened (eg. raw signatures)","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.1.pendingChangeRequest.body.oneOf.5.rule.oneOf.7.configuration.fallbackBehaviours.skipUnscreenableTransaction","typeLabel":"boolean"},"skipUnsupportedNetwork":{"type":"boolean","description":"skip requests on a network not supported yet in our Elliptic integration","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.1.pendingChangeRequest.body.oneOf.5.rule.oneOf.7.configuration.fallbackBehaviours.skipUnsupportedNetwork","typeLabel":"boolean"},"skipEllipticFailure":{"type":"boolean","description":"skip any failure of the Elliptic analysis (timeout, rate limiting, any error)","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.1.pendingChangeRequest.body.oneOf.5.rule.oneOf.7.configuration.fallbackBehaviours.skipEllipticFailure","typeLabel":"boolean"}},"required":["skipUnscreenableTransaction","skipUnsupportedNetwork","skipEllipticFailure"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.1.pendingChangeRequest.body.oneOf.5.rule.oneOf.7.configuration.fallbackBehaviours","typeLabel":"object"}},"required":["riskScoreThreshold","triggeredRules","fallbackBehaviours"],"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.1.pendingChangeRequest.body.oneOf.5.rule.oneOf.7.configuration","typeLabel":"object"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.1.pendingChangeRequest.body.oneOf.5.rule.oneOf.7","typeLabel":"EllipticTransactionPrescreening · object"},{"type":"object","title":"GlobalLedgerTransactionPrescreening","description":"This rule uses GlobalLedger KYT for pre-screening outgoing transfers by checking the destination address risk score.\n\nUpon transfer attempt, we will query GlobalLedger's address risk API, and check if the risk score (0-100) is at or above the configured threshold, or if any alerts show up. If so, the policy will be triggered.\n\nIt's called \"Pre\"-screening, because the scanned transaction is not on chain yet, it's still a transaction attempt.","required":["kind","configuration"],"properties":{"kind":{"type":"string","enum":["GlobalLedgerTransactionPrescreening"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.1.pendingChangeRequest.body.oneOf.5.rule.oneOf.8.kind","typeLabel":"enum\u003cstring>"},"configuration":{"type":"object","properties":{"riskScoreThreshold":{"type":"integer","minimum":0,"maximum":100,"description":"Risk score threshold (0-100). Policy triggers if address/transaction risk score >= threshold","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.1.pendingChangeRequest.body.oneOf.5.rule.oneOf.8.configuration.riskScoreThreshold","typeLabel":"integer"},"fallbackBehaviours":{"type":"object","properties":{"skipUnscreenableTransaction":{"type":"boolean","description":"skip all wallet requests that cannot be screened (eg. raw signatures)","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.1.pendingChangeRequest.body.oneOf.5.rule.oneOf.8.configuration.fallbackBehaviours.skipUnscreenableTransaction","typeLabel":"boolean"},"skipUnsupportedNetwork":{"type":"boolean","description":"skip transfer requests to a network not supported yet in our GlobalLedger integration","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.1.pendingChangeRequest.body.oneOf.5.rule.oneOf.8.configuration.fallbackBehaviours.skipUnsupportedNetwork","typeLabel":"boolean"},"skipUnsupportedAsset":{"type":"boolean","description":"skip transfer requests of an asset not supported by our GlobalLedger integration","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.1.pendingChangeRequest.body.oneOf.5.rule.oneOf.8.configuration.fallbackBehaviours.skipUnsupportedAsset","typeLabel":"boolean"},"skipGlobalLedgerFailure":{"type":"boolean","description":"skips any errors from GlobalLedger API request","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.1.pendingChangeRequest.body.oneOf.5.rule.oneOf.8.configuration.fallbackBehaviours.skipGlobalLedgerFailure","typeLabel":"boolean"}},"required":["skipUnscreenableTransaction","skipUnsupportedNetwork","skipUnsupportedAsset","skipGlobalLedgerFailure"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.1.pendingChangeRequest.body.oneOf.5.rule.oneOf.8.configuration.fallbackBehaviours","typeLabel":"object"}},"required":["riskScoreThreshold","fallbackBehaviours"],"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.1.pendingChangeRequest.body.oneOf.5.rule.oneOf.8.configuration","typeLabel":"object"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.1.pendingChangeRequest.body.oneOf.5.rule.oneOf.8","typeLabel":"GlobalLedgerTransactionPrescreening · object"},{"type":"object","title":"TravelRuleTransactionPrescreening","description":"This rule applies a Travel Rule check to outgoing transfers through the vendor selected in `configuration.vendor`: [Notabene](https://docs.dfns.co/integrations/travel-rule/notabene) or Sumsub. It can only be used once that vendor's integration is activated from the Dfns dashboard settings.\n\nIt ***ONLY*** applies to Dfns [Transfer Asset](https://docs.dfns.co/api-reference/wallets/transfer-asset) Api Calls. It is NOT supported for Transfers initiated via the dashboard. Upon transfer attempt with a [TravelRule](https://docs.dfns.co/api-reference/wallets/transfer-asset#body-travel-rule) payload, we call the vendor's APIs on your behalf to validate and submit the travel rule message, then wait for its outcome. With Notabene, Dfns waits for a response from the counterparty (for custodial transfers) or from Notabene (for non-custodial transfers). With Sumsub, Dfns submits a Travel Rule message and waits for Sumsub to report its outcome. In both cases the wait is bounded by `configuration.autoTriggerTimeoutSeconds`, after which the policy's configured action is applied.\n\nThe transfer's `travelRule` payload must be of the kind matching `configuration.vendor` — a mismatch triggers the policy and applies its configured action. A given wallet must be covered by at most one travel-rule policy (of any vendor): if several travel-rule policies apply to the same transfer carrying a `travelRule` payload, it is treated as a misconfiguration and blocked without contacting any vendor. Signatures and transfers without a payload are not affected, since the rule does not apply to them.\n\nIt's called \"Pre\"-screening, because the transaction is not on chain yet, it's still a transaction attempt (before the transaction actually make it on chain).","required":["kind","configuration"],"properties":{"kind":{"type":"string","enum":["TravelRuleTransactionPrescreening"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.1.pendingChangeRequest.body.oneOf.5.rule.oneOf.9.kind","typeLabel":"enum\u003cstring>"},"configuration":{"oneOf":[{"type":"object","title":"TravelRuleNotabeneConfiguration","required":["vendor"],"properties":{"vendor":{"type":"string","enum":["Notabene"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.1.pendingChangeRequest.body.oneOf.5.rule.oneOf.9.configuration.oneOf.0.vendor","typeLabel":"enum\u003cstring>"},"autoTriggerTimeoutSeconds":{"type":"integer","minimum":0,"maximum":2592000,"default":86400,"description":"Seconds to wait for the vendor's verdict before the policy action applies. Maximum 2592000 (30 days). Defaults to 86400 (24 hours).","uniqueKey":"\\items.items.[INDEX].oneOf.1.pendingChangeRequest.body.oneOf.5.rule.oneOf.9.configuration.oneOf.0.autoTriggerTimeoutSeconds","typeLabel":"integer"},"autoClearAfterDeliveredTimeoutSeconds":{"type":"integer","minimum":0,"maximum":2592000,"description":"Seconds after delivery before a still-pending evaluation clears. Maximum 2592000 (30 days).","uniqueKey":"\\items.items.[INDEX].oneOf.1.pendingChangeRequest.body.oneOf.5.rule.oneOf.9.configuration.oneOf.0.autoClearAfterDeliveredTimeoutSeconds","typeLabel":"integer"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.1.pendingChangeRequest.body.oneOf.5.rule.oneOf.9.configuration.oneOf.0","typeLabel":"TravelRuleNotabeneConfiguration · object"},{"type":"object","title":"TravelRuleSumsubConfiguration","required":["vendor"],"properties":{"vendor":{"type":"string","enum":["Sumsub"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.1.pendingChangeRequest.body.oneOf.5.rule.oneOf.9.configuration.oneOf.1.vendor","typeLabel":"enum\u003cstring>"},"autoTriggerTimeoutSeconds":{"type":"integer","minimum":0,"maximum":2592000,"default":86400,"description":"Seconds to wait for the vendor's verdict before the policy action applies. Maximum 2592000 (30 days). Defaults to 86400 (24 hours).","uniqueKey":"\\items.items.[INDEX].oneOf.1.pendingChangeRequest.body.oneOf.5.rule.oneOf.9.configuration.oneOf.1.autoTriggerTimeoutSeconds","typeLabel":"integer"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.1.pendingChangeRequest.body.oneOf.5.rule.oneOf.9.configuration.oneOf.1","typeLabel":"TravelRuleSumsubConfiguration · object"}],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.1.pendingChangeRequest.body.oneOf.5.rule.oneOf.9.configuration","typeLabel":"TravelRuleNotabeneConfiguration · object | TravelRuleSumsubConfiguration · object"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.1.pendingChangeRequest.body.oneOf.5.rule.oneOf.9","typeLabel":"TravelRuleTransactionPrescreening · object"}],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.1.pendingChangeRequest.body.oneOf.5.rule","typeLabel":"AlwaysTrigger · object | TransactionRecipientWhitelist · object | TransactionAmountLimit · object | TransactionAmountLimitNominal · object | TransactionAmountVelocity · object | TransactionCountVelocity · object | ChainalysisTransactionPrescreening · object | EllipticTransactionPrescreening · object | GlobalLedgerTransactionPrescreening · object | TravelRuleTransactionPrescreening · object"},"action":{"oneOf":[{"type":"object","title":"RequestApproval","description":"\nThis action means that activity will first require an Approval process to be completed before it can be executed (or be aborted if someone rejects it during the approval process).\n\nOne or several groups of approvers need to be specified. These groups define who is allowed to approve / reject an activity.\n\nThe activity will only be executed if all approver groups reach their \"quorum\" of approvals. Otherwise, if any one user within any approver group rejects, then the activity is aborted and the call is not executed.\n\nThe example below shows a `RequestApproval` action, configured with one approval group requiring 2 approvals amongst three specific users.\n\n```json\n{\n \"action\": {\n \"kind\": \"RequestApproval\",\n \"autoRejectTimeout\": 60, // minutes\n \"approvalGroups\": [\n {\n \"name\": \"Admins\",\n \"quorum\": 2, // only 2 approvers required in that group \n \"approvers\": {\n \"userId\": {\n \"in\": [\"us-...1\", \"us-...2\", \"us-...3\"],\n }\n }\n }\n ],\n\n }\n}\n```\n\n**Don't lock yourself up**\n\nBy default, users cannot approve an activity they initiated themselves, even if they are in an approval group. To allow this, you must set `initiatorCanApprove: true`.\n\n*Example 1:* For any wallet transfer, a policy is setup to require approval from **1 specific admin user** (eg. the CEO). `initiatorCanApprove` was not set to `true`. If the CEO himself initiates a transfer, no-one can approve his transfer and it's stuck.\n\n*Example 2:* Company has only 3 users. A policy is setup to require approval from **any 3 users** (`quorum: 3`) for any modification of a policy. `initiatorCanApprove` was not set to `true`. In this case, they are locked, and the policy cannot be modified: whoever requests a modification cannot approve, and the policy is therefore always missing one approver. To unlock, they would need to invite a new user and give him the rights to approve as well.\n ","required":["kind","approvalGroups"],"properties":{"kind":{"type":"string","enum":["RequestApproval"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.1.pendingChangeRequest.body.oneOf.5.action.oneOf.0.kind","typeLabel":"enum\u003cstring>"},"approvalGroups":{"type":"array","items":{"type":"object","properties":{"quorum":{"type":"integer","minimum":1,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.1.pendingChangeRequest.body.oneOf.5.action.oneOf.0.approvalGroups.items.[INDEX].quorum","typeLabel":"integer"},"approvers":{"type":"object","properties":{"userId":{"type":"object","properties":{"in":{"type":"array","items":{"type":"string","minLength":1,"uniqueKey":"\\items.items.[INDEX].oneOf.1.pendingChangeRequest.body.oneOf.5.action.oneOf.0.approvalGroups.items.[INDEX].approvers.userId.in.items.[INDEX]","typeLabel":"string"},"minItems":1,"maxItems":100,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.1.pendingChangeRequest.body.oneOf.5.action.oneOf.0.approvalGroups.items.[INDEX].approvers.userId.in","typeLabel":"string[]"}},"required":["in"],"additionalProperties":false,"description":"Users and service accounts who may approve.","uniqueKey":"\\items.items.[INDEX].oneOf.1.pendingChangeRequest.body.oneOf.5.action.oneOf.0.approvalGroups.items.[INDEX].approvers.userId","typeLabel":"object"},"userGroupId":{"type":"object","properties":{"in":{"type":"array","items":{"type":"string","minLength":1,"maxLength":64,"pattern":"^ug-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"User group id.","example":"ug-139tf-f58l8-lsbt6dp47lfsdvgh","uniqueKey":"\\items.items.[INDEX].oneOf.1.pendingChangeRequest.body.oneOf.5.action.oneOf.0.approvalGroups.items.[INDEX].approvers.userGroupId.in.items.[INDEX]","typeLabel":"string"},"minItems":1,"maxItems":100,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.1.pendingChangeRequest.body.oneOf.5.action.oneOf.0.approvalGroups.items.[INDEX].approvers.userGroupId.in","typeLabel":"string[]"}},"required":["in"],"additionalProperties":false,"description":"User groups whose members may approve.","uniqueKey":"\\items.items.[INDEX].oneOf.1.pendingChangeRequest.body.oneOf.5.action.oneOf.0.approvalGroups.items.[INDEX].approvers.userGroupId","typeLabel":"object"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.1.pendingChangeRequest.body.oneOf.5.action.oneOf.0.approvalGroups.items.[INDEX].approvers","typeLabel":"object"},"name":{"type":"string","uniqueKey":"\\items.items.[INDEX].oneOf.1.pendingChangeRequest.body.oneOf.5.action.oneOf.0.approvalGroups.items.[INDEX].name","typeLabel":"string"},"initiatorCanApprove":{"type":"boolean","description":"Whether the initiator of the activity can participate in the approval.","uniqueKey":"\\items.items.[INDEX].oneOf.1.pendingChangeRequest.body.oneOf.5.action.oneOf.0.approvalGroups.items.[INDEX].initiatorCanApprove","typeLabel":"boolean"},"serviceAccountsCanApprove":{"type":"boolean","description":"Whether service accounts can participate in the approval for this group.","uniqueKey":"\\items.items.[INDEX].oneOf.1.pendingChangeRequest.body.oneOf.5.action.oneOf.0.approvalGroups.items.[INDEX].serviceAccountsCanApprove","typeLabel":"boolean"}},"required":["quorum","approvers"],"additionalProperties":false,"uniqueKey":"\\items.items.[INDEX].oneOf.1.pendingChangeRequest.body.oneOf.5.action.oneOf.0.approvalGroups.items.[INDEX]","typeLabel":"object"},"minItems":1,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.1.pendingChangeRequest.body.oneOf.5.action.oneOf.0.approvalGroups","typeLabel":"object[]"},"autoRejectTimeout":{"oneOf":[{"type":"integer","minimum":1,"uniqueKey":"\\items.items.[INDEX].oneOf.1.pendingChangeRequest.body.oneOf.5.action.oneOf.0.autoRejectTimeout.oneOf.0","typeLabel":"integer"},{"type":"null","minimum":1,"uniqueKey":"\\items.items.[INDEX].oneOf.1.pendingChangeRequest.body.oneOf.5.action.oneOf.0.autoRejectTimeout.oneOf.1","typeLabel":"null"}],"uniqueKey":"\\items.items.[INDEX].oneOf.1.pendingChangeRequest.body.oneOf.5.action.oneOf.0.autoRejectTimeout","typeLabel":"integer | null"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.1.pendingChangeRequest.body.oneOf.5.action.oneOf.0","typeLabel":"RequestApproval · object"},{"type":"object","title":"Block","description":"This action means that the activity will be blocked if the policy is triggered.\n\n```json\n{\n \"action\": {\n \"kind\": \"Block\"\n }\n}\n```\n","required":["kind"],"properties":{"kind":{"type":"string","enum":["Block"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.1.pendingChangeRequest.body.oneOf.5.action.oneOf.1.kind","typeLabel":"enum\u003cstring>"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.1.pendingChangeRequest.body.oneOf.5.action.oneOf.1","typeLabel":"Block · object"},{"type":"object","title":"NoAction","description":"\n This action kind means that nothing will happen after policy rule evaluation. It's meant to be used with policy rules \"`ChainalysisTransactionPrescreening`\" or \"`ChainalysisTransactionScreening`\". This action is for when you just want the KYT analysis rule to be run, and then if triggered, those result returned in a `policy.triggered` [Webhook Event](https://docs.dfns.co/api-reference/webhook-events).\n\n```json\n{\n \"action\": {\n \"kind\": \"NoAction\"\n }\n}\n```\n ","required":["kind"],"properties":{"kind":{"type":"string","enum":["NoAction"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.1.pendingChangeRequest.body.oneOf.5.action.oneOf.2.kind","typeLabel":"enum\u003cstring>"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.1.pendingChangeRequest.body.oneOf.5.action.oneOf.2","typeLabel":"NoAction · object"}],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.1.pendingChangeRequest.body.oneOf.5.action","typeLabel":"RequestApproval · object | Block · object | NoAction · object"},"dateCreated":{"type":"string","uniqueKey":"\\items.items.[INDEX].oneOf.1.pendingChangeRequest.body.oneOf.5.dateCreated","typeLabel":"string"},"dateUpdated":{"type":"string","uniqueKey":"\\items.items.[INDEX].oneOf.1.pendingChangeRequest.body.oneOf.5.dateUpdated","typeLabel":"string"},"filters":{"type":"object","properties":{"walletId":{"type":"object","properties":{"in":{"type":"array","items":{"type":"string","minLength":1,"uniqueKey":"\\items.items.[INDEX].oneOf.1.pendingChangeRequest.body.oneOf.5.filters.walletId.in.items.[INDEX]","typeLabel":"string"},"minItems":1,"maxItems":100,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.1.pendingChangeRequest.body.oneOf.5.filters.walletId.in","typeLabel":"string[]"}},"required":["in"],"additionalProperties":false,"uniqueKey":"\\items.items.[INDEX].oneOf.1.pendingChangeRequest.body.oneOf.5.filters.walletId","typeLabel":"object"},"walletTags":{"type":"object","properties":{"hasAny":{"type":"array","items":{"type":"string","minLength":1,"uniqueKey":"\\items.items.[INDEX].oneOf.1.pendingChangeRequest.body.oneOf.5.filters.walletTags.hasAny.items.[INDEX]","typeLabel":"string"},"minItems":1,"maxItems":100,"uniqueKey":"\\items.items.[INDEX].oneOf.1.pendingChangeRequest.body.oneOf.5.filters.walletTags.hasAny","typeLabel":"string[]"},"hasAll":{"type":"array","items":{"type":"string","minLength":1,"uniqueKey":"\\items.items.[INDEX].oneOf.1.pendingChangeRequest.body.oneOf.5.filters.walletTags.hasAll.items.[INDEX]","typeLabel":"string"},"minItems":1,"maxItems":100,"uniqueKey":"\\items.items.[INDEX].oneOf.1.pendingChangeRequest.body.oneOf.5.filters.walletTags.hasAll","typeLabel":"string[]"}},"additionalProperties":false,"uniqueKey":"\\items.items.[INDEX].oneOf.1.pendingChangeRequest.body.oneOf.5.filters.walletTags","typeLabel":"object"},"keyId":{"type":"object","properties":{"in":{"type":"array","items":{"type":"string","minLength":1,"maxLength":64,"pattern":"^key-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"Key id.","example":"key-01snl-t56gb-j8tsok0vn802p80i","uniqueKey":"\\items.items.[INDEX].oneOf.1.pendingChangeRequest.body.oneOf.5.filters.keyId.in.items.[INDEX]","typeLabel":"string"},"minItems":1,"maxItems":100,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.1.pendingChangeRequest.body.oneOf.5.filters.keyId.in","typeLabel":"string[]"}},"required":["in"],"additionalProperties":false,"uniqueKey":"\\items.items.[INDEX].oneOf.1.pendingChangeRequest.body.oneOf.5.filters.keyId","typeLabel":"object"},"keyStoreId":{"type":"object","properties":{"in":{"type":"array","items":{"type":"string","minLength":1,"maxLength":64,"pattern":"^store-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"Key store id.","example":"store-425nf-ebf0a-qq22t6qra51tj8j0","uniqueKey":"\\items.items.[INDEX].oneOf.1.pendingChangeRequest.body.oneOf.5.filters.keyStoreId.in.items.[INDEX]","typeLabel":"string"},"minItems":1,"maxItems":100,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.1.pendingChangeRequest.body.oneOf.5.filters.keyStoreId.in","typeLabel":"string[]"}},"required":["in"],"additionalProperties":false,"uniqueKey":"\\items.items.[INDEX].oneOf.1.pendingChangeRequest.body.oneOf.5.filters.keyStoreId","typeLabel":"object"}},"additionalProperties":false,"uniqueKey":"\\items.items.[INDEX].oneOf.1.pendingChangeRequest.body.oneOf.5.filters","typeLabel":"object"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.1.pendingChangeRequest.body.oneOf.5","typeLabel":"Wallets:Sign · object"},{"type":"object","title":"Wallets:IncomingTransaction","required":["id","name","status","activityKind","rule","action"],"properties":{"id":{"type":"string","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.1.pendingChangeRequest.body.oneOf.6.id","typeLabel":"string"},"name":{"type":"string","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.1.pendingChangeRequest.body.oneOf.6.name","typeLabel":"string"},"status":{"type":"string","enum":["Active","Archived"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.1.pendingChangeRequest.body.oneOf.6.status","typeLabel":"enum\u003cstring>"},"activityKind":{"type":"string","enum":["Wallets:IncomingTransaction"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.1.pendingChangeRequest.body.oneOf.6.activityKind","typeLabel":"enum\u003cstring>"},"rule":{"type":"object","title":"ChainalysisTransactionScreening","description":"\n\u003cInfo>\nThis rule can only be used once the Chainalysis integration is activated from the Dfns dashboard settings. (see more on [Chainalysis](https://docs.dfns.co/integrations/aml-kyt/chainalysis) integration page).\n\u003c/Info>\n\nThis rule can be used on a policy of `activityKind` = `Wallets:IncomingTransaction`, and with the action kind `NoAction`. It's a rule based on Chainalysis KYT integration (Know-Your-Transaction). Upon an incoming transaction detectedby our indexers, we will [register the transfer with Chainalysis](https://docs.chainalysis.com/api/kyt/#registration-register-a-transfer), and fetch the results of the analysis (alerts \u0026 exposures detected). Based on the results, and the configuration of this rule, the policy will be triggered.\n\nThe shape of the rule is almost like the `ChainalysisTransactionPrescreening` rule, expect the the `address` property is not supported.\n\n```json\n{\n \"rule\": {\n \"kind\": \"ChainalysisTransactionPrescreening\",\n \"configuration\": {\n \"alerts\": {\n \"alertLevel\": \"LOW\",\n \"categoryIds\": []\n },\n \"exposures\": {\n \"direct\": {\n \"categoryIds\": []\n }\n },\n \"fallbackBehaviours\": {\n \"skipUnscreenableTransaction\": false,\n \"skipUnsupportedNetwork\": false,\n \"skipUnsupportedAsset\": false,\n \"skipChainalysisFailure\": false\n }\n }\n }\n}\n```\n\n**Configuration**\n\nPlease refer to the configuration for the `ChainalysisTransactionPrescreening` rule.\n","required":["kind","configuration"],"properties":{"kind":{"type":"string","enum":["ChainalysisTransactionScreening"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.1.pendingChangeRequest.body.oneOf.6.rule.kind","typeLabel":"enum\u003cstring>"},"configuration":{"type":"object","properties":{"alerts":{"type":"object","properties":{"alertLevel":{"type":"string","enum":["LOW","MEDIUM","HIGH","SEVERE"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.1.pendingChangeRequest.body.oneOf.6.rule.configuration.alerts.alertLevel","typeLabel":"enum\u003cstring>"},"categoryIds":{"type":"array","items":{"type":"integer","exclusiveMinimum":0,"uniqueKey":"\\items.items.[INDEX].oneOf.1.pendingChangeRequest.body.oneOf.6.rule.configuration.alerts.categoryIds.items.[INDEX]","typeLabel":"integer"},"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.1.pendingChangeRequest.body.oneOf.6.rule.configuration.alerts.categoryIds","typeLabel":"integer[]"}},"required":["alertLevel","categoryIds"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.1.pendingChangeRequest.body.oneOf.6.rule.configuration.alerts","typeLabel":"object"},"exposures":{"type":"object","properties":{"direct":{"type":"object","properties":{"categoryIds":{"type":"array","items":{"type":"integer","exclusiveMinimum":0,"uniqueKey":"\\items.items.[INDEX].oneOf.1.pendingChangeRequest.body.oneOf.6.rule.configuration.exposures.direct.categoryIds.items.[INDEX]","typeLabel":"integer"},"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.1.pendingChangeRequest.body.oneOf.6.rule.configuration.exposures.direct.categoryIds","typeLabel":"integer[]"}},"required":["categoryIds"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.1.pendingChangeRequest.body.oneOf.6.rule.configuration.exposures.direct","typeLabel":"object"}},"required":["direct"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.1.pendingChangeRequest.body.oneOf.6.rule.configuration.exposures","typeLabel":"object"},"fallbackBehaviours":{"type":"object","properties":{"skipUnscreenableTransaction":{"type":"boolean","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.1.pendingChangeRequest.body.oneOf.6.rule.configuration.fallbackBehaviours.skipUnscreenableTransaction","typeLabel":"boolean"},"skipUnsupportedNetwork":{"type":"boolean","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.1.pendingChangeRequest.body.oneOf.6.rule.configuration.fallbackBehaviours.skipUnsupportedNetwork","typeLabel":"boolean"},"skipUnsupportedAsset":{"type":"boolean","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.1.pendingChangeRequest.body.oneOf.6.rule.configuration.fallbackBehaviours.skipUnsupportedAsset","typeLabel":"boolean"},"skipChainalysisFailure":{"type":"boolean","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.1.pendingChangeRequest.body.oneOf.6.rule.configuration.fallbackBehaviours.skipChainalysisFailure","typeLabel":"boolean"}},"required":["skipUnscreenableTransaction","skipUnsupportedNetwork","skipUnsupportedAsset","skipChainalysisFailure"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.1.pendingChangeRequest.body.oneOf.6.rule.configuration.fallbackBehaviours","typeLabel":"object"},"userIdTemplate":{"type":"string","minLength":1,"maxLength":50,"pattern":"^([a-zA-Z0-9_:-]|{wallet\\.id}|{wallet\\.externalId})+$","default":"dfns","description":"**Deprecated** — set `userIdTemplate` on the Chainalysis integration setting instead; when set there, the integration-level template takes precedence over this one.\n\nValue sent to Chainalysis as the \"user ID\". Used by Chainalysis for grouping transaction screenings.\n \nThis template can include variables, included in brackets. The following variables are currently supported: `{wallet.id}` and `{wallet.externalId}`.\nAs an example, if you set `userIdTemplate: \"dfns:{wallet.id}_{wallet.externalId}\"`, when your wallet receives a transaction that gets screened by a Chainalysis policy, the \"user ID\" sent to Chainalysis will be `dfns:wa-xxx_yyy` (`wa-xxx` being the wallet ID, and `yyy` being the wallet external ID).","uniqueKey":"\\items.items.[INDEX].oneOf.1.pendingChangeRequest.body.oneOf.6.rule.configuration.userIdTemplate","typeLabel":"string"}},"required":["alerts","exposures","fallbackBehaviours"],"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.1.pendingChangeRequest.body.oneOf.6.rule.configuration","typeLabel":"object"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.1.pendingChangeRequest.body.oneOf.6.rule","typeLabel":"ChainalysisTransactionScreening · object"},"action":{"type":"object","title":"NoAction","description":"\n This action kind means that nothing will happen after policy rule evaluation. It's meant to be used with policy rules \"`ChainalysisTransactionPrescreening`\" or \"`ChainalysisTransactionScreening`\". This action is for when you just want the KYT analysis rule to be run, and then if triggered, those result returned in a `policy.triggered` [Webhook Event](https://docs.dfns.co/api-reference/webhook-events).\n\n```json\n{\n \"action\": {\n \"kind\": \"NoAction\"\n }\n}\n```\n ","required":["kind"],"properties":{"kind":{"type":"string","enum":["NoAction"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.1.pendingChangeRequest.body.oneOf.6.action.kind","typeLabel":"enum\u003cstring>"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.1.pendingChangeRequest.body.oneOf.6.action","typeLabel":"NoAction · object"},"dateCreated":{"type":"string","uniqueKey":"\\items.items.[INDEX].oneOf.1.pendingChangeRequest.body.oneOf.6.dateCreated","typeLabel":"string"},"dateUpdated":{"type":"string","uniqueKey":"\\items.items.[INDEX].oneOf.1.pendingChangeRequest.body.oneOf.6.dateUpdated","typeLabel":"string"},"filters":{"type":"object","properties":{"walletId":{"type":"object","properties":{"in":{"type":"array","items":{"type":"string","minLength":1,"uniqueKey":"\\items.items.[INDEX].oneOf.1.pendingChangeRequest.body.oneOf.6.filters.walletId.in.items.[INDEX]","typeLabel":"string"},"minItems":1,"maxItems":100,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.1.pendingChangeRequest.body.oneOf.6.filters.walletId.in","typeLabel":"string[]"}},"required":["in"],"additionalProperties":false,"uniqueKey":"\\items.items.[INDEX].oneOf.1.pendingChangeRequest.body.oneOf.6.filters.walletId","typeLabel":"object"},"walletTags":{"type":"object","properties":{"hasAny":{"type":"array","items":{"type":"string","minLength":1,"uniqueKey":"\\items.items.[INDEX].oneOf.1.pendingChangeRequest.body.oneOf.6.filters.walletTags.hasAny.items.[INDEX]","typeLabel":"string"},"minItems":1,"maxItems":100,"uniqueKey":"\\items.items.[INDEX].oneOf.1.pendingChangeRequest.body.oneOf.6.filters.walletTags.hasAny","typeLabel":"string[]"},"hasAll":{"type":"array","items":{"type":"string","minLength":1,"uniqueKey":"\\items.items.[INDEX].oneOf.1.pendingChangeRequest.body.oneOf.6.filters.walletTags.hasAll.items.[INDEX]","typeLabel":"string"},"minItems":1,"maxItems":100,"uniqueKey":"\\items.items.[INDEX].oneOf.1.pendingChangeRequest.body.oneOf.6.filters.walletTags.hasAll","typeLabel":"string[]"}},"additionalProperties":false,"uniqueKey":"\\items.items.[INDEX].oneOf.1.pendingChangeRequest.body.oneOf.6.filters.walletTags","typeLabel":"object"},"keyId":{"type":"object","properties":{"in":{"type":"array","items":{"type":"string","minLength":1,"maxLength":64,"pattern":"^key-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"Key id.","example":"key-01snl-t56gb-j8tsok0vn802p80i","uniqueKey":"\\items.items.[INDEX].oneOf.1.pendingChangeRequest.body.oneOf.6.filters.keyId.in.items.[INDEX]","typeLabel":"string"},"minItems":1,"maxItems":100,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.1.pendingChangeRequest.body.oneOf.6.filters.keyId.in","typeLabel":"string[]"}},"required":["in"],"additionalProperties":false,"uniqueKey":"\\items.items.[INDEX].oneOf.1.pendingChangeRequest.body.oneOf.6.filters.keyId","typeLabel":"object"},"keyStoreId":{"type":"object","properties":{"in":{"type":"array","items":{"type":"string","minLength":1,"maxLength":64,"pattern":"^store-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"Key store id.","example":"store-425nf-ebf0a-qq22t6qra51tj8j0","uniqueKey":"\\items.items.[INDEX].oneOf.1.pendingChangeRequest.body.oneOf.6.filters.keyStoreId.in.items.[INDEX]","typeLabel":"string"},"minItems":1,"maxItems":100,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.1.pendingChangeRequest.body.oneOf.6.filters.keyStoreId.in","typeLabel":"string[]"}},"required":["in"],"additionalProperties":false,"uniqueKey":"\\items.items.[INDEX].oneOf.1.pendingChangeRequest.body.oneOf.6.filters.keyStoreId","typeLabel":"object"}},"additionalProperties":false,"uniqueKey":"\\items.items.[INDEX].oneOf.1.pendingChangeRequest.body.oneOf.6.filters","typeLabel":"object"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.1.pendingChangeRequest.body.oneOf.6","typeLabel":"Wallets:IncomingTransaction · object"},{"type":"object","title":"Vaults:ReleaseQuarantine","required":["id","name","status","activityKind","rule","action"],"properties":{"id":{"type":"string","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.1.pendingChangeRequest.body.oneOf.7.id","typeLabel":"string"},"name":{"type":"string","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.1.pendingChangeRequest.body.oneOf.7.name","typeLabel":"string"},"status":{"type":"string","enum":["Active","Archived"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.1.pendingChangeRequest.body.oneOf.7.status","typeLabel":"enum\u003cstring>"},"activityKind":{"type":"string","enum":["Vaults:ReleaseQuarantine"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.1.pendingChangeRequest.body.oneOf.7.activityKind","typeLabel":"enum\u003cstring>"},"rule":{"oneOf":[{"type":"object","title":"AlwaysTrigger","description":"This rule will always be triggered, meaning that if this rule is defined on a policy, the policy will always trigger the policy action, regardless of the activity details.","required":["kind"],"properties":{"kind":{"type":"string","enum":["AlwaysTrigger"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.1.pendingChangeRequest.body.oneOf.7.rule.oneOf.0.kind","typeLabel":"enum\u003cstring>"},"configuration":{"type":"object","properties":{},"additionalProperties":false,"uniqueKey":"\\items.items.[INDEX].oneOf.1.pendingChangeRequest.body.oneOf.7.rule.oneOf.0.configuration","typeLabel":"object"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.1.pendingChangeRequest.body.oneOf.7.rule.oneOf.0","typeLabel":"AlwaysTrigger · object"},{"type":"object","title":"ChainalysisQuarantineScreening","description":"\n\u003cInfo>\nThis rule can only be used once the Chainalysis integration is activated from the Dfns dashboard settings. (see more on [Chainalysis](https://docs.dfns.co/integrations/aml-kyt/chainalysis) integration page).\n\u003c/Info>\n\nThis rule can be used on a policy of `activityKind` = `Vaults:ReleaseQuarantine`. When a quarantined vault deposit was screened by Chainalysis KYT, the screening result (alerts \u0026 direct exposure) is stored with the quarantine. When a release of the quarantined funds is requested, this rule evaluates that **stored** result — no new Chainalysis call is made. Based on the stored result and the configuration of this rule, the policy will be triggered.\n\nIf the quarantine has **no stored KYT result** (the result was not received yet, the network/asset is not supported by the Chainalysis integration, or screening failed), the rule **always triggers** (fail closed): the release then follows the policy action (approval or block).\n\n```json\n{\n \"rule\": {\n \"kind\": \"ChainalysisQuarantineScreening\",\n \"configuration\": {\n \"alerts\": {\n \"alertLevel\": \"LOW\",\n \"categoryIds\": []\n },\n \"exposures\": {\n \"direct\": {\n \"categoryIds\": []\n }\n }\n }\n }\n}\n```\n\n**Configuration**\n\n| Property | Type | Description |\n| --- | --- | --- |\n| `alerts`\u003cbr>\u003cbr>`.alertLevel`* | `string` | Minimum alert level above which the rule should trigger, if any alert was returned in the stored Chainalysis results. Can be `LOW`, `MEDIUM`, `HIGH`, or `SEVERE` |\n| `alerts`\u003cbr>\u003cbr>`.categoryIds`* | list of integers | List of Chainalysis category IDs (see [here](https://docs.chainalysis.com/api/kyt/#categories)). If you leave this list empty, alerts of any category will trigger the rule. Otherwise, if you only want the rule to trigger on specific categories, you can specify some in the list. |\n| `exposures`\u003cbr>\u003cbr>`.direct`\u003cbr>\u003cbr>`.categoryIds`* | list of integers | List of Chainalysis category IDs (see [here](https://docs.chainalysis.com/api/kyt/#categories)). If you leave this list empty, a direct exposure of any category in the stored results will trigger the rule. Otherwise, if you only want the rule to trigger on specific categories, you can specify some in the list. |\n","required":["kind","configuration"],"properties":{"kind":{"type":"string","enum":["ChainalysisQuarantineScreening"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.1.pendingChangeRequest.body.oneOf.7.rule.oneOf.1.kind","typeLabel":"enum\u003cstring>"},"configuration":{"type":"object","properties":{"alerts":{"type":"object","properties":{"alertLevel":{"type":"string","enum":["LOW","MEDIUM","HIGH","SEVERE"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.1.pendingChangeRequest.body.oneOf.7.rule.oneOf.1.configuration.alerts.alertLevel","typeLabel":"enum\u003cstring>"},"categoryIds":{"type":"array","items":{"type":"integer","exclusiveMinimum":0,"uniqueKey":"\\items.items.[INDEX].oneOf.1.pendingChangeRequest.body.oneOf.7.rule.oneOf.1.configuration.alerts.categoryIds.items.[INDEX]","typeLabel":"integer"},"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.1.pendingChangeRequest.body.oneOf.7.rule.oneOf.1.configuration.alerts.categoryIds","typeLabel":"integer[]"}},"required":["alertLevel","categoryIds"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.1.pendingChangeRequest.body.oneOf.7.rule.oneOf.1.configuration.alerts","typeLabel":"object"},"exposures":{"type":"object","properties":{"direct":{"type":"object","properties":{"categoryIds":{"type":"array","items":{"type":"integer","exclusiveMinimum":0,"uniqueKey":"\\items.items.[INDEX].oneOf.1.pendingChangeRequest.body.oneOf.7.rule.oneOf.1.configuration.exposures.direct.categoryIds.items.[INDEX]","typeLabel":"integer"},"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.1.pendingChangeRequest.body.oneOf.7.rule.oneOf.1.configuration.exposures.direct.categoryIds","typeLabel":"integer[]"}},"required":["categoryIds"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.1.pendingChangeRequest.body.oneOf.7.rule.oneOf.1.configuration.exposures.direct","typeLabel":"object"}},"required":["direct"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.1.pendingChangeRequest.body.oneOf.7.rule.oneOf.1.configuration.exposures","typeLabel":"object"}},"required":["alerts","exposures"],"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.1.pendingChangeRequest.body.oneOf.7.rule.oneOf.1.configuration","typeLabel":"object"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.1.pendingChangeRequest.body.oneOf.7.rule.oneOf.1","typeLabel":"ChainalysisQuarantineScreening · object"}],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.1.pendingChangeRequest.body.oneOf.7.rule","typeLabel":"AlwaysTrigger · object | ChainalysisQuarantineScreening · object"},"action":{"oneOf":[{"type":"object","title":"RequestApproval","description":"\nThis action means that activity will first require an Approval process to be completed before it can be executed (or be aborted if someone rejects it during the approval process).\n\nOne or several groups of approvers need to be specified. These groups define who is allowed to approve / reject an activity.\n\nThe activity will only be executed if all approver groups reach their \"quorum\" of approvals. Otherwise, if any one user within any approver group rejects, then the activity is aborted and the call is not executed.\n\nThe example below shows a `RequestApproval` action, configured with one approval group requiring 2 approvals amongst three specific users.\n\n```json\n{\n \"action\": {\n \"kind\": \"RequestApproval\",\n \"autoRejectTimeout\": 60, // minutes\n \"approvalGroups\": [\n {\n \"name\": \"Admins\",\n \"quorum\": 2, // only 2 approvers required in that group \n \"approvers\": {\n \"userId\": {\n \"in\": [\"us-...1\", \"us-...2\", \"us-...3\"],\n }\n }\n }\n ],\n\n }\n}\n```\n\n**Don't lock yourself up**\n\nBy default, users cannot approve an activity they initiated themselves, even if they are in an approval group. To allow this, you must set `initiatorCanApprove: true`.\n\n*Example 1:* For any wallet transfer, a policy is setup to require approval from **1 specific admin user** (eg. the CEO). `initiatorCanApprove` was not set to `true`. If the CEO himself initiates a transfer, no-one can approve his transfer and it's stuck.\n\n*Example 2:* Company has only 3 users. A policy is setup to require approval from **any 3 users** (`quorum: 3`) for any modification of a policy. `initiatorCanApprove` was not set to `true`. In this case, they are locked, and the policy cannot be modified: whoever requests a modification cannot approve, and the policy is therefore always missing one approver. To unlock, they would need to invite a new user and give him the rights to approve as well.\n ","required":["kind","approvalGroups"],"properties":{"kind":{"type":"string","enum":["RequestApproval"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.1.pendingChangeRequest.body.oneOf.7.action.oneOf.0.kind","typeLabel":"enum\u003cstring>"},"approvalGroups":{"type":"array","items":{"type":"object","properties":{"quorum":{"type":"integer","minimum":1,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.1.pendingChangeRequest.body.oneOf.7.action.oneOf.0.approvalGroups.items.[INDEX].quorum","typeLabel":"integer"},"approvers":{"type":"object","properties":{"userId":{"type":"object","properties":{"in":{"type":"array","items":{"type":"string","minLength":1,"uniqueKey":"\\items.items.[INDEX].oneOf.1.pendingChangeRequest.body.oneOf.7.action.oneOf.0.approvalGroups.items.[INDEX].approvers.userId.in.items.[INDEX]","typeLabel":"string"},"minItems":1,"maxItems":100,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.1.pendingChangeRequest.body.oneOf.7.action.oneOf.0.approvalGroups.items.[INDEX].approvers.userId.in","typeLabel":"string[]"}},"required":["in"],"additionalProperties":false,"description":"Users and service accounts who may approve.","uniqueKey":"\\items.items.[INDEX].oneOf.1.pendingChangeRequest.body.oneOf.7.action.oneOf.0.approvalGroups.items.[INDEX].approvers.userId","typeLabel":"object"},"userGroupId":{"type":"object","properties":{"in":{"type":"array","items":{"type":"string","minLength":1,"maxLength":64,"pattern":"^ug-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"User group id.","example":"ug-139tf-f58l8-lsbt6dp47lfsdvgh","uniqueKey":"\\items.items.[INDEX].oneOf.1.pendingChangeRequest.body.oneOf.7.action.oneOf.0.approvalGroups.items.[INDEX].approvers.userGroupId.in.items.[INDEX]","typeLabel":"string"},"minItems":1,"maxItems":100,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.1.pendingChangeRequest.body.oneOf.7.action.oneOf.0.approvalGroups.items.[INDEX].approvers.userGroupId.in","typeLabel":"string[]"}},"required":["in"],"additionalProperties":false,"description":"User groups whose members may approve.","uniqueKey":"\\items.items.[INDEX].oneOf.1.pendingChangeRequest.body.oneOf.7.action.oneOf.0.approvalGroups.items.[INDEX].approvers.userGroupId","typeLabel":"object"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.1.pendingChangeRequest.body.oneOf.7.action.oneOf.0.approvalGroups.items.[INDEX].approvers","typeLabel":"object"},"name":{"type":"string","uniqueKey":"\\items.items.[INDEX].oneOf.1.pendingChangeRequest.body.oneOf.7.action.oneOf.0.approvalGroups.items.[INDEX].name","typeLabel":"string"},"initiatorCanApprove":{"type":"boolean","description":"Whether the initiator of the activity can participate in the approval.","uniqueKey":"\\items.items.[INDEX].oneOf.1.pendingChangeRequest.body.oneOf.7.action.oneOf.0.approvalGroups.items.[INDEX].initiatorCanApprove","typeLabel":"boolean"},"serviceAccountsCanApprove":{"type":"boolean","description":"Whether service accounts can participate in the approval for this group.","uniqueKey":"\\items.items.[INDEX].oneOf.1.pendingChangeRequest.body.oneOf.7.action.oneOf.0.approvalGroups.items.[INDEX].serviceAccountsCanApprove","typeLabel":"boolean"}},"required":["quorum","approvers"],"additionalProperties":false,"uniqueKey":"\\items.items.[INDEX].oneOf.1.pendingChangeRequest.body.oneOf.7.action.oneOf.0.approvalGroups.items.[INDEX]","typeLabel":"object"},"minItems":1,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.1.pendingChangeRequest.body.oneOf.7.action.oneOf.0.approvalGroups","typeLabel":"object[]"},"autoRejectTimeout":{"oneOf":[{"type":"integer","minimum":1,"uniqueKey":"\\items.items.[INDEX].oneOf.1.pendingChangeRequest.body.oneOf.7.action.oneOf.0.autoRejectTimeout.oneOf.0","typeLabel":"integer"},{"type":"null","minimum":1,"uniqueKey":"\\items.items.[INDEX].oneOf.1.pendingChangeRequest.body.oneOf.7.action.oneOf.0.autoRejectTimeout.oneOf.1","typeLabel":"null"}],"uniqueKey":"\\items.items.[INDEX].oneOf.1.pendingChangeRequest.body.oneOf.7.action.oneOf.0.autoRejectTimeout","typeLabel":"integer | null"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.1.pendingChangeRequest.body.oneOf.7.action.oneOf.0","typeLabel":"RequestApproval · object"},{"type":"object","title":"Block","description":"This action means that the activity will be blocked if the policy is triggered.\n\n```json\n{\n \"action\": {\n \"kind\": \"Block\"\n }\n}\n```\n","required":["kind"],"properties":{"kind":{"type":"string","enum":["Block"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.1.pendingChangeRequest.body.oneOf.7.action.oneOf.1.kind","typeLabel":"enum\u003cstring>"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.1.pendingChangeRequest.body.oneOf.7.action.oneOf.1","typeLabel":"Block · object"}],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.1.pendingChangeRequest.body.oneOf.7.action","typeLabel":"RequestApproval · object | Block · object"},"dateCreated":{"type":"string","uniqueKey":"\\items.items.[INDEX].oneOf.1.pendingChangeRequest.body.oneOf.7.dateCreated","typeLabel":"string"},"dateUpdated":{"type":"string","uniqueKey":"\\items.items.[INDEX].oneOf.1.pendingChangeRequest.body.oneOf.7.dateUpdated","typeLabel":"string"},"filters":{"type":"object","properties":{"vaultId":{"type":"object","properties":{"in":{"type":"array","items":{"type":"string","minLength":1,"uniqueKey":"\\items.items.[INDEX].oneOf.1.pendingChangeRequest.body.oneOf.7.filters.vaultId.in.items.[INDEX]","typeLabel":"string"},"minItems":1,"maxItems":100,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.1.pendingChangeRequest.body.oneOf.7.filters.vaultId.in","typeLabel":"string[]"}},"required":["in"],"additionalProperties":false,"uniqueKey":"\\items.items.[INDEX].oneOf.1.pendingChangeRequest.body.oneOf.7.filters.vaultId","typeLabel":"object"},"vaultTags":{"type":"object","properties":{"hasAny":{"type":"array","items":{"type":"string","minLength":1,"uniqueKey":"\\items.items.[INDEX].oneOf.1.pendingChangeRequest.body.oneOf.7.filters.vaultTags.hasAny.items.[INDEX]","typeLabel":"string"},"minItems":1,"maxItems":100,"uniqueKey":"\\items.items.[INDEX].oneOf.1.pendingChangeRequest.body.oneOf.7.filters.vaultTags.hasAny","typeLabel":"string[]"},"hasAll":{"type":"array","items":{"type":"string","minLength":1,"uniqueKey":"\\items.items.[INDEX].oneOf.1.pendingChangeRequest.body.oneOf.7.filters.vaultTags.hasAll.items.[INDEX]","typeLabel":"string"},"minItems":1,"maxItems":100,"uniqueKey":"\\items.items.[INDEX].oneOf.1.pendingChangeRequest.body.oneOf.7.filters.vaultTags.hasAll","typeLabel":"string[]"}},"additionalProperties":false,"uniqueKey":"\\items.items.[INDEX].oneOf.1.pendingChangeRequest.body.oneOf.7.filters.vaultTags","typeLabel":"object"}},"additionalProperties":false,"uniqueKey":"\\items.items.[INDEX].oneOf.1.pendingChangeRequest.body.oneOf.7.filters","typeLabel":"object"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.1.pendingChangeRequest.body.oneOf.7","typeLabel":"Vaults:ReleaseQuarantine · object"},{"type":"object","title":"Vaults:CreateLock","required":["id","name","status","activityKind","rule","action"],"properties":{"id":{"type":"string","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.1.pendingChangeRequest.body.oneOf.8.id","typeLabel":"string"},"name":{"type":"string","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.1.pendingChangeRequest.body.oneOf.8.name","typeLabel":"string"},"status":{"type":"string","enum":["Active","Archived"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.1.pendingChangeRequest.body.oneOf.8.status","typeLabel":"enum\u003cstring>"},"activityKind":{"type":"string","enum":["Vaults:CreateLock"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.1.pendingChangeRequest.body.oneOf.8.activityKind","typeLabel":"enum\u003cstring>"},"rule":{"type":"object","title":"AlwaysTrigger","description":"This rule will always be triggered, meaning that if this rule is defined on a policy, the policy will always trigger the policy action, regardless of the activity details.","required":["kind"],"properties":{"kind":{"type":"string","enum":["AlwaysTrigger"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.1.pendingChangeRequest.body.oneOf.8.rule.kind","typeLabel":"enum\u003cstring>"},"configuration":{"type":"object","properties":{},"additionalProperties":false,"uniqueKey":"\\items.items.[INDEX].oneOf.1.pendingChangeRequest.body.oneOf.8.rule.configuration","typeLabel":"object"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.1.pendingChangeRequest.body.oneOf.8.rule","typeLabel":"AlwaysTrigger · object"},"action":{"oneOf":[{"type":"object","title":"RequestApproval","description":"\nThis action means that activity will first require an Approval process to be completed before it can be executed (or be aborted if someone rejects it during the approval process).\n\nOne or several groups of approvers need to be specified. These groups define who is allowed to approve / reject an activity.\n\nThe activity will only be executed if all approver groups reach their \"quorum\" of approvals. Otherwise, if any one user within any approver group rejects, then the activity is aborted and the call is not executed.\n\nThe example below shows a `RequestApproval` action, configured with one approval group requiring 2 approvals amongst three specific users.\n\n```json\n{\n \"action\": {\n \"kind\": \"RequestApproval\",\n \"autoRejectTimeout\": 60, // minutes\n \"approvalGroups\": [\n {\n \"name\": \"Admins\",\n \"quorum\": 2, // only 2 approvers required in that group \n \"approvers\": {\n \"userId\": {\n \"in\": [\"us-...1\", \"us-...2\", \"us-...3\"],\n }\n }\n }\n ],\n\n }\n}\n```\n\n**Don't lock yourself up**\n\nBy default, users cannot approve an activity they initiated themselves, even if they are in an approval group. To allow this, you must set `initiatorCanApprove: true`.\n\n*Example 1:* For any wallet transfer, a policy is setup to require approval from **1 specific admin user** (eg. the CEO). `initiatorCanApprove` was not set to `true`. If the CEO himself initiates a transfer, no-one can approve his transfer and it's stuck.\n\n*Example 2:* Company has only 3 users. A policy is setup to require approval from **any 3 users** (`quorum: 3`) for any modification of a policy. `initiatorCanApprove` was not set to `true`. In this case, they are locked, and the policy cannot be modified: whoever requests a modification cannot approve, and the policy is therefore always missing one approver. To unlock, they would need to invite a new user and give him the rights to approve as well.\n ","required":["kind","approvalGroups"],"properties":{"kind":{"type":"string","enum":["RequestApproval"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.1.pendingChangeRequest.body.oneOf.8.action.oneOf.0.kind","typeLabel":"enum\u003cstring>"},"approvalGroups":{"type":"array","items":{"type":"object","properties":{"quorum":{"type":"integer","minimum":1,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.1.pendingChangeRequest.body.oneOf.8.action.oneOf.0.approvalGroups.items.[INDEX].quorum","typeLabel":"integer"},"approvers":{"type":"object","properties":{"userId":{"type":"object","properties":{"in":{"type":"array","items":{"type":"string","minLength":1,"uniqueKey":"\\items.items.[INDEX].oneOf.1.pendingChangeRequest.body.oneOf.8.action.oneOf.0.approvalGroups.items.[INDEX].approvers.userId.in.items.[INDEX]","typeLabel":"string"},"minItems":1,"maxItems":100,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.1.pendingChangeRequest.body.oneOf.8.action.oneOf.0.approvalGroups.items.[INDEX].approvers.userId.in","typeLabel":"string[]"}},"required":["in"],"additionalProperties":false,"description":"Users and service accounts who may approve.","uniqueKey":"\\items.items.[INDEX].oneOf.1.pendingChangeRequest.body.oneOf.8.action.oneOf.0.approvalGroups.items.[INDEX].approvers.userId","typeLabel":"object"},"userGroupId":{"type":"object","properties":{"in":{"type":"array","items":{"type":"string","minLength":1,"maxLength":64,"pattern":"^ug-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"User group id.","example":"ug-139tf-f58l8-lsbt6dp47lfsdvgh","uniqueKey":"\\items.items.[INDEX].oneOf.1.pendingChangeRequest.body.oneOf.8.action.oneOf.0.approvalGroups.items.[INDEX].approvers.userGroupId.in.items.[INDEX]","typeLabel":"string"},"minItems":1,"maxItems":100,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.1.pendingChangeRequest.body.oneOf.8.action.oneOf.0.approvalGroups.items.[INDEX].approvers.userGroupId.in","typeLabel":"string[]"}},"required":["in"],"additionalProperties":false,"description":"User groups whose members may approve.","uniqueKey":"\\items.items.[INDEX].oneOf.1.pendingChangeRequest.body.oneOf.8.action.oneOf.0.approvalGroups.items.[INDEX].approvers.userGroupId","typeLabel":"object"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.1.pendingChangeRequest.body.oneOf.8.action.oneOf.0.approvalGroups.items.[INDEX].approvers","typeLabel":"object"},"name":{"type":"string","uniqueKey":"\\items.items.[INDEX].oneOf.1.pendingChangeRequest.body.oneOf.8.action.oneOf.0.approvalGroups.items.[INDEX].name","typeLabel":"string"},"initiatorCanApprove":{"type":"boolean","description":"Whether the initiator of the activity can participate in the approval.","uniqueKey":"\\items.items.[INDEX].oneOf.1.pendingChangeRequest.body.oneOf.8.action.oneOf.0.approvalGroups.items.[INDEX].initiatorCanApprove","typeLabel":"boolean"},"serviceAccountsCanApprove":{"type":"boolean","description":"Whether service accounts can participate in the approval for this group.","uniqueKey":"\\items.items.[INDEX].oneOf.1.pendingChangeRequest.body.oneOf.8.action.oneOf.0.approvalGroups.items.[INDEX].serviceAccountsCanApprove","typeLabel":"boolean"}},"required":["quorum","approvers"],"additionalProperties":false,"uniqueKey":"\\items.items.[INDEX].oneOf.1.pendingChangeRequest.body.oneOf.8.action.oneOf.0.approvalGroups.items.[INDEX]","typeLabel":"object"},"minItems":1,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.1.pendingChangeRequest.body.oneOf.8.action.oneOf.0.approvalGroups","typeLabel":"object[]"},"autoRejectTimeout":{"oneOf":[{"type":"integer","minimum":1,"uniqueKey":"\\items.items.[INDEX].oneOf.1.pendingChangeRequest.body.oneOf.8.action.oneOf.0.autoRejectTimeout.oneOf.0","typeLabel":"integer"},{"type":"null","minimum":1,"uniqueKey":"\\items.items.[INDEX].oneOf.1.pendingChangeRequest.body.oneOf.8.action.oneOf.0.autoRejectTimeout.oneOf.1","typeLabel":"null"}],"uniqueKey":"\\items.items.[INDEX].oneOf.1.pendingChangeRequest.body.oneOf.8.action.oneOf.0.autoRejectTimeout","typeLabel":"integer | null"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.1.pendingChangeRequest.body.oneOf.8.action.oneOf.0","typeLabel":"RequestApproval · object"},{"type":"object","title":"Block","description":"This action means that the activity will be blocked if the policy is triggered.\n\n```json\n{\n \"action\": {\n \"kind\": \"Block\"\n }\n}\n```\n","required":["kind"],"properties":{"kind":{"type":"string","enum":["Block"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.1.pendingChangeRequest.body.oneOf.8.action.oneOf.1.kind","typeLabel":"enum\u003cstring>"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.1.pendingChangeRequest.body.oneOf.8.action.oneOf.1","typeLabel":"Block · object"}],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.1.pendingChangeRequest.body.oneOf.8.action","typeLabel":"RequestApproval · object | Block · object"},"dateCreated":{"type":"string","uniqueKey":"\\items.items.[INDEX].oneOf.1.pendingChangeRequest.body.oneOf.8.dateCreated","typeLabel":"string"},"dateUpdated":{"type":"string","uniqueKey":"\\items.items.[INDEX].oneOf.1.pendingChangeRequest.body.oneOf.8.dateUpdated","typeLabel":"string"},"filters":{"type":"object","properties":{"vaultId":{"type":"object","properties":{"in":{"type":"array","items":{"type":"string","minLength":1,"uniqueKey":"\\items.items.[INDEX].oneOf.1.pendingChangeRequest.body.oneOf.8.filters.vaultId.in.items.[INDEX]","typeLabel":"string"},"minItems":1,"maxItems":100,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.1.pendingChangeRequest.body.oneOf.8.filters.vaultId.in","typeLabel":"string[]"}},"required":["in"],"additionalProperties":false,"uniqueKey":"\\items.items.[INDEX].oneOf.1.pendingChangeRequest.body.oneOf.8.filters.vaultId","typeLabel":"object"},"vaultTags":{"type":"object","properties":{"hasAny":{"type":"array","items":{"type":"string","minLength":1,"uniqueKey":"\\items.items.[INDEX].oneOf.1.pendingChangeRequest.body.oneOf.8.filters.vaultTags.hasAny.items.[INDEX]","typeLabel":"string"},"minItems":1,"maxItems":100,"uniqueKey":"\\items.items.[INDEX].oneOf.1.pendingChangeRequest.body.oneOf.8.filters.vaultTags.hasAny","typeLabel":"string[]"},"hasAll":{"type":"array","items":{"type":"string","minLength":1,"uniqueKey":"\\items.items.[INDEX].oneOf.1.pendingChangeRequest.body.oneOf.8.filters.vaultTags.hasAll.items.[INDEX]","typeLabel":"string"},"minItems":1,"maxItems":100,"uniqueKey":"\\items.items.[INDEX].oneOf.1.pendingChangeRequest.body.oneOf.8.filters.vaultTags.hasAll","typeLabel":"string[]"}},"additionalProperties":false,"uniqueKey":"\\items.items.[INDEX].oneOf.1.pendingChangeRequest.body.oneOf.8.filters.vaultTags","typeLabel":"object"}},"additionalProperties":false,"uniqueKey":"\\items.items.[INDEX].oneOf.1.pendingChangeRequest.body.oneOf.8.filters","typeLabel":"object"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.1.pendingChangeRequest.body.oneOf.8","typeLabel":"Vaults:CreateLock · object"},{"type":"object","title":"Vaults:ReplaceLock","required":["id","name","status","activityKind","rule","action"],"properties":{"id":{"type":"string","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.1.pendingChangeRequest.body.oneOf.9.id","typeLabel":"string"},"name":{"type":"string","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.1.pendingChangeRequest.body.oneOf.9.name","typeLabel":"string"},"status":{"type":"string","enum":["Active","Archived"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.1.pendingChangeRequest.body.oneOf.9.status","typeLabel":"enum\u003cstring>"},"activityKind":{"type":"string","enum":["Vaults:ReplaceLock"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.1.pendingChangeRequest.body.oneOf.9.activityKind","typeLabel":"enum\u003cstring>"},"rule":{"type":"object","title":"AlwaysTrigger","description":"This rule will always be triggered, meaning that if this rule is defined on a policy, the policy will always trigger the policy action, regardless of the activity details.","required":["kind"],"properties":{"kind":{"type":"string","enum":["AlwaysTrigger"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.1.pendingChangeRequest.body.oneOf.9.rule.kind","typeLabel":"enum\u003cstring>"},"configuration":{"type":"object","properties":{},"additionalProperties":false,"uniqueKey":"\\items.items.[INDEX].oneOf.1.pendingChangeRequest.body.oneOf.9.rule.configuration","typeLabel":"object"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.1.pendingChangeRequest.body.oneOf.9.rule","typeLabel":"AlwaysTrigger · object"},"action":{"oneOf":[{"type":"object","title":"RequestApproval","description":"\nThis action means that activity will first require an Approval process to be completed before it can be executed (or be aborted if someone rejects it during the approval process).\n\nOne or several groups of approvers need to be specified. These groups define who is allowed to approve / reject an activity.\n\nThe activity will only be executed if all approver groups reach their \"quorum\" of approvals. Otherwise, if any one user within any approver group rejects, then the activity is aborted and the call is not executed.\n\nThe example below shows a `RequestApproval` action, configured with one approval group requiring 2 approvals amongst three specific users.\n\n```json\n{\n \"action\": {\n \"kind\": \"RequestApproval\",\n \"autoRejectTimeout\": 60, // minutes\n \"approvalGroups\": [\n {\n \"name\": \"Admins\",\n \"quorum\": 2, // only 2 approvers required in that group \n \"approvers\": {\n \"userId\": {\n \"in\": [\"us-...1\", \"us-...2\", \"us-...3\"],\n }\n }\n }\n ],\n\n }\n}\n```\n\n**Don't lock yourself up**\n\nBy default, users cannot approve an activity they initiated themselves, even if they are in an approval group. To allow this, you must set `initiatorCanApprove: true`.\n\n*Example 1:* For any wallet transfer, a policy is setup to require approval from **1 specific admin user** (eg. the CEO). `initiatorCanApprove` was not set to `true`. If the CEO himself initiates a transfer, no-one can approve his transfer and it's stuck.\n\n*Example 2:* Company has only 3 users. A policy is setup to require approval from **any 3 users** (`quorum: 3`) for any modification of a policy. `initiatorCanApprove` was not set to `true`. In this case, they are locked, and the policy cannot be modified: whoever requests a modification cannot approve, and the policy is therefore always missing one approver. To unlock, they would need to invite a new user and give him the rights to approve as well.\n ","required":["kind","approvalGroups"],"properties":{"kind":{"type":"string","enum":["RequestApproval"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.1.pendingChangeRequest.body.oneOf.9.action.oneOf.0.kind","typeLabel":"enum\u003cstring>"},"approvalGroups":{"type":"array","items":{"type":"object","properties":{"quorum":{"type":"integer","minimum":1,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.1.pendingChangeRequest.body.oneOf.9.action.oneOf.0.approvalGroups.items.[INDEX].quorum","typeLabel":"integer"},"approvers":{"type":"object","properties":{"userId":{"type":"object","properties":{"in":{"type":"array","items":{"type":"string","minLength":1,"uniqueKey":"\\items.items.[INDEX].oneOf.1.pendingChangeRequest.body.oneOf.9.action.oneOf.0.approvalGroups.items.[INDEX].approvers.userId.in.items.[INDEX]","typeLabel":"string"},"minItems":1,"maxItems":100,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.1.pendingChangeRequest.body.oneOf.9.action.oneOf.0.approvalGroups.items.[INDEX].approvers.userId.in","typeLabel":"string[]"}},"required":["in"],"additionalProperties":false,"description":"Users and service accounts who may approve.","uniqueKey":"\\items.items.[INDEX].oneOf.1.pendingChangeRequest.body.oneOf.9.action.oneOf.0.approvalGroups.items.[INDEX].approvers.userId","typeLabel":"object"},"userGroupId":{"type":"object","properties":{"in":{"type":"array","items":{"type":"string","minLength":1,"maxLength":64,"pattern":"^ug-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"User group id.","example":"ug-139tf-f58l8-lsbt6dp47lfsdvgh","uniqueKey":"\\items.items.[INDEX].oneOf.1.pendingChangeRequest.body.oneOf.9.action.oneOf.0.approvalGroups.items.[INDEX].approvers.userGroupId.in.items.[INDEX]","typeLabel":"string"},"minItems":1,"maxItems":100,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.1.pendingChangeRequest.body.oneOf.9.action.oneOf.0.approvalGroups.items.[INDEX].approvers.userGroupId.in","typeLabel":"string[]"}},"required":["in"],"additionalProperties":false,"description":"User groups whose members may approve.","uniqueKey":"\\items.items.[INDEX].oneOf.1.pendingChangeRequest.body.oneOf.9.action.oneOf.0.approvalGroups.items.[INDEX].approvers.userGroupId","typeLabel":"object"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.1.pendingChangeRequest.body.oneOf.9.action.oneOf.0.approvalGroups.items.[INDEX].approvers","typeLabel":"object"},"name":{"type":"string","uniqueKey":"\\items.items.[INDEX].oneOf.1.pendingChangeRequest.body.oneOf.9.action.oneOf.0.approvalGroups.items.[INDEX].name","typeLabel":"string"},"initiatorCanApprove":{"type":"boolean","description":"Whether the initiator of the activity can participate in the approval.","uniqueKey":"\\items.items.[INDEX].oneOf.1.pendingChangeRequest.body.oneOf.9.action.oneOf.0.approvalGroups.items.[INDEX].initiatorCanApprove","typeLabel":"boolean"},"serviceAccountsCanApprove":{"type":"boolean","description":"Whether service accounts can participate in the approval for this group.","uniqueKey":"\\items.items.[INDEX].oneOf.1.pendingChangeRequest.body.oneOf.9.action.oneOf.0.approvalGroups.items.[INDEX].serviceAccountsCanApprove","typeLabel":"boolean"}},"required":["quorum","approvers"],"additionalProperties":false,"uniqueKey":"\\items.items.[INDEX].oneOf.1.pendingChangeRequest.body.oneOf.9.action.oneOf.0.approvalGroups.items.[INDEX]","typeLabel":"object"},"minItems":1,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.1.pendingChangeRequest.body.oneOf.9.action.oneOf.0.approvalGroups","typeLabel":"object[]"},"autoRejectTimeout":{"oneOf":[{"type":"integer","minimum":1,"uniqueKey":"\\items.items.[INDEX].oneOf.1.pendingChangeRequest.body.oneOf.9.action.oneOf.0.autoRejectTimeout.oneOf.0","typeLabel":"integer"},{"type":"null","minimum":1,"uniqueKey":"\\items.items.[INDEX].oneOf.1.pendingChangeRequest.body.oneOf.9.action.oneOf.0.autoRejectTimeout.oneOf.1","typeLabel":"null"}],"uniqueKey":"\\items.items.[INDEX].oneOf.1.pendingChangeRequest.body.oneOf.9.action.oneOf.0.autoRejectTimeout","typeLabel":"integer | null"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.1.pendingChangeRequest.body.oneOf.9.action.oneOf.0","typeLabel":"RequestApproval · object"},{"type":"object","title":"Block","description":"This action means that the activity will be blocked if the policy is triggered.\n\n```json\n{\n \"action\": {\n \"kind\": \"Block\"\n }\n}\n```\n","required":["kind"],"properties":{"kind":{"type":"string","enum":["Block"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.1.pendingChangeRequest.body.oneOf.9.action.oneOf.1.kind","typeLabel":"enum\u003cstring>"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.1.pendingChangeRequest.body.oneOf.9.action.oneOf.1","typeLabel":"Block · object"}],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.1.pendingChangeRequest.body.oneOf.9.action","typeLabel":"RequestApproval · object | Block · object"},"dateCreated":{"type":"string","uniqueKey":"\\items.items.[INDEX].oneOf.1.pendingChangeRequest.body.oneOf.9.dateCreated","typeLabel":"string"},"dateUpdated":{"type":"string","uniqueKey":"\\items.items.[INDEX].oneOf.1.pendingChangeRequest.body.oneOf.9.dateUpdated","typeLabel":"string"},"filters":{"type":"object","properties":{"vaultId":{"type":"object","properties":{"in":{"type":"array","items":{"type":"string","minLength":1,"uniqueKey":"\\items.items.[INDEX].oneOf.1.pendingChangeRequest.body.oneOf.9.filters.vaultId.in.items.[INDEX]","typeLabel":"string"},"minItems":1,"maxItems":100,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.1.pendingChangeRequest.body.oneOf.9.filters.vaultId.in","typeLabel":"string[]"}},"required":["in"],"additionalProperties":false,"uniqueKey":"\\items.items.[INDEX].oneOf.1.pendingChangeRequest.body.oneOf.9.filters.vaultId","typeLabel":"object"},"vaultTags":{"type":"object","properties":{"hasAny":{"type":"array","items":{"type":"string","minLength":1,"uniqueKey":"\\items.items.[INDEX].oneOf.1.pendingChangeRequest.body.oneOf.9.filters.vaultTags.hasAny.items.[INDEX]","typeLabel":"string"},"minItems":1,"maxItems":100,"uniqueKey":"\\items.items.[INDEX].oneOf.1.pendingChangeRequest.body.oneOf.9.filters.vaultTags.hasAny","typeLabel":"string[]"},"hasAll":{"type":"array","items":{"type":"string","minLength":1,"uniqueKey":"\\items.items.[INDEX].oneOf.1.pendingChangeRequest.body.oneOf.9.filters.vaultTags.hasAll.items.[INDEX]","typeLabel":"string"},"minItems":1,"maxItems":100,"uniqueKey":"\\items.items.[INDEX].oneOf.1.pendingChangeRequest.body.oneOf.9.filters.vaultTags.hasAll","typeLabel":"string[]"}},"additionalProperties":false,"uniqueKey":"\\items.items.[INDEX].oneOf.1.pendingChangeRequest.body.oneOf.9.filters.vaultTags","typeLabel":"object"}},"additionalProperties":false,"uniqueKey":"\\items.items.[INDEX].oneOf.1.pendingChangeRequest.body.oneOf.9.filters","typeLabel":"object"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.1.pendingChangeRequest.body.oneOf.9","typeLabel":"Vaults:ReplaceLock · object"},{"type":"object","title":"UserAction","required":["id","name","status","activityKind","rule","action"],"properties":{"id":{"type":"string","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.1.pendingChangeRequest.body.oneOf.10.id","typeLabel":"string"},"name":{"type":"string","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.1.pendingChangeRequest.body.oneOf.10.name","typeLabel":"string"},"status":{"type":"string","enum":["Active","Archived"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.1.pendingChangeRequest.body.oneOf.10.status","typeLabel":"enum\u003cstring>"},"activityKind":{"type":"string","enum":["UserAction"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.1.pendingChangeRequest.body.oneOf.10.activityKind","typeLabel":"enum\u003cstring>"},"rule":{"type":"object","properties":{"kind":{"type":"string","enum":["UserAction"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.1.pendingChangeRequest.body.oneOf.10.rule.kind","typeLabel":"enum\u003cstring>"},"configuration":{"type":"object","properties":{"userActionKinds":{"type":"array","items":{"type":"string","uniqueKey":"\\items.items.[INDEX].oneOf.1.pendingChangeRequest.body.oneOf.10.rule.configuration.userActionKinds.items.[INDEX]","typeLabel":"string"},"minItems":1,"description":"The user actions this rule applies to. The rule triggers on any of them.","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.1.pendingChangeRequest.body.oneOf.10.rule.configuration.userActionKinds","typeLabel":"string[]"}},"required":["userActionKinds"],"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.1.pendingChangeRequest.body.oneOf.10.rule.configuration","typeLabel":"object"}},"required":["kind","configuration"],"additionalProperties":false,"title":"UserAction","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.1.pendingChangeRequest.body.oneOf.10.rule","typeLabel":"UserAction · object"},"action":{"oneOf":[{"type":"object","title":"RequestApproval","description":"\nThis action means that activity will first require an Approval process to be completed before it can be executed (or be aborted if someone rejects it during the approval process).\n\nOne or several groups of approvers need to be specified. These groups define who is allowed to approve / reject an activity.\n\nThe activity will only be executed if all approver groups reach their \"quorum\" of approvals. Otherwise, if any one user within any approver group rejects, then the activity is aborted and the call is not executed.\n\nThe example below shows a `RequestApproval` action, configured with one approval group requiring 2 approvals amongst three specific users.\n\n```json\n{\n \"action\": {\n \"kind\": \"RequestApproval\",\n \"autoRejectTimeout\": 60, // minutes\n \"approvalGroups\": [\n {\n \"name\": \"Admins\",\n \"quorum\": 2, // only 2 approvers required in that group \n \"approvers\": {\n \"userId\": {\n \"in\": [\"us-...1\", \"us-...2\", \"us-...3\"],\n }\n }\n }\n ],\n\n }\n}\n```\n\n**Don't lock yourself up**\n\nBy default, users cannot approve an activity they initiated themselves, even if they are in an approval group. To allow this, you must set `initiatorCanApprove: true`.\n\n*Example 1:* For any wallet transfer, a policy is setup to require approval from **1 specific admin user** (eg. the CEO). `initiatorCanApprove` was not set to `true`. If the CEO himself initiates a transfer, no-one can approve his transfer and it's stuck.\n\n*Example 2:* Company has only 3 users. A policy is setup to require approval from **any 3 users** (`quorum: 3`) for any modification of a policy. `initiatorCanApprove` was not set to `true`. In this case, they are locked, and the policy cannot be modified: whoever requests a modification cannot approve, and the policy is therefore always missing one approver. To unlock, they would need to invite a new user and give him the rights to approve as well.\n ","required":["kind","approvalGroups"],"properties":{"kind":{"type":"string","enum":["RequestApproval"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.1.pendingChangeRequest.body.oneOf.10.action.oneOf.0.kind","typeLabel":"enum\u003cstring>"},"approvalGroups":{"type":"array","items":{"type":"object","properties":{"quorum":{"type":"integer","minimum":1,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.1.pendingChangeRequest.body.oneOf.10.action.oneOf.0.approvalGroups.items.[INDEX].quorum","typeLabel":"integer"},"approvers":{"type":"object","properties":{"userId":{"type":"object","properties":{"in":{"type":"array","items":{"type":"string","minLength":1,"uniqueKey":"\\items.items.[INDEX].oneOf.1.pendingChangeRequest.body.oneOf.10.action.oneOf.0.approvalGroups.items.[INDEX].approvers.userId.in.items.[INDEX]","typeLabel":"string"},"minItems":1,"maxItems":100,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.1.pendingChangeRequest.body.oneOf.10.action.oneOf.0.approvalGroups.items.[INDEX].approvers.userId.in","typeLabel":"string[]"}},"required":["in"],"additionalProperties":false,"description":"Users and service accounts who may approve.","uniqueKey":"\\items.items.[INDEX].oneOf.1.pendingChangeRequest.body.oneOf.10.action.oneOf.0.approvalGroups.items.[INDEX].approvers.userId","typeLabel":"object"},"userGroupId":{"type":"object","properties":{"in":{"type":"array","items":{"type":"string","minLength":1,"maxLength":64,"pattern":"^ug-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"User group id.","example":"ug-139tf-f58l8-lsbt6dp47lfsdvgh","uniqueKey":"\\items.items.[INDEX].oneOf.1.pendingChangeRequest.body.oneOf.10.action.oneOf.0.approvalGroups.items.[INDEX].approvers.userGroupId.in.items.[INDEX]","typeLabel":"string"},"minItems":1,"maxItems":100,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.1.pendingChangeRequest.body.oneOf.10.action.oneOf.0.approvalGroups.items.[INDEX].approvers.userGroupId.in","typeLabel":"string[]"}},"required":["in"],"additionalProperties":false,"description":"User groups whose members may approve.","uniqueKey":"\\items.items.[INDEX].oneOf.1.pendingChangeRequest.body.oneOf.10.action.oneOf.0.approvalGroups.items.[INDEX].approvers.userGroupId","typeLabel":"object"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.1.pendingChangeRequest.body.oneOf.10.action.oneOf.0.approvalGroups.items.[INDEX].approvers","typeLabel":"object"},"name":{"type":"string","uniqueKey":"\\items.items.[INDEX].oneOf.1.pendingChangeRequest.body.oneOf.10.action.oneOf.0.approvalGroups.items.[INDEX].name","typeLabel":"string"},"initiatorCanApprove":{"type":"boolean","description":"Whether the initiator of the activity can participate in the approval.","uniqueKey":"\\items.items.[INDEX].oneOf.1.pendingChangeRequest.body.oneOf.10.action.oneOf.0.approvalGroups.items.[INDEX].initiatorCanApprove","typeLabel":"boolean"},"serviceAccountsCanApprove":{"type":"boolean","description":"Whether service accounts can participate in the approval for this group.","uniqueKey":"\\items.items.[INDEX].oneOf.1.pendingChangeRequest.body.oneOf.10.action.oneOf.0.approvalGroups.items.[INDEX].serviceAccountsCanApprove","typeLabel":"boolean"}},"required":["quorum","approvers"],"additionalProperties":false,"uniqueKey":"\\items.items.[INDEX].oneOf.1.pendingChangeRequest.body.oneOf.10.action.oneOf.0.approvalGroups.items.[INDEX]","typeLabel":"object"},"minItems":1,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.1.pendingChangeRequest.body.oneOf.10.action.oneOf.0.approvalGroups","typeLabel":"object[]"},"autoRejectTimeout":{"oneOf":[{"type":"integer","minimum":1,"uniqueKey":"\\items.items.[INDEX].oneOf.1.pendingChangeRequest.body.oneOf.10.action.oneOf.0.autoRejectTimeout.oneOf.0","typeLabel":"integer"},{"type":"null","minimum":1,"uniqueKey":"\\items.items.[INDEX].oneOf.1.pendingChangeRequest.body.oneOf.10.action.oneOf.0.autoRejectTimeout.oneOf.1","typeLabel":"null"}],"uniqueKey":"\\items.items.[INDEX].oneOf.1.pendingChangeRequest.body.oneOf.10.action.oneOf.0.autoRejectTimeout","typeLabel":"integer | null"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.1.pendingChangeRequest.body.oneOf.10.action.oneOf.0","typeLabel":"RequestApproval · object"},{"type":"object","title":"Block","description":"This action means that the activity will be blocked if the policy is triggered.\n\n```json\n{\n \"action\": {\n \"kind\": \"Block\"\n }\n}\n```\n","required":["kind"],"properties":{"kind":{"type":"string","enum":["Block"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.1.pendingChangeRequest.body.oneOf.10.action.oneOf.1.kind","typeLabel":"enum\u003cstring>"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.1.pendingChangeRequest.body.oneOf.10.action.oneOf.1","typeLabel":"Block · object"}],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.1.pendingChangeRequest.body.oneOf.10.action","typeLabel":"RequestApproval · object | Block · object"},"dateCreated":{"type":"string","uniqueKey":"\\items.items.[INDEX].oneOf.1.pendingChangeRequest.body.oneOf.10.dateCreated","typeLabel":"string"},"dateUpdated":{"type":"string","uniqueKey":"\\items.items.[INDEX].oneOf.1.pendingChangeRequest.body.oneOf.10.dateUpdated","typeLabel":"string"},"filters":{"type":"object","properties":{},"uniqueKey":"\\items.items.[INDEX].oneOf.1.pendingChangeRequest.body.oneOf.10.filters","typeLabel":"object"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.1.pendingChangeRequest.body.oneOf.10","typeLabel":"UserAction · object"}],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.1.pendingChangeRequest.body","typeLabel":"Registry:Addresses:Modify · object | Permissions:Assign · object | Permissions:Modify · object | Policies:Modify · object | Registry:ContractSchemas:Modify · object | Wallets:Sign · object | Wallets:IncomingTransaction · object | Vaults:ReleaseQuarantine · object | Vaults:CreateLock · object | Vaults:ReplaceLock · object | UserAction · object"},"dateResolved":{"type":"string","format":"date-time","uniqueKey":"\\items.items.[INDEX].oneOf.1.pendingChangeRequest.dateResolved","typeLabel":"string\u003cdate-time>"},"approvalId":{"type":"string","uniqueKey":"\\items.items.[INDEX].oneOf.1.pendingChangeRequest.approvalId","typeLabel":"string"}},"required":["id","requester","kind","operationKind","status","entityId","dateCreated","body"],"additionalProperties":false,"uniqueKey":"\\items.items.[INDEX].oneOf.1.pendingChangeRequest","typeLabel":"object"}},"additionalProperties":false,"uniqueKey":"\\items.items.[INDEX].oneOf.1","typeLabel":"Permissions:Assign · object"},{"type":"object","title":"Permissions:Modify","required":["id","name","status","activityKind","rule","action"],"properties":{"id":{"type":"string","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.2.id","typeLabel":"string"},"name":{"type":"string","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.2.name","typeLabel":"string"},"status":{"type":"string","enum":["Active","Archived"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.2.status","typeLabel":"enum\u003cstring>"},"activityKind":{"type":"string","enum":["Permissions:Modify"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.2.activityKind","typeLabel":"enum\u003cstring>"},"rule":{"type":"object","properties":{"kind":{"type":"string","enum":["AlwaysTrigger"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.2.rule.kind","typeLabel":"enum\u003cstring>"},"configuration":{"type":"object","properties":{},"additionalProperties":false,"uniqueKey":"\\items.items.[INDEX].oneOf.2.rule.configuration","typeLabel":"object"}},"required":["kind"],"additionalProperties":false,"description":"This rule will always be triggered, meaning that if this rule is defined on a policy, the policy will always trigger the policy action, regardless of the activity details.","title":"AlwaysTrigger","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.2.rule","typeLabel":"AlwaysTrigger · object"},"action":{"oneOf":[{"type":"object","title":"RequestApproval","description":"\nThis action means that activity will first require an Approval process to be completed before it can be executed (or be aborted if someone rejects it during the approval process).\n\nOne or several groups of approvers need to be specified. These groups define who is allowed to approve / reject an activity.\n\nThe activity will only be executed if all approver groups reach their \"quorum\" of approvals. Otherwise, if any one user within any approver group rejects, then the activity is aborted and the call is not executed.\n\nThe example below shows a `RequestApproval` action, configured with one approval group requiring 2 approvals amongst three specific users.\n\n```json\n{\n \"action\": {\n \"kind\": \"RequestApproval\",\n \"autoRejectTimeout\": 60, // minutes\n \"approvalGroups\": [\n {\n \"name\": \"Admins\",\n \"quorum\": 2, // only 2 approvers required in that group \n \"approvers\": {\n \"userId\": {\n \"in\": [\"us-...1\", \"us-...2\", \"us-...3\"],\n }\n }\n }\n ],\n\n }\n}\n```\n\n**Don't lock yourself up**\n\nBy default, users cannot approve an activity they initiated themselves, even if they are in an approval group. To allow this, you must set `initiatorCanApprove: true`.\n\n*Example 1:* For any wallet transfer, a policy is setup to require approval from **1 specific admin user** (eg. the CEO). `initiatorCanApprove` was not set to `true`. If the CEO himself initiates a transfer, no-one can approve his transfer and it's stuck.\n\n*Example 2:* Company has only 3 users. A policy is setup to require approval from **any 3 users** (`quorum: 3`) for any modification of a policy. `initiatorCanApprove` was not set to `true`. In this case, they are locked, and the policy cannot be modified: whoever requests a modification cannot approve, and the policy is therefore always missing one approver. To unlock, they would need to invite a new user and give him the rights to approve as well.\n ","required":["kind","approvalGroups"],"properties":{"kind":{"type":"string","enum":["RequestApproval"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.2.action.oneOf.0.kind","typeLabel":"enum\u003cstring>"},"approvalGroups":{"type":"array","items":{"type":"object","properties":{"quorum":{"type":"integer","minimum":1,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.2.action.oneOf.0.approvalGroups.items.[INDEX].quorum","typeLabel":"integer"},"approvers":{"type":"object","properties":{"userId":{"type":"object","properties":{"in":{"type":"array","items":{"type":"string","minLength":1,"uniqueKey":"\\items.items.[INDEX].oneOf.2.action.oneOf.0.approvalGroups.items.[INDEX].approvers.userId.in.items.[INDEX]","typeLabel":"string"},"minItems":1,"maxItems":100,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.2.action.oneOf.0.approvalGroups.items.[INDEX].approvers.userId.in","typeLabel":"string[]"}},"required":["in"],"additionalProperties":false,"description":"Users and service accounts who may approve.","uniqueKey":"\\items.items.[INDEX].oneOf.2.action.oneOf.0.approvalGroups.items.[INDEX].approvers.userId","typeLabel":"object"},"userGroupId":{"type":"object","properties":{"in":{"type":"array","items":{"type":"string","minLength":1,"maxLength":64,"pattern":"^ug-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"User group id.","example":"ug-139tf-f58l8-lsbt6dp47lfsdvgh","uniqueKey":"\\items.items.[INDEX].oneOf.2.action.oneOf.0.approvalGroups.items.[INDEX].approvers.userGroupId.in.items.[INDEX]","typeLabel":"string"},"minItems":1,"maxItems":100,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.2.action.oneOf.0.approvalGroups.items.[INDEX].approvers.userGroupId.in","typeLabel":"string[]"}},"required":["in"],"additionalProperties":false,"description":"User groups whose members may approve.","uniqueKey":"\\items.items.[INDEX].oneOf.2.action.oneOf.0.approvalGroups.items.[INDEX].approvers.userGroupId","typeLabel":"object"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.2.action.oneOf.0.approvalGroups.items.[INDEX].approvers","typeLabel":"object"},"name":{"type":"string","uniqueKey":"\\items.items.[INDEX].oneOf.2.action.oneOf.0.approvalGroups.items.[INDEX].name","typeLabel":"string"},"initiatorCanApprove":{"type":"boolean","description":"Whether the initiator of the activity can participate in the approval.","uniqueKey":"\\items.items.[INDEX].oneOf.2.action.oneOf.0.approvalGroups.items.[INDEX].initiatorCanApprove","typeLabel":"boolean"},"serviceAccountsCanApprove":{"type":"boolean","description":"Whether service accounts can participate in the approval for this group.","uniqueKey":"\\items.items.[INDEX].oneOf.2.action.oneOf.0.approvalGroups.items.[INDEX].serviceAccountsCanApprove","typeLabel":"boolean"}},"required":["quorum","approvers"],"additionalProperties":false,"uniqueKey":"\\items.items.[INDEX].oneOf.2.action.oneOf.0.approvalGroups.items.[INDEX]","typeLabel":"object"},"minItems":1,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.2.action.oneOf.0.approvalGroups","typeLabel":"object[]"},"autoRejectTimeout":{"oneOf":[{"type":"integer","minimum":1,"uniqueKey":"\\items.items.[INDEX].oneOf.2.action.oneOf.0.autoRejectTimeout.oneOf.0","typeLabel":"integer"},{"type":"null","minimum":1,"uniqueKey":"\\items.items.[INDEX].oneOf.2.action.oneOf.0.autoRejectTimeout.oneOf.1","typeLabel":"null"}],"uniqueKey":"\\items.items.[INDEX].oneOf.2.action.oneOf.0.autoRejectTimeout","typeLabel":"integer | null"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.2.action.oneOf.0","typeLabel":"RequestApproval · object"},{"type":"object","title":"Block","description":"This action means that the activity will be blocked if the policy is triggered.\n\n```json\n{\n \"action\": {\n \"kind\": \"Block\"\n }\n}\n```\n","required":["kind"],"properties":{"kind":{"type":"string","enum":["Block"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.2.action.oneOf.1.kind","typeLabel":"enum\u003cstring>"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.2.action.oneOf.1","typeLabel":"Block · object"}],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.2.action","typeLabel":"RequestApproval · object | Block · object"},"dateCreated":{"type":"string","uniqueKey":"\\items.items.[INDEX].oneOf.2.dateCreated","typeLabel":"string"},"dateUpdated":{"type":"string","uniqueKey":"\\items.items.[INDEX].oneOf.2.dateUpdated","typeLabel":"string"},"filters":{"type":"object","properties":{"permissionId":{"type":"object","properties":{"in":{"type":"array","items":{"type":"string","minLength":1,"uniqueKey":"\\items.items.[INDEX].oneOf.2.filters.permissionId.in.items.[INDEX]","typeLabel":"string"},"minItems":1,"maxItems":100,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.2.filters.permissionId.in","typeLabel":"string[]"}},"required":["in"],"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.2.filters.permissionId","typeLabel":"object"}},"required":["permissionId"],"additionalProperties":false,"uniqueKey":"\\items.items.[INDEX].oneOf.2.filters","typeLabel":"object"},"pendingChangeRequest":{"type":"object","properties":{"id":{"type":"string","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.2.pendingChangeRequest.id","typeLabel":"string"},"requester":{"type":"object","properties":{"userId":{"type":"string","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.2.pendingChangeRequest.requester.userId","typeLabel":"string"},"tokenId":{"type":"string","uniqueKey":"\\items.items.[INDEX].oneOf.2.pendingChangeRequest.requester.tokenId","typeLabel":"string"},"appId":{"type":"string","uniqueKey":"\\items.items.[INDEX].oneOf.2.pendingChangeRequest.requester.appId","typeLabel":"string"}},"required":["userId"],"description":"The user who initiated the change request.","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.2.pendingChangeRequest.requester","typeLabel":"object"},"kind":{"type":"string","enum":["Policy"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.2.pendingChangeRequest.kind","typeLabel":"enum\u003cstring>"},"operationKind":{"type":"string","enum":["Update"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.2.pendingChangeRequest.operationKind","typeLabel":"enum\u003cstring>"},"status":{"type":"string","enum":["Applied","Failed","Pending","Rejected"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.2.pendingChangeRequest.status","typeLabel":"enum\u003cstring>"},"entityId":{"type":"string","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.2.pendingChangeRequest.entityId","typeLabel":"string"},"dateCreated":{"type":"string","format":"date-time","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.2.pendingChangeRequest.dateCreated","typeLabel":"string\u003cdate-time>"},"body":{"oneOf":[{"type":"object","title":"Registry:Addresses:Modify","required":["id","name","status","activityKind","rule","action"],"properties":{"id":{"type":"string","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.2.pendingChangeRequest.body.oneOf.0.id","typeLabel":"string"},"name":{"type":"string","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.2.pendingChangeRequest.body.oneOf.0.name","typeLabel":"string"},"status":{"type":"string","enum":["Active","Archived"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.2.pendingChangeRequest.body.oneOf.0.status","typeLabel":"enum\u003cstring>"},"activityKind":{"type":"string","enum":["Registry:Addresses:Modify"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.2.pendingChangeRequest.body.oneOf.0.activityKind","typeLabel":"enum\u003cstring>"},"rule":{"type":"object","properties":{"kind":{"type":"string","enum":["AlwaysTrigger"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.2.pendingChangeRequest.body.oneOf.0.rule.kind","typeLabel":"enum\u003cstring>"},"configuration":{"type":"object","properties":{},"additionalProperties":false,"uniqueKey":"\\items.items.[INDEX].oneOf.2.pendingChangeRequest.body.oneOf.0.rule.configuration","typeLabel":"object"}},"required":["kind"],"additionalProperties":false,"description":"This rule will always be triggered, meaning that if this rule is defined on a policy, the policy will always trigger the policy action, regardless of the activity details.","title":"AlwaysTrigger","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.2.pendingChangeRequest.body.oneOf.0.rule","typeLabel":"AlwaysTrigger · object"},"action":{"oneOf":[{"type":"object","title":"RequestApproval","description":"\nThis action means that activity will first require an Approval process to be completed before it can be executed (or be aborted if someone rejects it during the approval process).\n\nOne or several groups of approvers need to be specified. These groups define who is allowed to approve / reject an activity.\n\nThe activity will only be executed if all approver groups reach their \"quorum\" of approvals. Otherwise, if any one user within any approver group rejects, then the activity is aborted and the call is not executed.\n\nThe example below shows a `RequestApproval` action, configured with one approval group requiring 2 approvals amongst three specific users.\n\n```json\n{\n \"action\": {\n \"kind\": \"RequestApproval\",\n \"autoRejectTimeout\": 60, // minutes\n \"approvalGroups\": [\n {\n \"name\": \"Admins\",\n \"quorum\": 2, // only 2 approvers required in that group \n \"approvers\": {\n \"userId\": {\n \"in\": [\"us-...1\", \"us-...2\", \"us-...3\"],\n }\n }\n }\n ],\n\n }\n}\n```\n\n**Don't lock yourself up**\n\nBy default, users cannot approve an activity they initiated themselves, even if they are in an approval group. To allow this, you must set `initiatorCanApprove: true`.\n\n*Example 1:* For any wallet transfer, a policy is setup to require approval from **1 specific admin user** (eg. the CEO). `initiatorCanApprove` was not set to `true`. If the CEO himself initiates a transfer, no-one can approve his transfer and it's stuck.\n\n*Example 2:* Company has only 3 users. A policy is setup to require approval from **any 3 users** (`quorum: 3`) for any modification of a policy. `initiatorCanApprove` was not set to `true`. In this case, they are locked, and the policy cannot be modified: whoever requests a modification cannot approve, and the policy is therefore always missing one approver. To unlock, they would need to invite a new user and give him the rights to approve as well.\n ","required":["kind","approvalGroups"],"properties":{"kind":{"type":"string","enum":["RequestApproval"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.2.pendingChangeRequest.body.oneOf.0.action.oneOf.0.kind","typeLabel":"enum\u003cstring>"},"approvalGroups":{"type":"array","items":{"type":"object","properties":{"quorum":{"type":"integer","minimum":1,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.2.pendingChangeRequest.body.oneOf.0.action.oneOf.0.approvalGroups.items.[INDEX].quorum","typeLabel":"integer"},"approvers":{"type":"object","properties":{"userId":{"type":"object","properties":{"in":{"type":"array","items":{"type":"string","minLength":1,"uniqueKey":"\\items.items.[INDEX].oneOf.2.pendingChangeRequest.body.oneOf.0.action.oneOf.0.approvalGroups.items.[INDEX].approvers.userId.in.items.[INDEX]","typeLabel":"string"},"minItems":1,"maxItems":100,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.2.pendingChangeRequest.body.oneOf.0.action.oneOf.0.approvalGroups.items.[INDEX].approvers.userId.in","typeLabel":"string[]"}},"required":["in"],"additionalProperties":false,"description":"Users and service accounts who may approve.","uniqueKey":"\\items.items.[INDEX].oneOf.2.pendingChangeRequest.body.oneOf.0.action.oneOf.0.approvalGroups.items.[INDEX].approvers.userId","typeLabel":"object"},"userGroupId":{"type":"object","properties":{"in":{"type":"array","items":{"type":"string","minLength":1,"maxLength":64,"pattern":"^ug-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"User group id.","example":"ug-139tf-f58l8-lsbt6dp47lfsdvgh","uniqueKey":"\\items.items.[INDEX].oneOf.2.pendingChangeRequest.body.oneOf.0.action.oneOf.0.approvalGroups.items.[INDEX].approvers.userGroupId.in.items.[INDEX]","typeLabel":"string"},"minItems":1,"maxItems":100,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.2.pendingChangeRequest.body.oneOf.0.action.oneOf.0.approvalGroups.items.[INDEX].approvers.userGroupId.in","typeLabel":"string[]"}},"required":["in"],"additionalProperties":false,"description":"User groups whose members may approve.","uniqueKey":"\\items.items.[INDEX].oneOf.2.pendingChangeRequest.body.oneOf.0.action.oneOf.0.approvalGroups.items.[INDEX].approvers.userGroupId","typeLabel":"object"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.2.pendingChangeRequest.body.oneOf.0.action.oneOf.0.approvalGroups.items.[INDEX].approvers","typeLabel":"object"},"name":{"type":"string","uniqueKey":"\\items.items.[INDEX].oneOf.2.pendingChangeRequest.body.oneOf.0.action.oneOf.0.approvalGroups.items.[INDEX].name","typeLabel":"string"},"initiatorCanApprove":{"type":"boolean","description":"Whether the initiator of the activity can participate in the approval.","uniqueKey":"\\items.items.[INDEX].oneOf.2.pendingChangeRequest.body.oneOf.0.action.oneOf.0.approvalGroups.items.[INDEX].initiatorCanApprove","typeLabel":"boolean"},"serviceAccountsCanApprove":{"type":"boolean","description":"Whether service accounts can participate in the approval for this group.","uniqueKey":"\\items.items.[INDEX].oneOf.2.pendingChangeRequest.body.oneOf.0.action.oneOf.0.approvalGroups.items.[INDEX].serviceAccountsCanApprove","typeLabel":"boolean"}},"required":["quorum","approvers"],"additionalProperties":false,"uniqueKey":"\\items.items.[INDEX].oneOf.2.pendingChangeRequest.body.oneOf.0.action.oneOf.0.approvalGroups.items.[INDEX]","typeLabel":"object"},"minItems":1,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.2.pendingChangeRequest.body.oneOf.0.action.oneOf.0.approvalGroups","typeLabel":"object[]"},"autoRejectTimeout":{"oneOf":[{"type":"integer","minimum":1,"uniqueKey":"\\items.items.[INDEX].oneOf.2.pendingChangeRequest.body.oneOf.0.action.oneOf.0.autoRejectTimeout.oneOf.0","typeLabel":"integer"},{"type":"null","minimum":1,"uniqueKey":"\\items.items.[INDEX].oneOf.2.pendingChangeRequest.body.oneOf.0.action.oneOf.0.autoRejectTimeout.oneOf.1","typeLabel":"null"}],"uniqueKey":"\\items.items.[INDEX].oneOf.2.pendingChangeRequest.body.oneOf.0.action.oneOf.0.autoRejectTimeout","typeLabel":"integer | null"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.2.pendingChangeRequest.body.oneOf.0.action.oneOf.0","typeLabel":"RequestApproval · object"},{"type":"object","title":"Block","description":"This action means that the activity will be blocked if the policy is triggered.\n\n```json\n{\n \"action\": {\n \"kind\": \"Block\"\n }\n}\n```\n","required":["kind"],"properties":{"kind":{"type":"string","enum":["Block"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.2.pendingChangeRequest.body.oneOf.0.action.oneOf.1.kind","typeLabel":"enum\u003cstring>"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.2.pendingChangeRequest.body.oneOf.0.action.oneOf.1","typeLabel":"Block · object"}],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.2.pendingChangeRequest.body.oneOf.0.action","typeLabel":"RequestApproval · object | Block · object"},"dateCreated":{"type":"string","uniqueKey":"\\items.items.[INDEX].oneOf.2.pendingChangeRequest.body.oneOf.0.dateCreated","typeLabel":"string"},"dateUpdated":{"type":"string","uniqueKey":"\\items.items.[INDEX].oneOf.2.pendingChangeRequest.body.oneOf.0.dateUpdated","typeLabel":"string"},"filters":{"type":"object","properties":{},"uniqueKey":"\\items.items.[INDEX].oneOf.2.pendingChangeRequest.body.oneOf.0.filters","typeLabel":"object"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.2.pendingChangeRequest.body.oneOf.0","typeLabel":"Registry:Addresses:Modify · object"},{"type":"object","title":"Permissions:Assign","required":["id","name","status","activityKind","rule","action"],"properties":{"id":{"type":"string","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.2.pendingChangeRequest.body.oneOf.1.id","typeLabel":"string"},"name":{"type":"string","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.2.pendingChangeRequest.body.oneOf.1.name","typeLabel":"string"},"status":{"type":"string","enum":["Active","Archived"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.2.pendingChangeRequest.body.oneOf.1.status","typeLabel":"enum\u003cstring>"},"activityKind":{"type":"string","enum":["Permissions:Assign"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.2.pendingChangeRequest.body.oneOf.1.activityKind","typeLabel":"enum\u003cstring>"},"rule":{"type":"object","properties":{"kind":{"type":"string","enum":["AlwaysTrigger"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.2.pendingChangeRequest.body.oneOf.1.rule.kind","typeLabel":"enum\u003cstring>"},"configuration":{"type":"object","properties":{},"additionalProperties":false,"uniqueKey":"\\items.items.[INDEX].oneOf.2.pendingChangeRequest.body.oneOf.1.rule.configuration","typeLabel":"object"}},"required":["kind"],"additionalProperties":false,"description":"This rule will always be triggered, meaning that if this rule is defined on a policy, the policy will always trigger the policy action, regardless of the activity details.","title":"AlwaysTrigger","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.2.pendingChangeRequest.body.oneOf.1.rule","typeLabel":"AlwaysTrigger · object"},"action":{"oneOf":[{"type":"object","title":"RequestApproval","description":"\nThis action means that activity will first require an Approval process to be completed before it can be executed (or be aborted if someone rejects it during the approval process).\n\nOne or several groups of approvers need to be specified. These groups define who is allowed to approve / reject an activity.\n\nThe activity will only be executed if all approver groups reach their \"quorum\" of approvals. Otherwise, if any one user within any approver group rejects, then the activity is aborted and the call is not executed.\n\nThe example below shows a `RequestApproval` action, configured with one approval group requiring 2 approvals amongst three specific users.\n\n```json\n{\n \"action\": {\n \"kind\": \"RequestApproval\",\n \"autoRejectTimeout\": 60, // minutes\n \"approvalGroups\": [\n {\n \"name\": \"Admins\",\n \"quorum\": 2, // only 2 approvers required in that group \n \"approvers\": {\n \"userId\": {\n \"in\": [\"us-...1\", \"us-...2\", \"us-...3\"],\n }\n }\n }\n ],\n\n }\n}\n```\n\n**Don't lock yourself up**\n\nBy default, users cannot approve an activity they initiated themselves, even if they are in an approval group. To allow this, you must set `initiatorCanApprove: true`.\n\n*Example 1:* For any wallet transfer, a policy is setup to require approval from **1 specific admin user** (eg. the CEO). `initiatorCanApprove` was not set to `true`. If the CEO himself initiates a transfer, no-one can approve his transfer and it's stuck.\n\n*Example 2:* Company has only 3 users. A policy is setup to require approval from **any 3 users** (`quorum: 3`) for any modification of a policy. `initiatorCanApprove` was not set to `true`. In this case, they are locked, and the policy cannot be modified: whoever requests a modification cannot approve, and the policy is therefore always missing one approver. To unlock, they would need to invite a new user and give him the rights to approve as well.\n ","required":["kind","approvalGroups"],"properties":{"kind":{"type":"string","enum":["RequestApproval"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.2.pendingChangeRequest.body.oneOf.1.action.oneOf.0.kind","typeLabel":"enum\u003cstring>"},"approvalGroups":{"type":"array","items":{"type":"object","properties":{"quorum":{"type":"integer","minimum":1,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.2.pendingChangeRequest.body.oneOf.1.action.oneOf.0.approvalGroups.items.[INDEX].quorum","typeLabel":"integer"},"approvers":{"type":"object","properties":{"userId":{"type":"object","properties":{"in":{"type":"array","items":{"type":"string","minLength":1,"uniqueKey":"\\items.items.[INDEX].oneOf.2.pendingChangeRequest.body.oneOf.1.action.oneOf.0.approvalGroups.items.[INDEX].approvers.userId.in.items.[INDEX]","typeLabel":"string"},"minItems":1,"maxItems":100,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.2.pendingChangeRequest.body.oneOf.1.action.oneOf.0.approvalGroups.items.[INDEX].approvers.userId.in","typeLabel":"string[]"}},"required":["in"],"additionalProperties":false,"description":"Users and service accounts who may approve.","uniqueKey":"\\items.items.[INDEX].oneOf.2.pendingChangeRequest.body.oneOf.1.action.oneOf.0.approvalGroups.items.[INDEX].approvers.userId","typeLabel":"object"},"userGroupId":{"type":"object","properties":{"in":{"type":"array","items":{"type":"string","minLength":1,"maxLength":64,"pattern":"^ug-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"User group id.","example":"ug-139tf-f58l8-lsbt6dp47lfsdvgh","uniqueKey":"\\items.items.[INDEX].oneOf.2.pendingChangeRequest.body.oneOf.1.action.oneOf.0.approvalGroups.items.[INDEX].approvers.userGroupId.in.items.[INDEX]","typeLabel":"string"},"minItems":1,"maxItems":100,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.2.pendingChangeRequest.body.oneOf.1.action.oneOf.0.approvalGroups.items.[INDEX].approvers.userGroupId.in","typeLabel":"string[]"}},"required":["in"],"additionalProperties":false,"description":"User groups whose members may approve.","uniqueKey":"\\items.items.[INDEX].oneOf.2.pendingChangeRequest.body.oneOf.1.action.oneOf.0.approvalGroups.items.[INDEX].approvers.userGroupId","typeLabel":"object"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.2.pendingChangeRequest.body.oneOf.1.action.oneOf.0.approvalGroups.items.[INDEX].approvers","typeLabel":"object"},"name":{"type":"string","uniqueKey":"\\items.items.[INDEX].oneOf.2.pendingChangeRequest.body.oneOf.1.action.oneOf.0.approvalGroups.items.[INDEX].name","typeLabel":"string"},"initiatorCanApprove":{"type":"boolean","description":"Whether the initiator of the activity can participate in the approval.","uniqueKey":"\\items.items.[INDEX].oneOf.2.pendingChangeRequest.body.oneOf.1.action.oneOf.0.approvalGroups.items.[INDEX].initiatorCanApprove","typeLabel":"boolean"},"serviceAccountsCanApprove":{"type":"boolean","description":"Whether service accounts can participate in the approval for this group.","uniqueKey":"\\items.items.[INDEX].oneOf.2.pendingChangeRequest.body.oneOf.1.action.oneOf.0.approvalGroups.items.[INDEX].serviceAccountsCanApprove","typeLabel":"boolean"}},"required":["quorum","approvers"],"additionalProperties":false,"uniqueKey":"\\items.items.[INDEX].oneOf.2.pendingChangeRequest.body.oneOf.1.action.oneOf.0.approvalGroups.items.[INDEX]","typeLabel":"object"},"minItems":1,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.2.pendingChangeRequest.body.oneOf.1.action.oneOf.0.approvalGroups","typeLabel":"object[]"},"autoRejectTimeout":{"oneOf":[{"type":"integer","minimum":1,"uniqueKey":"\\items.items.[INDEX].oneOf.2.pendingChangeRequest.body.oneOf.1.action.oneOf.0.autoRejectTimeout.oneOf.0","typeLabel":"integer"},{"type":"null","minimum":1,"uniqueKey":"\\items.items.[INDEX].oneOf.2.pendingChangeRequest.body.oneOf.1.action.oneOf.0.autoRejectTimeout.oneOf.1","typeLabel":"null"}],"uniqueKey":"\\items.items.[INDEX].oneOf.2.pendingChangeRequest.body.oneOf.1.action.oneOf.0.autoRejectTimeout","typeLabel":"integer | null"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.2.pendingChangeRequest.body.oneOf.1.action.oneOf.0","typeLabel":"RequestApproval · object"},{"type":"object","title":"Block","description":"This action means that the activity will be blocked if the policy is triggered.\n\n```json\n{\n \"action\": {\n \"kind\": \"Block\"\n }\n}\n```\n","required":["kind"],"properties":{"kind":{"type":"string","enum":["Block"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.2.pendingChangeRequest.body.oneOf.1.action.oneOf.1.kind","typeLabel":"enum\u003cstring>"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.2.pendingChangeRequest.body.oneOf.1.action.oneOf.1","typeLabel":"Block · object"}],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.2.pendingChangeRequest.body.oneOf.1.action","typeLabel":"RequestApproval · object | Block · object"},"dateCreated":{"type":"string","uniqueKey":"\\items.items.[INDEX].oneOf.2.pendingChangeRequest.body.oneOf.1.dateCreated","typeLabel":"string"},"dateUpdated":{"type":"string","uniqueKey":"\\items.items.[INDEX].oneOf.2.pendingChangeRequest.body.oneOf.1.dateUpdated","typeLabel":"string"},"filters":{"type":"object","properties":{"permissionId":{"type":"object","properties":{"in":{"type":"array","items":{"type":"string","minLength":1,"uniqueKey":"\\items.items.[INDEX].oneOf.2.pendingChangeRequest.body.oneOf.1.filters.permissionId.in.items.[INDEX]","typeLabel":"string"},"minItems":1,"maxItems":100,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.2.pendingChangeRequest.body.oneOf.1.filters.permissionId.in","typeLabel":"string[]"}},"required":["in"],"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.2.pendingChangeRequest.body.oneOf.1.filters.permissionId","typeLabel":"object"}},"required":["permissionId"],"additionalProperties":false,"uniqueKey":"\\items.items.[INDEX].oneOf.2.pendingChangeRequest.body.oneOf.1.filters","typeLabel":"object"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.2.pendingChangeRequest.body.oneOf.1","typeLabel":"Permissions:Assign · object"},{"type":"object","title":"Permissions:Modify","required":["id","name","status","activityKind","rule","action"],"properties":{"id":{"type":"string","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.2.pendingChangeRequest.body.oneOf.2.id","typeLabel":"string"},"name":{"type":"string","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.2.pendingChangeRequest.body.oneOf.2.name","typeLabel":"string"},"status":{"type":"string","enum":["Active","Archived"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.2.pendingChangeRequest.body.oneOf.2.status","typeLabel":"enum\u003cstring>"},"activityKind":{"type":"string","enum":["Permissions:Modify"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.2.pendingChangeRequest.body.oneOf.2.activityKind","typeLabel":"enum\u003cstring>"},"rule":{"type":"object","properties":{"kind":{"type":"string","enum":["AlwaysTrigger"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.2.pendingChangeRequest.body.oneOf.2.rule.kind","typeLabel":"enum\u003cstring>"},"configuration":{"type":"object","properties":{},"additionalProperties":false,"uniqueKey":"\\items.items.[INDEX].oneOf.2.pendingChangeRequest.body.oneOf.2.rule.configuration","typeLabel":"object"}},"required":["kind"],"additionalProperties":false,"description":"This rule will always be triggered, meaning that if this rule is defined on a policy, the policy will always trigger the policy action, regardless of the activity details.","title":"AlwaysTrigger","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.2.pendingChangeRequest.body.oneOf.2.rule","typeLabel":"AlwaysTrigger · object"},"action":{"oneOf":[{"type":"object","title":"RequestApproval","description":"\nThis action means that activity will first require an Approval process to be completed before it can be executed (or be aborted if someone rejects it during the approval process).\n\nOne or several groups of approvers need to be specified. These groups define who is allowed to approve / reject an activity.\n\nThe activity will only be executed if all approver groups reach their \"quorum\" of approvals. Otherwise, if any one user within any approver group rejects, then the activity is aborted and the call is not executed.\n\nThe example below shows a `RequestApproval` action, configured with one approval group requiring 2 approvals amongst three specific users.\n\n```json\n{\n \"action\": {\n \"kind\": \"RequestApproval\",\n \"autoRejectTimeout\": 60, // minutes\n \"approvalGroups\": [\n {\n \"name\": \"Admins\",\n \"quorum\": 2, // only 2 approvers required in that group \n \"approvers\": {\n \"userId\": {\n \"in\": [\"us-...1\", \"us-...2\", \"us-...3\"],\n }\n }\n }\n ],\n\n }\n}\n```\n\n**Don't lock yourself up**\n\nBy default, users cannot approve an activity they initiated themselves, even if they are in an approval group. To allow this, you must set `initiatorCanApprove: true`.\n\n*Example 1:* For any wallet transfer, a policy is setup to require approval from **1 specific admin user** (eg. the CEO). `initiatorCanApprove` was not set to `true`. If the CEO himself initiates a transfer, no-one can approve his transfer and it's stuck.\n\n*Example 2:* Company has only 3 users. A policy is setup to require approval from **any 3 users** (`quorum: 3`) for any modification of a policy. `initiatorCanApprove` was not set to `true`. In this case, they are locked, and the policy cannot be modified: whoever requests a modification cannot approve, and the policy is therefore always missing one approver. To unlock, they would need to invite a new user and give him the rights to approve as well.\n ","required":["kind","approvalGroups"],"properties":{"kind":{"type":"string","enum":["RequestApproval"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.2.pendingChangeRequest.body.oneOf.2.action.oneOf.0.kind","typeLabel":"enum\u003cstring>"},"approvalGroups":{"type":"array","items":{"type":"object","properties":{"quorum":{"type":"integer","minimum":1,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.2.pendingChangeRequest.body.oneOf.2.action.oneOf.0.approvalGroups.items.[INDEX].quorum","typeLabel":"integer"},"approvers":{"type":"object","properties":{"userId":{"type":"object","properties":{"in":{"type":"array","items":{"type":"string","minLength":1,"uniqueKey":"\\items.items.[INDEX].oneOf.2.pendingChangeRequest.body.oneOf.2.action.oneOf.0.approvalGroups.items.[INDEX].approvers.userId.in.items.[INDEX]","typeLabel":"string"},"minItems":1,"maxItems":100,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.2.pendingChangeRequest.body.oneOf.2.action.oneOf.0.approvalGroups.items.[INDEX].approvers.userId.in","typeLabel":"string[]"}},"required":["in"],"additionalProperties":false,"description":"Users and service accounts who may approve.","uniqueKey":"\\items.items.[INDEX].oneOf.2.pendingChangeRequest.body.oneOf.2.action.oneOf.0.approvalGroups.items.[INDEX].approvers.userId","typeLabel":"object"},"userGroupId":{"type":"object","properties":{"in":{"type":"array","items":{"type":"string","minLength":1,"maxLength":64,"pattern":"^ug-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"User group id.","example":"ug-139tf-f58l8-lsbt6dp47lfsdvgh","uniqueKey":"\\items.items.[INDEX].oneOf.2.pendingChangeRequest.body.oneOf.2.action.oneOf.0.approvalGroups.items.[INDEX].approvers.userGroupId.in.items.[INDEX]","typeLabel":"string"},"minItems":1,"maxItems":100,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.2.pendingChangeRequest.body.oneOf.2.action.oneOf.0.approvalGroups.items.[INDEX].approvers.userGroupId.in","typeLabel":"string[]"}},"required":["in"],"additionalProperties":false,"description":"User groups whose members may approve.","uniqueKey":"\\items.items.[INDEX].oneOf.2.pendingChangeRequest.body.oneOf.2.action.oneOf.0.approvalGroups.items.[INDEX].approvers.userGroupId","typeLabel":"object"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.2.pendingChangeRequest.body.oneOf.2.action.oneOf.0.approvalGroups.items.[INDEX].approvers","typeLabel":"object"},"name":{"type":"string","uniqueKey":"\\items.items.[INDEX].oneOf.2.pendingChangeRequest.body.oneOf.2.action.oneOf.0.approvalGroups.items.[INDEX].name","typeLabel":"string"},"initiatorCanApprove":{"type":"boolean","description":"Whether the initiator of the activity can participate in the approval.","uniqueKey":"\\items.items.[INDEX].oneOf.2.pendingChangeRequest.body.oneOf.2.action.oneOf.0.approvalGroups.items.[INDEX].initiatorCanApprove","typeLabel":"boolean"},"serviceAccountsCanApprove":{"type":"boolean","description":"Whether service accounts can participate in the approval for this group.","uniqueKey":"\\items.items.[INDEX].oneOf.2.pendingChangeRequest.body.oneOf.2.action.oneOf.0.approvalGroups.items.[INDEX].serviceAccountsCanApprove","typeLabel":"boolean"}},"required":["quorum","approvers"],"additionalProperties":false,"uniqueKey":"\\items.items.[INDEX].oneOf.2.pendingChangeRequest.body.oneOf.2.action.oneOf.0.approvalGroups.items.[INDEX]","typeLabel":"object"},"minItems":1,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.2.pendingChangeRequest.body.oneOf.2.action.oneOf.0.approvalGroups","typeLabel":"object[]"},"autoRejectTimeout":{"oneOf":[{"type":"integer","minimum":1,"uniqueKey":"\\items.items.[INDEX].oneOf.2.pendingChangeRequest.body.oneOf.2.action.oneOf.0.autoRejectTimeout.oneOf.0","typeLabel":"integer"},{"type":"null","minimum":1,"uniqueKey":"\\items.items.[INDEX].oneOf.2.pendingChangeRequest.body.oneOf.2.action.oneOf.0.autoRejectTimeout.oneOf.1","typeLabel":"null"}],"uniqueKey":"\\items.items.[INDEX].oneOf.2.pendingChangeRequest.body.oneOf.2.action.oneOf.0.autoRejectTimeout","typeLabel":"integer | null"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.2.pendingChangeRequest.body.oneOf.2.action.oneOf.0","typeLabel":"RequestApproval · object"},{"type":"object","title":"Block","description":"This action means that the activity will be blocked if the policy is triggered.\n\n```json\n{\n \"action\": {\n \"kind\": \"Block\"\n }\n}\n```\n","required":["kind"],"properties":{"kind":{"type":"string","enum":["Block"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.2.pendingChangeRequest.body.oneOf.2.action.oneOf.1.kind","typeLabel":"enum\u003cstring>"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.2.pendingChangeRequest.body.oneOf.2.action.oneOf.1","typeLabel":"Block · object"}],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.2.pendingChangeRequest.body.oneOf.2.action","typeLabel":"RequestApproval · object | Block · object"},"dateCreated":{"type":"string","uniqueKey":"\\items.items.[INDEX].oneOf.2.pendingChangeRequest.body.oneOf.2.dateCreated","typeLabel":"string"},"dateUpdated":{"type":"string","uniqueKey":"\\items.items.[INDEX].oneOf.2.pendingChangeRequest.body.oneOf.2.dateUpdated","typeLabel":"string"},"filters":{"type":"object","properties":{"permissionId":{"type":"object","properties":{"in":{"type":"array","items":{"type":"string","minLength":1,"uniqueKey":"\\items.items.[INDEX].oneOf.2.pendingChangeRequest.body.oneOf.2.filters.permissionId.in.items.[INDEX]","typeLabel":"string"},"minItems":1,"maxItems":100,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.2.pendingChangeRequest.body.oneOf.2.filters.permissionId.in","typeLabel":"string[]"}},"required":["in"],"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.2.pendingChangeRequest.body.oneOf.2.filters.permissionId","typeLabel":"object"}},"required":["permissionId"],"additionalProperties":false,"uniqueKey":"\\items.items.[INDEX].oneOf.2.pendingChangeRequest.body.oneOf.2.filters","typeLabel":"object"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.2.pendingChangeRequest.body.oneOf.2","typeLabel":"Permissions:Modify · object"},{"type":"object","title":"Policies:Modify","required":["id","name","status","activityKind","rule","action"],"properties":{"id":{"type":"string","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.2.pendingChangeRequest.body.oneOf.3.id","typeLabel":"string"},"name":{"type":"string","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.2.pendingChangeRequest.body.oneOf.3.name","typeLabel":"string"},"status":{"type":"string","enum":["Active","Archived"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.2.pendingChangeRequest.body.oneOf.3.status","typeLabel":"enum\u003cstring>"},"activityKind":{"type":"string","enum":["Policies:Modify"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.2.pendingChangeRequest.body.oneOf.3.activityKind","typeLabel":"enum\u003cstring>"},"rule":{"type":"object","properties":{"kind":{"type":"string","enum":["AlwaysTrigger"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.2.pendingChangeRequest.body.oneOf.3.rule.kind","typeLabel":"enum\u003cstring>"},"configuration":{"type":"object","properties":{},"additionalProperties":false,"uniqueKey":"\\items.items.[INDEX].oneOf.2.pendingChangeRequest.body.oneOf.3.rule.configuration","typeLabel":"object"}},"required":["kind"],"additionalProperties":false,"description":"This rule will always be triggered, meaning that if this rule is defined on a policy, the policy will always trigger the policy action, regardless of the activity details.","title":"AlwaysTrigger","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.2.pendingChangeRequest.body.oneOf.3.rule","typeLabel":"AlwaysTrigger · object"},"action":{"type":"object","properties":{"kind":{"type":"string","enum":["RequestApproval"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.2.pendingChangeRequest.body.oneOf.3.action.kind","typeLabel":"enum\u003cstring>"},"approvalGroups":{"type":"array","items":{"type":"object","properties":{"quorum":{"type":"integer","minimum":1,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.2.pendingChangeRequest.body.oneOf.3.action.approvalGroups.items.[INDEX].quorum","typeLabel":"integer"},"approvers":{"type":"object","properties":{"userId":{"type":"object","properties":{"in":{"type":"array","items":{"type":"string","minLength":1,"uniqueKey":"\\items.items.[INDEX].oneOf.2.pendingChangeRequest.body.oneOf.3.action.approvalGroups.items.[INDEX].approvers.userId.in.items.[INDEX]","typeLabel":"string"},"minItems":1,"maxItems":100,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.2.pendingChangeRequest.body.oneOf.3.action.approvalGroups.items.[INDEX].approvers.userId.in","typeLabel":"string[]"}},"required":["in"],"additionalProperties":false,"description":"Users and service accounts who may approve.","uniqueKey":"\\items.items.[INDEX].oneOf.2.pendingChangeRequest.body.oneOf.3.action.approvalGroups.items.[INDEX].approvers.userId","typeLabel":"object"},"userGroupId":{"type":"object","properties":{"in":{"type":"array","items":{"type":"string","minLength":1,"maxLength":64,"pattern":"^ug-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"User group id.","example":"ug-139tf-f58l8-lsbt6dp47lfsdvgh","uniqueKey":"\\items.items.[INDEX].oneOf.2.pendingChangeRequest.body.oneOf.3.action.approvalGroups.items.[INDEX].approvers.userGroupId.in.items.[INDEX]","typeLabel":"string"},"minItems":1,"maxItems":100,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.2.pendingChangeRequest.body.oneOf.3.action.approvalGroups.items.[INDEX].approvers.userGroupId.in","typeLabel":"string[]"}},"required":["in"],"additionalProperties":false,"description":"User groups whose members may approve.","uniqueKey":"\\items.items.[INDEX].oneOf.2.pendingChangeRequest.body.oneOf.3.action.approvalGroups.items.[INDEX].approvers.userGroupId","typeLabel":"object"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.2.pendingChangeRequest.body.oneOf.3.action.approvalGroups.items.[INDEX].approvers","typeLabel":"object"},"name":{"type":"string","uniqueKey":"\\items.items.[INDEX].oneOf.2.pendingChangeRequest.body.oneOf.3.action.approvalGroups.items.[INDEX].name","typeLabel":"string"},"initiatorCanApprove":{"type":"boolean","description":"Whether the initiator of the activity can participate in the approval.","uniqueKey":"\\items.items.[INDEX].oneOf.2.pendingChangeRequest.body.oneOf.3.action.approvalGroups.items.[INDEX].initiatorCanApprove","typeLabel":"boolean"},"serviceAccountsCanApprove":{"type":"boolean","description":"Whether service accounts can participate in the approval for this group.","uniqueKey":"\\items.items.[INDEX].oneOf.2.pendingChangeRequest.body.oneOf.3.action.approvalGroups.items.[INDEX].serviceAccountsCanApprove","typeLabel":"boolean"}},"required":["quorum","approvers"],"additionalProperties":false,"uniqueKey":"\\items.items.[INDEX].oneOf.2.pendingChangeRequest.body.oneOf.3.action.approvalGroups.items.[INDEX]","typeLabel":"object"},"minItems":1,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.2.pendingChangeRequest.body.oneOf.3.action.approvalGroups","typeLabel":"object[]"},"autoRejectTimeout":{"oneOf":[{"type":"integer","minimum":1,"uniqueKey":"\\items.items.[INDEX].oneOf.2.pendingChangeRequest.body.oneOf.3.action.autoRejectTimeout.oneOf.0","typeLabel":"integer"},{"type":"null","minimum":1,"uniqueKey":"\\items.items.[INDEX].oneOf.2.pendingChangeRequest.body.oneOf.3.action.autoRejectTimeout.oneOf.1","typeLabel":"null"}],"uniqueKey":"\\items.items.[INDEX].oneOf.2.pendingChangeRequest.body.oneOf.3.action.autoRejectTimeout","typeLabel":"integer | null"}},"required":["kind","approvalGroups"],"additionalProperties":false,"description":"\nThis action means that activity will first require an Approval process to be completed before it can be executed (or be aborted if someone rejects it during the approval process).\n\nOne or several groups of approvers need to be specified. These groups define who is allowed to approve / reject an activity.\n\nThe activity will only be executed if all approver groups reach their \"quorum\" of approvals. Otherwise, if any one user within any approver group rejects, then the activity is aborted and the call is not executed.\n\nThe example below shows a `RequestApproval` action, configured with one approval group requiring 2 approvals amongst three specific users.\n\n```json\n{\n \"action\": {\n \"kind\": \"RequestApproval\",\n \"autoRejectTimeout\": 60, // minutes\n \"approvalGroups\": [\n {\n \"name\": \"Admins\",\n \"quorum\": 2, // only 2 approvers required in that group \n \"approvers\": {\n \"userId\": {\n \"in\": [\"us-...1\", \"us-...2\", \"us-...3\"],\n }\n }\n }\n ],\n\n }\n}\n```\n\n**Don't lock yourself up**\n\nBy default, users cannot approve an activity they initiated themselves, even if they are in an approval group. To allow this, you must set `initiatorCanApprove: true`.\n\n*Example 1:* For any wallet transfer, a policy is setup to require approval from **1 specific admin user** (eg. the CEO). `initiatorCanApprove` was not set to `true`. If the CEO himself initiates a transfer, no-one can approve his transfer and it's stuck.\n\n*Example 2:* Company has only 3 users. A policy is setup to require approval from **any 3 users** (`quorum: 3`) for any modification of a policy. `initiatorCanApprove` was not set to `true`. In this case, they are locked, and the policy cannot be modified: whoever requests a modification cannot approve, and the policy is therefore always missing one approver. To unlock, they would need to invite a new user and give him the rights to approve as well.\n ","title":"RequestApproval","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.2.pendingChangeRequest.body.oneOf.3.action","typeLabel":"RequestApproval · object"},"dateCreated":{"type":"string","uniqueKey":"\\items.items.[INDEX].oneOf.2.pendingChangeRequest.body.oneOf.3.dateCreated","typeLabel":"string"},"dateUpdated":{"type":"string","uniqueKey":"\\items.items.[INDEX].oneOf.2.pendingChangeRequest.body.oneOf.3.dateUpdated","typeLabel":"string"},"filters":{"type":"object","properties":{"policyId":{"type":"object","properties":{"in":{"type":"array","items":{"type":"string","minLength":1,"uniqueKey":"\\items.items.[INDEX].oneOf.2.pendingChangeRequest.body.oneOf.3.filters.policyId.in.items.[INDEX]","typeLabel":"string"},"minItems":1,"maxItems":100,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.2.pendingChangeRequest.body.oneOf.3.filters.policyId.in","typeLabel":"string[]"}},"required":["in"],"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.2.pendingChangeRequest.body.oneOf.3.filters.policyId","typeLabel":"object"}},"required":["policyId"],"additionalProperties":false,"uniqueKey":"\\items.items.[INDEX].oneOf.2.pendingChangeRequest.body.oneOf.3.filters","typeLabel":"object"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.2.pendingChangeRequest.body.oneOf.3","typeLabel":"Policies:Modify · object"},{"type":"object","title":"Registry:ContractSchemas:Modify","required":["id","name","status","activityKind","rule","action"],"properties":{"id":{"type":"string","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.2.pendingChangeRequest.body.oneOf.4.id","typeLabel":"string"},"name":{"type":"string","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.2.pendingChangeRequest.body.oneOf.4.name","typeLabel":"string"},"status":{"type":"string","enum":["Active","Archived"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.2.pendingChangeRequest.body.oneOf.4.status","typeLabel":"enum\u003cstring>"},"activityKind":{"type":"string","enum":["Registry:ContractSchemas:Modify"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.2.pendingChangeRequest.body.oneOf.4.activityKind","typeLabel":"enum\u003cstring>"},"rule":{"type":"object","properties":{"kind":{"type":"string","enum":["AlwaysTrigger"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.2.pendingChangeRequest.body.oneOf.4.rule.kind","typeLabel":"enum\u003cstring>"},"configuration":{"type":"object","properties":{},"additionalProperties":false,"uniqueKey":"\\items.items.[INDEX].oneOf.2.pendingChangeRequest.body.oneOf.4.rule.configuration","typeLabel":"object"}},"required":["kind"],"additionalProperties":false,"description":"This rule will always be triggered, meaning that if this rule is defined on a policy, the policy will always trigger the policy action, regardless of the activity details.","title":"AlwaysTrigger","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.2.pendingChangeRequest.body.oneOf.4.rule","typeLabel":"AlwaysTrigger · object"},"action":{"oneOf":[{"type":"object","title":"RequestApproval","description":"\nThis action means that activity will first require an Approval process to be completed before it can be executed (or be aborted if someone rejects it during the approval process).\n\nOne or several groups of approvers need to be specified. These groups define who is allowed to approve / reject an activity.\n\nThe activity will only be executed if all approver groups reach their \"quorum\" of approvals. Otherwise, if any one user within any approver group rejects, then the activity is aborted and the call is not executed.\n\nThe example below shows a `RequestApproval` action, configured with one approval group requiring 2 approvals amongst three specific users.\n\n```json\n{\n \"action\": {\n \"kind\": \"RequestApproval\",\n \"autoRejectTimeout\": 60, // minutes\n \"approvalGroups\": [\n {\n \"name\": \"Admins\",\n \"quorum\": 2, // only 2 approvers required in that group \n \"approvers\": {\n \"userId\": {\n \"in\": [\"us-...1\", \"us-...2\", \"us-...3\"],\n }\n }\n }\n ],\n\n }\n}\n```\n\n**Don't lock yourself up**\n\nBy default, users cannot approve an activity they initiated themselves, even if they are in an approval group. To allow this, you must set `initiatorCanApprove: true`.\n\n*Example 1:* For any wallet transfer, a policy is setup to require approval from **1 specific admin user** (eg. the CEO). `initiatorCanApprove` was not set to `true`. If the CEO himself initiates a transfer, no-one can approve his transfer and it's stuck.\n\n*Example 2:* Company has only 3 users. A policy is setup to require approval from **any 3 users** (`quorum: 3`) for any modification of a policy. `initiatorCanApprove` was not set to `true`. In this case, they are locked, and the policy cannot be modified: whoever requests a modification cannot approve, and the policy is therefore always missing one approver. To unlock, they would need to invite a new user and give him the rights to approve as well.\n ","required":["kind","approvalGroups"],"properties":{"kind":{"type":"string","enum":["RequestApproval"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.2.pendingChangeRequest.body.oneOf.4.action.oneOf.0.kind","typeLabel":"enum\u003cstring>"},"approvalGroups":{"type":"array","items":{"type":"object","properties":{"quorum":{"type":"integer","minimum":1,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.2.pendingChangeRequest.body.oneOf.4.action.oneOf.0.approvalGroups.items.[INDEX].quorum","typeLabel":"integer"},"approvers":{"type":"object","properties":{"userId":{"type":"object","properties":{"in":{"type":"array","items":{"type":"string","minLength":1,"uniqueKey":"\\items.items.[INDEX].oneOf.2.pendingChangeRequest.body.oneOf.4.action.oneOf.0.approvalGroups.items.[INDEX].approvers.userId.in.items.[INDEX]","typeLabel":"string"},"minItems":1,"maxItems":100,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.2.pendingChangeRequest.body.oneOf.4.action.oneOf.0.approvalGroups.items.[INDEX].approvers.userId.in","typeLabel":"string[]"}},"required":["in"],"additionalProperties":false,"description":"Users and service accounts who may approve.","uniqueKey":"\\items.items.[INDEX].oneOf.2.pendingChangeRequest.body.oneOf.4.action.oneOf.0.approvalGroups.items.[INDEX].approvers.userId","typeLabel":"object"},"userGroupId":{"type":"object","properties":{"in":{"type":"array","items":{"type":"string","minLength":1,"maxLength":64,"pattern":"^ug-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"User group id.","example":"ug-139tf-f58l8-lsbt6dp47lfsdvgh","uniqueKey":"\\items.items.[INDEX].oneOf.2.pendingChangeRequest.body.oneOf.4.action.oneOf.0.approvalGroups.items.[INDEX].approvers.userGroupId.in.items.[INDEX]","typeLabel":"string"},"minItems":1,"maxItems":100,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.2.pendingChangeRequest.body.oneOf.4.action.oneOf.0.approvalGroups.items.[INDEX].approvers.userGroupId.in","typeLabel":"string[]"}},"required":["in"],"additionalProperties":false,"description":"User groups whose members may approve.","uniqueKey":"\\items.items.[INDEX].oneOf.2.pendingChangeRequest.body.oneOf.4.action.oneOf.0.approvalGroups.items.[INDEX].approvers.userGroupId","typeLabel":"object"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.2.pendingChangeRequest.body.oneOf.4.action.oneOf.0.approvalGroups.items.[INDEX].approvers","typeLabel":"object"},"name":{"type":"string","uniqueKey":"\\items.items.[INDEX].oneOf.2.pendingChangeRequest.body.oneOf.4.action.oneOf.0.approvalGroups.items.[INDEX].name","typeLabel":"string"},"initiatorCanApprove":{"type":"boolean","description":"Whether the initiator of the activity can participate in the approval.","uniqueKey":"\\items.items.[INDEX].oneOf.2.pendingChangeRequest.body.oneOf.4.action.oneOf.0.approvalGroups.items.[INDEX].initiatorCanApprove","typeLabel":"boolean"},"serviceAccountsCanApprove":{"type":"boolean","description":"Whether service accounts can participate in the approval for this group.","uniqueKey":"\\items.items.[INDEX].oneOf.2.pendingChangeRequest.body.oneOf.4.action.oneOf.0.approvalGroups.items.[INDEX].serviceAccountsCanApprove","typeLabel":"boolean"}},"required":["quorum","approvers"],"additionalProperties":false,"uniqueKey":"\\items.items.[INDEX].oneOf.2.pendingChangeRequest.body.oneOf.4.action.oneOf.0.approvalGroups.items.[INDEX]","typeLabel":"object"},"minItems":1,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.2.pendingChangeRequest.body.oneOf.4.action.oneOf.0.approvalGroups","typeLabel":"object[]"},"autoRejectTimeout":{"oneOf":[{"type":"integer","minimum":1,"uniqueKey":"\\items.items.[INDEX].oneOf.2.pendingChangeRequest.body.oneOf.4.action.oneOf.0.autoRejectTimeout.oneOf.0","typeLabel":"integer"},{"type":"null","minimum":1,"uniqueKey":"\\items.items.[INDEX].oneOf.2.pendingChangeRequest.body.oneOf.4.action.oneOf.0.autoRejectTimeout.oneOf.1","typeLabel":"null"}],"uniqueKey":"\\items.items.[INDEX].oneOf.2.pendingChangeRequest.body.oneOf.4.action.oneOf.0.autoRejectTimeout","typeLabel":"integer | null"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.2.pendingChangeRequest.body.oneOf.4.action.oneOf.0","typeLabel":"RequestApproval · object"},{"type":"object","title":"Block","description":"This action means that the activity will be blocked if the policy is triggered.\n\n```json\n{\n \"action\": {\n \"kind\": \"Block\"\n }\n}\n```\n","required":["kind"],"properties":{"kind":{"type":"string","enum":["Block"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.2.pendingChangeRequest.body.oneOf.4.action.oneOf.1.kind","typeLabel":"enum\u003cstring>"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.2.pendingChangeRequest.body.oneOf.4.action.oneOf.1","typeLabel":"Block · object"}],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.2.pendingChangeRequest.body.oneOf.4.action","typeLabel":"RequestApproval · object | Block · object"},"dateCreated":{"type":"string","uniqueKey":"\\items.items.[INDEX].oneOf.2.pendingChangeRequest.body.oneOf.4.dateCreated","typeLabel":"string"},"dateUpdated":{"type":"string","uniqueKey":"\\items.items.[INDEX].oneOf.2.pendingChangeRequest.body.oneOf.4.dateUpdated","typeLabel":"string"},"filters":{"type":"object","properties":{},"uniqueKey":"\\items.items.[INDEX].oneOf.2.pendingChangeRequest.body.oneOf.4.filters","typeLabel":"object"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.2.pendingChangeRequest.body.oneOf.4","typeLabel":"Registry:ContractSchemas:Modify · object"},{"type":"object","title":"Wallets:Sign","required":["id","name","status","activityKind","rule","action"],"properties":{"id":{"type":"string","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.2.pendingChangeRequest.body.oneOf.5.id","typeLabel":"string"},"name":{"type":"string","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.2.pendingChangeRequest.body.oneOf.5.name","typeLabel":"string"},"status":{"type":"string","enum":["Active","Archived"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.2.pendingChangeRequest.body.oneOf.5.status","typeLabel":"enum\u003cstring>"},"activityKind":{"type":"string","enum":["Wallets:Sign"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.2.pendingChangeRequest.body.oneOf.5.activityKind","typeLabel":"enum\u003cstring>"},"rule":{"oneOf":[{"type":"object","title":"AlwaysTrigger","description":"This rule will always be triggered, meaning that if this rule is defined on a policy, the policy will always trigger the policy action, regardless of the activity details.","required":["kind"],"properties":{"kind":{"type":"string","enum":["AlwaysTrigger"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.2.pendingChangeRequest.body.oneOf.5.rule.oneOf.0.kind","typeLabel":"enum\u003cstring>"},"configuration":{"type":"object","properties":{},"additionalProperties":false,"uniqueKey":"\\items.items.[INDEX].oneOf.2.pendingChangeRequest.body.oneOf.5.rule.oneOf.0.configuration","typeLabel":"object"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.2.pendingChangeRequest.body.oneOf.5.rule.oneOf.0","typeLabel":"AlwaysTrigger · object"},{"type":"object","title":"TransactionRecipientWhitelist","description":"This rule will trigger if the destination address *is NOT whitelisted*.","required":["kind","configuration"],"properties":{"kind":{"type":"string","enum":["TransactionRecipientWhitelist"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.2.pendingChangeRequest.body.oneOf.5.rule.oneOf.1.kind","typeLabel":"enum\u003cstring>"},"configuration":{"type":"object","properties":{"addresses":{"type":"array","items":{"type":"string","minLength":1,"uniqueKey":"\\items.items.[INDEX].oneOf.2.pendingChangeRequest.body.oneOf.5.rule.oneOf.1.configuration.addresses.items.[INDEX]","typeLabel":"string"},"description":"Whitelisted recipient addresses","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.2.pendingChangeRequest.body.oneOf.5.rule.oneOf.1.configuration.addresses","typeLabel":"string[]"}},"required":["addresses"],"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.2.pendingChangeRequest.body.oneOf.5.rule.oneOf.1.configuration","typeLabel":"object"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.2.pendingChangeRequest.body.oneOf.5.rule.oneOf.1","typeLabel":"TransactionRecipientWhitelist · object"},{"type":"object","title":"TransactionAmountLimit","description":"This rule will trigger if the wallet activity detected is transferring some value whose amount is equal to or greater than a given limit. The limit is inclusive: a transfer whose value exactly equals the limit also triggers.\n\nThe limit is expressed in a fiat `currency` and evaluated against the market value of the transfer. To set a threshold in the asset's own units instead, use `TransactionAmountLimitNominal`.\n\nNote: If the amount of the wallet activity cannot be evaluated for any reason (eg. market prices are not available, or eg. the amount cannot be inferred from a wallet signature request, etc.), by default the rule will trigger the policy (this is called \"failing closed\" and is generally considered a security best practice).","required":["kind","configuration"],"properties":{"kind":{"type":"string","enum":["TransactionAmountLimit"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.2.pendingChangeRequest.body.oneOf.5.rule.oneOf.2.kind","typeLabel":"enum\u003cstring>"},"configuration":{"type":"object","properties":{"limit":{"type":"number","description":"Amount limit in `currency`","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.2.pendingChangeRequest.body.oneOf.5.rule.oneOf.2.configuration.limit","typeLabel":"number"},"currency":{"type":"string","enum":["USD"],"description":"Fiat currency, currently only `USD`","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.2.pendingChangeRequest.body.oneOf.5.rule.oneOf.2.configuration.currency","typeLabel":"enum\u003cstring>"}},"required":["limit","currency"],"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.2.pendingChangeRequest.body.oneOf.5.rule.oneOf.2.configuration","typeLabel":"object"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.2.pendingChangeRequest.body.oneOf.5.rule.oneOf.2","typeLabel":"TransactionAmountLimit · object"},{"type":"object","title":"TransactionAmountLimitNominal","description":"This rule will trigger if the wallet activity detected is transferring more of a listed asset than that asset's limit.\n\nEach limit is expressed in the minimum denomination of its own asset and compared against the transferred amount directly, so the verdict needs no market data and does not move with a price. To set a threshold on the fiat value of a transfer instead, use `TransactionAmountLimit`.\n\nLimits are asset exact: an asset is identified by its network and its Dfns token identifier, so a wrapped or staked derivative is a different asset from the thing it tracks, and a transfer of an asset the rule does not list will not trigger it.\n\nNote: If the transferred amount or the asset cannot be determined for any reason, by default the rule will trigger the policy (this is called \"failing closed\" and is generally considered a security best practice).","required":["kind","configuration"],"properties":{"kind":{"type":"string","enum":["TransactionAmountLimitNominal"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.2.pendingChangeRequest.body.oneOf.5.rule.oneOf.3.kind","typeLabel":"enum\u003cstring>"},"configuration":{"type":"object","properties":{"assets":{"type":"array","items":{"type":"object","properties":{"network":{"type":"string","title":"Network","description":"The network the asset lives on.","enum":["Algorand","AlgorandTestnet","Aptos","AptosTestnet","ArbitrumOne","ArbitrumSepolia","Arc","ArcTestnet","Areum","AvalancheC","AvalancheCFuji","Base","BaseSepolia","Berachain","BerachainBepolia","Bitcoin","BitcoinSignet","BitcoinTestnet4","BitcoinCash","Bob","BobSepolia","Bsc","BscTestnet","Canton","CantonTestnet","Cardano","CardanoPreprod","Concordium","ConcordiumTestnet","Celo","CeloSepolia","Codex","CodexSepolia","CosmosHub4","CosmosIcsTestnet","Dogecoin","DogecoinTestnet","Ethereum","EthereumClassic","EthereumClassicMordor","EthereumSepolia","EthereumHoodi","FlareC","FlareCCoston2","FlowEvm","FlowEvmTestnet","Hedera","HederaTestnet","HyperEvm","HyperEvmTestnet","Ink","InkSepolia","InternetComputer","Ion","IonTestnet","Iota","IotaTestnet","Kusama","KusamaAssetHub","Litecoin","LitecoinTestnet","Monad","MonadTestnet","Movement","MovementTestnet","Near","NearTestnet","Optimism","OptimismSepolia","Origyn","Plasma","PlasmaTestnet","Plume","PlumeSepolia","Paseo","PaseoAssetHub","Polkadot","PolkadotAssetHub","Polygon","PolygonAmoy","Polymesh","PolymeshTestnet","Rayls","RaylsTestnet","Robinhood","RobinhoodSepolia","SeiAtlantic2","SeiPacific1","Solana","SolanaDevnet","Sonic","SonicTestnet","Starknet","StarknetSepolia","Stellar","StellarTestnet","Sui","SuiTestnet","Tezos","TezosShadownet","Tempo","TempoModerato","Tsc","TscTestnet1","Ton","TonTestnet","Tron","TronNile","Westend","WestendAssetHub","Xdc","XdcApothem","XLayer","XLayerSepolia","XrpLedger","XrpLedgerTestnet"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.2.pendingChangeRequest.body.oneOf.5.rule.oneOf.3.configuration.assets.items.[INDEX].network","typeLabel":"enum\u003cstring>"},"tid":{"type":"string","minLength":1,"maxLength":200,"pattern":"^[a-z0-9_]+:[^\\s](?:[ ]?[^\\s])*$","description":"The Dfns token identifier of the asset, for example `native:eth` or `erc20:0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48`. Must be canonical: token contract addresses on hex based networks are lower cased.","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.2.pendingChangeRequest.body.oneOf.5.rule.oneOf.3.configuration.assets.items.[INDEX].tid","typeLabel":"string"},"limit":{"type":"string","pattern":"^\\d+$","description":"Amount limit in the minimum denomination of the asset, as an integer string, matching how a transfer expresses its amount. For an 18 decimal token `\"5000000000000000000\"` is 5 whole tokens.","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.2.pendingChangeRequest.body.oneOf.5.rule.oneOf.3.configuration.assets.items.[INDEX].limit","typeLabel":"string"}},"required":["network","tid","limit"],"additionalProperties":false,"uniqueKey":"\\items.items.[INDEX].oneOf.2.pendingChangeRequest.body.oneOf.5.rule.oneOf.3.configuration.assets.items.[INDEX]","typeLabel":"object"},"minItems":1,"maxItems":100,"description":"The assets this rule applies to, each with its own limit. A transfer of an asset that is not listed does not trigger the rule. The limit applies to each matching transfer individually; nothing is accumulated across transfers.","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.2.pendingChangeRequest.body.oneOf.5.rule.oneOf.3.configuration.assets","typeLabel":"object[]"}},"required":["assets"],"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.2.pendingChangeRequest.body.oneOf.5.rule.oneOf.3.configuration","typeLabel":"object"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.2.pendingChangeRequest.body.oneOf.5.rule.oneOf.3","typeLabel":"TransactionAmountLimitNominal · object"},{"type":"object","title":"TransactionAmountVelocity","description":"This rule will trigger if the cumulative amount transferred from a given wallet within a given timeframe is greater than a specified limit. The aggregate amount evaluated is based only on the wallet that triggered the policy.","required":["kind","configuration"],"properties":{"kind":{"type":"string","enum":["TransactionAmountVelocity"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.2.pendingChangeRequest.body.oneOf.5.rule.oneOf.4.kind","typeLabel":"enum\u003cstring>"},"configuration":{"type":"object","properties":{"limit":{"type":"number","description":"Amount limit in `currency`","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.2.pendingChangeRequest.body.oneOf.5.rule.oneOf.4.configuration.limit","typeLabel":"number"},"currency":{"type":"string","enum":["USD"],"description":"Currency for the amount limit above","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.2.pendingChangeRequest.body.oneOf.5.rule.oneOf.4.configuration.currency","typeLabel":"enum\u003cstring>"},"timeframe":{"type":"integer","minimum":1,"maximum":43200,"description":"Time period in minutes. Minimum 1, Maximum 43,200.","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.2.pendingChangeRequest.body.oneOf.5.rule.oneOf.4.configuration.timeframe","typeLabel":"integer"}},"required":["limit","currency","timeframe"],"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.2.pendingChangeRequest.body.oneOf.5.rule.oneOf.4.configuration","typeLabel":"object"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.2.pendingChangeRequest.body.oneOf.5.rule.oneOf.4","typeLabel":"TransactionAmountVelocity · object"},{"type":"object","title":"TransactionCountVelocity","description":"This rule will trigger if the number of wallet activities for a given wallet within a given timeframe, is greater than a specified limit. The aggregate number of transactions evaluated is based only on the wallet that triggered the policy.","required":["kind","configuration"],"properties":{"kind":{"type":"string","enum":["TransactionCountVelocity"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.2.pendingChangeRequest.body.oneOf.5.rule.oneOf.5.kind","typeLabel":"enum\u003cstring>"},"configuration":{"type":"object","properties":{"limit":{"type":"number","description":"Count limit","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.2.pendingChangeRequest.body.oneOf.5.rule.oneOf.5.configuration.limit","typeLabel":"number"},"timeframe":{"type":"integer","minimum":1,"maximum":43200,"description":"Time period in minutes. Minimum 1, Maximum 43,200.","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.2.pendingChangeRequest.body.oneOf.5.rule.oneOf.5.configuration.timeframe","typeLabel":"integer"}},"required":["limit","timeframe"],"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.2.pendingChangeRequest.body.oneOf.5.rule.oneOf.5.configuration","typeLabel":"object"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.2.pendingChangeRequest.body.oneOf.5.rule.oneOf.5","typeLabel":"TransactionCountVelocity · object"},{"type":"object","title":"ChainalysisTransactionPrescreening","description":"\n\u003cInfo>\nThis rule can only be used once the Chainalysis integration is activated from the Dfns dashboard settings. (see more on [Chainalysis](https://docs.dfns.co/integrations/aml-kyt/chainalysis) integration page).\n\u003c/Info>\n\nIt's a rule based on [Chainalysis](https://docs.dfns.co/integrations/aml-kyt/chainalysis) KYT integration (Know-Your-Transaction). Upon transfer attempt, we will first register the transfer with Chainalysis (as a [\"withdrawal attempt\"](https://docs.chainalysis.com/api/kyt/#registration-register-a-withdrawal-attempt)), and fetch the screening results (alerts, exposures, addresses detected). Based on the results, and the configuration of this rule, the policy will be triggered.\n\nIt's called \"Pre\"-screening, because the scanned transaction is not on chain yet, it's still a transaction attempt (before the transaction actually make it on chain).\n\n```json\n{\n \"rule\": {\n \"kind\": \"ChainalysisTransactionPrescreening\",\n \"configuration\": {\n \"alerts\": {\n \"alertLevel\": \"LOW\",\n \"categoryIds\": []\n },\n \"exposures\": {\n \"direct\": {\n \"categoryIds\": []\n }\n },\n \"addresses\": {\n \"categoryIds\": []\n },\n \"fallbackBehaviours\": {\n \"skipUnscreenableTransaction\": false,\n \"skipUnsupportedNetwork\": false,\n \"skipUnsupportedAsset\": false,\n \"skipChainalysisFailure\": false\n }\n }\n }\n}\n```\n\n**Configuration**\n\n| Property | Type | Description |\n| --- | --- | --- |\n| `alerts`\u003cbr>\u003cbr>`.alertLevel`* | `string` | Minimum alert level above which the rule should trigger, if any [alert is returned in Chainalysis results](https://docs.chainalysis.com/api/kyt/#withdrawal-attempts-get-alerts). Can be `LOW`, `MEDIUM`, `HIGH`, or `SEVERE` |\n| `alerts`\u003cbr>\u003cbr>`.categoryIds`* | list of integers | List of Chainalysis category IDs (see [here](https://docs.chainalysis.com/api/kyt/#categories)). If you leave this list empty, alerts of any category will trigger the rule. Otherwise, if you only want the rule to trigger on specific categories, you can specify some in the list. |\n| `exposures`\u003cbr>\u003cbr>`.direct`\u003cbr>\u003cbr>`.categoryIds`* | list of integers | List of Chainalysis category IDs (see [here](https://docs.chainalysis.com/api/kyt/#categories)). If you leave this list empty, a [direct exposure](https://docs.chainalysis.com/api/kyt/#withdrawal-attempts-get-direct-exposure) of any category detected by chainalysis will trigger the rule. Otherwise, if you only want the rule to trigger on specific categories, you can specify some in the list. |\n| `addresses`\u003cbr>\u003cbr>`.categoryIds`* | list of integers | List of Chainalysis category IDs (see [here](https://docs.chainalysis.com/api/kyt/#categories)). If you leave this list empty, an [address](https://docs.chainalysis.com/api/kyt/#withdrawal-attempts-get-address-identifications) of any category identified by chainalysis will trigger the rule. Otherwise, if you only want the rule to trigger on specific categories, you can specify some in the list. |\n| `fallbackBehaviours`\u003cbr>\u003cbr>`.skipUnscreenableTransaction`* | boolean | Behaviour if the wallet activity is not screenable (eg. if it's a signature request of a hash). If true, a transaction which is \"unscreenable\" will just be skipped, and policy will not trigger |\n| `fallbackBehaviours.skipUnsupportedNetwork`* | boolean | Behaviour if the wallet activity is on a network not supported by chainalysis, or not yet supported in the dfns-chainalysis integration. If true, an unsupported network will just be skipped, and policy will not trigger |\n| `fallbackBehaviours.skipUnsupportedAsset`* | boolean | Behaviour if the wallet activity is with a asset not supported by chainalysis, or not yet supported in the dfns-chainalysis integration. If true, an unsupported asset will just be skipped, and policy will not trigger |\n| `fallbackBehaviours.skipChainalysisFailure`* | boolean | Behaviour if any issue with Chainalysis calls (timeout, results took too long, rate limiting errors, any error). If true, will skip if any error happens |\n\n","required":["kind","configuration"],"properties":{"kind":{"type":"string","enum":["ChainalysisTransactionPrescreening"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.2.pendingChangeRequest.body.oneOf.5.rule.oneOf.6.kind","typeLabel":"enum\u003cstring>"},"configuration":{"type":"object","properties":{"alerts":{"type":"object","properties":{"alertLevel":{"type":"string","enum":["LOW","MEDIUM","HIGH","SEVERE"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.2.pendingChangeRequest.body.oneOf.5.rule.oneOf.6.configuration.alerts.alertLevel","typeLabel":"enum\u003cstring>"},"categoryIds":{"type":"array","items":{"type":"integer","exclusiveMinimum":0,"uniqueKey":"\\items.items.[INDEX].oneOf.2.pendingChangeRequest.body.oneOf.5.rule.oneOf.6.configuration.alerts.categoryIds.items.[INDEX]","typeLabel":"integer"},"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.2.pendingChangeRequest.body.oneOf.5.rule.oneOf.6.configuration.alerts.categoryIds","typeLabel":"integer[]"}},"required":["alertLevel","categoryIds"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.2.pendingChangeRequest.body.oneOf.5.rule.oneOf.6.configuration.alerts","typeLabel":"object"},"exposures":{"type":"object","properties":{"direct":{"type":"object","properties":{"categoryIds":{"type":"array","items":{"type":"integer","exclusiveMinimum":0,"uniqueKey":"\\items.items.[INDEX].oneOf.2.pendingChangeRequest.body.oneOf.5.rule.oneOf.6.configuration.exposures.direct.categoryIds.items.[INDEX]","typeLabel":"integer"},"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.2.pendingChangeRequest.body.oneOf.5.rule.oneOf.6.configuration.exposures.direct.categoryIds","typeLabel":"integer[]"}},"required":["categoryIds"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.2.pendingChangeRequest.body.oneOf.5.rule.oneOf.6.configuration.exposures.direct","typeLabel":"object"}},"required":["direct"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.2.pendingChangeRequest.body.oneOf.5.rule.oneOf.6.configuration.exposures","typeLabel":"object"},"addresses":{"type":"object","properties":{"categoryIds":{"type":"array","items":{"type":"integer","exclusiveMinimum":0,"uniqueKey":"\\items.items.[INDEX].oneOf.2.pendingChangeRequest.body.oneOf.5.rule.oneOf.6.configuration.addresses.categoryIds.items.[INDEX]","typeLabel":"integer"},"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.2.pendingChangeRequest.body.oneOf.5.rule.oneOf.6.configuration.addresses.categoryIds","typeLabel":"integer[]"}},"required":["categoryIds"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.2.pendingChangeRequest.body.oneOf.5.rule.oneOf.6.configuration.addresses","typeLabel":"object"},"fallbackBehaviours":{"type":"object","properties":{"skipUnscreenableTransaction":{"type":"boolean","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.2.pendingChangeRequest.body.oneOf.5.rule.oneOf.6.configuration.fallbackBehaviours.skipUnscreenableTransaction","typeLabel":"boolean"},"skipUnsupportedNetwork":{"type":"boolean","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.2.pendingChangeRequest.body.oneOf.5.rule.oneOf.6.configuration.fallbackBehaviours.skipUnsupportedNetwork","typeLabel":"boolean"},"skipUnsupportedAsset":{"type":"boolean","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.2.pendingChangeRequest.body.oneOf.5.rule.oneOf.6.configuration.fallbackBehaviours.skipUnsupportedAsset","typeLabel":"boolean"},"skipChainalysisFailure":{"type":"boolean","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.2.pendingChangeRequest.body.oneOf.5.rule.oneOf.6.configuration.fallbackBehaviours.skipChainalysisFailure","typeLabel":"boolean"}},"required":["skipUnscreenableTransaction","skipUnsupportedNetwork","skipUnsupportedAsset","skipChainalysisFailure"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.2.pendingChangeRequest.body.oneOf.5.rule.oneOf.6.configuration.fallbackBehaviours","typeLabel":"object"},"userIdTemplate":{"type":"string","minLength":1,"maxLength":50,"pattern":"^([a-zA-Z0-9_:-]|{wallet\\.id}|{wallet\\.externalId})+$","default":"dfns","description":"**Deprecated** — set `userIdTemplate` on the Chainalysis integration setting instead; when set there, the integration-level template takes precedence over this one.\n\nValue sent to Chainalysis as the \"user ID\". Used by Chainalysis for grouping transaction screenings.\n \nThis template can include variables, included in brackets. The following variables are currently supported: `{wallet.id}` and `{wallet.externalId}`.\nAs an example, if you set `userIdTemplate: \"dfns:{wallet.id}_{wallet.externalId}\"`, when your wallet receives a transaction that gets screened by a Chainalysis policy, the \"user ID\" sent to Chainalysis will be `dfns:wa-xxx_yyy` (`wa-xxx` being the wallet ID, and `yyy` being the wallet external ID).","uniqueKey":"\\items.items.[INDEX].oneOf.2.pendingChangeRequest.body.oneOf.5.rule.oneOf.6.configuration.userIdTemplate","typeLabel":"string"}},"required":["alerts","exposures","addresses","fallbackBehaviours"],"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.2.pendingChangeRequest.body.oneOf.5.rule.oneOf.6.configuration","typeLabel":"object"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.2.pendingChangeRequest.body.oneOf.5.rule.oneOf.6","typeLabel":"ChainalysisTransactionPrescreening · object"},{"type":"object","title":"EllipticTransactionPrescreening","description":"\n\u003cInfo>\nThis rule can only be used once the Elliptic integration is activated from the Dfns dashboard settings.\n\u003c/Info>\n\nThis rule uses Elliptic KYT for pre-screening outgoing transfers. Upon transfer attempt, we run a synchronous Elliptic wallet analysis of the destination address, and check the returned risk score against the configured threshold, plus any configured risk rules / categories. If at or above the threshold, or if a configured rule / category matched, the policy is triggered.\n\nIt's called \"Pre\"-screening, because the scanned transaction is not on chain yet, it's still a transaction attempt.","required":["kind","configuration"],"properties":{"kind":{"type":"string","enum":["EllipticTransactionPrescreening"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.2.pendingChangeRequest.body.oneOf.5.rule.oneOf.7.kind","typeLabel":"enum\u003cstring>"},"configuration":{"type":"object","properties":{"riskScoreThreshold":{"type":"number","minimum":0,"maximum":10,"description":"Risk score threshold (0-10, decimals allowed). The policy triggers if the Elliptic risk score is at or above the threshold.","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.2.pendingChangeRequest.body.oneOf.5.rule.oneOf.7.configuration.riskScoreThreshold","typeLabel":"number"},"triggeredRules":{"type":"object","properties":{"ruleIds":{"type":"array","items":{"type":"string","format":"uuid","uniqueKey":"\\items.items.[INDEX].oneOf.2.pendingChangeRequest.body.oneOf.5.rule.oneOf.7.configuration.triggeredRules.ruleIds.items.[INDEX]","typeLabel":"string\u003cuuid>"},"description":"IDs of risk rules from your Elliptic risk model. If any of these rules matched the analysis, the policy triggers regardless of the risk score. Leave empty to trigger on the risk score threshold only.","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.2.pendingChangeRequest.body.oneOf.5.rule.oneOf.7.configuration.triggeredRules.ruleIds","typeLabel":"string\u003cuuid>[]"},"categories":{"type":"array","items":{"type":"string","minLength":1,"uniqueKey":"\\items.items.[INDEX].oneOf.2.pendingChangeRequest.body.oneOf.5.rule.oneOf.7.configuration.triggeredRules.categories.items.[INDEX]","typeLabel":"string"},"description":"Elliptic category names (eg. \"Dark Market\"), matched case-insensitively. If a matched risk rule involves any of these categories, the policy triggers regardless of the risk score. Leave empty to trigger on the risk score threshold only.","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.2.pendingChangeRequest.body.oneOf.5.rule.oneOf.7.configuration.triggeredRules.categories","typeLabel":"string[]"}},"required":["ruleIds","categories"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.2.pendingChangeRequest.body.oneOf.5.rule.oneOf.7.configuration.triggeredRules","typeLabel":"object"},"fallbackBehaviours":{"type":"object","properties":{"skipUnscreenableTransaction":{"type":"boolean","description":"skip all wallet requests that cannot be screened (eg. raw signatures)","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.2.pendingChangeRequest.body.oneOf.5.rule.oneOf.7.configuration.fallbackBehaviours.skipUnscreenableTransaction","typeLabel":"boolean"},"skipUnsupportedNetwork":{"type":"boolean","description":"skip requests on a network not supported yet in our Elliptic integration","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.2.pendingChangeRequest.body.oneOf.5.rule.oneOf.7.configuration.fallbackBehaviours.skipUnsupportedNetwork","typeLabel":"boolean"},"skipEllipticFailure":{"type":"boolean","description":"skip any failure of the Elliptic analysis (timeout, rate limiting, any error)","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.2.pendingChangeRequest.body.oneOf.5.rule.oneOf.7.configuration.fallbackBehaviours.skipEllipticFailure","typeLabel":"boolean"}},"required":["skipUnscreenableTransaction","skipUnsupportedNetwork","skipEllipticFailure"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.2.pendingChangeRequest.body.oneOf.5.rule.oneOf.7.configuration.fallbackBehaviours","typeLabel":"object"}},"required":["riskScoreThreshold","triggeredRules","fallbackBehaviours"],"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.2.pendingChangeRequest.body.oneOf.5.rule.oneOf.7.configuration","typeLabel":"object"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.2.pendingChangeRequest.body.oneOf.5.rule.oneOf.7","typeLabel":"EllipticTransactionPrescreening · object"},{"type":"object","title":"GlobalLedgerTransactionPrescreening","description":"This rule uses GlobalLedger KYT for pre-screening outgoing transfers by checking the destination address risk score.\n\nUpon transfer attempt, we will query GlobalLedger's address risk API, and check if the risk score (0-100) is at or above the configured threshold, or if any alerts show up. If so, the policy will be triggered.\n\nIt's called \"Pre\"-screening, because the scanned transaction is not on chain yet, it's still a transaction attempt.","required":["kind","configuration"],"properties":{"kind":{"type":"string","enum":["GlobalLedgerTransactionPrescreening"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.2.pendingChangeRequest.body.oneOf.5.rule.oneOf.8.kind","typeLabel":"enum\u003cstring>"},"configuration":{"type":"object","properties":{"riskScoreThreshold":{"type":"integer","minimum":0,"maximum":100,"description":"Risk score threshold (0-100). Policy triggers if address/transaction risk score >= threshold","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.2.pendingChangeRequest.body.oneOf.5.rule.oneOf.8.configuration.riskScoreThreshold","typeLabel":"integer"},"fallbackBehaviours":{"type":"object","properties":{"skipUnscreenableTransaction":{"type":"boolean","description":"skip all wallet requests that cannot be screened (eg. raw signatures)","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.2.pendingChangeRequest.body.oneOf.5.rule.oneOf.8.configuration.fallbackBehaviours.skipUnscreenableTransaction","typeLabel":"boolean"},"skipUnsupportedNetwork":{"type":"boolean","description":"skip transfer requests to a network not supported yet in our GlobalLedger integration","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.2.pendingChangeRequest.body.oneOf.5.rule.oneOf.8.configuration.fallbackBehaviours.skipUnsupportedNetwork","typeLabel":"boolean"},"skipUnsupportedAsset":{"type":"boolean","description":"skip transfer requests of an asset not supported by our GlobalLedger integration","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.2.pendingChangeRequest.body.oneOf.5.rule.oneOf.8.configuration.fallbackBehaviours.skipUnsupportedAsset","typeLabel":"boolean"},"skipGlobalLedgerFailure":{"type":"boolean","description":"skips any errors from GlobalLedger API request","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.2.pendingChangeRequest.body.oneOf.5.rule.oneOf.8.configuration.fallbackBehaviours.skipGlobalLedgerFailure","typeLabel":"boolean"}},"required":["skipUnscreenableTransaction","skipUnsupportedNetwork","skipUnsupportedAsset","skipGlobalLedgerFailure"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.2.pendingChangeRequest.body.oneOf.5.rule.oneOf.8.configuration.fallbackBehaviours","typeLabel":"object"}},"required":["riskScoreThreshold","fallbackBehaviours"],"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.2.pendingChangeRequest.body.oneOf.5.rule.oneOf.8.configuration","typeLabel":"object"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.2.pendingChangeRequest.body.oneOf.5.rule.oneOf.8","typeLabel":"GlobalLedgerTransactionPrescreening · object"},{"type":"object","title":"TravelRuleTransactionPrescreening","description":"This rule applies a Travel Rule check to outgoing transfers through the vendor selected in `configuration.vendor`: [Notabene](https://docs.dfns.co/integrations/travel-rule/notabene) or Sumsub. It can only be used once that vendor's integration is activated from the Dfns dashboard settings.\n\nIt ***ONLY*** applies to Dfns [Transfer Asset](https://docs.dfns.co/api-reference/wallets/transfer-asset) Api Calls. It is NOT supported for Transfers initiated via the dashboard. Upon transfer attempt with a [TravelRule](https://docs.dfns.co/api-reference/wallets/transfer-asset#body-travel-rule) payload, we call the vendor's APIs on your behalf to validate and submit the travel rule message, then wait for its outcome. With Notabene, Dfns waits for a response from the counterparty (for custodial transfers) or from Notabene (for non-custodial transfers). With Sumsub, Dfns submits a Travel Rule message and waits for Sumsub to report its outcome. In both cases the wait is bounded by `configuration.autoTriggerTimeoutSeconds`, after which the policy's configured action is applied.\n\nThe transfer's `travelRule` payload must be of the kind matching `configuration.vendor` — a mismatch triggers the policy and applies its configured action. A given wallet must be covered by at most one travel-rule policy (of any vendor): if several travel-rule policies apply to the same transfer carrying a `travelRule` payload, it is treated as a misconfiguration and blocked without contacting any vendor. Signatures and transfers without a payload are not affected, since the rule does not apply to them.\n\nIt's called \"Pre\"-screening, because the transaction is not on chain yet, it's still a transaction attempt (before the transaction actually make it on chain).","required":["kind","configuration"],"properties":{"kind":{"type":"string","enum":["TravelRuleTransactionPrescreening"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.2.pendingChangeRequest.body.oneOf.5.rule.oneOf.9.kind","typeLabel":"enum\u003cstring>"},"configuration":{"oneOf":[{"type":"object","title":"TravelRuleNotabeneConfiguration","required":["vendor"],"properties":{"vendor":{"type":"string","enum":["Notabene"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.2.pendingChangeRequest.body.oneOf.5.rule.oneOf.9.configuration.oneOf.0.vendor","typeLabel":"enum\u003cstring>"},"autoTriggerTimeoutSeconds":{"type":"integer","minimum":0,"maximum":2592000,"default":86400,"description":"Seconds to wait for the vendor's verdict before the policy action applies. Maximum 2592000 (30 days). Defaults to 86400 (24 hours).","uniqueKey":"\\items.items.[INDEX].oneOf.2.pendingChangeRequest.body.oneOf.5.rule.oneOf.9.configuration.oneOf.0.autoTriggerTimeoutSeconds","typeLabel":"integer"},"autoClearAfterDeliveredTimeoutSeconds":{"type":"integer","minimum":0,"maximum":2592000,"description":"Seconds after delivery before a still-pending evaluation clears. Maximum 2592000 (30 days).","uniqueKey":"\\items.items.[INDEX].oneOf.2.pendingChangeRequest.body.oneOf.5.rule.oneOf.9.configuration.oneOf.0.autoClearAfterDeliveredTimeoutSeconds","typeLabel":"integer"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.2.pendingChangeRequest.body.oneOf.5.rule.oneOf.9.configuration.oneOf.0","typeLabel":"TravelRuleNotabeneConfiguration · object"},{"type":"object","title":"TravelRuleSumsubConfiguration","required":["vendor"],"properties":{"vendor":{"type":"string","enum":["Sumsub"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.2.pendingChangeRequest.body.oneOf.5.rule.oneOf.9.configuration.oneOf.1.vendor","typeLabel":"enum\u003cstring>"},"autoTriggerTimeoutSeconds":{"type":"integer","minimum":0,"maximum":2592000,"default":86400,"description":"Seconds to wait for the vendor's verdict before the policy action applies. Maximum 2592000 (30 days). Defaults to 86400 (24 hours).","uniqueKey":"\\items.items.[INDEX].oneOf.2.pendingChangeRequest.body.oneOf.5.rule.oneOf.9.configuration.oneOf.1.autoTriggerTimeoutSeconds","typeLabel":"integer"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.2.pendingChangeRequest.body.oneOf.5.rule.oneOf.9.configuration.oneOf.1","typeLabel":"TravelRuleSumsubConfiguration · object"}],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.2.pendingChangeRequest.body.oneOf.5.rule.oneOf.9.configuration","typeLabel":"TravelRuleNotabeneConfiguration · object | TravelRuleSumsubConfiguration · object"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.2.pendingChangeRequest.body.oneOf.5.rule.oneOf.9","typeLabel":"TravelRuleTransactionPrescreening · object"}],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.2.pendingChangeRequest.body.oneOf.5.rule","typeLabel":"AlwaysTrigger · object | TransactionRecipientWhitelist · object | TransactionAmountLimit · object | TransactionAmountLimitNominal · object | TransactionAmountVelocity · object | TransactionCountVelocity · object | ChainalysisTransactionPrescreening · object | EllipticTransactionPrescreening · object | GlobalLedgerTransactionPrescreening · object | TravelRuleTransactionPrescreening · object"},"action":{"oneOf":[{"type":"object","title":"RequestApproval","description":"\nThis action means that activity will first require an Approval process to be completed before it can be executed (or be aborted if someone rejects it during the approval process).\n\nOne or several groups of approvers need to be specified. These groups define who is allowed to approve / reject an activity.\n\nThe activity will only be executed if all approver groups reach their \"quorum\" of approvals. Otherwise, if any one user within any approver group rejects, then the activity is aborted and the call is not executed.\n\nThe example below shows a `RequestApproval` action, configured with one approval group requiring 2 approvals amongst three specific users.\n\n```json\n{\n \"action\": {\n \"kind\": \"RequestApproval\",\n \"autoRejectTimeout\": 60, // minutes\n \"approvalGroups\": [\n {\n \"name\": \"Admins\",\n \"quorum\": 2, // only 2 approvers required in that group \n \"approvers\": {\n \"userId\": {\n \"in\": [\"us-...1\", \"us-...2\", \"us-...3\"],\n }\n }\n }\n ],\n\n }\n}\n```\n\n**Don't lock yourself up**\n\nBy default, users cannot approve an activity they initiated themselves, even if they are in an approval group. To allow this, you must set `initiatorCanApprove: true`.\n\n*Example 1:* For any wallet transfer, a policy is setup to require approval from **1 specific admin user** (eg. the CEO). `initiatorCanApprove` was not set to `true`. If the CEO himself initiates a transfer, no-one can approve his transfer and it's stuck.\n\n*Example 2:* Company has only 3 users. A policy is setup to require approval from **any 3 users** (`quorum: 3`) for any modification of a policy. `initiatorCanApprove` was not set to `true`. In this case, they are locked, and the policy cannot be modified: whoever requests a modification cannot approve, and the policy is therefore always missing one approver. To unlock, they would need to invite a new user and give him the rights to approve as well.\n ","required":["kind","approvalGroups"],"properties":{"kind":{"type":"string","enum":["RequestApproval"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.2.pendingChangeRequest.body.oneOf.5.action.oneOf.0.kind","typeLabel":"enum\u003cstring>"},"approvalGroups":{"type":"array","items":{"type":"object","properties":{"quorum":{"type":"integer","minimum":1,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.2.pendingChangeRequest.body.oneOf.5.action.oneOf.0.approvalGroups.items.[INDEX].quorum","typeLabel":"integer"},"approvers":{"type":"object","properties":{"userId":{"type":"object","properties":{"in":{"type":"array","items":{"type":"string","minLength":1,"uniqueKey":"\\items.items.[INDEX].oneOf.2.pendingChangeRequest.body.oneOf.5.action.oneOf.0.approvalGroups.items.[INDEX].approvers.userId.in.items.[INDEX]","typeLabel":"string"},"minItems":1,"maxItems":100,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.2.pendingChangeRequest.body.oneOf.5.action.oneOf.0.approvalGroups.items.[INDEX].approvers.userId.in","typeLabel":"string[]"}},"required":["in"],"additionalProperties":false,"description":"Users and service accounts who may approve.","uniqueKey":"\\items.items.[INDEX].oneOf.2.pendingChangeRequest.body.oneOf.5.action.oneOf.0.approvalGroups.items.[INDEX].approvers.userId","typeLabel":"object"},"userGroupId":{"type":"object","properties":{"in":{"type":"array","items":{"type":"string","minLength":1,"maxLength":64,"pattern":"^ug-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"User group id.","example":"ug-139tf-f58l8-lsbt6dp47lfsdvgh","uniqueKey":"\\items.items.[INDEX].oneOf.2.pendingChangeRequest.body.oneOf.5.action.oneOf.0.approvalGroups.items.[INDEX].approvers.userGroupId.in.items.[INDEX]","typeLabel":"string"},"minItems":1,"maxItems":100,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.2.pendingChangeRequest.body.oneOf.5.action.oneOf.0.approvalGroups.items.[INDEX].approvers.userGroupId.in","typeLabel":"string[]"}},"required":["in"],"additionalProperties":false,"description":"User groups whose members may approve.","uniqueKey":"\\items.items.[INDEX].oneOf.2.pendingChangeRequest.body.oneOf.5.action.oneOf.0.approvalGroups.items.[INDEX].approvers.userGroupId","typeLabel":"object"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.2.pendingChangeRequest.body.oneOf.5.action.oneOf.0.approvalGroups.items.[INDEX].approvers","typeLabel":"object"},"name":{"type":"string","uniqueKey":"\\items.items.[INDEX].oneOf.2.pendingChangeRequest.body.oneOf.5.action.oneOf.0.approvalGroups.items.[INDEX].name","typeLabel":"string"},"initiatorCanApprove":{"type":"boolean","description":"Whether the initiator of the activity can participate in the approval.","uniqueKey":"\\items.items.[INDEX].oneOf.2.pendingChangeRequest.body.oneOf.5.action.oneOf.0.approvalGroups.items.[INDEX].initiatorCanApprove","typeLabel":"boolean"},"serviceAccountsCanApprove":{"type":"boolean","description":"Whether service accounts can participate in the approval for this group.","uniqueKey":"\\items.items.[INDEX].oneOf.2.pendingChangeRequest.body.oneOf.5.action.oneOf.0.approvalGroups.items.[INDEX].serviceAccountsCanApprove","typeLabel":"boolean"}},"required":["quorum","approvers"],"additionalProperties":false,"uniqueKey":"\\items.items.[INDEX].oneOf.2.pendingChangeRequest.body.oneOf.5.action.oneOf.0.approvalGroups.items.[INDEX]","typeLabel":"object"},"minItems":1,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.2.pendingChangeRequest.body.oneOf.5.action.oneOf.0.approvalGroups","typeLabel":"object[]"},"autoRejectTimeout":{"oneOf":[{"type":"integer","minimum":1,"uniqueKey":"\\items.items.[INDEX].oneOf.2.pendingChangeRequest.body.oneOf.5.action.oneOf.0.autoRejectTimeout.oneOf.0","typeLabel":"integer"},{"type":"null","minimum":1,"uniqueKey":"\\items.items.[INDEX].oneOf.2.pendingChangeRequest.body.oneOf.5.action.oneOf.0.autoRejectTimeout.oneOf.1","typeLabel":"null"}],"uniqueKey":"\\items.items.[INDEX].oneOf.2.pendingChangeRequest.body.oneOf.5.action.oneOf.0.autoRejectTimeout","typeLabel":"integer | null"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.2.pendingChangeRequest.body.oneOf.5.action.oneOf.0","typeLabel":"RequestApproval · object"},{"type":"object","title":"Block","description":"This action means that the activity will be blocked if the policy is triggered.\n\n```json\n{\n \"action\": {\n \"kind\": \"Block\"\n }\n}\n```\n","required":["kind"],"properties":{"kind":{"type":"string","enum":["Block"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.2.pendingChangeRequest.body.oneOf.5.action.oneOf.1.kind","typeLabel":"enum\u003cstring>"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.2.pendingChangeRequest.body.oneOf.5.action.oneOf.1","typeLabel":"Block · object"},{"type":"object","title":"NoAction","description":"\n This action kind means that nothing will happen after policy rule evaluation. It's meant to be used with policy rules \"`ChainalysisTransactionPrescreening`\" or \"`ChainalysisTransactionScreening`\". This action is for when you just want the KYT analysis rule to be run, and then if triggered, those result returned in a `policy.triggered` [Webhook Event](https://docs.dfns.co/api-reference/webhook-events).\n\n```json\n{\n \"action\": {\n \"kind\": \"NoAction\"\n }\n}\n```\n ","required":["kind"],"properties":{"kind":{"type":"string","enum":["NoAction"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.2.pendingChangeRequest.body.oneOf.5.action.oneOf.2.kind","typeLabel":"enum\u003cstring>"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.2.pendingChangeRequest.body.oneOf.5.action.oneOf.2","typeLabel":"NoAction · object"}],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.2.pendingChangeRequest.body.oneOf.5.action","typeLabel":"RequestApproval · object | Block · object | NoAction · object"},"dateCreated":{"type":"string","uniqueKey":"\\items.items.[INDEX].oneOf.2.pendingChangeRequest.body.oneOf.5.dateCreated","typeLabel":"string"},"dateUpdated":{"type":"string","uniqueKey":"\\items.items.[INDEX].oneOf.2.pendingChangeRequest.body.oneOf.5.dateUpdated","typeLabel":"string"},"filters":{"type":"object","properties":{"walletId":{"type":"object","properties":{"in":{"type":"array","items":{"type":"string","minLength":1,"uniqueKey":"\\items.items.[INDEX].oneOf.2.pendingChangeRequest.body.oneOf.5.filters.walletId.in.items.[INDEX]","typeLabel":"string"},"minItems":1,"maxItems":100,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.2.pendingChangeRequest.body.oneOf.5.filters.walletId.in","typeLabel":"string[]"}},"required":["in"],"additionalProperties":false,"uniqueKey":"\\items.items.[INDEX].oneOf.2.pendingChangeRequest.body.oneOf.5.filters.walletId","typeLabel":"object"},"walletTags":{"type":"object","properties":{"hasAny":{"type":"array","items":{"type":"string","minLength":1,"uniqueKey":"\\items.items.[INDEX].oneOf.2.pendingChangeRequest.body.oneOf.5.filters.walletTags.hasAny.items.[INDEX]","typeLabel":"string"},"minItems":1,"maxItems":100,"uniqueKey":"\\items.items.[INDEX].oneOf.2.pendingChangeRequest.body.oneOf.5.filters.walletTags.hasAny","typeLabel":"string[]"},"hasAll":{"type":"array","items":{"type":"string","minLength":1,"uniqueKey":"\\items.items.[INDEX].oneOf.2.pendingChangeRequest.body.oneOf.5.filters.walletTags.hasAll.items.[INDEX]","typeLabel":"string"},"minItems":1,"maxItems":100,"uniqueKey":"\\items.items.[INDEX].oneOf.2.pendingChangeRequest.body.oneOf.5.filters.walletTags.hasAll","typeLabel":"string[]"}},"additionalProperties":false,"uniqueKey":"\\items.items.[INDEX].oneOf.2.pendingChangeRequest.body.oneOf.5.filters.walletTags","typeLabel":"object"},"keyId":{"type":"object","properties":{"in":{"type":"array","items":{"type":"string","minLength":1,"maxLength":64,"pattern":"^key-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"Key id.","example":"key-01snl-t56gb-j8tsok0vn802p80i","uniqueKey":"\\items.items.[INDEX].oneOf.2.pendingChangeRequest.body.oneOf.5.filters.keyId.in.items.[INDEX]","typeLabel":"string"},"minItems":1,"maxItems":100,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.2.pendingChangeRequest.body.oneOf.5.filters.keyId.in","typeLabel":"string[]"}},"required":["in"],"additionalProperties":false,"uniqueKey":"\\items.items.[INDEX].oneOf.2.pendingChangeRequest.body.oneOf.5.filters.keyId","typeLabel":"object"},"keyStoreId":{"type":"object","properties":{"in":{"type":"array","items":{"type":"string","minLength":1,"maxLength":64,"pattern":"^store-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"Key store id.","example":"store-425nf-ebf0a-qq22t6qra51tj8j0","uniqueKey":"\\items.items.[INDEX].oneOf.2.pendingChangeRequest.body.oneOf.5.filters.keyStoreId.in.items.[INDEX]","typeLabel":"string"},"minItems":1,"maxItems":100,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.2.pendingChangeRequest.body.oneOf.5.filters.keyStoreId.in","typeLabel":"string[]"}},"required":["in"],"additionalProperties":false,"uniqueKey":"\\items.items.[INDEX].oneOf.2.pendingChangeRequest.body.oneOf.5.filters.keyStoreId","typeLabel":"object"}},"additionalProperties":false,"uniqueKey":"\\items.items.[INDEX].oneOf.2.pendingChangeRequest.body.oneOf.5.filters","typeLabel":"object"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.2.pendingChangeRequest.body.oneOf.5","typeLabel":"Wallets:Sign · object"},{"type":"object","title":"Wallets:IncomingTransaction","required":["id","name","status","activityKind","rule","action"],"properties":{"id":{"type":"string","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.2.pendingChangeRequest.body.oneOf.6.id","typeLabel":"string"},"name":{"type":"string","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.2.pendingChangeRequest.body.oneOf.6.name","typeLabel":"string"},"status":{"type":"string","enum":["Active","Archived"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.2.pendingChangeRequest.body.oneOf.6.status","typeLabel":"enum\u003cstring>"},"activityKind":{"type":"string","enum":["Wallets:IncomingTransaction"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.2.pendingChangeRequest.body.oneOf.6.activityKind","typeLabel":"enum\u003cstring>"},"rule":{"type":"object","title":"ChainalysisTransactionScreening","description":"\n\u003cInfo>\nThis rule can only be used once the Chainalysis integration is activated from the Dfns dashboard settings. (see more on [Chainalysis](https://docs.dfns.co/integrations/aml-kyt/chainalysis) integration page).\n\u003c/Info>\n\nThis rule can be used on a policy of `activityKind` = `Wallets:IncomingTransaction`, and with the action kind `NoAction`. It's a rule based on Chainalysis KYT integration (Know-Your-Transaction). Upon an incoming transaction detectedby our indexers, we will [register the transfer with Chainalysis](https://docs.chainalysis.com/api/kyt/#registration-register-a-transfer), and fetch the results of the analysis (alerts \u0026 exposures detected). Based on the results, and the configuration of this rule, the policy will be triggered.\n\nThe shape of the rule is almost like the `ChainalysisTransactionPrescreening` rule, expect the the `address` property is not supported.\n\n```json\n{\n \"rule\": {\n \"kind\": \"ChainalysisTransactionPrescreening\",\n \"configuration\": {\n \"alerts\": {\n \"alertLevel\": \"LOW\",\n \"categoryIds\": []\n },\n \"exposures\": {\n \"direct\": {\n \"categoryIds\": []\n }\n },\n \"fallbackBehaviours\": {\n \"skipUnscreenableTransaction\": false,\n \"skipUnsupportedNetwork\": false,\n \"skipUnsupportedAsset\": false,\n \"skipChainalysisFailure\": false\n }\n }\n }\n}\n```\n\n**Configuration**\n\nPlease refer to the configuration for the `ChainalysisTransactionPrescreening` rule.\n","required":["kind","configuration"],"properties":{"kind":{"type":"string","enum":["ChainalysisTransactionScreening"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.2.pendingChangeRequest.body.oneOf.6.rule.kind","typeLabel":"enum\u003cstring>"},"configuration":{"type":"object","properties":{"alerts":{"type":"object","properties":{"alertLevel":{"type":"string","enum":["LOW","MEDIUM","HIGH","SEVERE"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.2.pendingChangeRequest.body.oneOf.6.rule.configuration.alerts.alertLevel","typeLabel":"enum\u003cstring>"},"categoryIds":{"type":"array","items":{"type":"integer","exclusiveMinimum":0,"uniqueKey":"\\items.items.[INDEX].oneOf.2.pendingChangeRequest.body.oneOf.6.rule.configuration.alerts.categoryIds.items.[INDEX]","typeLabel":"integer"},"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.2.pendingChangeRequest.body.oneOf.6.rule.configuration.alerts.categoryIds","typeLabel":"integer[]"}},"required":["alertLevel","categoryIds"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.2.pendingChangeRequest.body.oneOf.6.rule.configuration.alerts","typeLabel":"object"},"exposures":{"type":"object","properties":{"direct":{"type":"object","properties":{"categoryIds":{"type":"array","items":{"type":"integer","exclusiveMinimum":0,"uniqueKey":"\\items.items.[INDEX].oneOf.2.pendingChangeRequest.body.oneOf.6.rule.configuration.exposures.direct.categoryIds.items.[INDEX]","typeLabel":"integer"},"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.2.pendingChangeRequest.body.oneOf.6.rule.configuration.exposures.direct.categoryIds","typeLabel":"integer[]"}},"required":["categoryIds"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.2.pendingChangeRequest.body.oneOf.6.rule.configuration.exposures.direct","typeLabel":"object"}},"required":["direct"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.2.pendingChangeRequest.body.oneOf.6.rule.configuration.exposures","typeLabel":"object"},"fallbackBehaviours":{"type":"object","properties":{"skipUnscreenableTransaction":{"type":"boolean","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.2.pendingChangeRequest.body.oneOf.6.rule.configuration.fallbackBehaviours.skipUnscreenableTransaction","typeLabel":"boolean"},"skipUnsupportedNetwork":{"type":"boolean","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.2.pendingChangeRequest.body.oneOf.6.rule.configuration.fallbackBehaviours.skipUnsupportedNetwork","typeLabel":"boolean"},"skipUnsupportedAsset":{"type":"boolean","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.2.pendingChangeRequest.body.oneOf.6.rule.configuration.fallbackBehaviours.skipUnsupportedAsset","typeLabel":"boolean"},"skipChainalysisFailure":{"type":"boolean","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.2.pendingChangeRequest.body.oneOf.6.rule.configuration.fallbackBehaviours.skipChainalysisFailure","typeLabel":"boolean"}},"required":["skipUnscreenableTransaction","skipUnsupportedNetwork","skipUnsupportedAsset","skipChainalysisFailure"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.2.pendingChangeRequest.body.oneOf.6.rule.configuration.fallbackBehaviours","typeLabel":"object"},"userIdTemplate":{"type":"string","minLength":1,"maxLength":50,"pattern":"^([a-zA-Z0-9_:-]|{wallet\\.id}|{wallet\\.externalId})+$","default":"dfns","description":"**Deprecated** — set `userIdTemplate` on the Chainalysis integration setting instead; when set there, the integration-level template takes precedence over this one.\n\nValue sent to Chainalysis as the \"user ID\". Used by Chainalysis for grouping transaction screenings.\n \nThis template can include variables, included in brackets. The following variables are currently supported: `{wallet.id}` and `{wallet.externalId}`.\nAs an example, if you set `userIdTemplate: \"dfns:{wallet.id}_{wallet.externalId}\"`, when your wallet receives a transaction that gets screened by a Chainalysis policy, the \"user ID\" sent to Chainalysis will be `dfns:wa-xxx_yyy` (`wa-xxx` being the wallet ID, and `yyy` being the wallet external ID).","uniqueKey":"\\items.items.[INDEX].oneOf.2.pendingChangeRequest.body.oneOf.6.rule.configuration.userIdTemplate","typeLabel":"string"}},"required":["alerts","exposures","fallbackBehaviours"],"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.2.pendingChangeRequest.body.oneOf.6.rule.configuration","typeLabel":"object"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.2.pendingChangeRequest.body.oneOf.6.rule","typeLabel":"ChainalysisTransactionScreening · object"},"action":{"type":"object","title":"NoAction","description":"\n This action kind means that nothing will happen after policy rule evaluation. It's meant to be used with policy rules \"`ChainalysisTransactionPrescreening`\" or \"`ChainalysisTransactionScreening`\". This action is for when you just want the KYT analysis rule to be run, and then if triggered, those result returned in a `policy.triggered` [Webhook Event](https://docs.dfns.co/api-reference/webhook-events).\n\n```json\n{\n \"action\": {\n \"kind\": \"NoAction\"\n }\n}\n```\n ","required":["kind"],"properties":{"kind":{"type":"string","enum":["NoAction"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.2.pendingChangeRequest.body.oneOf.6.action.kind","typeLabel":"enum\u003cstring>"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.2.pendingChangeRequest.body.oneOf.6.action","typeLabel":"NoAction · object"},"dateCreated":{"type":"string","uniqueKey":"\\items.items.[INDEX].oneOf.2.pendingChangeRequest.body.oneOf.6.dateCreated","typeLabel":"string"},"dateUpdated":{"type":"string","uniqueKey":"\\items.items.[INDEX].oneOf.2.pendingChangeRequest.body.oneOf.6.dateUpdated","typeLabel":"string"},"filters":{"type":"object","properties":{"walletId":{"type":"object","properties":{"in":{"type":"array","items":{"type":"string","minLength":1,"uniqueKey":"\\items.items.[INDEX].oneOf.2.pendingChangeRequest.body.oneOf.6.filters.walletId.in.items.[INDEX]","typeLabel":"string"},"minItems":1,"maxItems":100,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.2.pendingChangeRequest.body.oneOf.6.filters.walletId.in","typeLabel":"string[]"}},"required":["in"],"additionalProperties":false,"uniqueKey":"\\items.items.[INDEX].oneOf.2.pendingChangeRequest.body.oneOf.6.filters.walletId","typeLabel":"object"},"walletTags":{"type":"object","properties":{"hasAny":{"type":"array","items":{"type":"string","minLength":1,"uniqueKey":"\\items.items.[INDEX].oneOf.2.pendingChangeRequest.body.oneOf.6.filters.walletTags.hasAny.items.[INDEX]","typeLabel":"string"},"minItems":1,"maxItems":100,"uniqueKey":"\\items.items.[INDEX].oneOf.2.pendingChangeRequest.body.oneOf.6.filters.walletTags.hasAny","typeLabel":"string[]"},"hasAll":{"type":"array","items":{"type":"string","minLength":1,"uniqueKey":"\\items.items.[INDEX].oneOf.2.pendingChangeRequest.body.oneOf.6.filters.walletTags.hasAll.items.[INDEX]","typeLabel":"string"},"minItems":1,"maxItems":100,"uniqueKey":"\\items.items.[INDEX].oneOf.2.pendingChangeRequest.body.oneOf.6.filters.walletTags.hasAll","typeLabel":"string[]"}},"additionalProperties":false,"uniqueKey":"\\items.items.[INDEX].oneOf.2.pendingChangeRequest.body.oneOf.6.filters.walletTags","typeLabel":"object"},"keyId":{"type":"object","properties":{"in":{"type":"array","items":{"type":"string","minLength":1,"maxLength":64,"pattern":"^key-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"Key id.","example":"key-01snl-t56gb-j8tsok0vn802p80i","uniqueKey":"\\items.items.[INDEX].oneOf.2.pendingChangeRequest.body.oneOf.6.filters.keyId.in.items.[INDEX]","typeLabel":"string"},"minItems":1,"maxItems":100,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.2.pendingChangeRequest.body.oneOf.6.filters.keyId.in","typeLabel":"string[]"}},"required":["in"],"additionalProperties":false,"uniqueKey":"\\items.items.[INDEX].oneOf.2.pendingChangeRequest.body.oneOf.6.filters.keyId","typeLabel":"object"},"keyStoreId":{"type":"object","properties":{"in":{"type":"array","items":{"type":"string","minLength":1,"maxLength":64,"pattern":"^store-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"Key store id.","example":"store-425nf-ebf0a-qq22t6qra51tj8j0","uniqueKey":"\\items.items.[INDEX].oneOf.2.pendingChangeRequest.body.oneOf.6.filters.keyStoreId.in.items.[INDEX]","typeLabel":"string"},"minItems":1,"maxItems":100,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.2.pendingChangeRequest.body.oneOf.6.filters.keyStoreId.in","typeLabel":"string[]"}},"required":["in"],"additionalProperties":false,"uniqueKey":"\\items.items.[INDEX].oneOf.2.pendingChangeRequest.body.oneOf.6.filters.keyStoreId","typeLabel":"object"}},"additionalProperties":false,"uniqueKey":"\\items.items.[INDEX].oneOf.2.pendingChangeRequest.body.oneOf.6.filters","typeLabel":"object"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.2.pendingChangeRequest.body.oneOf.6","typeLabel":"Wallets:IncomingTransaction · object"},{"type":"object","title":"Vaults:ReleaseQuarantine","required":["id","name","status","activityKind","rule","action"],"properties":{"id":{"type":"string","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.2.pendingChangeRequest.body.oneOf.7.id","typeLabel":"string"},"name":{"type":"string","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.2.pendingChangeRequest.body.oneOf.7.name","typeLabel":"string"},"status":{"type":"string","enum":["Active","Archived"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.2.pendingChangeRequest.body.oneOf.7.status","typeLabel":"enum\u003cstring>"},"activityKind":{"type":"string","enum":["Vaults:ReleaseQuarantine"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.2.pendingChangeRequest.body.oneOf.7.activityKind","typeLabel":"enum\u003cstring>"},"rule":{"oneOf":[{"type":"object","title":"AlwaysTrigger","description":"This rule will always be triggered, meaning that if this rule is defined on a policy, the policy will always trigger the policy action, regardless of the activity details.","required":["kind"],"properties":{"kind":{"type":"string","enum":["AlwaysTrigger"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.2.pendingChangeRequest.body.oneOf.7.rule.oneOf.0.kind","typeLabel":"enum\u003cstring>"},"configuration":{"type":"object","properties":{},"additionalProperties":false,"uniqueKey":"\\items.items.[INDEX].oneOf.2.pendingChangeRequest.body.oneOf.7.rule.oneOf.0.configuration","typeLabel":"object"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.2.pendingChangeRequest.body.oneOf.7.rule.oneOf.0","typeLabel":"AlwaysTrigger · object"},{"type":"object","title":"ChainalysisQuarantineScreening","description":"\n\u003cInfo>\nThis rule can only be used once the Chainalysis integration is activated from the Dfns dashboard settings. (see more on [Chainalysis](https://docs.dfns.co/integrations/aml-kyt/chainalysis) integration page).\n\u003c/Info>\n\nThis rule can be used on a policy of `activityKind` = `Vaults:ReleaseQuarantine`. When a quarantined vault deposit was screened by Chainalysis KYT, the screening result (alerts \u0026 direct exposure) is stored with the quarantine. When a release of the quarantined funds is requested, this rule evaluates that **stored** result — no new Chainalysis call is made. Based on the stored result and the configuration of this rule, the policy will be triggered.\n\nIf the quarantine has **no stored KYT result** (the result was not received yet, the network/asset is not supported by the Chainalysis integration, or screening failed), the rule **always triggers** (fail closed): the release then follows the policy action (approval or block).\n\n```json\n{\n \"rule\": {\n \"kind\": \"ChainalysisQuarantineScreening\",\n \"configuration\": {\n \"alerts\": {\n \"alertLevel\": \"LOW\",\n \"categoryIds\": []\n },\n \"exposures\": {\n \"direct\": {\n \"categoryIds\": []\n }\n }\n }\n }\n}\n```\n\n**Configuration**\n\n| Property | Type | Description |\n| --- | --- | --- |\n| `alerts`\u003cbr>\u003cbr>`.alertLevel`* | `string` | Minimum alert level above which the rule should trigger, if any alert was returned in the stored Chainalysis results. Can be `LOW`, `MEDIUM`, `HIGH`, or `SEVERE` |\n| `alerts`\u003cbr>\u003cbr>`.categoryIds`* | list of integers | List of Chainalysis category IDs (see [here](https://docs.chainalysis.com/api/kyt/#categories)). If you leave this list empty, alerts of any category will trigger the rule. Otherwise, if you only want the rule to trigger on specific categories, you can specify some in the list. |\n| `exposures`\u003cbr>\u003cbr>`.direct`\u003cbr>\u003cbr>`.categoryIds`* | list of integers | List of Chainalysis category IDs (see [here](https://docs.chainalysis.com/api/kyt/#categories)). If you leave this list empty, a direct exposure of any category in the stored results will trigger the rule. Otherwise, if you only want the rule to trigger on specific categories, you can specify some in the list. |\n","required":["kind","configuration"],"properties":{"kind":{"type":"string","enum":["ChainalysisQuarantineScreening"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.2.pendingChangeRequest.body.oneOf.7.rule.oneOf.1.kind","typeLabel":"enum\u003cstring>"},"configuration":{"type":"object","properties":{"alerts":{"type":"object","properties":{"alertLevel":{"type":"string","enum":["LOW","MEDIUM","HIGH","SEVERE"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.2.pendingChangeRequest.body.oneOf.7.rule.oneOf.1.configuration.alerts.alertLevel","typeLabel":"enum\u003cstring>"},"categoryIds":{"type":"array","items":{"type":"integer","exclusiveMinimum":0,"uniqueKey":"\\items.items.[INDEX].oneOf.2.pendingChangeRequest.body.oneOf.7.rule.oneOf.1.configuration.alerts.categoryIds.items.[INDEX]","typeLabel":"integer"},"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.2.pendingChangeRequest.body.oneOf.7.rule.oneOf.1.configuration.alerts.categoryIds","typeLabel":"integer[]"}},"required":["alertLevel","categoryIds"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.2.pendingChangeRequest.body.oneOf.7.rule.oneOf.1.configuration.alerts","typeLabel":"object"},"exposures":{"type":"object","properties":{"direct":{"type":"object","properties":{"categoryIds":{"type":"array","items":{"type":"integer","exclusiveMinimum":0,"uniqueKey":"\\items.items.[INDEX].oneOf.2.pendingChangeRequest.body.oneOf.7.rule.oneOf.1.configuration.exposures.direct.categoryIds.items.[INDEX]","typeLabel":"integer"},"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.2.pendingChangeRequest.body.oneOf.7.rule.oneOf.1.configuration.exposures.direct.categoryIds","typeLabel":"integer[]"}},"required":["categoryIds"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.2.pendingChangeRequest.body.oneOf.7.rule.oneOf.1.configuration.exposures.direct","typeLabel":"object"}},"required":["direct"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.2.pendingChangeRequest.body.oneOf.7.rule.oneOf.1.configuration.exposures","typeLabel":"object"}},"required":["alerts","exposures"],"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.2.pendingChangeRequest.body.oneOf.7.rule.oneOf.1.configuration","typeLabel":"object"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.2.pendingChangeRequest.body.oneOf.7.rule.oneOf.1","typeLabel":"ChainalysisQuarantineScreening · object"}],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.2.pendingChangeRequest.body.oneOf.7.rule","typeLabel":"AlwaysTrigger · object | ChainalysisQuarantineScreening · object"},"action":{"oneOf":[{"type":"object","title":"RequestApproval","description":"\nThis action means that activity will first require an Approval process to be completed before it can be executed (or be aborted if someone rejects it during the approval process).\n\nOne or several groups of approvers need to be specified. These groups define who is allowed to approve / reject an activity.\n\nThe activity will only be executed if all approver groups reach their \"quorum\" of approvals. Otherwise, if any one user within any approver group rejects, then the activity is aborted and the call is not executed.\n\nThe example below shows a `RequestApproval` action, configured with one approval group requiring 2 approvals amongst three specific users.\n\n```json\n{\n \"action\": {\n \"kind\": \"RequestApproval\",\n \"autoRejectTimeout\": 60, // minutes\n \"approvalGroups\": [\n {\n \"name\": \"Admins\",\n \"quorum\": 2, // only 2 approvers required in that group \n \"approvers\": {\n \"userId\": {\n \"in\": [\"us-...1\", \"us-...2\", \"us-...3\"],\n }\n }\n }\n ],\n\n }\n}\n```\n\n**Don't lock yourself up**\n\nBy default, users cannot approve an activity they initiated themselves, even if they are in an approval group. To allow this, you must set `initiatorCanApprove: true`.\n\n*Example 1:* For any wallet transfer, a policy is setup to require approval from **1 specific admin user** (eg. the CEO). `initiatorCanApprove` was not set to `true`. If the CEO himself initiates a transfer, no-one can approve his transfer and it's stuck.\n\n*Example 2:* Company has only 3 users. A policy is setup to require approval from **any 3 users** (`quorum: 3`) for any modification of a policy. `initiatorCanApprove` was not set to `true`. In this case, they are locked, and the policy cannot be modified: whoever requests a modification cannot approve, and the policy is therefore always missing one approver. To unlock, they would need to invite a new user and give him the rights to approve as well.\n ","required":["kind","approvalGroups"],"properties":{"kind":{"type":"string","enum":["RequestApproval"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.2.pendingChangeRequest.body.oneOf.7.action.oneOf.0.kind","typeLabel":"enum\u003cstring>"},"approvalGroups":{"type":"array","items":{"type":"object","properties":{"quorum":{"type":"integer","minimum":1,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.2.pendingChangeRequest.body.oneOf.7.action.oneOf.0.approvalGroups.items.[INDEX].quorum","typeLabel":"integer"},"approvers":{"type":"object","properties":{"userId":{"type":"object","properties":{"in":{"type":"array","items":{"type":"string","minLength":1,"uniqueKey":"\\items.items.[INDEX].oneOf.2.pendingChangeRequest.body.oneOf.7.action.oneOf.0.approvalGroups.items.[INDEX].approvers.userId.in.items.[INDEX]","typeLabel":"string"},"minItems":1,"maxItems":100,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.2.pendingChangeRequest.body.oneOf.7.action.oneOf.0.approvalGroups.items.[INDEX].approvers.userId.in","typeLabel":"string[]"}},"required":["in"],"additionalProperties":false,"description":"Users and service accounts who may approve.","uniqueKey":"\\items.items.[INDEX].oneOf.2.pendingChangeRequest.body.oneOf.7.action.oneOf.0.approvalGroups.items.[INDEX].approvers.userId","typeLabel":"object"},"userGroupId":{"type":"object","properties":{"in":{"type":"array","items":{"type":"string","minLength":1,"maxLength":64,"pattern":"^ug-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"User group id.","example":"ug-139tf-f58l8-lsbt6dp47lfsdvgh","uniqueKey":"\\items.items.[INDEX].oneOf.2.pendingChangeRequest.body.oneOf.7.action.oneOf.0.approvalGroups.items.[INDEX].approvers.userGroupId.in.items.[INDEX]","typeLabel":"string"},"minItems":1,"maxItems":100,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.2.pendingChangeRequest.body.oneOf.7.action.oneOf.0.approvalGroups.items.[INDEX].approvers.userGroupId.in","typeLabel":"string[]"}},"required":["in"],"additionalProperties":false,"description":"User groups whose members may approve.","uniqueKey":"\\items.items.[INDEX].oneOf.2.pendingChangeRequest.body.oneOf.7.action.oneOf.0.approvalGroups.items.[INDEX].approvers.userGroupId","typeLabel":"object"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.2.pendingChangeRequest.body.oneOf.7.action.oneOf.0.approvalGroups.items.[INDEX].approvers","typeLabel":"object"},"name":{"type":"string","uniqueKey":"\\items.items.[INDEX].oneOf.2.pendingChangeRequest.body.oneOf.7.action.oneOf.0.approvalGroups.items.[INDEX].name","typeLabel":"string"},"initiatorCanApprove":{"type":"boolean","description":"Whether the initiator of the activity can participate in the approval.","uniqueKey":"\\items.items.[INDEX].oneOf.2.pendingChangeRequest.body.oneOf.7.action.oneOf.0.approvalGroups.items.[INDEX].initiatorCanApprove","typeLabel":"boolean"},"serviceAccountsCanApprove":{"type":"boolean","description":"Whether service accounts can participate in the approval for this group.","uniqueKey":"\\items.items.[INDEX].oneOf.2.pendingChangeRequest.body.oneOf.7.action.oneOf.0.approvalGroups.items.[INDEX].serviceAccountsCanApprove","typeLabel":"boolean"}},"required":["quorum","approvers"],"additionalProperties":false,"uniqueKey":"\\items.items.[INDEX].oneOf.2.pendingChangeRequest.body.oneOf.7.action.oneOf.0.approvalGroups.items.[INDEX]","typeLabel":"object"},"minItems":1,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.2.pendingChangeRequest.body.oneOf.7.action.oneOf.0.approvalGroups","typeLabel":"object[]"},"autoRejectTimeout":{"oneOf":[{"type":"integer","minimum":1,"uniqueKey":"\\items.items.[INDEX].oneOf.2.pendingChangeRequest.body.oneOf.7.action.oneOf.0.autoRejectTimeout.oneOf.0","typeLabel":"integer"},{"type":"null","minimum":1,"uniqueKey":"\\items.items.[INDEX].oneOf.2.pendingChangeRequest.body.oneOf.7.action.oneOf.0.autoRejectTimeout.oneOf.1","typeLabel":"null"}],"uniqueKey":"\\items.items.[INDEX].oneOf.2.pendingChangeRequest.body.oneOf.7.action.oneOf.0.autoRejectTimeout","typeLabel":"integer | null"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.2.pendingChangeRequest.body.oneOf.7.action.oneOf.0","typeLabel":"RequestApproval · object"},{"type":"object","title":"Block","description":"This action means that the activity will be blocked if the policy is triggered.\n\n```json\n{\n \"action\": {\n \"kind\": \"Block\"\n }\n}\n```\n","required":["kind"],"properties":{"kind":{"type":"string","enum":["Block"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.2.pendingChangeRequest.body.oneOf.7.action.oneOf.1.kind","typeLabel":"enum\u003cstring>"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.2.pendingChangeRequest.body.oneOf.7.action.oneOf.1","typeLabel":"Block · object"}],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.2.pendingChangeRequest.body.oneOf.7.action","typeLabel":"RequestApproval · object | Block · object"},"dateCreated":{"type":"string","uniqueKey":"\\items.items.[INDEX].oneOf.2.pendingChangeRequest.body.oneOf.7.dateCreated","typeLabel":"string"},"dateUpdated":{"type":"string","uniqueKey":"\\items.items.[INDEX].oneOf.2.pendingChangeRequest.body.oneOf.7.dateUpdated","typeLabel":"string"},"filters":{"type":"object","properties":{"vaultId":{"type":"object","properties":{"in":{"type":"array","items":{"type":"string","minLength":1,"uniqueKey":"\\items.items.[INDEX].oneOf.2.pendingChangeRequest.body.oneOf.7.filters.vaultId.in.items.[INDEX]","typeLabel":"string"},"minItems":1,"maxItems":100,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.2.pendingChangeRequest.body.oneOf.7.filters.vaultId.in","typeLabel":"string[]"}},"required":["in"],"additionalProperties":false,"uniqueKey":"\\items.items.[INDEX].oneOf.2.pendingChangeRequest.body.oneOf.7.filters.vaultId","typeLabel":"object"},"vaultTags":{"type":"object","properties":{"hasAny":{"type":"array","items":{"type":"string","minLength":1,"uniqueKey":"\\items.items.[INDEX].oneOf.2.pendingChangeRequest.body.oneOf.7.filters.vaultTags.hasAny.items.[INDEX]","typeLabel":"string"},"minItems":1,"maxItems":100,"uniqueKey":"\\items.items.[INDEX].oneOf.2.pendingChangeRequest.body.oneOf.7.filters.vaultTags.hasAny","typeLabel":"string[]"},"hasAll":{"type":"array","items":{"type":"string","minLength":1,"uniqueKey":"\\items.items.[INDEX].oneOf.2.pendingChangeRequest.body.oneOf.7.filters.vaultTags.hasAll.items.[INDEX]","typeLabel":"string"},"minItems":1,"maxItems":100,"uniqueKey":"\\items.items.[INDEX].oneOf.2.pendingChangeRequest.body.oneOf.7.filters.vaultTags.hasAll","typeLabel":"string[]"}},"additionalProperties":false,"uniqueKey":"\\items.items.[INDEX].oneOf.2.pendingChangeRequest.body.oneOf.7.filters.vaultTags","typeLabel":"object"}},"additionalProperties":false,"uniqueKey":"\\items.items.[INDEX].oneOf.2.pendingChangeRequest.body.oneOf.7.filters","typeLabel":"object"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.2.pendingChangeRequest.body.oneOf.7","typeLabel":"Vaults:ReleaseQuarantine · object"},{"type":"object","title":"Vaults:CreateLock","required":["id","name","status","activityKind","rule","action"],"properties":{"id":{"type":"string","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.2.pendingChangeRequest.body.oneOf.8.id","typeLabel":"string"},"name":{"type":"string","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.2.pendingChangeRequest.body.oneOf.8.name","typeLabel":"string"},"status":{"type":"string","enum":["Active","Archived"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.2.pendingChangeRequest.body.oneOf.8.status","typeLabel":"enum\u003cstring>"},"activityKind":{"type":"string","enum":["Vaults:CreateLock"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.2.pendingChangeRequest.body.oneOf.8.activityKind","typeLabel":"enum\u003cstring>"},"rule":{"type":"object","title":"AlwaysTrigger","description":"This rule will always be triggered, meaning that if this rule is defined on a policy, the policy will always trigger the policy action, regardless of the activity details.","required":["kind"],"properties":{"kind":{"type":"string","enum":["AlwaysTrigger"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.2.pendingChangeRequest.body.oneOf.8.rule.kind","typeLabel":"enum\u003cstring>"},"configuration":{"type":"object","properties":{},"additionalProperties":false,"uniqueKey":"\\items.items.[INDEX].oneOf.2.pendingChangeRequest.body.oneOf.8.rule.configuration","typeLabel":"object"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.2.pendingChangeRequest.body.oneOf.8.rule","typeLabel":"AlwaysTrigger · object"},"action":{"oneOf":[{"type":"object","title":"RequestApproval","description":"\nThis action means that activity will first require an Approval process to be completed before it can be executed (or be aborted if someone rejects it during the approval process).\n\nOne or several groups of approvers need to be specified. These groups define who is allowed to approve / reject an activity.\n\nThe activity will only be executed if all approver groups reach their \"quorum\" of approvals. Otherwise, if any one user within any approver group rejects, then the activity is aborted and the call is not executed.\n\nThe example below shows a `RequestApproval` action, configured with one approval group requiring 2 approvals amongst three specific users.\n\n```json\n{\n \"action\": {\n \"kind\": \"RequestApproval\",\n \"autoRejectTimeout\": 60, // minutes\n \"approvalGroups\": [\n {\n \"name\": \"Admins\",\n \"quorum\": 2, // only 2 approvers required in that group \n \"approvers\": {\n \"userId\": {\n \"in\": [\"us-...1\", \"us-...2\", \"us-...3\"],\n }\n }\n }\n ],\n\n }\n}\n```\n\n**Don't lock yourself up**\n\nBy default, users cannot approve an activity they initiated themselves, even if they are in an approval group. To allow this, you must set `initiatorCanApprove: true`.\n\n*Example 1:* For any wallet transfer, a policy is setup to require approval from **1 specific admin user** (eg. the CEO). `initiatorCanApprove` was not set to `true`. If the CEO himself initiates a transfer, no-one can approve his transfer and it's stuck.\n\n*Example 2:* Company has only 3 users. A policy is setup to require approval from **any 3 users** (`quorum: 3`) for any modification of a policy. `initiatorCanApprove` was not set to `true`. In this case, they are locked, and the policy cannot be modified: whoever requests a modification cannot approve, and the policy is therefore always missing one approver. To unlock, they would need to invite a new user and give him the rights to approve as well.\n ","required":["kind","approvalGroups"],"properties":{"kind":{"type":"string","enum":["RequestApproval"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.2.pendingChangeRequest.body.oneOf.8.action.oneOf.0.kind","typeLabel":"enum\u003cstring>"},"approvalGroups":{"type":"array","items":{"type":"object","properties":{"quorum":{"type":"integer","minimum":1,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.2.pendingChangeRequest.body.oneOf.8.action.oneOf.0.approvalGroups.items.[INDEX].quorum","typeLabel":"integer"},"approvers":{"type":"object","properties":{"userId":{"type":"object","properties":{"in":{"type":"array","items":{"type":"string","minLength":1,"uniqueKey":"\\items.items.[INDEX].oneOf.2.pendingChangeRequest.body.oneOf.8.action.oneOf.0.approvalGroups.items.[INDEX].approvers.userId.in.items.[INDEX]","typeLabel":"string"},"minItems":1,"maxItems":100,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.2.pendingChangeRequest.body.oneOf.8.action.oneOf.0.approvalGroups.items.[INDEX].approvers.userId.in","typeLabel":"string[]"}},"required":["in"],"additionalProperties":false,"description":"Users and service accounts who may approve.","uniqueKey":"\\items.items.[INDEX].oneOf.2.pendingChangeRequest.body.oneOf.8.action.oneOf.0.approvalGroups.items.[INDEX].approvers.userId","typeLabel":"object"},"userGroupId":{"type":"object","properties":{"in":{"type":"array","items":{"type":"string","minLength":1,"maxLength":64,"pattern":"^ug-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"User group id.","example":"ug-139tf-f58l8-lsbt6dp47lfsdvgh","uniqueKey":"\\items.items.[INDEX].oneOf.2.pendingChangeRequest.body.oneOf.8.action.oneOf.0.approvalGroups.items.[INDEX].approvers.userGroupId.in.items.[INDEX]","typeLabel":"string"},"minItems":1,"maxItems":100,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.2.pendingChangeRequest.body.oneOf.8.action.oneOf.0.approvalGroups.items.[INDEX].approvers.userGroupId.in","typeLabel":"string[]"}},"required":["in"],"additionalProperties":false,"description":"User groups whose members may approve.","uniqueKey":"\\items.items.[INDEX].oneOf.2.pendingChangeRequest.body.oneOf.8.action.oneOf.0.approvalGroups.items.[INDEX].approvers.userGroupId","typeLabel":"object"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.2.pendingChangeRequest.body.oneOf.8.action.oneOf.0.approvalGroups.items.[INDEX].approvers","typeLabel":"object"},"name":{"type":"string","uniqueKey":"\\items.items.[INDEX].oneOf.2.pendingChangeRequest.body.oneOf.8.action.oneOf.0.approvalGroups.items.[INDEX].name","typeLabel":"string"},"initiatorCanApprove":{"type":"boolean","description":"Whether the initiator of the activity can participate in the approval.","uniqueKey":"\\items.items.[INDEX].oneOf.2.pendingChangeRequest.body.oneOf.8.action.oneOf.0.approvalGroups.items.[INDEX].initiatorCanApprove","typeLabel":"boolean"},"serviceAccountsCanApprove":{"type":"boolean","description":"Whether service accounts can participate in the approval for this group.","uniqueKey":"\\items.items.[INDEX].oneOf.2.pendingChangeRequest.body.oneOf.8.action.oneOf.0.approvalGroups.items.[INDEX].serviceAccountsCanApprove","typeLabel":"boolean"}},"required":["quorum","approvers"],"additionalProperties":false,"uniqueKey":"\\items.items.[INDEX].oneOf.2.pendingChangeRequest.body.oneOf.8.action.oneOf.0.approvalGroups.items.[INDEX]","typeLabel":"object"},"minItems":1,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.2.pendingChangeRequest.body.oneOf.8.action.oneOf.0.approvalGroups","typeLabel":"object[]"},"autoRejectTimeout":{"oneOf":[{"type":"integer","minimum":1,"uniqueKey":"\\items.items.[INDEX].oneOf.2.pendingChangeRequest.body.oneOf.8.action.oneOf.0.autoRejectTimeout.oneOf.0","typeLabel":"integer"},{"type":"null","minimum":1,"uniqueKey":"\\items.items.[INDEX].oneOf.2.pendingChangeRequest.body.oneOf.8.action.oneOf.0.autoRejectTimeout.oneOf.1","typeLabel":"null"}],"uniqueKey":"\\items.items.[INDEX].oneOf.2.pendingChangeRequest.body.oneOf.8.action.oneOf.0.autoRejectTimeout","typeLabel":"integer | null"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.2.pendingChangeRequest.body.oneOf.8.action.oneOf.0","typeLabel":"RequestApproval · object"},{"type":"object","title":"Block","description":"This action means that the activity will be blocked if the policy is triggered.\n\n```json\n{\n \"action\": {\n \"kind\": \"Block\"\n }\n}\n```\n","required":["kind"],"properties":{"kind":{"type":"string","enum":["Block"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.2.pendingChangeRequest.body.oneOf.8.action.oneOf.1.kind","typeLabel":"enum\u003cstring>"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.2.pendingChangeRequest.body.oneOf.8.action.oneOf.1","typeLabel":"Block · object"}],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.2.pendingChangeRequest.body.oneOf.8.action","typeLabel":"RequestApproval · object | Block · object"},"dateCreated":{"type":"string","uniqueKey":"\\items.items.[INDEX].oneOf.2.pendingChangeRequest.body.oneOf.8.dateCreated","typeLabel":"string"},"dateUpdated":{"type":"string","uniqueKey":"\\items.items.[INDEX].oneOf.2.pendingChangeRequest.body.oneOf.8.dateUpdated","typeLabel":"string"},"filters":{"type":"object","properties":{"vaultId":{"type":"object","properties":{"in":{"type":"array","items":{"type":"string","minLength":1,"uniqueKey":"\\items.items.[INDEX].oneOf.2.pendingChangeRequest.body.oneOf.8.filters.vaultId.in.items.[INDEX]","typeLabel":"string"},"minItems":1,"maxItems":100,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.2.pendingChangeRequest.body.oneOf.8.filters.vaultId.in","typeLabel":"string[]"}},"required":["in"],"additionalProperties":false,"uniqueKey":"\\items.items.[INDEX].oneOf.2.pendingChangeRequest.body.oneOf.8.filters.vaultId","typeLabel":"object"},"vaultTags":{"type":"object","properties":{"hasAny":{"type":"array","items":{"type":"string","minLength":1,"uniqueKey":"\\items.items.[INDEX].oneOf.2.pendingChangeRequest.body.oneOf.8.filters.vaultTags.hasAny.items.[INDEX]","typeLabel":"string"},"minItems":1,"maxItems":100,"uniqueKey":"\\items.items.[INDEX].oneOf.2.pendingChangeRequest.body.oneOf.8.filters.vaultTags.hasAny","typeLabel":"string[]"},"hasAll":{"type":"array","items":{"type":"string","minLength":1,"uniqueKey":"\\items.items.[INDEX].oneOf.2.pendingChangeRequest.body.oneOf.8.filters.vaultTags.hasAll.items.[INDEX]","typeLabel":"string"},"minItems":1,"maxItems":100,"uniqueKey":"\\items.items.[INDEX].oneOf.2.pendingChangeRequest.body.oneOf.8.filters.vaultTags.hasAll","typeLabel":"string[]"}},"additionalProperties":false,"uniqueKey":"\\items.items.[INDEX].oneOf.2.pendingChangeRequest.body.oneOf.8.filters.vaultTags","typeLabel":"object"}},"additionalProperties":false,"uniqueKey":"\\items.items.[INDEX].oneOf.2.pendingChangeRequest.body.oneOf.8.filters","typeLabel":"object"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.2.pendingChangeRequest.body.oneOf.8","typeLabel":"Vaults:CreateLock · object"},{"type":"object","title":"Vaults:ReplaceLock","required":["id","name","status","activityKind","rule","action"],"properties":{"id":{"type":"string","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.2.pendingChangeRequest.body.oneOf.9.id","typeLabel":"string"},"name":{"type":"string","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.2.pendingChangeRequest.body.oneOf.9.name","typeLabel":"string"},"status":{"type":"string","enum":["Active","Archived"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.2.pendingChangeRequest.body.oneOf.9.status","typeLabel":"enum\u003cstring>"},"activityKind":{"type":"string","enum":["Vaults:ReplaceLock"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.2.pendingChangeRequest.body.oneOf.9.activityKind","typeLabel":"enum\u003cstring>"},"rule":{"type":"object","title":"AlwaysTrigger","description":"This rule will always be triggered, meaning that if this rule is defined on a policy, the policy will always trigger the policy action, regardless of the activity details.","required":["kind"],"properties":{"kind":{"type":"string","enum":["AlwaysTrigger"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.2.pendingChangeRequest.body.oneOf.9.rule.kind","typeLabel":"enum\u003cstring>"},"configuration":{"type":"object","properties":{},"additionalProperties":false,"uniqueKey":"\\items.items.[INDEX].oneOf.2.pendingChangeRequest.body.oneOf.9.rule.configuration","typeLabel":"object"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.2.pendingChangeRequest.body.oneOf.9.rule","typeLabel":"AlwaysTrigger · object"},"action":{"oneOf":[{"type":"object","title":"RequestApproval","description":"\nThis action means that activity will first require an Approval process to be completed before it can be executed (or be aborted if someone rejects it during the approval process).\n\nOne or several groups of approvers need to be specified. These groups define who is allowed to approve / reject an activity.\n\nThe activity will only be executed if all approver groups reach their \"quorum\" of approvals. Otherwise, if any one user within any approver group rejects, then the activity is aborted and the call is not executed.\n\nThe example below shows a `RequestApproval` action, configured with one approval group requiring 2 approvals amongst three specific users.\n\n```json\n{\n \"action\": {\n \"kind\": \"RequestApproval\",\n \"autoRejectTimeout\": 60, // minutes\n \"approvalGroups\": [\n {\n \"name\": \"Admins\",\n \"quorum\": 2, // only 2 approvers required in that group \n \"approvers\": {\n \"userId\": {\n \"in\": [\"us-...1\", \"us-...2\", \"us-...3\"],\n }\n }\n }\n ],\n\n }\n}\n```\n\n**Don't lock yourself up**\n\nBy default, users cannot approve an activity they initiated themselves, even if they are in an approval group. To allow this, you must set `initiatorCanApprove: true`.\n\n*Example 1:* For any wallet transfer, a policy is setup to require approval from **1 specific admin user** (eg. the CEO). `initiatorCanApprove` was not set to `true`. If the CEO himself initiates a transfer, no-one can approve his transfer and it's stuck.\n\n*Example 2:* Company has only 3 users. A policy is setup to require approval from **any 3 users** (`quorum: 3`) for any modification of a policy. `initiatorCanApprove` was not set to `true`. In this case, they are locked, and the policy cannot be modified: whoever requests a modification cannot approve, and the policy is therefore always missing one approver. To unlock, they would need to invite a new user and give him the rights to approve as well.\n ","required":["kind","approvalGroups"],"properties":{"kind":{"type":"string","enum":["RequestApproval"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.2.pendingChangeRequest.body.oneOf.9.action.oneOf.0.kind","typeLabel":"enum\u003cstring>"},"approvalGroups":{"type":"array","items":{"type":"object","properties":{"quorum":{"type":"integer","minimum":1,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.2.pendingChangeRequest.body.oneOf.9.action.oneOf.0.approvalGroups.items.[INDEX].quorum","typeLabel":"integer"},"approvers":{"type":"object","properties":{"userId":{"type":"object","properties":{"in":{"type":"array","items":{"type":"string","minLength":1,"uniqueKey":"\\items.items.[INDEX].oneOf.2.pendingChangeRequest.body.oneOf.9.action.oneOf.0.approvalGroups.items.[INDEX].approvers.userId.in.items.[INDEX]","typeLabel":"string"},"minItems":1,"maxItems":100,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.2.pendingChangeRequest.body.oneOf.9.action.oneOf.0.approvalGroups.items.[INDEX].approvers.userId.in","typeLabel":"string[]"}},"required":["in"],"additionalProperties":false,"description":"Users and service accounts who may approve.","uniqueKey":"\\items.items.[INDEX].oneOf.2.pendingChangeRequest.body.oneOf.9.action.oneOf.0.approvalGroups.items.[INDEX].approvers.userId","typeLabel":"object"},"userGroupId":{"type":"object","properties":{"in":{"type":"array","items":{"type":"string","minLength":1,"maxLength":64,"pattern":"^ug-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"User group id.","example":"ug-139tf-f58l8-lsbt6dp47lfsdvgh","uniqueKey":"\\items.items.[INDEX].oneOf.2.pendingChangeRequest.body.oneOf.9.action.oneOf.0.approvalGroups.items.[INDEX].approvers.userGroupId.in.items.[INDEX]","typeLabel":"string"},"minItems":1,"maxItems":100,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.2.pendingChangeRequest.body.oneOf.9.action.oneOf.0.approvalGroups.items.[INDEX].approvers.userGroupId.in","typeLabel":"string[]"}},"required":["in"],"additionalProperties":false,"description":"User groups whose members may approve.","uniqueKey":"\\items.items.[INDEX].oneOf.2.pendingChangeRequest.body.oneOf.9.action.oneOf.0.approvalGroups.items.[INDEX].approvers.userGroupId","typeLabel":"object"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.2.pendingChangeRequest.body.oneOf.9.action.oneOf.0.approvalGroups.items.[INDEX].approvers","typeLabel":"object"},"name":{"type":"string","uniqueKey":"\\items.items.[INDEX].oneOf.2.pendingChangeRequest.body.oneOf.9.action.oneOf.0.approvalGroups.items.[INDEX].name","typeLabel":"string"},"initiatorCanApprove":{"type":"boolean","description":"Whether the initiator of the activity can participate in the approval.","uniqueKey":"\\items.items.[INDEX].oneOf.2.pendingChangeRequest.body.oneOf.9.action.oneOf.0.approvalGroups.items.[INDEX].initiatorCanApprove","typeLabel":"boolean"},"serviceAccountsCanApprove":{"type":"boolean","description":"Whether service accounts can participate in the approval for this group.","uniqueKey":"\\items.items.[INDEX].oneOf.2.pendingChangeRequest.body.oneOf.9.action.oneOf.0.approvalGroups.items.[INDEX].serviceAccountsCanApprove","typeLabel":"boolean"}},"required":["quorum","approvers"],"additionalProperties":false,"uniqueKey":"\\items.items.[INDEX].oneOf.2.pendingChangeRequest.body.oneOf.9.action.oneOf.0.approvalGroups.items.[INDEX]","typeLabel":"object"},"minItems":1,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.2.pendingChangeRequest.body.oneOf.9.action.oneOf.0.approvalGroups","typeLabel":"object[]"},"autoRejectTimeout":{"oneOf":[{"type":"integer","minimum":1,"uniqueKey":"\\items.items.[INDEX].oneOf.2.pendingChangeRequest.body.oneOf.9.action.oneOf.0.autoRejectTimeout.oneOf.0","typeLabel":"integer"},{"type":"null","minimum":1,"uniqueKey":"\\items.items.[INDEX].oneOf.2.pendingChangeRequest.body.oneOf.9.action.oneOf.0.autoRejectTimeout.oneOf.1","typeLabel":"null"}],"uniqueKey":"\\items.items.[INDEX].oneOf.2.pendingChangeRequest.body.oneOf.9.action.oneOf.0.autoRejectTimeout","typeLabel":"integer | null"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.2.pendingChangeRequest.body.oneOf.9.action.oneOf.0","typeLabel":"RequestApproval · object"},{"type":"object","title":"Block","description":"This action means that the activity will be blocked if the policy is triggered.\n\n```json\n{\n \"action\": {\n \"kind\": \"Block\"\n }\n}\n```\n","required":["kind"],"properties":{"kind":{"type":"string","enum":["Block"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.2.pendingChangeRequest.body.oneOf.9.action.oneOf.1.kind","typeLabel":"enum\u003cstring>"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.2.pendingChangeRequest.body.oneOf.9.action.oneOf.1","typeLabel":"Block · object"}],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.2.pendingChangeRequest.body.oneOf.9.action","typeLabel":"RequestApproval · object | Block · object"},"dateCreated":{"type":"string","uniqueKey":"\\items.items.[INDEX].oneOf.2.pendingChangeRequest.body.oneOf.9.dateCreated","typeLabel":"string"},"dateUpdated":{"type":"string","uniqueKey":"\\items.items.[INDEX].oneOf.2.pendingChangeRequest.body.oneOf.9.dateUpdated","typeLabel":"string"},"filters":{"type":"object","properties":{"vaultId":{"type":"object","properties":{"in":{"type":"array","items":{"type":"string","minLength":1,"uniqueKey":"\\items.items.[INDEX].oneOf.2.pendingChangeRequest.body.oneOf.9.filters.vaultId.in.items.[INDEX]","typeLabel":"string"},"minItems":1,"maxItems":100,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.2.pendingChangeRequest.body.oneOf.9.filters.vaultId.in","typeLabel":"string[]"}},"required":["in"],"additionalProperties":false,"uniqueKey":"\\items.items.[INDEX].oneOf.2.pendingChangeRequest.body.oneOf.9.filters.vaultId","typeLabel":"object"},"vaultTags":{"type":"object","properties":{"hasAny":{"type":"array","items":{"type":"string","minLength":1,"uniqueKey":"\\items.items.[INDEX].oneOf.2.pendingChangeRequest.body.oneOf.9.filters.vaultTags.hasAny.items.[INDEX]","typeLabel":"string"},"minItems":1,"maxItems":100,"uniqueKey":"\\items.items.[INDEX].oneOf.2.pendingChangeRequest.body.oneOf.9.filters.vaultTags.hasAny","typeLabel":"string[]"},"hasAll":{"type":"array","items":{"type":"string","minLength":1,"uniqueKey":"\\items.items.[INDEX].oneOf.2.pendingChangeRequest.body.oneOf.9.filters.vaultTags.hasAll.items.[INDEX]","typeLabel":"string"},"minItems":1,"maxItems":100,"uniqueKey":"\\items.items.[INDEX].oneOf.2.pendingChangeRequest.body.oneOf.9.filters.vaultTags.hasAll","typeLabel":"string[]"}},"additionalProperties":false,"uniqueKey":"\\items.items.[INDEX].oneOf.2.pendingChangeRequest.body.oneOf.9.filters.vaultTags","typeLabel":"object"}},"additionalProperties":false,"uniqueKey":"\\items.items.[INDEX].oneOf.2.pendingChangeRequest.body.oneOf.9.filters","typeLabel":"object"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.2.pendingChangeRequest.body.oneOf.9","typeLabel":"Vaults:ReplaceLock · object"},{"type":"object","title":"UserAction","required":["id","name","status","activityKind","rule","action"],"properties":{"id":{"type":"string","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.2.pendingChangeRequest.body.oneOf.10.id","typeLabel":"string"},"name":{"type":"string","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.2.pendingChangeRequest.body.oneOf.10.name","typeLabel":"string"},"status":{"type":"string","enum":["Active","Archived"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.2.pendingChangeRequest.body.oneOf.10.status","typeLabel":"enum\u003cstring>"},"activityKind":{"type":"string","enum":["UserAction"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.2.pendingChangeRequest.body.oneOf.10.activityKind","typeLabel":"enum\u003cstring>"},"rule":{"type":"object","properties":{"kind":{"type":"string","enum":["UserAction"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.2.pendingChangeRequest.body.oneOf.10.rule.kind","typeLabel":"enum\u003cstring>"},"configuration":{"type":"object","properties":{"userActionKinds":{"type":"array","items":{"type":"string","uniqueKey":"\\items.items.[INDEX].oneOf.2.pendingChangeRequest.body.oneOf.10.rule.configuration.userActionKinds.items.[INDEX]","typeLabel":"string"},"minItems":1,"description":"The user actions this rule applies to. The rule triggers on any of them.","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.2.pendingChangeRequest.body.oneOf.10.rule.configuration.userActionKinds","typeLabel":"string[]"}},"required":["userActionKinds"],"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.2.pendingChangeRequest.body.oneOf.10.rule.configuration","typeLabel":"object"}},"required":["kind","configuration"],"additionalProperties":false,"title":"UserAction","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.2.pendingChangeRequest.body.oneOf.10.rule","typeLabel":"UserAction · object"},"action":{"oneOf":[{"type":"object","title":"RequestApproval","description":"\nThis action means that activity will first require an Approval process to be completed before it can be executed (or be aborted if someone rejects it during the approval process).\n\nOne or several groups of approvers need to be specified. These groups define who is allowed to approve / reject an activity.\n\nThe activity will only be executed if all approver groups reach their \"quorum\" of approvals. Otherwise, if any one user within any approver group rejects, then the activity is aborted and the call is not executed.\n\nThe example below shows a `RequestApproval` action, configured with one approval group requiring 2 approvals amongst three specific users.\n\n```json\n{\n \"action\": {\n \"kind\": \"RequestApproval\",\n \"autoRejectTimeout\": 60, // minutes\n \"approvalGroups\": [\n {\n \"name\": \"Admins\",\n \"quorum\": 2, // only 2 approvers required in that group \n \"approvers\": {\n \"userId\": {\n \"in\": [\"us-...1\", \"us-...2\", \"us-...3\"],\n }\n }\n }\n ],\n\n }\n}\n```\n\n**Don't lock yourself up**\n\nBy default, users cannot approve an activity they initiated themselves, even if they are in an approval group. To allow this, you must set `initiatorCanApprove: true`.\n\n*Example 1:* For any wallet transfer, a policy is setup to require approval from **1 specific admin user** (eg. the CEO). `initiatorCanApprove` was not set to `true`. If the CEO himself initiates a transfer, no-one can approve his transfer and it's stuck.\n\n*Example 2:* Company has only 3 users. A policy is setup to require approval from **any 3 users** (`quorum: 3`) for any modification of a policy. `initiatorCanApprove` was not set to `true`. In this case, they are locked, and the policy cannot be modified: whoever requests a modification cannot approve, and the policy is therefore always missing one approver. To unlock, they would need to invite a new user and give him the rights to approve as well.\n ","required":["kind","approvalGroups"],"properties":{"kind":{"type":"string","enum":["RequestApproval"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.2.pendingChangeRequest.body.oneOf.10.action.oneOf.0.kind","typeLabel":"enum\u003cstring>"},"approvalGroups":{"type":"array","items":{"type":"object","properties":{"quorum":{"type":"integer","minimum":1,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.2.pendingChangeRequest.body.oneOf.10.action.oneOf.0.approvalGroups.items.[INDEX].quorum","typeLabel":"integer"},"approvers":{"type":"object","properties":{"userId":{"type":"object","properties":{"in":{"type":"array","items":{"type":"string","minLength":1,"uniqueKey":"\\items.items.[INDEX].oneOf.2.pendingChangeRequest.body.oneOf.10.action.oneOf.0.approvalGroups.items.[INDEX].approvers.userId.in.items.[INDEX]","typeLabel":"string"},"minItems":1,"maxItems":100,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.2.pendingChangeRequest.body.oneOf.10.action.oneOf.0.approvalGroups.items.[INDEX].approvers.userId.in","typeLabel":"string[]"}},"required":["in"],"additionalProperties":false,"description":"Users and service accounts who may approve.","uniqueKey":"\\items.items.[INDEX].oneOf.2.pendingChangeRequest.body.oneOf.10.action.oneOf.0.approvalGroups.items.[INDEX].approvers.userId","typeLabel":"object"},"userGroupId":{"type":"object","properties":{"in":{"type":"array","items":{"type":"string","minLength":1,"maxLength":64,"pattern":"^ug-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"User group id.","example":"ug-139tf-f58l8-lsbt6dp47lfsdvgh","uniqueKey":"\\items.items.[INDEX].oneOf.2.pendingChangeRequest.body.oneOf.10.action.oneOf.0.approvalGroups.items.[INDEX].approvers.userGroupId.in.items.[INDEX]","typeLabel":"string"},"minItems":1,"maxItems":100,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.2.pendingChangeRequest.body.oneOf.10.action.oneOf.0.approvalGroups.items.[INDEX].approvers.userGroupId.in","typeLabel":"string[]"}},"required":["in"],"additionalProperties":false,"description":"User groups whose members may approve.","uniqueKey":"\\items.items.[INDEX].oneOf.2.pendingChangeRequest.body.oneOf.10.action.oneOf.0.approvalGroups.items.[INDEX].approvers.userGroupId","typeLabel":"object"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.2.pendingChangeRequest.body.oneOf.10.action.oneOf.0.approvalGroups.items.[INDEX].approvers","typeLabel":"object"},"name":{"type":"string","uniqueKey":"\\items.items.[INDEX].oneOf.2.pendingChangeRequest.body.oneOf.10.action.oneOf.0.approvalGroups.items.[INDEX].name","typeLabel":"string"},"initiatorCanApprove":{"type":"boolean","description":"Whether the initiator of the activity can participate in the approval.","uniqueKey":"\\items.items.[INDEX].oneOf.2.pendingChangeRequest.body.oneOf.10.action.oneOf.0.approvalGroups.items.[INDEX].initiatorCanApprove","typeLabel":"boolean"},"serviceAccountsCanApprove":{"type":"boolean","description":"Whether service accounts can participate in the approval for this group.","uniqueKey":"\\items.items.[INDEX].oneOf.2.pendingChangeRequest.body.oneOf.10.action.oneOf.0.approvalGroups.items.[INDEX].serviceAccountsCanApprove","typeLabel":"boolean"}},"required":["quorum","approvers"],"additionalProperties":false,"uniqueKey":"\\items.items.[INDEX].oneOf.2.pendingChangeRequest.body.oneOf.10.action.oneOf.0.approvalGroups.items.[INDEX]","typeLabel":"object"},"minItems":1,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.2.pendingChangeRequest.body.oneOf.10.action.oneOf.0.approvalGroups","typeLabel":"object[]"},"autoRejectTimeout":{"oneOf":[{"type":"integer","minimum":1,"uniqueKey":"\\items.items.[INDEX].oneOf.2.pendingChangeRequest.body.oneOf.10.action.oneOf.0.autoRejectTimeout.oneOf.0","typeLabel":"integer"},{"type":"null","minimum":1,"uniqueKey":"\\items.items.[INDEX].oneOf.2.pendingChangeRequest.body.oneOf.10.action.oneOf.0.autoRejectTimeout.oneOf.1","typeLabel":"null"}],"uniqueKey":"\\items.items.[INDEX].oneOf.2.pendingChangeRequest.body.oneOf.10.action.oneOf.0.autoRejectTimeout","typeLabel":"integer | null"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.2.pendingChangeRequest.body.oneOf.10.action.oneOf.0","typeLabel":"RequestApproval · object"},{"type":"object","title":"Block","description":"This action means that the activity will be blocked if the policy is triggered.\n\n```json\n{\n \"action\": {\n \"kind\": \"Block\"\n }\n}\n```\n","required":["kind"],"properties":{"kind":{"type":"string","enum":["Block"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.2.pendingChangeRequest.body.oneOf.10.action.oneOf.1.kind","typeLabel":"enum\u003cstring>"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.2.pendingChangeRequest.body.oneOf.10.action.oneOf.1","typeLabel":"Block · object"}],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.2.pendingChangeRequest.body.oneOf.10.action","typeLabel":"RequestApproval · object | Block · object"},"dateCreated":{"type":"string","uniqueKey":"\\items.items.[INDEX].oneOf.2.pendingChangeRequest.body.oneOf.10.dateCreated","typeLabel":"string"},"dateUpdated":{"type":"string","uniqueKey":"\\items.items.[INDEX].oneOf.2.pendingChangeRequest.body.oneOf.10.dateUpdated","typeLabel":"string"},"filters":{"type":"object","properties":{},"uniqueKey":"\\items.items.[INDEX].oneOf.2.pendingChangeRequest.body.oneOf.10.filters","typeLabel":"object"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.2.pendingChangeRequest.body.oneOf.10","typeLabel":"UserAction · object"}],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.2.pendingChangeRequest.body","typeLabel":"Registry:Addresses:Modify · object | Permissions:Assign · object | Permissions:Modify · object | Policies:Modify · object | Registry:ContractSchemas:Modify · object | Wallets:Sign · object | Wallets:IncomingTransaction · object | Vaults:ReleaseQuarantine · object | Vaults:CreateLock · object | Vaults:ReplaceLock · object | UserAction · object"},"dateResolved":{"type":"string","format":"date-time","uniqueKey":"\\items.items.[INDEX].oneOf.2.pendingChangeRequest.dateResolved","typeLabel":"string\u003cdate-time>"},"approvalId":{"type":"string","uniqueKey":"\\items.items.[INDEX].oneOf.2.pendingChangeRequest.approvalId","typeLabel":"string"}},"required":["id","requester","kind","operationKind","status","entityId","dateCreated","body"],"additionalProperties":false,"uniqueKey":"\\items.items.[INDEX].oneOf.2.pendingChangeRequest","typeLabel":"object"}},"additionalProperties":false,"uniqueKey":"\\items.items.[INDEX].oneOf.2","typeLabel":"Permissions:Modify · object"},{"type":"object","title":"Policies:Modify","required":["id","name","status","activityKind","rule","action"],"properties":{"id":{"type":"string","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.3.id","typeLabel":"string"},"name":{"type":"string","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.3.name","typeLabel":"string"},"status":{"type":"string","enum":["Active","Archived"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.3.status","typeLabel":"enum\u003cstring>"},"activityKind":{"type":"string","enum":["Policies:Modify"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.3.activityKind","typeLabel":"enum\u003cstring>"},"rule":{"type":"object","properties":{"kind":{"type":"string","enum":["AlwaysTrigger"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.3.rule.kind","typeLabel":"enum\u003cstring>"},"configuration":{"type":"object","properties":{},"additionalProperties":false,"uniqueKey":"\\items.items.[INDEX].oneOf.3.rule.configuration","typeLabel":"object"}},"required":["kind"],"additionalProperties":false,"description":"This rule will always be triggered, meaning that if this rule is defined on a policy, the policy will always trigger the policy action, regardless of the activity details.","title":"AlwaysTrigger","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.3.rule","typeLabel":"AlwaysTrigger · object"},"action":{"type":"object","properties":{"kind":{"type":"string","enum":["RequestApproval"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.3.action.kind","typeLabel":"enum\u003cstring>"},"approvalGroups":{"type":"array","items":{"type":"object","properties":{"quorum":{"type":"integer","minimum":1,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.3.action.approvalGroups.items.[INDEX].quorum","typeLabel":"integer"},"approvers":{"type":"object","properties":{"userId":{"type":"object","properties":{"in":{"type":"array","items":{"type":"string","minLength":1,"uniqueKey":"\\items.items.[INDEX].oneOf.3.action.approvalGroups.items.[INDEX].approvers.userId.in.items.[INDEX]","typeLabel":"string"},"minItems":1,"maxItems":100,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.3.action.approvalGroups.items.[INDEX].approvers.userId.in","typeLabel":"string[]"}},"required":["in"],"additionalProperties":false,"description":"Users and service accounts who may approve.","uniqueKey":"\\items.items.[INDEX].oneOf.3.action.approvalGroups.items.[INDEX].approvers.userId","typeLabel":"object"},"userGroupId":{"type":"object","properties":{"in":{"type":"array","items":{"type":"string","minLength":1,"maxLength":64,"pattern":"^ug-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"User group id.","example":"ug-139tf-f58l8-lsbt6dp47lfsdvgh","uniqueKey":"\\items.items.[INDEX].oneOf.3.action.approvalGroups.items.[INDEX].approvers.userGroupId.in.items.[INDEX]","typeLabel":"string"},"minItems":1,"maxItems":100,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.3.action.approvalGroups.items.[INDEX].approvers.userGroupId.in","typeLabel":"string[]"}},"required":["in"],"additionalProperties":false,"description":"User groups whose members may approve.","uniqueKey":"\\items.items.[INDEX].oneOf.3.action.approvalGroups.items.[INDEX].approvers.userGroupId","typeLabel":"object"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.3.action.approvalGroups.items.[INDEX].approvers","typeLabel":"object"},"name":{"type":"string","uniqueKey":"\\items.items.[INDEX].oneOf.3.action.approvalGroups.items.[INDEX].name","typeLabel":"string"},"initiatorCanApprove":{"type":"boolean","description":"Whether the initiator of the activity can participate in the approval.","uniqueKey":"\\items.items.[INDEX].oneOf.3.action.approvalGroups.items.[INDEX].initiatorCanApprove","typeLabel":"boolean"},"serviceAccountsCanApprove":{"type":"boolean","description":"Whether service accounts can participate in the approval for this group.","uniqueKey":"\\items.items.[INDEX].oneOf.3.action.approvalGroups.items.[INDEX].serviceAccountsCanApprove","typeLabel":"boolean"}},"required":["quorum","approvers"],"additionalProperties":false,"uniqueKey":"\\items.items.[INDEX].oneOf.3.action.approvalGroups.items.[INDEX]","typeLabel":"object"},"minItems":1,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.3.action.approvalGroups","typeLabel":"object[]"},"autoRejectTimeout":{"oneOf":[{"type":"integer","minimum":1,"uniqueKey":"\\items.items.[INDEX].oneOf.3.action.autoRejectTimeout.oneOf.0","typeLabel":"integer"},{"type":"null","minimum":1,"uniqueKey":"\\items.items.[INDEX].oneOf.3.action.autoRejectTimeout.oneOf.1","typeLabel":"null"}],"uniqueKey":"\\items.items.[INDEX].oneOf.3.action.autoRejectTimeout","typeLabel":"integer | null"}},"required":["kind","approvalGroups"],"additionalProperties":false,"description":"\nThis action means that activity will first require an Approval process to be completed before it can be executed (or be aborted if someone rejects it during the approval process).\n\nOne or several groups of approvers need to be specified. These groups define who is allowed to approve / reject an activity.\n\nThe activity will only be executed if all approver groups reach their \"quorum\" of approvals. Otherwise, if any one user within any approver group rejects, then the activity is aborted and the call is not executed.\n\nThe example below shows a `RequestApproval` action, configured with one approval group requiring 2 approvals amongst three specific users.\n\n```json\n{\n \"action\": {\n \"kind\": \"RequestApproval\",\n \"autoRejectTimeout\": 60, // minutes\n \"approvalGroups\": [\n {\n \"name\": \"Admins\",\n \"quorum\": 2, // only 2 approvers required in that group \n \"approvers\": {\n \"userId\": {\n \"in\": [\"us-...1\", \"us-...2\", \"us-...3\"],\n }\n }\n }\n ],\n\n }\n}\n```\n\n**Don't lock yourself up**\n\nBy default, users cannot approve an activity they initiated themselves, even if they are in an approval group. To allow this, you must set `initiatorCanApprove: true`.\n\n*Example 1:* For any wallet transfer, a policy is setup to require approval from **1 specific admin user** (eg. the CEO). `initiatorCanApprove` was not set to `true`. If the CEO himself initiates a transfer, no-one can approve his transfer and it's stuck.\n\n*Example 2:* Company has only 3 users. A policy is setup to require approval from **any 3 users** (`quorum: 3`) for any modification of a policy. `initiatorCanApprove` was not set to `true`. In this case, they are locked, and the policy cannot be modified: whoever requests a modification cannot approve, and the policy is therefore always missing one approver. To unlock, they would need to invite a new user and give him the rights to approve as well.\n ","title":"RequestApproval","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.3.action","typeLabel":"RequestApproval · object"},"dateCreated":{"type":"string","uniqueKey":"\\items.items.[INDEX].oneOf.3.dateCreated","typeLabel":"string"},"dateUpdated":{"type":"string","uniqueKey":"\\items.items.[INDEX].oneOf.3.dateUpdated","typeLabel":"string"},"filters":{"type":"object","properties":{"policyId":{"type":"object","properties":{"in":{"type":"array","items":{"type":"string","minLength":1,"uniqueKey":"\\items.items.[INDEX].oneOf.3.filters.policyId.in.items.[INDEX]","typeLabel":"string"},"minItems":1,"maxItems":100,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.3.filters.policyId.in","typeLabel":"string[]"}},"required":["in"],"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.3.filters.policyId","typeLabel":"object"}},"required":["policyId"],"additionalProperties":false,"uniqueKey":"\\items.items.[INDEX].oneOf.3.filters","typeLabel":"object"},"pendingChangeRequest":{"type":"object","properties":{"id":{"type":"string","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.3.pendingChangeRequest.id","typeLabel":"string"},"requester":{"type":"object","properties":{"userId":{"type":"string","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.3.pendingChangeRequest.requester.userId","typeLabel":"string"},"tokenId":{"type":"string","uniqueKey":"\\items.items.[INDEX].oneOf.3.pendingChangeRequest.requester.tokenId","typeLabel":"string"},"appId":{"type":"string","uniqueKey":"\\items.items.[INDEX].oneOf.3.pendingChangeRequest.requester.appId","typeLabel":"string"}},"required":["userId"],"description":"The user who initiated the change request.","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.3.pendingChangeRequest.requester","typeLabel":"object"},"kind":{"type":"string","enum":["Policy"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.3.pendingChangeRequest.kind","typeLabel":"enum\u003cstring>"},"operationKind":{"type":"string","enum":["Update"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.3.pendingChangeRequest.operationKind","typeLabel":"enum\u003cstring>"},"status":{"type":"string","enum":["Applied","Failed","Pending","Rejected"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.3.pendingChangeRequest.status","typeLabel":"enum\u003cstring>"},"entityId":{"type":"string","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.3.pendingChangeRequest.entityId","typeLabel":"string"},"dateCreated":{"type":"string","format":"date-time","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.3.pendingChangeRequest.dateCreated","typeLabel":"string\u003cdate-time>"},"body":{"oneOf":[{"type":"object","title":"Registry:Addresses:Modify","required":["id","name","status","activityKind","rule","action"],"properties":{"id":{"type":"string","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.3.pendingChangeRequest.body.oneOf.0.id","typeLabel":"string"},"name":{"type":"string","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.3.pendingChangeRequest.body.oneOf.0.name","typeLabel":"string"},"status":{"type":"string","enum":["Active","Archived"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.3.pendingChangeRequest.body.oneOf.0.status","typeLabel":"enum\u003cstring>"},"activityKind":{"type":"string","enum":["Registry:Addresses:Modify"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.3.pendingChangeRequest.body.oneOf.0.activityKind","typeLabel":"enum\u003cstring>"},"rule":{"type":"object","properties":{"kind":{"type":"string","enum":["AlwaysTrigger"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.3.pendingChangeRequest.body.oneOf.0.rule.kind","typeLabel":"enum\u003cstring>"},"configuration":{"type":"object","properties":{},"additionalProperties":false,"uniqueKey":"\\items.items.[INDEX].oneOf.3.pendingChangeRequest.body.oneOf.0.rule.configuration","typeLabel":"object"}},"required":["kind"],"additionalProperties":false,"description":"This rule will always be triggered, meaning that if this rule is defined on a policy, the policy will always trigger the policy action, regardless of the activity details.","title":"AlwaysTrigger","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.3.pendingChangeRequest.body.oneOf.0.rule","typeLabel":"AlwaysTrigger · object"},"action":{"oneOf":[{"type":"object","title":"RequestApproval","description":"\nThis action means that activity will first require an Approval process to be completed before it can be executed (or be aborted if someone rejects it during the approval process).\n\nOne or several groups of approvers need to be specified. These groups define who is allowed to approve / reject an activity.\n\nThe activity will only be executed if all approver groups reach their \"quorum\" of approvals. Otherwise, if any one user within any approver group rejects, then the activity is aborted and the call is not executed.\n\nThe example below shows a `RequestApproval` action, configured with one approval group requiring 2 approvals amongst three specific users.\n\n```json\n{\n \"action\": {\n \"kind\": \"RequestApproval\",\n \"autoRejectTimeout\": 60, // minutes\n \"approvalGroups\": [\n {\n \"name\": \"Admins\",\n \"quorum\": 2, // only 2 approvers required in that group \n \"approvers\": {\n \"userId\": {\n \"in\": [\"us-...1\", \"us-...2\", \"us-...3\"],\n }\n }\n }\n ],\n\n }\n}\n```\n\n**Don't lock yourself up**\n\nBy default, users cannot approve an activity they initiated themselves, even if they are in an approval group. To allow this, you must set `initiatorCanApprove: true`.\n\n*Example 1:* For any wallet transfer, a policy is setup to require approval from **1 specific admin user** (eg. the CEO). `initiatorCanApprove` was not set to `true`. If the CEO himself initiates a transfer, no-one can approve his transfer and it's stuck.\n\n*Example 2:* Company has only 3 users. A policy is setup to require approval from **any 3 users** (`quorum: 3`) for any modification of a policy. `initiatorCanApprove` was not set to `true`. In this case, they are locked, and the policy cannot be modified: whoever requests a modification cannot approve, and the policy is therefore always missing one approver. To unlock, they would need to invite a new user and give him the rights to approve as well.\n ","required":["kind","approvalGroups"],"properties":{"kind":{"type":"string","enum":["RequestApproval"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.3.pendingChangeRequest.body.oneOf.0.action.oneOf.0.kind","typeLabel":"enum\u003cstring>"},"approvalGroups":{"type":"array","items":{"type":"object","properties":{"quorum":{"type":"integer","minimum":1,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.3.pendingChangeRequest.body.oneOf.0.action.oneOf.0.approvalGroups.items.[INDEX].quorum","typeLabel":"integer"},"approvers":{"type":"object","properties":{"userId":{"type":"object","properties":{"in":{"type":"array","items":{"type":"string","minLength":1,"uniqueKey":"\\items.items.[INDEX].oneOf.3.pendingChangeRequest.body.oneOf.0.action.oneOf.0.approvalGroups.items.[INDEX].approvers.userId.in.items.[INDEX]","typeLabel":"string"},"minItems":1,"maxItems":100,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.3.pendingChangeRequest.body.oneOf.0.action.oneOf.0.approvalGroups.items.[INDEX].approvers.userId.in","typeLabel":"string[]"}},"required":["in"],"additionalProperties":false,"description":"Users and service accounts who may approve.","uniqueKey":"\\items.items.[INDEX].oneOf.3.pendingChangeRequest.body.oneOf.0.action.oneOf.0.approvalGroups.items.[INDEX].approvers.userId","typeLabel":"object"},"userGroupId":{"type":"object","properties":{"in":{"type":"array","items":{"type":"string","minLength":1,"maxLength":64,"pattern":"^ug-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"User group id.","example":"ug-139tf-f58l8-lsbt6dp47lfsdvgh","uniqueKey":"\\items.items.[INDEX].oneOf.3.pendingChangeRequest.body.oneOf.0.action.oneOf.0.approvalGroups.items.[INDEX].approvers.userGroupId.in.items.[INDEX]","typeLabel":"string"},"minItems":1,"maxItems":100,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.3.pendingChangeRequest.body.oneOf.0.action.oneOf.0.approvalGroups.items.[INDEX].approvers.userGroupId.in","typeLabel":"string[]"}},"required":["in"],"additionalProperties":false,"description":"User groups whose members may approve.","uniqueKey":"\\items.items.[INDEX].oneOf.3.pendingChangeRequest.body.oneOf.0.action.oneOf.0.approvalGroups.items.[INDEX].approvers.userGroupId","typeLabel":"object"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.3.pendingChangeRequest.body.oneOf.0.action.oneOf.0.approvalGroups.items.[INDEX].approvers","typeLabel":"object"},"name":{"type":"string","uniqueKey":"\\items.items.[INDEX].oneOf.3.pendingChangeRequest.body.oneOf.0.action.oneOf.0.approvalGroups.items.[INDEX].name","typeLabel":"string"},"initiatorCanApprove":{"type":"boolean","description":"Whether the initiator of the activity can participate in the approval.","uniqueKey":"\\items.items.[INDEX].oneOf.3.pendingChangeRequest.body.oneOf.0.action.oneOf.0.approvalGroups.items.[INDEX].initiatorCanApprove","typeLabel":"boolean"},"serviceAccountsCanApprove":{"type":"boolean","description":"Whether service accounts can participate in the approval for this group.","uniqueKey":"\\items.items.[INDEX].oneOf.3.pendingChangeRequest.body.oneOf.0.action.oneOf.0.approvalGroups.items.[INDEX].serviceAccountsCanApprove","typeLabel":"boolean"}},"required":["quorum","approvers"],"additionalProperties":false,"uniqueKey":"\\items.items.[INDEX].oneOf.3.pendingChangeRequest.body.oneOf.0.action.oneOf.0.approvalGroups.items.[INDEX]","typeLabel":"object"},"minItems":1,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.3.pendingChangeRequest.body.oneOf.0.action.oneOf.0.approvalGroups","typeLabel":"object[]"},"autoRejectTimeout":{"oneOf":[{"type":"integer","minimum":1,"uniqueKey":"\\items.items.[INDEX].oneOf.3.pendingChangeRequest.body.oneOf.0.action.oneOf.0.autoRejectTimeout.oneOf.0","typeLabel":"integer"},{"type":"null","minimum":1,"uniqueKey":"\\items.items.[INDEX].oneOf.3.pendingChangeRequest.body.oneOf.0.action.oneOf.0.autoRejectTimeout.oneOf.1","typeLabel":"null"}],"uniqueKey":"\\items.items.[INDEX].oneOf.3.pendingChangeRequest.body.oneOf.0.action.oneOf.0.autoRejectTimeout","typeLabel":"integer | null"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.3.pendingChangeRequest.body.oneOf.0.action.oneOf.0","typeLabel":"RequestApproval · object"},{"type":"object","title":"Block","description":"This action means that the activity will be blocked if the policy is triggered.\n\n```json\n{\n \"action\": {\n \"kind\": \"Block\"\n }\n}\n```\n","required":["kind"],"properties":{"kind":{"type":"string","enum":["Block"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.3.pendingChangeRequest.body.oneOf.0.action.oneOf.1.kind","typeLabel":"enum\u003cstring>"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.3.pendingChangeRequest.body.oneOf.0.action.oneOf.1","typeLabel":"Block · object"}],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.3.pendingChangeRequest.body.oneOf.0.action","typeLabel":"RequestApproval · object | Block · object"},"dateCreated":{"type":"string","uniqueKey":"\\items.items.[INDEX].oneOf.3.pendingChangeRequest.body.oneOf.0.dateCreated","typeLabel":"string"},"dateUpdated":{"type":"string","uniqueKey":"\\items.items.[INDEX].oneOf.3.pendingChangeRequest.body.oneOf.0.dateUpdated","typeLabel":"string"},"filters":{"type":"object","properties":{},"uniqueKey":"\\items.items.[INDEX].oneOf.3.pendingChangeRequest.body.oneOf.0.filters","typeLabel":"object"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.3.pendingChangeRequest.body.oneOf.0","typeLabel":"Registry:Addresses:Modify · object"},{"type":"object","title":"Permissions:Assign","required":["id","name","status","activityKind","rule","action"],"properties":{"id":{"type":"string","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.3.pendingChangeRequest.body.oneOf.1.id","typeLabel":"string"},"name":{"type":"string","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.3.pendingChangeRequest.body.oneOf.1.name","typeLabel":"string"},"status":{"type":"string","enum":["Active","Archived"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.3.pendingChangeRequest.body.oneOf.1.status","typeLabel":"enum\u003cstring>"},"activityKind":{"type":"string","enum":["Permissions:Assign"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.3.pendingChangeRequest.body.oneOf.1.activityKind","typeLabel":"enum\u003cstring>"},"rule":{"type":"object","properties":{"kind":{"type":"string","enum":["AlwaysTrigger"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.3.pendingChangeRequest.body.oneOf.1.rule.kind","typeLabel":"enum\u003cstring>"},"configuration":{"type":"object","properties":{},"additionalProperties":false,"uniqueKey":"\\items.items.[INDEX].oneOf.3.pendingChangeRequest.body.oneOf.1.rule.configuration","typeLabel":"object"}},"required":["kind"],"additionalProperties":false,"description":"This rule will always be triggered, meaning that if this rule is defined on a policy, the policy will always trigger the policy action, regardless of the activity details.","title":"AlwaysTrigger","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.3.pendingChangeRequest.body.oneOf.1.rule","typeLabel":"AlwaysTrigger · object"},"action":{"oneOf":[{"type":"object","title":"RequestApproval","description":"\nThis action means that activity will first require an Approval process to be completed before it can be executed (or be aborted if someone rejects it during the approval process).\n\nOne or several groups of approvers need to be specified. These groups define who is allowed to approve / reject an activity.\n\nThe activity will only be executed if all approver groups reach their \"quorum\" of approvals. Otherwise, if any one user within any approver group rejects, then the activity is aborted and the call is not executed.\n\nThe example below shows a `RequestApproval` action, configured with one approval group requiring 2 approvals amongst three specific users.\n\n```json\n{\n \"action\": {\n \"kind\": \"RequestApproval\",\n \"autoRejectTimeout\": 60, // minutes\n \"approvalGroups\": [\n {\n \"name\": \"Admins\",\n \"quorum\": 2, // only 2 approvers required in that group \n \"approvers\": {\n \"userId\": {\n \"in\": [\"us-...1\", \"us-...2\", \"us-...3\"],\n }\n }\n }\n ],\n\n }\n}\n```\n\n**Don't lock yourself up**\n\nBy default, users cannot approve an activity they initiated themselves, even if they are in an approval group. To allow this, you must set `initiatorCanApprove: true`.\n\n*Example 1:* For any wallet transfer, a policy is setup to require approval from **1 specific admin user** (eg. the CEO). `initiatorCanApprove` was not set to `true`. If the CEO himself initiates a transfer, no-one can approve his transfer and it's stuck.\n\n*Example 2:* Company has only 3 users. A policy is setup to require approval from **any 3 users** (`quorum: 3`) for any modification of a policy. `initiatorCanApprove` was not set to `true`. In this case, they are locked, and the policy cannot be modified: whoever requests a modification cannot approve, and the policy is therefore always missing one approver. To unlock, they would need to invite a new user and give him the rights to approve as well.\n ","required":["kind","approvalGroups"],"properties":{"kind":{"type":"string","enum":["RequestApproval"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.3.pendingChangeRequest.body.oneOf.1.action.oneOf.0.kind","typeLabel":"enum\u003cstring>"},"approvalGroups":{"type":"array","items":{"type":"object","properties":{"quorum":{"type":"integer","minimum":1,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.3.pendingChangeRequest.body.oneOf.1.action.oneOf.0.approvalGroups.items.[INDEX].quorum","typeLabel":"integer"},"approvers":{"type":"object","properties":{"userId":{"type":"object","properties":{"in":{"type":"array","items":{"type":"string","minLength":1,"uniqueKey":"\\items.items.[INDEX].oneOf.3.pendingChangeRequest.body.oneOf.1.action.oneOf.0.approvalGroups.items.[INDEX].approvers.userId.in.items.[INDEX]","typeLabel":"string"},"minItems":1,"maxItems":100,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.3.pendingChangeRequest.body.oneOf.1.action.oneOf.0.approvalGroups.items.[INDEX].approvers.userId.in","typeLabel":"string[]"}},"required":["in"],"additionalProperties":false,"description":"Users and service accounts who may approve.","uniqueKey":"\\items.items.[INDEX].oneOf.3.pendingChangeRequest.body.oneOf.1.action.oneOf.0.approvalGroups.items.[INDEX].approvers.userId","typeLabel":"object"},"userGroupId":{"type":"object","properties":{"in":{"type":"array","items":{"type":"string","minLength":1,"maxLength":64,"pattern":"^ug-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"User group id.","example":"ug-139tf-f58l8-lsbt6dp47lfsdvgh","uniqueKey":"\\items.items.[INDEX].oneOf.3.pendingChangeRequest.body.oneOf.1.action.oneOf.0.approvalGroups.items.[INDEX].approvers.userGroupId.in.items.[INDEX]","typeLabel":"string"},"minItems":1,"maxItems":100,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.3.pendingChangeRequest.body.oneOf.1.action.oneOf.0.approvalGroups.items.[INDEX].approvers.userGroupId.in","typeLabel":"string[]"}},"required":["in"],"additionalProperties":false,"description":"User groups whose members may approve.","uniqueKey":"\\items.items.[INDEX].oneOf.3.pendingChangeRequest.body.oneOf.1.action.oneOf.0.approvalGroups.items.[INDEX].approvers.userGroupId","typeLabel":"object"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.3.pendingChangeRequest.body.oneOf.1.action.oneOf.0.approvalGroups.items.[INDEX].approvers","typeLabel":"object"},"name":{"type":"string","uniqueKey":"\\items.items.[INDEX].oneOf.3.pendingChangeRequest.body.oneOf.1.action.oneOf.0.approvalGroups.items.[INDEX].name","typeLabel":"string"},"initiatorCanApprove":{"type":"boolean","description":"Whether the initiator of the activity can participate in the approval.","uniqueKey":"\\items.items.[INDEX].oneOf.3.pendingChangeRequest.body.oneOf.1.action.oneOf.0.approvalGroups.items.[INDEX].initiatorCanApprove","typeLabel":"boolean"},"serviceAccountsCanApprove":{"type":"boolean","description":"Whether service accounts can participate in the approval for this group.","uniqueKey":"\\items.items.[INDEX].oneOf.3.pendingChangeRequest.body.oneOf.1.action.oneOf.0.approvalGroups.items.[INDEX].serviceAccountsCanApprove","typeLabel":"boolean"}},"required":["quorum","approvers"],"additionalProperties":false,"uniqueKey":"\\items.items.[INDEX].oneOf.3.pendingChangeRequest.body.oneOf.1.action.oneOf.0.approvalGroups.items.[INDEX]","typeLabel":"object"},"minItems":1,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.3.pendingChangeRequest.body.oneOf.1.action.oneOf.0.approvalGroups","typeLabel":"object[]"},"autoRejectTimeout":{"oneOf":[{"type":"integer","minimum":1,"uniqueKey":"\\items.items.[INDEX].oneOf.3.pendingChangeRequest.body.oneOf.1.action.oneOf.0.autoRejectTimeout.oneOf.0","typeLabel":"integer"},{"type":"null","minimum":1,"uniqueKey":"\\items.items.[INDEX].oneOf.3.pendingChangeRequest.body.oneOf.1.action.oneOf.0.autoRejectTimeout.oneOf.1","typeLabel":"null"}],"uniqueKey":"\\items.items.[INDEX].oneOf.3.pendingChangeRequest.body.oneOf.1.action.oneOf.0.autoRejectTimeout","typeLabel":"integer | null"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.3.pendingChangeRequest.body.oneOf.1.action.oneOf.0","typeLabel":"RequestApproval · object"},{"type":"object","title":"Block","description":"This action means that the activity will be blocked if the policy is triggered.\n\n```json\n{\n \"action\": {\n \"kind\": \"Block\"\n }\n}\n```\n","required":["kind"],"properties":{"kind":{"type":"string","enum":["Block"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.3.pendingChangeRequest.body.oneOf.1.action.oneOf.1.kind","typeLabel":"enum\u003cstring>"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.3.pendingChangeRequest.body.oneOf.1.action.oneOf.1","typeLabel":"Block · object"}],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.3.pendingChangeRequest.body.oneOf.1.action","typeLabel":"RequestApproval · object | Block · object"},"dateCreated":{"type":"string","uniqueKey":"\\items.items.[INDEX].oneOf.3.pendingChangeRequest.body.oneOf.1.dateCreated","typeLabel":"string"},"dateUpdated":{"type":"string","uniqueKey":"\\items.items.[INDEX].oneOf.3.pendingChangeRequest.body.oneOf.1.dateUpdated","typeLabel":"string"},"filters":{"type":"object","properties":{"permissionId":{"type":"object","properties":{"in":{"type":"array","items":{"type":"string","minLength":1,"uniqueKey":"\\items.items.[INDEX].oneOf.3.pendingChangeRequest.body.oneOf.1.filters.permissionId.in.items.[INDEX]","typeLabel":"string"},"minItems":1,"maxItems":100,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.3.pendingChangeRequest.body.oneOf.1.filters.permissionId.in","typeLabel":"string[]"}},"required":["in"],"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.3.pendingChangeRequest.body.oneOf.1.filters.permissionId","typeLabel":"object"}},"required":["permissionId"],"additionalProperties":false,"uniqueKey":"\\items.items.[INDEX].oneOf.3.pendingChangeRequest.body.oneOf.1.filters","typeLabel":"object"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.3.pendingChangeRequest.body.oneOf.1","typeLabel":"Permissions:Assign · object"},{"type":"object","title":"Permissions:Modify","required":["id","name","status","activityKind","rule","action"],"properties":{"id":{"type":"string","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.3.pendingChangeRequest.body.oneOf.2.id","typeLabel":"string"},"name":{"type":"string","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.3.pendingChangeRequest.body.oneOf.2.name","typeLabel":"string"},"status":{"type":"string","enum":["Active","Archived"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.3.pendingChangeRequest.body.oneOf.2.status","typeLabel":"enum\u003cstring>"},"activityKind":{"type":"string","enum":["Permissions:Modify"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.3.pendingChangeRequest.body.oneOf.2.activityKind","typeLabel":"enum\u003cstring>"},"rule":{"type":"object","properties":{"kind":{"type":"string","enum":["AlwaysTrigger"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.3.pendingChangeRequest.body.oneOf.2.rule.kind","typeLabel":"enum\u003cstring>"},"configuration":{"type":"object","properties":{},"additionalProperties":false,"uniqueKey":"\\items.items.[INDEX].oneOf.3.pendingChangeRequest.body.oneOf.2.rule.configuration","typeLabel":"object"}},"required":["kind"],"additionalProperties":false,"description":"This rule will always be triggered, meaning that if this rule is defined on a policy, the policy will always trigger the policy action, regardless of the activity details.","title":"AlwaysTrigger","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.3.pendingChangeRequest.body.oneOf.2.rule","typeLabel":"AlwaysTrigger · object"},"action":{"oneOf":[{"type":"object","title":"RequestApproval","description":"\nThis action means that activity will first require an Approval process to be completed before it can be executed (or be aborted if someone rejects it during the approval process).\n\nOne or several groups of approvers need to be specified. These groups define who is allowed to approve / reject an activity.\n\nThe activity will only be executed if all approver groups reach their \"quorum\" of approvals. Otherwise, if any one user within any approver group rejects, then the activity is aborted and the call is not executed.\n\nThe example below shows a `RequestApproval` action, configured with one approval group requiring 2 approvals amongst three specific users.\n\n```json\n{\n \"action\": {\n \"kind\": \"RequestApproval\",\n \"autoRejectTimeout\": 60, // minutes\n \"approvalGroups\": [\n {\n \"name\": \"Admins\",\n \"quorum\": 2, // only 2 approvers required in that group \n \"approvers\": {\n \"userId\": {\n \"in\": [\"us-...1\", \"us-...2\", \"us-...3\"],\n }\n }\n }\n ],\n\n }\n}\n```\n\n**Don't lock yourself up**\n\nBy default, users cannot approve an activity they initiated themselves, even if they are in an approval group. To allow this, you must set `initiatorCanApprove: true`.\n\n*Example 1:* For any wallet transfer, a policy is setup to require approval from **1 specific admin user** (eg. the CEO). `initiatorCanApprove` was not set to `true`. If the CEO himself initiates a transfer, no-one can approve his transfer and it's stuck.\n\n*Example 2:* Company has only 3 users. A policy is setup to require approval from **any 3 users** (`quorum: 3`) for any modification of a policy. `initiatorCanApprove` was not set to `true`. In this case, they are locked, and the policy cannot be modified: whoever requests a modification cannot approve, and the policy is therefore always missing one approver. To unlock, they would need to invite a new user and give him the rights to approve as well.\n ","required":["kind","approvalGroups"],"properties":{"kind":{"type":"string","enum":["RequestApproval"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.3.pendingChangeRequest.body.oneOf.2.action.oneOf.0.kind","typeLabel":"enum\u003cstring>"},"approvalGroups":{"type":"array","items":{"type":"object","properties":{"quorum":{"type":"integer","minimum":1,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.3.pendingChangeRequest.body.oneOf.2.action.oneOf.0.approvalGroups.items.[INDEX].quorum","typeLabel":"integer"},"approvers":{"type":"object","properties":{"userId":{"type":"object","properties":{"in":{"type":"array","items":{"type":"string","minLength":1,"uniqueKey":"\\items.items.[INDEX].oneOf.3.pendingChangeRequest.body.oneOf.2.action.oneOf.0.approvalGroups.items.[INDEX].approvers.userId.in.items.[INDEX]","typeLabel":"string"},"minItems":1,"maxItems":100,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.3.pendingChangeRequest.body.oneOf.2.action.oneOf.0.approvalGroups.items.[INDEX].approvers.userId.in","typeLabel":"string[]"}},"required":["in"],"additionalProperties":false,"description":"Users and service accounts who may approve.","uniqueKey":"\\items.items.[INDEX].oneOf.3.pendingChangeRequest.body.oneOf.2.action.oneOf.0.approvalGroups.items.[INDEX].approvers.userId","typeLabel":"object"},"userGroupId":{"type":"object","properties":{"in":{"type":"array","items":{"type":"string","minLength":1,"maxLength":64,"pattern":"^ug-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"User group id.","example":"ug-139tf-f58l8-lsbt6dp47lfsdvgh","uniqueKey":"\\items.items.[INDEX].oneOf.3.pendingChangeRequest.body.oneOf.2.action.oneOf.0.approvalGroups.items.[INDEX].approvers.userGroupId.in.items.[INDEX]","typeLabel":"string"},"minItems":1,"maxItems":100,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.3.pendingChangeRequest.body.oneOf.2.action.oneOf.0.approvalGroups.items.[INDEX].approvers.userGroupId.in","typeLabel":"string[]"}},"required":["in"],"additionalProperties":false,"description":"User groups whose members may approve.","uniqueKey":"\\items.items.[INDEX].oneOf.3.pendingChangeRequest.body.oneOf.2.action.oneOf.0.approvalGroups.items.[INDEX].approvers.userGroupId","typeLabel":"object"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.3.pendingChangeRequest.body.oneOf.2.action.oneOf.0.approvalGroups.items.[INDEX].approvers","typeLabel":"object"},"name":{"type":"string","uniqueKey":"\\items.items.[INDEX].oneOf.3.pendingChangeRequest.body.oneOf.2.action.oneOf.0.approvalGroups.items.[INDEX].name","typeLabel":"string"},"initiatorCanApprove":{"type":"boolean","description":"Whether the initiator of the activity can participate in the approval.","uniqueKey":"\\items.items.[INDEX].oneOf.3.pendingChangeRequest.body.oneOf.2.action.oneOf.0.approvalGroups.items.[INDEX].initiatorCanApprove","typeLabel":"boolean"},"serviceAccountsCanApprove":{"type":"boolean","description":"Whether service accounts can participate in the approval for this group.","uniqueKey":"\\items.items.[INDEX].oneOf.3.pendingChangeRequest.body.oneOf.2.action.oneOf.0.approvalGroups.items.[INDEX].serviceAccountsCanApprove","typeLabel":"boolean"}},"required":["quorum","approvers"],"additionalProperties":false,"uniqueKey":"\\items.items.[INDEX].oneOf.3.pendingChangeRequest.body.oneOf.2.action.oneOf.0.approvalGroups.items.[INDEX]","typeLabel":"object"},"minItems":1,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.3.pendingChangeRequest.body.oneOf.2.action.oneOf.0.approvalGroups","typeLabel":"object[]"},"autoRejectTimeout":{"oneOf":[{"type":"integer","minimum":1,"uniqueKey":"\\items.items.[INDEX].oneOf.3.pendingChangeRequest.body.oneOf.2.action.oneOf.0.autoRejectTimeout.oneOf.0","typeLabel":"integer"},{"type":"null","minimum":1,"uniqueKey":"\\items.items.[INDEX].oneOf.3.pendingChangeRequest.body.oneOf.2.action.oneOf.0.autoRejectTimeout.oneOf.1","typeLabel":"null"}],"uniqueKey":"\\items.items.[INDEX].oneOf.3.pendingChangeRequest.body.oneOf.2.action.oneOf.0.autoRejectTimeout","typeLabel":"integer | null"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.3.pendingChangeRequest.body.oneOf.2.action.oneOf.0","typeLabel":"RequestApproval · object"},{"type":"object","title":"Block","description":"This action means that the activity will be blocked if the policy is triggered.\n\n```json\n{\n \"action\": {\n \"kind\": \"Block\"\n }\n}\n```\n","required":["kind"],"properties":{"kind":{"type":"string","enum":["Block"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.3.pendingChangeRequest.body.oneOf.2.action.oneOf.1.kind","typeLabel":"enum\u003cstring>"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.3.pendingChangeRequest.body.oneOf.2.action.oneOf.1","typeLabel":"Block · object"}],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.3.pendingChangeRequest.body.oneOf.2.action","typeLabel":"RequestApproval · object | Block · object"},"dateCreated":{"type":"string","uniqueKey":"\\items.items.[INDEX].oneOf.3.pendingChangeRequest.body.oneOf.2.dateCreated","typeLabel":"string"},"dateUpdated":{"type":"string","uniqueKey":"\\items.items.[INDEX].oneOf.3.pendingChangeRequest.body.oneOf.2.dateUpdated","typeLabel":"string"},"filters":{"type":"object","properties":{"permissionId":{"type":"object","properties":{"in":{"type":"array","items":{"type":"string","minLength":1,"uniqueKey":"\\items.items.[INDEX].oneOf.3.pendingChangeRequest.body.oneOf.2.filters.permissionId.in.items.[INDEX]","typeLabel":"string"},"minItems":1,"maxItems":100,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.3.pendingChangeRequest.body.oneOf.2.filters.permissionId.in","typeLabel":"string[]"}},"required":["in"],"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.3.pendingChangeRequest.body.oneOf.2.filters.permissionId","typeLabel":"object"}},"required":["permissionId"],"additionalProperties":false,"uniqueKey":"\\items.items.[INDEX].oneOf.3.pendingChangeRequest.body.oneOf.2.filters","typeLabel":"object"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.3.pendingChangeRequest.body.oneOf.2","typeLabel":"Permissions:Modify · object"},{"type":"object","title":"Policies:Modify","required":["id","name","status","activityKind","rule","action"],"properties":{"id":{"type":"string","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.3.pendingChangeRequest.body.oneOf.3.id","typeLabel":"string"},"name":{"type":"string","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.3.pendingChangeRequest.body.oneOf.3.name","typeLabel":"string"},"status":{"type":"string","enum":["Active","Archived"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.3.pendingChangeRequest.body.oneOf.3.status","typeLabel":"enum\u003cstring>"},"activityKind":{"type":"string","enum":["Policies:Modify"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.3.pendingChangeRequest.body.oneOf.3.activityKind","typeLabel":"enum\u003cstring>"},"rule":{"type":"object","properties":{"kind":{"type":"string","enum":["AlwaysTrigger"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.3.pendingChangeRequest.body.oneOf.3.rule.kind","typeLabel":"enum\u003cstring>"},"configuration":{"type":"object","properties":{},"additionalProperties":false,"uniqueKey":"\\items.items.[INDEX].oneOf.3.pendingChangeRequest.body.oneOf.3.rule.configuration","typeLabel":"object"}},"required":["kind"],"additionalProperties":false,"description":"This rule will always be triggered, meaning that if this rule is defined on a policy, the policy will always trigger the policy action, regardless of the activity details.","title":"AlwaysTrigger","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.3.pendingChangeRequest.body.oneOf.3.rule","typeLabel":"AlwaysTrigger · object"},"action":{"type":"object","properties":{"kind":{"type":"string","enum":["RequestApproval"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.3.pendingChangeRequest.body.oneOf.3.action.kind","typeLabel":"enum\u003cstring>"},"approvalGroups":{"type":"array","items":{"type":"object","properties":{"quorum":{"type":"integer","minimum":1,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.3.pendingChangeRequest.body.oneOf.3.action.approvalGroups.items.[INDEX].quorum","typeLabel":"integer"},"approvers":{"type":"object","properties":{"userId":{"type":"object","properties":{"in":{"type":"array","items":{"type":"string","minLength":1,"uniqueKey":"\\items.items.[INDEX].oneOf.3.pendingChangeRequest.body.oneOf.3.action.approvalGroups.items.[INDEX].approvers.userId.in.items.[INDEX]","typeLabel":"string"},"minItems":1,"maxItems":100,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.3.pendingChangeRequest.body.oneOf.3.action.approvalGroups.items.[INDEX].approvers.userId.in","typeLabel":"string[]"}},"required":["in"],"additionalProperties":false,"description":"Users and service accounts who may approve.","uniqueKey":"\\items.items.[INDEX].oneOf.3.pendingChangeRequest.body.oneOf.3.action.approvalGroups.items.[INDEX].approvers.userId","typeLabel":"object"},"userGroupId":{"type":"object","properties":{"in":{"type":"array","items":{"type":"string","minLength":1,"maxLength":64,"pattern":"^ug-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"User group id.","example":"ug-139tf-f58l8-lsbt6dp47lfsdvgh","uniqueKey":"\\items.items.[INDEX].oneOf.3.pendingChangeRequest.body.oneOf.3.action.approvalGroups.items.[INDEX].approvers.userGroupId.in.items.[INDEX]","typeLabel":"string"},"minItems":1,"maxItems":100,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.3.pendingChangeRequest.body.oneOf.3.action.approvalGroups.items.[INDEX].approvers.userGroupId.in","typeLabel":"string[]"}},"required":["in"],"additionalProperties":false,"description":"User groups whose members may approve.","uniqueKey":"\\items.items.[INDEX].oneOf.3.pendingChangeRequest.body.oneOf.3.action.approvalGroups.items.[INDEX].approvers.userGroupId","typeLabel":"object"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.3.pendingChangeRequest.body.oneOf.3.action.approvalGroups.items.[INDEX].approvers","typeLabel":"object"},"name":{"type":"string","uniqueKey":"\\items.items.[INDEX].oneOf.3.pendingChangeRequest.body.oneOf.3.action.approvalGroups.items.[INDEX].name","typeLabel":"string"},"initiatorCanApprove":{"type":"boolean","description":"Whether the initiator of the activity can participate in the approval.","uniqueKey":"\\items.items.[INDEX].oneOf.3.pendingChangeRequest.body.oneOf.3.action.approvalGroups.items.[INDEX].initiatorCanApprove","typeLabel":"boolean"},"serviceAccountsCanApprove":{"type":"boolean","description":"Whether service accounts can participate in the approval for this group.","uniqueKey":"\\items.items.[INDEX].oneOf.3.pendingChangeRequest.body.oneOf.3.action.approvalGroups.items.[INDEX].serviceAccountsCanApprove","typeLabel":"boolean"}},"required":["quorum","approvers"],"additionalProperties":false,"uniqueKey":"\\items.items.[INDEX].oneOf.3.pendingChangeRequest.body.oneOf.3.action.approvalGroups.items.[INDEX]","typeLabel":"object"},"minItems":1,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.3.pendingChangeRequest.body.oneOf.3.action.approvalGroups","typeLabel":"object[]"},"autoRejectTimeout":{"oneOf":[{"type":"integer","minimum":1,"uniqueKey":"\\items.items.[INDEX].oneOf.3.pendingChangeRequest.body.oneOf.3.action.autoRejectTimeout.oneOf.0","typeLabel":"integer"},{"type":"null","minimum":1,"uniqueKey":"\\items.items.[INDEX].oneOf.3.pendingChangeRequest.body.oneOf.3.action.autoRejectTimeout.oneOf.1","typeLabel":"null"}],"uniqueKey":"\\items.items.[INDEX].oneOf.3.pendingChangeRequest.body.oneOf.3.action.autoRejectTimeout","typeLabel":"integer | null"}},"required":["kind","approvalGroups"],"additionalProperties":false,"description":"\nThis action means that activity will first require an Approval process to be completed before it can be executed (or be aborted if someone rejects it during the approval process).\n\nOne or several groups of approvers need to be specified. These groups define who is allowed to approve / reject an activity.\n\nThe activity will only be executed if all approver groups reach their \"quorum\" of approvals. Otherwise, if any one user within any approver group rejects, then the activity is aborted and the call is not executed.\n\nThe example below shows a `RequestApproval` action, configured with one approval group requiring 2 approvals amongst three specific users.\n\n```json\n{\n \"action\": {\n \"kind\": \"RequestApproval\",\n \"autoRejectTimeout\": 60, // minutes\n \"approvalGroups\": [\n {\n \"name\": \"Admins\",\n \"quorum\": 2, // only 2 approvers required in that group \n \"approvers\": {\n \"userId\": {\n \"in\": [\"us-...1\", \"us-...2\", \"us-...3\"],\n }\n }\n }\n ],\n\n }\n}\n```\n\n**Don't lock yourself up**\n\nBy default, users cannot approve an activity they initiated themselves, even if they are in an approval group. To allow this, you must set `initiatorCanApprove: true`.\n\n*Example 1:* For any wallet transfer, a policy is setup to require approval from **1 specific admin user** (eg. the CEO). `initiatorCanApprove` was not set to `true`. If the CEO himself initiates a transfer, no-one can approve his transfer and it's stuck.\n\n*Example 2:* Company has only 3 users. A policy is setup to require approval from **any 3 users** (`quorum: 3`) for any modification of a policy. `initiatorCanApprove` was not set to `true`. In this case, they are locked, and the policy cannot be modified: whoever requests a modification cannot approve, and the policy is therefore always missing one approver. To unlock, they would need to invite a new user and give him the rights to approve as well.\n ","title":"RequestApproval","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.3.pendingChangeRequest.body.oneOf.3.action","typeLabel":"RequestApproval · object"},"dateCreated":{"type":"string","uniqueKey":"\\items.items.[INDEX].oneOf.3.pendingChangeRequest.body.oneOf.3.dateCreated","typeLabel":"string"},"dateUpdated":{"type":"string","uniqueKey":"\\items.items.[INDEX].oneOf.3.pendingChangeRequest.body.oneOf.3.dateUpdated","typeLabel":"string"},"filters":{"type":"object","properties":{"policyId":{"type":"object","properties":{"in":{"type":"array","items":{"type":"string","minLength":1,"uniqueKey":"\\items.items.[INDEX].oneOf.3.pendingChangeRequest.body.oneOf.3.filters.policyId.in.items.[INDEX]","typeLabel":"string"},"minItems":1,"maxItems":100,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.3.pendingChangeRequest.body.oneOf.3.filters.policyId.in","typeLabel":"string[]"}},"required":["in"],"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.3.pendingChangeRequest.body.oneOf.3.filters.policyId","typeLabel":"object"}},"required":["policyId"],"additionalProperties":false,"uniqueKey":"\\items.items.[INDEX].oneOf.3.pendingChangeRequest.body.oneOf.3.filters","typeLabel":"object"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.3.pendingChangeRequest.body.oneOf.3","typeLabel":"Policies:Modify · object"},{"type":"object","title":"Registry:ContractSchemas:Modify","required":["id","name","status","activityKind","rule","action"],"properties":{"id":{"type":"string","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.3.pendingChangeRequest.body.oneOf.4.id","typeLabel":"string"},"name":{"type":"string","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.3.pendingChangeRequest.body.oneOf.4.name","typeLabel":"string"},"status":{"type":"string","enum":["Active","Archived"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.3.pendingChangeRequest.body.oneOf.4.status","typeLabel":"enum\u003cstring>"},"activityKind":{"type":"string","enum":["Registry:ContractSchemas:Modify"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.3.pendingChangeRequest.body.oneOf.4.activityKind","typeLabel":"enum\u003cstring>"},"rule":{"type":"object","properties":{"kind":{"type":"string","enum":["AlwaysTrigger"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.3.pendingChangeRequest.body.oneOf.4.rule.kind","typeLabel":"enum\u003cstring>"},"configuration":{"type":"object","properties":{},"additionalProperties":false,"uniqueKey":"\\items.items.[INDEX].oneOf.3.pendingChangeRequest.body.oneOf.4.rule.configuration","typeLabel":"object"}},"required":["kind"],"additionalProperties":false,"description":"This rule will always be triggered, meaning that if this rule is defined on a policy, the policy will always trigger the policy action, regardless of the activity details.","title":"AlwaysTrigger","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.3.pendingChangeRequest.body.oneOf.4.rule","typeLabel":"AlwaysTrigger · object"},"action":{"oneOf":[{"type":"object","title":"RequestApproval","description":"\nThis action means that activity will first require an Approval process to be completed before it can be executed (or be aborted if someone rejects it during the approval process).\n\nOne or several groups of approvers need to be specified. These groups define who is allowed to approve / reject an activity.\n\nThe activity will only be executed if all approver groups reach their \"quorum\" of approvals. Otherwise, if any one user within any approver group rejects, then the activity is aborted and the call is not executed.\n\nThe example below shows a `RequestApproval` action, configured with one approval group requiring 2 approvals amongst three specific users.\n\n```json\n{\n \"action\": {\n \"kind\": \"RequestApproval\",\n \"autoRejectTimeout\": 60, // minutes\n \"approvalGroups\": [\n {\n \"name\": \"Admins\",\n \"quorum\": 2, // only 2 approvers required in that group \n \"approvers\": {\n \"userId\": {\n \"in\": [\"us-...1\", \"us-...2\", \"us-...3\"],\n }\n }\n }\n ],\n\n }\n}\n```\n\n**Don't lock yourself up**\n\nBy default, users cannot approve an activity they initiated themselves, even if they are in an approval group. To allow this, you must set `initiatorCanApprove: true`.\n\n*Example 1:* For any wallet transfer, a policy is setup to require approval from **1 specific admin user** (eg. the CEO). `initiatorCanApprove` was not set to `true`. If the CEO himself initiates a transfer, no-one can approve his transfer and it's stuck.\n\n*Example 2:* Company has only 3 users. A policy is setup to require approval from **any 3 users** (`quorum: 3`) for any modification of a policy. `initiatorCanApprove` was not set to `true`. In this case, they are locked, and the policy cannot be modified: whoever requests a modification cannot approve, and the policy is therefore always missing one approver. To unlock, they would need to invite a new user and give him the rights to approve as well.\n ","required":["kind","approvalGroups"],"properties":{"kind":{"type":"string","enum":["RequestApproval"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.3.pendingChangeRequest.body.oneOf.4.action.oneOf.0.kind","typeLabel":"enum\u003cstring>"},"approvalGroups":{"type":"array","items":{"type":"object","properties":{"quorum":{"type":"integer","minimum":1,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.3.pendingChangeRequest.body.oneOf.4.action.oneOf.0.approvalGroups.items.[INDEX].quorum","typeLabel":"integer"},"approvers":{"type":"object","properties":{"userId":{"type":"object","properties":{"in":{"type":"array","items":{"type":"string","minLength":1,"uniqueKey":"\\items.items.[INDEX].oneOf.3.pendingChangeRequest.body.oneOf.4.action.oneOf.0.approvalGroups.items.[INDEX].approvers.userId.in.items.[INDEX]","typeLabel":"string"},"minItems":1,"maxItems":100,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.3.pendingChangeRequest.body.oneOf.4.action.oneOf.0.approvalGroups.items.[INDEX].approvers.userId.in","typeLabel":"string[]"}},"required":["in"],"additionalProperties":false,"description":"Users and service accounts who may approve.","uniqueKey":"\\items.items.[INDEX].oneOf.3.pendingChangeRequest.body.oneOf.4.action.oneOf.0.approvalGroups.items.[INDEX].approvers.userId","typeLabel":"object"},"userGroupId":{"type":"object","properties":{"in":{"type":"array","items":{"type":"string","minLength":1,"maxLength":64,"pattern":"^ug-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"User group id.","example":"ug-139tf-f58l8-lsbt6dp47lfsdvgh","uniqueKey":"\\items.items.[INDEX].oneOf.3.pendingChangeRequest.body.oneOf.4.action.oneOf.0.approvalGroups.items.[INDEX].approvers.userGroupId.in.items.[INDEX]","typeLabel":"string"},"minItems":1,"maxItems":100,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.3.pendingChangeRequest.body.oneOf.4.action.oneOf.0.approvalGroups.items.[INDEX].approvers.userGroupId.in","typeLabel":"string[]"}},"required":["in"],"additionalProperties":false,"description":"User groups whose members may approve.","uniqueKey":"\\items.items.[INDEX].oneOf.3.pendingChangeRequest.body.oneOf.4.action.oneOf.0.approvalGroups.items.[INDEX].approvers.userGroupId","typeLabel":"object"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.3.pendingChangeRequest.body.oneOf.4.action.oneOf.0.approvalGroups.items.[INDEX].approvers","typeLabel":"object"},"name":{"type":"string","uniqueKey":"\\items.items.[INDEX].oneOf.3.pendingChangeRequest.body.oneOf.4.action.oneOf.0.approvalGroups.items.[INDEX].name","typeLabel":"string"},"initiatorCanApprove":{"type":"boolean","description":"Whether the initiator of the activity can participate in the approval.","uniqueKey":"\\items.items.[INDEX].oneOf.3.pendingChangeRequest.body.oneOf.4.action.oneOf.0.approvalGroups.items.[INDEX].initiatorCanApprove","typeLabel":"boolean"},"serviceAccountsCanApprove":{"type":"boolean","description":"Whether service accounts can participate in the approval for this group.","uniqueKey":"\\items.items.[INDEX].oneOf.3.pendingChangeRequest.body.oneOf.4.action.oneOf.0.approvalGroups.items.[INDEX].serviceAccountsCanApprove","typeLabel":"boolean"}},"required":["quorum","approvers"],"additionalProperties":false,"uniqueKey":"\\items.items.[INDEX].oneOf.3.pendingChangeRequest.body.oneOf.4.action.oneOf.0.approvalGroups.items.[INDEX]","typeLabel":"object"},"minItems":1,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.3.pendingChangeRequest.body.oneOf.4.action.oneOf.0.approvalGroups","typeLabel":"object[]"},"autoRejectTimeout":{"oneOf":[{"type":"integer","minimum":1,"uniqueKey":"\\items.items.[INDEX].oneOf.3.pendingChangeRequest.body.oneOf.4.action.oneOf.0.autoRejectTimeout.oneOf.0","typeLabel":"integer"},{"type":"null","minimum":1,"uniqueKey":"\\items.items.[INDEX].oneOf.3.pendingChangeRequest.body.oneOf.4.action.oneOf.0.autoRejectTimeout.oneOf.1","typeLabel":"null"}],"uniqueKey":"\\items.items.[INDEX].oneOf.3.pendingChangeRequest.body.oneOf.4.action.oneOf.0.autoRejectTimeout","typeLabel":"integer | null"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.3.pendingChangeRequest.body.oneOf.4.action.oneOf.0","typeLabel":"RequestApproval · object"},{"type":"object","title":"Block","description":"This action means that the activity will be blocked if the policy is triggered.\n\n```json\n{\n \"action\": {\n \"kind\": \"Block\"\n }\n}\n```\n","required":["kind"],"properties":{"kind":{"type":"string","enum":["Block"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.3.pendingChangeRequest.body.oneOf.4.action.oneOf.1.kind","typeLabel":"enum\u003cstring>"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.3.pendingChangeRequest.body.oneOf.4.action.oneOf.1","typeLabel":"Block · object"}],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.3.pendingChangeRequest.body.oneOf.4.action","typeLabel":"RequestApproval · object | Block · object"},"dateCreated":{"type":"string","uniqueKey":"\\items.items.[INDEX].oneOf.3.pendingChangeRequest.body.oneOf.4.dateCreated","typeLabel":"string"},"dateUpdated":{"type":"string","uniqueKey":"\\items.items.[INDEX].oneOf.3.pendingChangeRequest.body.oneOf.4.dateUpdated","typeLabel":"string"},"filters":{"type":"object","properties":{},"uniqueKey":"\\items.items.[INDEX].oneOf.3.pendingChangeRequest.body.oneOf.4.filters","typeLabel":"object"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.3.pendingChangeRequest.body.oneOf.4","typeLabel":"Registry:ContractSchemas:Modify · object"},{"type":"object","title":"Wallets:Sign","required":["id","name","status","activityKind","rule","action"],"properties":{"id":{"type":"string","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.3.pendingChangeRequest.body.oneOf.5.id","typeLabel":"string"},"name":{"type":"string","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.3.pendingChangeRequest.body.oneOf.5.name","typeLabel":"string"},"status":{"type":"string","enum":["Active","Archived"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.3.pendingChangeRequest.body.oneOf.5.status","typeLabel":"enum\u003cstring>"},"activityKind":{"type":"string","enum":["Wallets:Sign"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.3.pendingChangeRequest.body.oneOf.5.activityKind","typeLabel":"enum\u003cstring>"},"rule":{"oneOf":[{"type":"object","title":"AlwaysTrigger","description":"This rule will always be triggered, meaning that if this rule is defined on a policy, the policy will always trigger the policy action, regardless of the activity details.","required":["kind"],"properties":{"kind":{"type":"string","enum":["AlwaysTrigger"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.3.pendingChangeRequest.body.oneOf.5.rule.oneOf.0.kind","typeLabel":"enum\u003cstring>"},"configuration":{"type":"object","properties":{},"additionalProperties":false,"uniqueKey":"\\items.items.[INDEX].oneOf.3.pendingChangeRequest.body.oneOf.5.rule.oneOf.0.configuration","typeLabel":"object"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.3.pendingChangeRequest.body.oneOf.5.rule.oneOf.0","typeLabel":"AlwaysTrigger · object"},{"type":"object","title":"TransactionRecipientWhitelist","description":"This rule will trigger if the destination address *is NOT whitelisted*.","required":["kind","configuration"],"properties":{"kind":{"type":"string","enum":["TransactionRecipientWhitelist"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.3.pendingChangeRequest.body.oneOf.5.rule.oneOf.1.kind","typeLabel":"enum\u003cstring>"},"configuration":{"type":"object","properties":{"addresses":{"type":"array","items":{"type":"string","minLength":1,"uniqueKey":"\\items.items.[INDEX].oneOf.3.pendingChangeRequest.body.oneOf.5.rule.oneOf.1.configuration.addresses.items.[INDEX]","typeLabel":"string"},"description":"Whitelisted recipient addresses","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.3.pendingChangeRequest.body.oneOf.5.rule.oneOf.1.configuration.addresses","typeLabel":"string[]"}},"required":["addresses"],"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.3.pendingChangeRequest.body.oneOf.5.rule.oneOf.1.configuration","typeLabel":"object"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.3.pendingChangeRequest.body.oneOf.5.rule.oneOf.1","typeLabel":"TransactionRecipientWhitelist · object"},{"type":"object","title":"TransactionAmountLimit","description":"This rule will trigger if the wallet activity detected is transferring some value whose amount is equal to or greater than a given limit. The limit is inclusive: a transfer whose value exactly equals the limit also triggers.\n\nThe limit is expressed in a fiat `currency` and evaluated against the market value of the transfer. To set a threshold in the asset's own units instead, use `TransactionAmountLimitNominal`.\n\nNote: If the amount of the wallet activity cannot be evaluated for any reason (eg. market prices are not available, or eg. the amount cannot be inferred from a wallet signature request, etc.), by default the rule will trigger the policy (this is called \"failing closed\" and is generally considered a security best practice).","required":["kind","configuration"],"properties":{"kind":{"type":"string","enum":["TransactionAmountLimit"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.3.pendingChangeRequest.body.oneOf.5.rule.oneOf.2.kind","typeLabel":"enum\u003cstring>"},"configuration":{"type":"object","properties":{"limit":{"type":"number","description":"Amount limit in `currency`","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.3.pendingChangeRequest.body.oneOf.5.rule.oneOf.2.configuration.limit","typeLabel":"number"},"currency":{"type":"string","enum":["USD"],"description":"Fiat currency, currently only `USD`","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.3.pendingChangeRequest.body.oneOf.5.rule.oneOf.2.configuration.currency","typeLabel":"enum\u003cstring>"}},"required":["limit","currency"],"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.3.pendingChangeRequest.body.oneOf.5.rule.oneOf.2.configuration","typeLabel":"object"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.3.pendingChangeRequest.body.oneOf.5.rule.oneOf.2","typeLabel":"TransactionAmountLimit · object"},{"type":"object","title":"TransactionAmountLimitNominal","description":"This rule will trigger if the wallet activity detected is transferring more of a listed asset than that asset's limit.\n\nEach limit is expressed in the minimum denomination of its own asset and compared against the transferred amount directly, so the verdict needs no market data and does not move with a price. To set a threshold on the fiat value of a transfer instead, use `TransactionAmountLimit`.\n\nLimits are asset exact: an asset is identified by its network and its Dfns token identifier, so a wrapped or staked derivative is a different asset from the thing it tracks, and a transfer of an asset the rule does not list will not trigger it.\n\nNote: If the transferred amount or the asset cannot be determined for any reason, by default the rule will trigger the policy (this is called \"failing closed\" and is generally considered a security best practice).","required":["kind","configuration"],"properties":{"kind":{"type":"string","enum":["TransactionAmountLimitNominal"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.3.pendingChangeRequest.body.oneOf.5.rule.oneOf.3.kind","typeLabel":"enum\u003cstring>"},"configuration":{"type":"object","properties":{"assets":{"type":"array","items":{"type":"object","properties":{"network":{"type":"string","title":"Network","description":"The network the asset lives on.","enum":["Algorand","AlgorandTestnet","Aptos","AptosTestnet","ArbitrumOne","ArbitrumSepolia","Arc","ArcTestnet","Areum","AvalancheC","AvalancheCFuji","Base","BaseSepolia","Berachain","BerachainBepolia","Bitcoin","BitcoinSignet","BitcoinTestnet4","BitcoinCash","Bob","BobSepolia","Bsc","BscTestnet","Canton","CantonTestnet","Cardano","CardanoPreprod","Concordium","ConcordiumTestnet","Celo","CeloSepolia","Codex","CodexSepolia","CosmosHub4","CosmosIcsTestnet","Dogecoin","DogecoinTestnet","Ethereum","EthereumClassic","EthereumClassicMordor","EthereumSepolia","EthereumHoodi","FlareC","FlareCCoston2","FlowEvm","FlowEvmTestnet","Hedera","HederaTestnet","HyperEvm","HyperEvmTestnet","Ink","InkSepolia","InternetComputer","Ion","IonTestnet","Iota","IotaTestnet","Kusama","KusamaAssetHub","Litecoin","LitecoinTestnet","Monad","MonadTestnet","Movement","MovementTestnet","Near","NearTestnet","Optimism","OptimismSepolia","Origyn","Plasma","PlasmaTestnet","Plume","PlumeSepolia","Paseo","PaseoAssetHub","Polkadot","PolkadotAssetHub","Polygon","PolygonAmoy","Polymesh","PolymeshTestnet","Rayls","RaylsTestnet","Robinhood","RobinhoodSepolia","SeiAtlantic2","SeiPacific1","Solana","SolanaDevnet","Sonic","SonicTestnet","Starknet","StarknetSepolia","Stellar","StellarTestnet","Sui","SuiTestnet","Tezos","TezosShadownet","Tempo","TempoModerato","Tsc","TscTestnet1","Ton","TonTestnet","Tron","TronNile","Westend","WestendAssetHub","Xdc","XdcApothem","XLayer","XLayerSepolia","XrpLedger","XrpLedgerTestnet"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.3.pendingChangeRequest.body.oneOf.5.rule.oneOf.3.configuration.assets.items.[INDEX].network","typeLabel":"enum\u003cstring>"},"tid":{"type":"string","minLength":1,"maxLength":200,"pattern":"^[a-z0-9_]+:[^\\s](?:[ ]?[^\\s])*$","description":"The Dfns token identifier of the asset, for example `native:eth` or `erc20:0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48`. Must be canonical: token contract addresses on hex based networks are lower cased.","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.3.pendingChangeRequest.body.oneOf.5.rule.oneOf.3.configuration.assets.items.[INDEX].tid","typeLabel":"string"},"limit":{"type":"string","pattern":"^\\d+$","description":"Amount limit in the minimum denomination of the asset, as an integer string, matching how a transfer expresses its amount. For an 18 decimal token `\"5000000000000000000\"` is 5 whole tokens.","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.3.pendingChangeRequest.body.oneOf.5.rule.oneOf.3.configuration.assets.items.[INDEX].limit","typeLabel":"string"}},"required":["network","tid","limit"],"additionalProperties":false,"uniqueKey":"\\items.items.[INDEX].oneOf.3.pendingChangeRequest.body.oneOf.5.rule.oneOf.3.configuration.assets.items.[INDEX]","typeLabel":"object"},"minItems":1,"maxItems":100,"description":"The assets this rule applies to, each with its own limit. A transfer of an asset that is not listed does not trigger the rule. The limit applies to each matching transfer individually; nothing is accumulated across transfers.","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.3.pendingChangeRequest.body.oneOf.5.rule.oneOf.3.configuration.assets","typeLabel":"object[]"}},"required":["assets"],"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.3.pendingChangeRequest.body.oneOf.5.rule.oneOf.3.configuration","typeLabel":"object"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.3.pendingChangeRequest.body.oneOf.5.rule.oneOf.3","typeLabel":"TransactionAmountLimitNominal · object"},{"type":"object","title":"TransactionAmountVelocity","description":"This rule will trigger if the cumulative amount transferred from a given wallet within a given timeframe is greater than a specified limit. The aggregate amount evaluated is based only on the wallet that triggered the policy.","required":["kind","configuration"],"properties":{"kind":{"type":"string","enum":["TransactionAmountVelocity"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.3.pendingChangeRequest.body.oneOf.5.rule.oneOf.4.kind","typeLabel":"enum\u003cstring>"},"configuration":{"type":"object","properties":{"limit":{"type":"number","description":"Amount limit in `currency`","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.3.pendingChangeRequest.body.oneOf.5.rule.oneOf.4.configuration.limit","typeLabel":"number"},"currency":{"type":"string","enum":["USD"],"description":"Currency for the amount limit above","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.3.pendingChangeRequest.body.oneOf.5.rule.oneOf.4.configuration.currency","typeLabel":"enum\u003cstring>"},"timeframe":{"type":"integer","minimum":1,"maximum":43200,"description":"Time period in minutes. Minimum 1, Maximum 43,200.","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.3.pendingChangeRequest.body.oneOf.5.rule.oneOf.4.configuration.timeframe","typeLabel":"integer"}},"required":["limit","currency","timeframe"],"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.3.pendingChangeRequest.body.oneOf.5.rule.oneOf.4.configuration","typeLabel":"object"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.3.pendingChangeRequest.body.oneOf.5.rule.oneOf.4","typeLabel":"TransactionAmountVelocity · object"},{"type":"object","title":"TransactionCountVelocity","description":"This rule will trigger if the number of wallet activities for a given wallet within a given timeframe, is greater than a specified limit. The aggregate number of transactions evaluated is based only on the wallet that triggered the policy.","required":["kind","configuration"],"properties":{"kind":{"type":"string","enum":["TransactionCountVelocity"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.3.pendingChangeRequest.body.oneOf.5.rule.oneOf.5.kind","typeLabel":"enum\u003cstring>"},"configuration":{"type":"object","properties":{"limit":{"type":"number","description":"Count limit","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.3.pendingChangeRequest.body.oneOf.5.rule.oneOf.5.configuration.limit","typeLabel":"number"},"timeframe":{"type":"integer","minimum":1,"maximum":43200,"description":"Time period in minutes. Minimum 1, Maximum 43,200.","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.3.pendingChangeRequest.body.oneOf.5.rule.oneOf.5.configuration.timeframe","typeLabel":"integer"}},"required":["limit","timeframe"],"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.3.pendingChangeRequest.body.oneOf.5.rule.oneOf.5.configuration","typeLabel":"object"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.3.pendingChangeRequest.body.oneOf.5.rule.oneOf.5","typeLabel":"TransactionCountVelocity · object"},{"type":"object","title":"ChainalysisTransactionPrescreening","description":"\n\u003cInfo>\nThis rule can only be used once the Chainalysis integration is activated from the Dfns dashboard settings. (see more on [Chainalysis](https://docs.dfns.co/integrations/aml-kyt/chainalysis) integration page).\n\u003c/Info>\n\nIt's a rule based on [Chainalysis](https://docs.dfns.co/integrations/aml-kyt/chainalysis) KYT integration (Know-Your-Transaction). Upon transfer attempt, we will first register the transfer with Chainalysis (as a [\"withdrawal attempt\"](https://docs.chainalysis.com/api/kyt/#registration-register-a-withdrawal-attempt)), and fetch the screening results (alerts, exposures, addresses detected). Based on the results, and the configuration of this rule, the policy will be triggered.\n\nIt's called \"Pre\"-screening, because the scanned transaction is not on chain yet, it's still a transaction attempt (before the transaction actually make it on chain).\n\n```json\n{\n \"rule\": {\n \"kind\": \"ChainalysisTransactionPrescreening\",\n \"configuration\": {\n \"alerts\": {\n \"alertLevel\": \"LOW\",\n \"categoryIds\": []\n },\n \"exposures\": {\n \"direct\": {\n \"categoryIds\": []\n }\n },\n \"addresses\": {\n \"categoryIds\": []\n },\n \"fallbackBehaviours\": {\n \"skipUnscreenableTransaction\": false,\n \"skipUnsupportedNetwork\": false,\n \"skipUnsupportedAsset\": false,\n \"skipChainalysisFailure\": false\n }\n }\n }\n}\n```\n\n**Configuration**\n\n| Property | Type | Description |\n| --- | --- | --- |\n| `alerts`\u003cbr>\u003cbr>`.alertLevel`* | `string` | Minimum alert level above which the rule should trigger, if any [alert is returned in Chainalysis results](https://docs.chainalysis.com/api/kyt/#withdrawal-attempts-get-alerts). Can be `LOW`, `MEDIUM`, `HIGH`, or `SEVERE` |\n| `alerts`\u003cbr>\u003cbr>`.categoryIds`* | list of integers | List of Chainalysis category IDs (see [here](https://docs.chainalysis.com/api/kyt/#categories)). If you leave this list empty, alerts of any category will trigger the rule. Otherwise, if you only want the rule to trigger on specific categories, you can specify some in the list. |\n| `exposures`\u003cbr>\u003cbr>`.direct`\u003cbr>\u003cbr>`.categoryIds`* | list of integers | List of Chainalysis category IDs (see [here](https://docs.chainalysis.com/api/kyt/#categories)). If you leave this list empty, a [direct exposure](https://docs.chainalysis.com/api/kyt/#withdrawal-attempts-get-direct-exposure) of any category detected by chainalysis will trigger the rule. Otherwise, if you only want the rule to trigger on specific categories, you can specify some in the list. |\n| `addresses`\u003cbr>\u003cbr>`.categoryIds`* | list of integers | List of Chainalysis category IDs (see [here](https://docs.chainalysis.com/api/kyt/#categories)). If you leave this list empty, an [address](https://docs.chainalysis.com/api/kyt/#withdrawal-attempts-get-address-identifications) of any category identified by chainalysis will trigger the rule. Otherwise, if you only want the rule to trigger on specific categories, you can specify some in the list. |\n| `fallbackBehaviours`\u003cbr>\u003cbr>`.skipUnscreenableTransaction`* | boolean | Behaviour if the wallet activity is not screenable (eg. if it's a signature request of a hash). If true, a transaction which is \"unscreenable\" will just be skipped, and policy will not trigger |\n| `fallbackBehaviours.skipUnsupportedNetwork`* | boolean | Behaviour if the wallet activity is on a network not supported by chainalysis, or not yet supported in the dfns-chainalysis integration. If true, an unsupported network will just be skipped, and policy will not trigger |\n| `fallbackBehaviours.skipUnsupportedAsset`* | boolean | Behaviour if the wallet activity is with a asset not supported by chainalysis, or not yet supported in the dfns-chainalysis integration. If true, an unsupported asset will just be skipped, and policy will not trigger |\n| `fallbackBehaviours.skipChainalysisFailure`* | boolean | Behaviour if any issue with Chainalysis calls (timeout, results took too long, rate limiting errors, any error). If true, will skip if any error happens |\n\n","required":["kind","configuration"],"properties":{"kind":{"type":"string","enum":["ChainalysisTransactionPrescreening"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.3.pendingChangeRequest.body.oneOf.5.rule.oneOf.6.kind","typeLabel":"enum\u003cstring>"},"configuration":{"type":"object","properties":{"alerts":{"type":"object","properties":{"alertLevel":{"type":"string","enum":["LOW","MEDIUM","HIGH","SEVERE"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.3.pendingChangeRequest.body.oneOf.5.rule.oneOf.6.configuration.alerts.alertLevel","typeLabel":"enum\u003cstring>"},"categoryIds":{"type":"array","items":{"type":"integer","exclusiveMinimum":0,"uniqueKey":"\\items.items.[INDEX].oneOf.3.pendingChangeRequest.body.oneOf.5.rule.oneOf.6.configuration.alerts.categoryIds.items.[INDEX]","typeLabel":"integer"},"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.3.pendingChangeRequest.body.oneOf.5.rule.oneOf.6.configuration.alerts.categoryIds","typeLabel":"integer[]"}},"required":["alertLevel","categoryIds"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.3.pendingChangeRequest.body.oneOf.5.rule.oneOf.6.configuration.alerts","typeLabel":"object"},"exposures":{"type":"object","properties":{"direct":{"type":"object","properties":{"categoryIds":{"type":"array","items":{"type":"integer","exclusiveMinimum":0,"uniqueKey":"\\items.items.[INDEX].oneOf.3.pendingChangeRequest.body.oneOf.5.rule.oneOf.6.configuration.exposures.direct.categoryIds.items.[INDEX]","typeLabel":"integer"},"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.3.pendingChangeRequest.body.oneOf.5.rule.oneOf.6.configuration.exposures.direct.categoryIds","typeLabel":"integer[]"}},"required":["categoryIds"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.3.pendingChangeRequest.body.oneOf.5.rule.oneOf.6.configuration.exposures.direct","typeLabel":"object"}},"required":["direct"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.3.pendingChangeRequest.body.oneOf.5.rule.oneOf.6.configuration.exposures","typeLabel":"object"},"addresses":{"type":"object","properties":{"categoryIds":{"type":"array","items":{"type":"integer","exclusiveMinimum":0,"uniqueKey":"\\items.items.[INDEX].oneOf.3.pendingChangeRequest.body.oneOf.5.rule.oneOf.6.configuration.addresses.categoryIds.items.[INDEX]","typeLabel":"integer"},"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.3.pendingChangeRequest.body.oneOf.5.rule.oneOf.6.configuration.addresses.categoryIds","typeLabel":"integer[]"}},"required":["categoryIds"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.3.pendingChangeRequest.body.oneOf.5.rule.oneOf.6.configuration.addresses","typeLabel":"object"},"fallbackBehaviours":{"type":"object","properties":{"skipUnscreenableTransaction":{"type":"boolean","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.3.pendingChangeRequest.body.oneOf.5.rule.oneOf.6.configuration.fallbackBehaviours.skipUnscreenableTransaction","typeLabel":"boolean"},"skipUnsupportedNetwork":{"type":"boolean","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.3.pendingChangeRequest.body.oneOf.5.rule.oneOf.6.configuration.fallbackBehaviours.skipUnsupportedNetwork","typeLabel":"boolean"},"skipUnsupportedAsset":{"type":"boolean","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.3.pendingChangeRequest.body.oneOf.5.rule.oneOf.6.configuration.fallbackBehaviours.skipUnsupportedAsset","typeLabel":"boolean"},"skipChainalysisFailure":{"type":"boolean","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.3.pendingChangeRequest.body.oneOf.5.rule.oneOf.6.configuration.fallbackBehaviours.skipChainalysisFailure","typeLabel":"boolean"}},"required":["skipUnscreenableTransaction","skipUnsupportedNetwork","skipUnsupportedAsset","skipChainalysisFailure"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.3.pendingChangeRequest.body.oneOf.5.rule.oneOf.6.configuration.fallbackBehaviours","typeLabel":"object"},"userIdTemplate":{"type":"string","minLength":1,"maxLength":50,"pattern":"^([a-zA-Z0-9_:-]|{wallet\\.id}|{wallet\\.externalId})+$","default":"dfns","description":"**Deprecated** — set `userIdTemplate` on the Chainalysis integration setting instead; when set there, the integration-level template takes precedence over this one.\n\nValue sent to Chainalysis as the \"user ID\". Used by Chainalysis for grouping transaction screenings.\n \nThis template can include variables, included in brackets. The following variables are currently supported: `{wallet.id}` and `{wallet.externalId}`.\nAs an example, if you set `userIdTemplate: \"dfns:{wallet.id}_{wallet.externalId}\"`, when your wallet receives a transaction that gets screened by a Chainalysis policy, the \"user ID\" sent to Chainalysis will be `dfns:wa-xxx_yyy` (`wa-xxx` being the wallet ID, and `yyy` being the wallet external ID).","uniqueKey":"\\items.items.[INDEX].oneOf.3.pendingChangeRequest.body.oneOf.5.rule.oneOf.6.configuration.userIdTemplate","typeLabel":"string"}},"required":["alerts","exposures","addresses","fallbackBehaviours"],"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.3.pendingChangeRequest.body.oneOf.5.rule.oneOf.6.configuration","typeLabel":"object"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.3.pendingChangeRequest.body.oneOf.5.rule.oneOf.6","typeLabel":"ChainalysisTransactionPrescreening · object"},{"type":"object","title":"EllipticTransactionPrescreening","description":"\n\u003cInfo>\nThis rule can only be used once the Elliptic integration is activated from the Dfns dashboard settings.\n\u003c/Info>\n\nThis rule uses Elliptic KYT for pre-screening outgoing transfers. Upon transfer attempt, we run a synchronous Elliptic wallet analysis of the destination address, and check the returned risk score against the configured threshold, plus any configured risk rules / categories. If at or above the threshold, or if a configured rule / category matched, the policy is triggered.\n\nIt's called \"Pre\"-screening, because the scanned transaction is not on chain yet, it's still a transaction attempt.","required":["kind","configuration"],"properties":{"kind":{"type":"string","enum":["EllipticTransactionPrescreening"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.3.pendingChangeRequest.body.oneOf.5.rule.oneOf.7.kind","typeLabel":"enum\u003cstring>"},"configuration":{"type":"object","properties":{"riskScoreThreshold":{"type":"number","minimum":0,"maximum":10,"description":"Risk score threshold (0-10, decimals allowed). The policy triggers if the Elliptic risk score is at or above the threshold.","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.3.pendingChangeRequest.body.oneOf.5.rule.oneOf.7.configuration.riskScoreThreshold","typeLabel":"number"},"triggeredRules":{"type":"object","properties":{"ruleIds":{"type":"array","items":{"type":"string","format":"uuid","uniqueKey":"\\items.items.[INDEX].oneOf.3.pendingChangeRequest.body.oneOf.5.rule.oneOf.7.configuration.triggeredRules.ruleIds.items.[INDEX]","typeLabel":"string\u003cuuid>"},"description":"IDs of risk rules from your Elliptic risk model. If any of these rules matched the analysis, the policy triggers regardless of the risk score. Leave empty to trigger on the risk score threshold only.","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.3.pendingChangeRequest.body.oneOf.5.rule.oneOf.7.configuration.triggeredRules.ruleIds","typeLabel":"string\u003cuuid>[]"},"categories":{"type":"array","items":{"type":"string","minLength":1,"uniqueKey":"\\items.items.[INDEX].oneOf.3.pendingChangeRequest.body.oneOf.5.rule.oneOf.7.configuration.triggeredRules.categories.items.[INDEX]","typeLabel":"string"},"description":"Elliptic category names (eg. \"Dark Market\"), matched case-insensitively. If a matched risk rule involves any of these categories, the policy triggers regardless of the risk score. Leave empty to trigger on the risk score threshold only.","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.3.pendingChangeRequest.body.oneOf.5.rule.oneOf.7.configuration.triggeredRules.categories","typeLabel":"string[]"}},"required":["ruleIds","categories"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.3.pendingChangeRequest.body.oneOf.5.rule.oneOf.7.configuration.triggeredRules","typeLabel":"object"},"fallbackBehaviours":{"type":"object","properties":{"skipUnscreenableTransaction":{"type":"boolean","description":"skip all wallet requests that cannot be screened (eg. raw signatures)","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.3.pendingChangeRequest.body.oneOf.5.rule.oneOf.7.configuration.fallbackBehaviours.skipUnscreenableTransaction","typeLabel":"boolean"},"skipUnsupportedNetwork":{"type":"boolean","description":"skip requests on a network not supported yet in our Elliptic integration","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.3.pendingChangeRequest.body.oneOf.5.rule.oneOf.7.configuration.fallbackBehaviours.skipUnsupportedNetwork","typeLabel":"boolean"},"skipEllipticFailure":{"type":"boolean","description":"skip any failure of the Elliptic analysis (timeout, rate limiting, any error)","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.3.pendingChangeRequest.body.oneOf.5.rule.oneOf.7.configuration.fallbackBehaviours.skipEllipticFailure","typeLabel":"boolean"}},"required":["skipUnscreenableTransaction","skipUnsupportedNetwork","skipEllipticFailure"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.3.pendingChangeRequest.body.oneOf.5.rule.oneOf.7.configuration.fallbackBehaviours","typeLabel":"object"}},"required":["riskScoreThreshold","triggeredRules","fallbackBehaviours"],"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.3.pendingChangeRequest.body.oneOf.5.rule.oneOf.7.configuration","typeLabel":"object"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.3.pendingChangeRequest.body.oneOf.5.rule.oneOf.7","typeLabel":"EllipticTransactionPrescreening · object"},{"type":"object","title":"GlobalLedgerTransactionPrescreening","description":"This rule uses GlobalLedger KYT for pre-screening outgoing transfers by checking the destination address risk score.\n\nUpon transfer attempt, we will query GlobalLedger's address risk API, and check if the risk score (0-100) is at or above the configured threshold, or if any alerts show up. If so, the policy will be triggered.\n\nIt's called \"Pre\"-screening, because the scanned transaction is not on chain yet, it's still a transaction attempt.","required":["kind","configuration"],"properties":{"kind":{"type":"string","enum":["GlobalLedgerTransactionPrescreening"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.3.pendingChangeRequest.body.oneOf.5.rule.oneOf.8.kind","typeLabel":"enum\u003cstring>"},"configuration":{"type":"object","properties":{"riskScoreThreshold":{"type":"integer","minimum":0,"maximum":100,"description":"Risk score threshold (0-100). Policy triggers if address/transaction risk score >= threshold","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.3.pendingChangeRequest.body.oneOf.5.rule.oneOf.8.configuration.riskScoreThreshold","typeLabel":"integer"},"fallbackBehaviours":{"type":"object","properties":{"skipUnscreenableTransaction":{"type":"boolean","description":"skip all wallet requests that cannot be screened (eg. raw signatures)","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.3.pendingChangeRequest.body.oneOf.5.rule.oneOf.8.configuration.fallbackBehaviours.skipUnscreenableTransaction","typeLabel":"boolean"},"skipUnsupportedNetwork":{"type":"boolean","description":"skip transfer requests to a network not supported yet in our GlobalLedger integration","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.3.pendingChangeRequest.body.oneOf.5.rule.oneOf.8.configuration.fallbackBehaviours.skipUnsupportedNetwork","typeLabel":"boolean"},"skipUnsupportedAsset":{"type":"boolean","description":"skip transfer requests of an asset not supported by our GlobalLedger integration","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.3.pendingChangeRequest.body.oneOf.5.rule.oneOf.8.configuration.fallbackBehaviours.skipUnsupportedAsset","typeLabel":"boolean"},"skipGlobalLedgerFailure":{"type":"boolean","description":"skips any errors from GlobalLedger API request","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.3.pendingChangeRequest.body.oneOf.5.rule.oneOf.8.configuration.fallbackBehaviours.skipGlobalLedgerFailure","typeLabel":"boolean"}},"required":["skipUnscreenableTransaction","skipUnsupportedNetwork","skipUnsupportedAsset","skipGlobalLedgerFailure"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.3.pendingChangeRequest.body.oneOf.5.rule.oneOf.8.configuration.fallbackBehaviours","typeLabel":"object"}},"required":["riskScoreThreshold","fallbackBehaviours"],"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.3.pendingChangeRequest.body.oneOf.5.rule.oneOf.8.configuration","typeLabel":"object"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.3.pendingChangeRequest.body.oneOf.5.rule.oneOf.8","typeLabel":"GlobalLedgerTransactionPrescreening · object"},{"type":"object","title":"TravelRuleTransactionPrescreening","description":"This rule applies a Travel Rule check to outgoing transfers through the vendor selected in `configuration.vendor`: [Notabene](https://docs.dfns.co/integrations/travel-rule/notabene) or Sumsub. It can only be used once that vendor's integration is activated from the Dfns dashboard settings.\n\nIt ***ONLY*** applies to Dfns [Transfer Asset](https://docs.dfns.co/api-reference/wallets/transfer-asset) Api Calls. It is NOT supported for Transfers initiated via the dashboard. Upon transfer attempt with a [TravelRule](https://docs.dfns.co/api-reference/wallets/transfer-asset#body-travel-rule) payload, we call the vendor's APIs on your behalf to validate and submit the travel rule message, then wait for its outcome. With Notabene, Dfns waits for a response from the counterparty (for custodial transfers) or from Notabene (for non-custodial transfers). With Sumsub, Dfns submits a Travel Rule message and waits for Sumsub to report its outcome. In both cases the wait is bounded by `configuration.autoTriggerTimeoutSeconds`, after which the policy's configured action is applied.\n\nThe transfer's `travelRule` payload must be of the kind matching `configuration.vendor` — a mismatch triggers the policy and applies its configured action. A given wallet must be covered by at most one travel-rule policy (of any vendor): if several travel-rule policies apply to the same transfer carrying a `travelRule` payload, it is treated as a misconfiguration and blocked without contacting any vendor. Signatures and transfers without a payload are not affected, since the rule does not apply to them.\n\nIt's called \"Pre\"-screening, because the transaction is not on chain yet, it's still a transaction attempt (before the transaction actually make it on chain).","required":["kind","configuration"],"properties":{"kind":{"type":"string","enum":["TravelRuleTransactionPrescreening"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.3.pendingChangeRequest.body.oneOf.5.rule.oneOf.9.kind","typeLabel":"enum\u003cstring>"},"configuration":{"oneOf":[{"type":"object","title":"TravelRuleNotabeneConfiguration","required":["vendor"],"properties":{"vendor":{"type":"string","enum":["Notabene"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.3.pendingChangeRequest.body.oneOf.5.rule.oneOf.9.configuration.oneOf.0.vendor","typeLabel":"enum\u003cstring>"},"autoTriggerTimeoutSeconds":{"type":"integer","minimum":0,"maximum":2592000,"default":86400,"description":"Seconds to wait for the vendor's verdict before the policy action applies. Maximum 2592000 (30 days). Defaults to 86400 (24 hours).","uniqueKey":"\\items.items.[INDEX].oneOf.3.pendingChangeRequest.body.oneOf.5.rule.oneOf.9.configuration.oneOf.0.autoTriggerTimeoutSeconds","typeLabel":"integer"},"autoClearAfterDeliveredTimeoutSeconds":{"type":"integer","minimum":0,"maximum":2592000,"description":"Seconds after delivery before a still-pending evaluation clears. Maximum 2592000 (30 days).","uniqueKey":"\\items.items.[INDEX].oneOf.3.pendingChangeRequest.body.oneOf.5.rule.oneOf.9.configuration.oneOf.0.autoClearAfterDeliveredTimeoutSeconds","typeLabel":"integer"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.3.pendingChangeRequest.body.oneOf.5.rule.oneOf.9.configuration.oneOf.0","typeLabel":"TravelRuleNotabeneConfiguration · object"},{"type":"object","title":"TravelRuleSumsubConfiguration","required":["vendor"],"properties":{"vendor":{"type":"string","enum":["Sumsub"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.3.pendingChangeRequest.body.oneOf.5.rule.oneOf.9.configuration.oneOf.1.vendor","typeLabel":"enum\u003cstring>"},"autoTriggerTimeoutSeconds":{"type":"integer","minimum":0,"maximum":2592000,"default":86400,"description":"Seconds to wait for the vendor's verdict before the policy action applies. Maximum 2592000 (30 days). Defaults to 86400 (24 hours).","uniqueKey":"\\items.items.[INDEX].oneOf.3.pendingChangeRequest.body.oneOf.5.rule.oneOf.9.configuration.oneOf.1.autoTriggerTimeoutSeconds","typeLabel":"integer"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.3.pendingChangeRequest.body.oneOf.5.rule.oneOf.9.configuration.oneOf.1","typeLabel":"TravelRuleSumsubConfiguration · object"}],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.3.pendingChangeRequest.body.oneOf.5.rule.oneOf.9.configuration","typeLabel":"TravelRuleNotabeneConfiguration · object | TravelRuleSumsubConfiguration · object"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.3.pendingChangeRequest.body.oneOf.5.rule.oneOf.9","typeLabel":"TravelRuleTransactionPrescreening · object"}],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.3.pendingChangeRequest.body.oneOf.5.rule","typeLabel":"AlwaysTrigger · object | TransactionRecipientWhitelist · object | TransactionAmountLimit · object | TransactionAmountLimitNominal · object | TransactionAmountVelocity · object | TransactionCountVelocity · object | ChainalysisTransactionPrescreening · object | EllipticTransactionPrescreening · object | GlobalLedgerTransactionPrescreening · object | TravelRuleTransactionPrescreening · object"},"action":{"oneOf":[{"type":"object","title":"RequestApproval","description":"\nThis action means that activity will first require an Approval process to be completed before it can be executed (or be aborted if someone rejects it during the approval process).\n\nOne or several groups of approvers need to be specified. These groups define who is allowed to approve / reject an activity.\n\nThe activity will only be executed if all approver groups reach their \"quorum\" of approvals. Otherwise, if any one user within any approver group rejects, then the activity is aborted and the call is not executed.\n\nThe example below shows a `RequestApproval` action, configured with one approval group requiring 2 approvals amongst three specific users.\n\n```json\n{\n \"action\": {\n \"kind\": \"RequestApproval\",\n \"autoRejectTimeout\": 60, // minutes\n \"approvalGroups\": [\n {\n \"name\": \"Admins\",\n \"quorum\": 2, // only 2 approvers required in that group \n \"approvers\": {\n \"userId\": {\n \"in\": [\"us-...1\", \"us-...2\", \"us-...3\"],\n }\n }\n }\n ],\n\n }\n}\n```\n\n**Don't lock yourself up**\n\nBy default, users cannot approve an activity they initiated themselves, even if they are in an approval group. To allow this, you must set `initiatorCanApprove: true`.\n\n*Example 1:* For any wallet transfer, a policy is setup to require approval from **1 specific admin user** (eg. the CEO). `initiatorCanApprove` was not set to `true`. If the CEO himself initiates a transfer, no-one can approve his transfer and it's stuck.\n\n*Example 2:* Company has only 3 users. A policy is setup to require approval from **any 3 users** (`quorum: 3`) for any modification of a policy. `initiatorCanApprove` was not set to `true`. In this case, they are locked, and the policy cannot be modified: whoever requests a modification cannot approve, and the policy is therefore always missing one approver. To unlock, they would need to invite a new user and give him the rights to approve as well.\n ","required":["kind","approvalGroups"],"properties":{"kind":{"type":"string","enum":["RequestApproval"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.3.pendingChangeRequest.body.oneOf.5.action.oneOf.0.kind","typeLabel":"enum\u003cstring>"},"approvalGroups":{"type":"array","items":{"type":"object","properties":{"quorum":{"type":"integer","minimum":1,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.3.pendingChangeRequest.body.oneOf.5.action.oneOf.0.approvalGroups.items.[INDEX].quorum","typeLabel":"integer"},"approvers":{"type":"object","properties":{"userId":{"type":"object","properties":{"in":{"type":"array","items":{"type":"string","minLength":1,"uniqueKey":"\\items.items.[INDEX].oneOf.3.pendingChangeRequest.body.oneOf.5.action.oneOf.0.approvalGroups.items.[INDEX].approvers.userId.in.items.[INDEX]","typeLabel":"string"},"minItems":1,"maxItems":100,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.3.pendingChangeRequest.body.oneOf.5.action.oneOf.0.approvalGroups.items.[INDEX].approvers.userId.in","typeLabel":"string[]"}},"required":["in"],"additionalProperties":false,"description":"Users and service accounts who may approve.","uniqueKey":"\\items.items.[INDEX].oneOf.3.pendingChangeRequest.body.oneOf.5.action.oneOf.0.approvalGroups.items.[INDEX].approvers.userId","typeLabel":"object"},"userGroupId":{"type":"object","properties":{"in":{"type":"array","items":{"type":"string","minLength":1,"maxLength":64,"pattern":"^ug-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"User group id.","example":"ug-139tf-f58l8-lsbt6dp47lfsdvgh","uniqueKey":"\\items.items.[INDEX].oneOf.3.pendingChangeRequest.body.oneOf.5.action.oneOf.0.approvalGroups.items.[INDEX].approvers.userGroupId.in.items.[INDEX]","typeLabel":"string"},"minItems":1,"maxItems":100,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.3.pendingChangeRequest.body.oneOf.5.action.oneOf.0.approvalGroups.items.[INDEX].approvers.userGroupId.in","typeLabel":"string[]"}},"required":["in"],"additionalProperties":false,"description":"User groups whose members may approve.","uniqueKey":"\\items.items.[INDEX].oneOf.3.pendingChangeRequest.body.oneOf.5.action.oneOf.0.approvalGroups.items.[INDEX].approvers.userGroupId","typeLabel":"object"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.3.pendingChangeRequest.body.oneOf.5.action.oneOf.0.approvalGroups.items.[INDEX].approvers","typeLabel":"object"},"name":{"type":"string","uniqueKey":"\\items.items.[INDEX].oneOf.3.pendingChangeRequest.body.oneOf.5.action.oneOf.0.approvalGroups.items.[INDEX].name","typeLabel":"string"},"initiatorCanApprove":{"type":"boolean","description":"Whether the initiator of the activity can participate in the approval.","uniqueKey":"\\items.items.[INDEX].oneOf.3.pendingChangeRequest.body.oneOf.5.action.oneOf.0.approvalGroups.items.[INDEX].initiatorCanApprove","typeLabel":"boolean"},"serviceAccountsCanApprove":{"type":"boolean","description":"Whether service accounts can participate in the approval for this group.","uniqueKey":"\\items.items.[INDEX].oneOf.3.pendingChangeRequest.body.oneOf.5.action.oneOf.0.approvalGroups.items.[INDEX].serviceAccountsCanApprove","typeLabel":"boolean"}},"required":["quorum","approvers"],"additionalProperties":false,"uniqueKey":"\\items.items.[INDEX].oneOf.3.pendingChangeRequest.body.oneOf.5.action.oneOf.0.approvalGroups.items.[INDEX]","typeLabel":"object"},"minItems":1,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.3.pendingChangeRequest.body.oneOf.5.action.oneOf.0.approvalGroups","typeLabel":"object[]"},"autoRejectTimeout":{"oneOf":[{"type":"integer","minimum":1,"uniqueKey":"\\items.items.[INDEX].oneOf.3.pendingChangeRequest.body.oneOf.5.action.oneOf.0.autoRejectTimeout.oneOf.0","typeLabel":"integer"},{"type":"null","minimum":1,"uniqueKey":"\\items.items.[INDEX].oneOf.3.pendingChangeRequest.body.oneOf.5.action.oneOf.0.autoRejectTimeout.oneOf.1","typeLabel":"null"}],"uniqueKey":"\\items.items.[INDEX].oneOf.3.pendingChangeRequest.body.oneOf.5.action.oneOf.0.autoRejectTimeout","typeLabel":"integer | null"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.3.pendingChangeRequest.body.oneOf.5.action.oneOf.0","typeLabel":"RequestApproval · object"},{"type":"object","title":"Block","description":"This action means that the activity will be blocked if the policy is triggered.\n\n```json\n{\n \"action\": {\n \"kind\": \"Block\"\n }\n}\n```\n","required":["kind"],"properties":{"kind":{"type":"string","enum":["Block"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.3.pendingChangeRequest.body.oneOf.5.action.oneOf.1.kind","typeLabel":"enum\u003cstring>"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.3.pendingChangeRequest.body.oneOf.5.action.oneOf.1","typeLabel":"Block · object"},{"type":"object","title":"NoAction","description":"\n This action kind means that nothing will happen after policy rule evaluation. It's meant to be used with policy rules \"`ChainalysisTransactionPrescreening`\" or \"`ChainalysisTransactionScreening`\". This action is for when you just want the KYT analysis rule to be run, and then if triggered, those result returned in a `policy.triggered` [Webhook Event](https://docs.dfns.co/api-reference/webhook-events).\n\n```json\n{\n \"action\": {\n \"kind\": \"NoAction\"\n }\n}\n```\n ","required":["kind"],"properties":{"kind":{"type":"string","enum":["NoAction"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.3.pendingChangeRequest.body.oneOf.5.action.oneOf.2.kind","typeLabel":"enum\u003cstring>"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.3.pendingChangeRequest.body.oneOf.5.action.oneOf.2","typeLabel":"NoAction · object"}],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.3.pendingChangeRequest.body.oneOf.5.action","typeLabel":"RequestApproval · object | Block · object | NoAction · object"},"dateCreated":{"type":"string","uniqueKey":"\\items.items.[INDEX].oneOf.3.pendingChangeRequest.body.oneOf.5.dateCreated","typeLabel":"string"},"dateUpdated":{"type":"string","uniqueKey":"\\items.items.[INDEX].oneOf.3.pendingChangeRequest.body.oneOf.5.dateUpdated","typeLabel":"string"},"filters":{"type":"object","properties":{"walletId":{"type":"object","properties":{"in":{"type":"array","items":{"type":"string","minLength":1,"uniqueKey":"\\items.items.[INDEX].oneOf.3.pendingChangeRequest.body.oneOf.5.filters.walletId.in.items.[INDEX]","typeLabel":"string"},"minItems":1,"maxItems":100,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.3.pendingChangeRequest.body.oneOf.5.filters.walletId.in","typeLabel":"string[]"}},"required":["in"],"additionalProperties":false,"uniqueKey":"\\items.items.[INDEX].oneOf.3.pendingChangeRequest.body.oneOf.5.filters.walletId","typeLabel":"object"},"walletTags":{"type":"object","properties":{"hasAny":{"type":"array","items":{"type":"string","minLength":1,"uniqueKey":"\\items.items.[INDEX].oneOf.3.pendingChangeRequest.body.oneOf.5.filters.walletTags.hasAny.items.[INDEX]","typeLabel":"string"},"minItems":1,"maxItems":100,"uniqueKey":"\\items.items.[INDEX].oneOf.3.pendingChangeRequest.body.oneOf.5.filters.walletTags.hasAny","typeLabel":"string[]"},"hasAll":{"type":"array","items":{"type":"string","minLength":1,"uniqueKey":"\\items.items.[INDEX].oneOf.3.pendingChangeRequest.body.oneOf.5.filters.walletTags.hasAll.items.[INDEX]","typeLabel":"string"},"minItems":1,"maxItems":100,"uniqueKey":"\\items.items.[INDEX].oneOf.3.pendingChangeRequest.body.oneOf.5.filters.walletTags.hasAll","typeLabel":"string[]"}},"additionalProperties":false,"uniqueKey":"\\items.items.[INDEX].oneOf.3.pendingChangeRequest.body.oneOf.5.filters.walletTags","typeLabel":"object"},"keyId":{"type":"object","properties":{"in":{"type":"array","items":{"type":"string","minLength":1,"maxLength":64,"pattern":"^key-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"Key id.","example":"key-01snl-t56gb-j8tsok0vn802p80i","uniqueKey":"\\items.items.[INDEX].oneOf.3.pendingChangeRequest.body.oneOf.5.filters.keyId.in.items.[INDEX]","typeLabel":"string"},"minItems":1,"maxItems":100,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.3.pendingChangeRequest.body.oneOf.5.filters.keyId.in","typeLabel":"string[]"}},"required":["in"],"additionalProperties":false,"uniqueKey":"\\items.items.[INDEX].oneOf.3.pendingChangeRequest.body.oneOf.5.filters.keyId","typeLabel":"object"},"keyStoreId":{"type":"object","properties":{"in":{"type":"array","items":{"type":"string","minLength":1,"maxLength":64,"pattern":"^store-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"Key store id.","example":"store-425nf-ebf0a-qq22t6qra51tj8j0","uniqueKey":"\\items.items.[INDEX].oneOf.3.pendingChangeRequest.body.oneOf.5.filters.keyStoreId.in.items.[INDEX]","typeLabel":"string"},"minItems":1,"maxItems":100,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.3.pendingChangeRequest.body.oneOf.5.filters.keyStoreId.in","typeLabel":"string[]"}},"required":["in"],"additionalProperties":false,"uniqueKey":"\\items.items.[INDEX].oneOf.3.pendingChangeRequest.body.oneOf.5.filters.keyStoreId","typeLabel":"object"}},"additionalProperties":false,"uniqueKey":"\\items.items.[INDEX].oneOf.3.pendingChangeRequest.body.oneOf.5.filters","typeLabel":"object"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.3.pendingChangeRequest.body.oneOf.5","typeLabel":"Wallets:Sign · object"},{"type":"object","title":"Wallets:IncomingTransaction","required":["id","name","status","activityKind","rule","action"],"properties":{"id":{"type":"string","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.3.pendingChangeRequest.body.oneOf.6.id","typeLabel":"string"},"name":{"type":"string","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.3.pendingChangeRequest.body.oneOf.6.name","typeLabel":"string"},"status":{"type":"string","enum":["Active","Archived"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.3.pendingChangeRequest.body.oneOf.6.status","typeLabel":"enum\u003cstring>"},"activityKind":{"type":"string","enum":["Wallets:IncomingTransaction"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.3.pendingChangeRequest.body.oneOf.6.activityKind","typeLabel":"enum\u003cstring>"},"rule":{"type":"object","title":"ChainalysisTransactionScreening","description":"\n\u003cInfo>\nThis rule can only be used once the Chainalysis integration is activated from the Dfns dashboard settings. (see more on [Chainalysis](https://docs.dfns.co/integrations/aml-kyt/chainalysis) integration page).\n\u003c/Info>\n\nThis rule can be used on a policy of `activityKind` = `Wallets:IncomingTransaction`, and with the action kind `NoAction`. It's a rule based on Chainalysis KYT integration (Know-Your-Transaction). Upon an incoming transaction detectedby our indexers, we will [register the transfer with Chainalysis](https://docs.chainalysis.com/api/kyt/#registration-register-a-transfer), and fetch the results of the analysis (alerts \u0026 exposures detected). Based on the results, and the configuration of this rule, the policy will be triggered.\n\nThe shape of the rule is almost like the `ChainalysisTransactionPrescreening` rule, expect the the `address` property is not supported.\n\n```json\n{\n \"rule\": {\n \"kind\": \"ChainalysisTransactionPrescreening\",\n \"configuration\": {\n \"alerts\": {\n \"alertLevel\": \"LOW\",\n \"categoryIds\": []\n },\n \"exposures\": {\n \"direct\": {\n \"categoryIds\": []\n }\n },\n \"fallbackBehaviours\": {\n \"skipUnscreenableTransaction\": false,\n \"skipUnsupportedNetwork\": false,\n \"skipUnsupportedAsset\": false,\n \"skipChainalysisFailure\": false\n }\n }\n }\n}\n```\n\n**Configuration**\n\nPlease refer to the configuration for the `ChainalysisTransactionPrescreening` rule.\n","required":["kind","configuration"],"properties":{"kind":{"type":"string","enum":["ChainalysisTransactionScreening"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.3.pendingChangeRequest.body.oneOf.6.rule.kind","typeLabel":"enum\u003cstring>"},"configuration":{"type":"object","properties":{"alerts":{"type":"object","properties":{"alertLevel":{"type":"string","enum":["LOW","MEDIUM","HIGH","SEVERE"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.3.pendingChangeRequest.body.oneOf.6.rule.configuration.alerts.alertLevel","typeLabel":"enum\u003cstring>"},"categoryIds":{"type":"array","items":{"type":"integer","exclusiveMinimum":0,"uniqueKey":"\\items.items.[INDEX].oneOf.3.pendingChangeRequest.body.oneOf.6.rule.configuration.alerts.categoryIds.items.[INDEX]","typeLabel":"integer"},"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.3.pendingChangeRequest.body.oneOf.6.rule.configuration.alerts.categoryIds","typeLabel":"integer[]"}},"required":["alertLevel","categoryIds"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.3.pendingChangeRequest.body.oneOf.6.rule.configuration.alerts","typeLabel":"object"},"exposures":{"type":"object","properties":{"direct":{"type":"object","properties":{"categoryIds":{"type":"array","items":{"type":"integer","exclusiveMinimum":0,"uniqueKey":"\\items.items.[INDEX].oneOf.3.pendingChangeRequest.body.oneOf.6.rule.configuration.exposures.direct.categoryIds.items.[INDEX]","typeLabel":"integer"},"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.3.pendingChangeRequest.body.oneOf.6.rule.configuration.exposures.direct.categoryIds","typeLabel":"integer[]"}},"required":["categoryIds"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.3.pendingChangeRequest.body.oneOf.6.rule.configuration.exposures.direct","typeLabel":"object"}},"required":["direct"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.3.pendingChangeRequest.body.oneOf.6.rule.configuration.exposures","typeLabel":"object"},"fallbackBehaviours":{"type":"object","properties":{"skipUnscreenableTransaction":{"type":"boolean","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.3.pendingChangeRequest.body.oneOf.6.rule.configuration.fallbackBehaviours.skipUnscreenableTransaction","typeLabel":"boolean"},"skipUnsupportedNetwork":{"type":"boolean","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.3.pendingChangeRequest.body.oneOf.6.rule.configuration.fallbackBehaviours.skipUnsupportedNetwork","typeLabel":"boolean"},"skipUnsupportedAsset":{"type":"boolean","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.3.pendingChangeRequest.body.oneOf.6.rule.configuration.fallbackBehaviours.skipUnsupportedAsset","typeLabel":"boolean"},"skipChainalysisFailure":{"type":"boolean","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.3.pendingChangeRequest.body.oneOf.6.rule.configuration.fallbackBehaviours.skipChainalysisFailure","typeLabel":"boolean"}},"required":["skipUnscreenableTransaction","skipUnsupportedNetwork","skipUnsupportedAsset","skipChainalysisFailure"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.3.pendingChangeRequest.body.oneOf.6.rule.configuration.fallbackBehaviours","typeLabel":"object"},"userIdTemplate":{"type":"string","minLength":1,"maxLength":50,"pattern":"^([a-zA-Z0-9_:-]|{wallet\\.id}|{wallet\\.externalId})+$","default":"dfns","description":"**Deprecated** — set `userIdTemplate` on the Chainalysis integration setting instead; when set there, the integration-level template takes precedence over this one.\n\nValue sent to Chainalysis as the \"user ID\". Used by Chainalysis for grouping transaction screenings.\n \nThis template can include variables, included in brackets. The following variables are currently supported: `{wallet.id}` and `{wallet.externalId}`.\nAs an example, if you set `userIdTemplate: \"dfns:{wallet.id}_{wallet.externalId}\"`, when your wallet receives a transaction that gets screened by a Chainalysis policy, the \"user ID\" sent to Chainalysis will be `dfns:wa-xxx_yyy` (`wa-xxx` being the wallet ID, and `yyy` being the wallet external ID).","uniqueKey":"\\items.items.[INDEX].oneOf.3.pendingChangeRequest.body.oneOf.6.rule.configuration.userIdTemplate","typeLabel":"string"}},"required":["alerts","exposures","fallbackBehaviours"],"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.3.pendingChangeRequest.body.oneOf.6.rule.configuration","typeLabel":"object"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.3.pendingChangeRequest.body.oneOf.6.rule","typeLabel":"ChainalysisTransactionScreening · object"},"action":{"type":"object","title":"NoAction","description":"\n This action kind means that nothing will happen after policy rule evaluation. It's meant to be used with policy rules \"`ChainalysisTransactionPrescreening`\" or \"`ChainalysisTransactionScreening`\". This action is for when you just want the KYT analysis rule to be run, and then if triggered, those result returned in a `policy.triggered` [Webhook Event](https://docs.dfns.co/api-reference/webhook-events).\n\n```json\n{\n \"action\": {\n \"kind\": \"NoAction\"\n }\n}\n```\n ","required":["kind"],"properties":{"kind":{"type":"string","enum":["NoAction"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.3.pendingChangeRequest.body.oneOf.6.action.kind","typeLabel":"enum\u003cstring>"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.3.pendingChangeRequest.body.oneOf.6.action","typeLabel":"NoAction · object"},"dateCreated":{"type":"string","uniqueKey":"\\items.items.[INDEX].oneOf.3.pendingChangeRequest.body.oneOf.6.dateCreated","typeLabel":"string"},"dateUpdated":{"type":"string","uniqueKey":"\\items.items.[INDEX].oneOf.3.pendingChangeRequest.body.oneOf.6.dateUpdated","typeLabel":"string"},"filters":{"type":"object","properties":{"walletId":{"type":"object","properties":{"in":{"type":"array","items":{"type":"string","minLength":1,"uniqueKey":"\\items.items.[INDEX].oneOf.3.pendingChangeRequest.body.oneOf.6.filters.walletId.in.items.[INDEX]","typeLabel":"string"},"minItems":1,"maxItems":100,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.3.pendingChangeRequest.body.oneOf.6.filters.walletId.in","typeLabel":"string[]"}},"required":["in"],"additionalProperties":false,"uniqueKey":"\\items.items.[INDEX].oneOf.3.pendingChangeRequest.body.oneOf.6.filters.walletId","typeLabel":"object"},"walletTags":{"type":"object","properties":{"hasAny":{"type":"array","items":{"type":"string","minLength":1,"uniqueKey":"\\items.items.[INDEX].oneOf.3.pendingChangeRequest.body.oneOf.6.filters.walletTags.hasAny.items.[INDEX]","typeLabel":"string"},"minItems":1,"maxItems":100,"uniqueKey":"\\items.items.[INDEX].oneOf.3.pendingChangeRequest.body.oneOf.6.filters.walletTags.hasAny","typeLabel":"string[]"},"hasAll":{"type":"array","items":{"type":"string","minLength":1,"uniqueKey":"\\items.items.[INDEX].oneOf.3.pendingChangeRequest.body.oneOf.6.filters.walletTags.hasAll.items.[INDEX]","typeLabel":"string"},"minItems":1,"maxItems":100,"uniqueKey":"\\items.items.[INDEX].oneOf.3.pendingChangeRequest.body.oneOf.6.filters.walletTags.hasAll","typeLabel":"string[]"}},"additionalProperties":false,"uniqueKey":"\\items.items.[INDEX].oneOf.3.pendingChangeRequest.body.oneOf.6.filters.walletTags","typeLabel":"object"},"keyId":{"type":"object","properties":{"in":{"type":"array","items":{"type":"string","minLength":1,"maxLength":64,"pattern":"^key-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"Key id.","example":"key-01snl-t56gb-j8tsok0vn802p80i","uniqueKey":"\\items.items.[INDEX].oneOf.3.pendingChangeRequest.body.oneOf.6.filters.keyId.in.items.[INDEX]","typeLabel":"string"},"minItems":1,"maxItems":100,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.3.pendingChangeRequest.body.oneOf.6.filters.keyId.in","typeLabel":"string[]"}},"required":["in"],"additionalProperties":false,"uniqueKey":"\\items.items.[INDEX].oneOf.3.pendingChangeRequest.body.oneOf.6.filters.keyId","typeLabel":"object"},"keyStoreId":{"type":"object","properties":{"in":{"type":"array","items":{"type":"string","minLength":1,"maxLength":64,"pattern":"^store-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"Key store id.","example":"store-425nf-ebf0a-qq22t6qra51tj8j0","uniqueKey":"\\items.items.[INDEX].oneOf.3.pendingChangeRequest.body.oneOf.6.filters.keyStoreId.in.items.[INDEX]","typeLabel":"string"},"minItems":1,"maxItems":100,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.3.pendingChangeRequest.body.oneOf.6.filters.keyStoreId.in","typeLabel":"string[]"}},"required":["in"],"additionalProperties":false,"uniqueKey":"\\items.items.[INDEX].oneOf.3.pendingChangeRequest.body.oneOf.6.filters.keyStoreId","typeLabel":"object"}},"additionalProperties":false,"uniqueKey":"\\items.items.[INDEX].oneOf.3.pendingChangeRequest.body.oneOf.6.filters","typeLabel":"object"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.3.pendingChangeRequest.body.oneOf.6","typeLabel":"Wallets:IncomingTransaction · object"},{"type":"object","title":"Vaults:ReleaseQuarantine","required":["id","name","status","activityKind","rule","action"],"properties":{"id":{"type":"string","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.3.pendingChangeRequest.body.oneOf.7.id","typeLabel":"string"},"name":{"type":"string","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.3.pendingChangeRequest.body.oneOf.7.name","typeLabel":"string"},"status":{"type":"string","enum":["Active","Archived"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.3.pendingChangeRequest.body.oneOf.7.status","typeLabel":"enum\u003cstring>"},"activityKind":{"type":"string","enum":["Vaults:ReleaseQuarantine"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.3.pendingChangeRequest.body.oneOf.7.activityKind","typeLabel":"enum\u003cstring>"},"rule":{"oneOf":[{"type":"object","title":"AlwaysTrigger","description":"This rule will always be triggered, meaning that if this rule is defined on a policy, the policy will always trigger the policy action, regardless of the activity details.","required":["kind"],"properties":{"kind":{"type":"string","enum":["AlwaysTrigger"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.3.pendingChangeRequest.body.oneOf.7.rule.oneOf.0.kind","typeLabel":"enum\u003cstring>"},"configuration":{"type":"object","properties":{},"additionalProperties":false,"uniqueKey":"\\items.items.[INDEX].oneOf.3.pendingChangeRequest.body.oneOf.7.rule.oneOf.0.configuration","typeLabel":"object"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.3.pendingChangeRequest.body.oneOf.7.rule.oneOf.0","typeLabel":"AlwaysTrigger · object"},{"type":"object","title":"ChainalysisQuarantineScreening","description":"\n\u003cInfo>\nThis rule can only be used once the Chainalysis integration is activated from the Dfns dashboard settings. (see more on [Chainalysis](https://docs.dfns.co/integrations/aml-kyt/chainalysis) integration page).\n\u003c/Info>\n\nThis rule can be used on a policy of `activityKind` = `Vaults:ReleaseQuarantine`. When a quarantined vault deposit was screened by Chainalysis KYT, the screening result (alerts \u0026 direct exposure) is stored with the quarantine. When a release of the quarantined funds is requested, this rule evaluates that **stored** result — no new Chainalysis call is made. Based on the stored result and the configuration of this rule, the policy will be triggered.\n\nIf the quarantine has **no stored KYT result** (the result was not received yet, the network/asset is not supported by the Chainalysis integration, or screening failed), the rule **always triggers** (fail closed): the release then follows the policy action (approval or block).\n\n```json\n{\n \"rule\": {\n \"kind\": \"ChainalysisQuarantineScreening\",\n \"configuration\": {\n \"alerts\": {\n \"alertLevel\": \"LOW\",\n \"categoryIds\": []\n },\n \"exposures\": {\n \"direct\": {\n \"categoryIds\": []\n }\n }\n }\n }\n}\n```\n\n**Configuration**\n\n| Property | Type | Description |\n| --- | --- | --- |\n| `alerts`\u003cbr>\u003cbr>`.alertLevel`* | `string` | Minimum alert level above which the rule should trigger, if any alert was returned in the stored Chainalysis results. Can be `LOW`, `MEDIUM`, `HIGH`, or `SEVERE` |\n| `alerts`\u003cbr>\u003cbr>`.categoryIds`* | list of integers | List of Chainalysis category IDs (see [here](https://docs.chainalysis.com/api/kyt/#categories)). If you leave this list empty, alerts of any category will trigger the rule. Otherwise, if you only want the rule to trigger on specific categories, you can specify some in the list. |\n| `exposures`\u003cbr>\u003cbr>`.direct`\u003cbr>\u003cbr>`.categoryIds`* | list of integers | List of Chainalysis category IDs (see [here](https://docs.chainalysis.com/api/kyt/#categories)). If you leave this list empty, a direct exposure of any category in the stored results will trigger the rule. Otherwise, if you only want the rule to trigger on specific categories, you can specify some in the list. |\n","required":["kind","configuration"],"properties":{"kind":{"type":"string","enum":["ChainalysisQuarantineScreening"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.3.pendingChangeRequest.body.oneOf.7.rule.oneOf.1.kind","typeLabel":"enum\u003cstring>"},"configuration":{"type":"object","properties":{"alerts":{"type":"object","properties":{"alertLevel":{"type":"string","enum":["LOW","MEDIUM","HIGH","SEVERE"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.3.pendingChangeRequest.body.oneOf.7.rule.oneOf.1.configuration.alerts.alertLevel","typeLabel":"enum\u003cstring>"},"categoryIds":{"type":"array","items":{"type":"integer","exclusiveMinimum":0,"uniqueKey":"\\items.items.[INDEX].oneOf.3.pendingChangeRequest.body.oneOf.7.rule.oneOf.1.configuration.alerts.categoryIds.items.[INDEX]","typeLabel":"integer"},"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.3.pendingChangeRequest.body.oneOf.7.rule.oneOf.1.configuration.alerts.categoryIds","typeLabel":"integer[]"}},"required":["alertLevel","categoryIds"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.3.pendingChangeRequest.body.oneOf.7.rule.oneOf.1.configuration.alerts","typeLabel":"object"},"exposures":{"type":"object","properties":{"direct":{"type":"object","properties":{"categoryIds":{"type":"array","items":{"type":"integer","exclusiveMinimum":0,"uniqueKey":"\\items.items.[INDEX].oneOf.3.pendingChangeRequest.body.oneOf.7.rule.oneOf.1.configuration.exposures.direct.categoryIds.items.[INDEX]","typeLabel":"integer"},"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.3.pendingChangeRequest.body.oneOf.7.rule.oneOf.1.configuration.exposures.direct.categoryIds","typeLabel":"integer[]"}},"required":["categoryIds"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.3.pendingChangeRequest.body.oneOf.7.rule.oneOf.1.configuration.exposures.direct","typeLabel":"object"}},"required":["direct"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.3.pendingChangeRequest.body.oneOf.7.rule.oneOf.1.configuration.exposures","typeLabel":"object"}},"required":["alerts","exposures"],"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.3.pendingChangeRequest.body.oneOf.7.rule.oneOf.1.configuration","typeLabel":"object"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.3.pendingChangeRequest.body.oneOf.7.rule.oneOf.1","typeLabel":"ChainalysisQuarantineScreening · object"}],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.3.pendingChangeRequest.body.oneOf.7.rule","typeLabel":"AlwaysTrigger · object | ChainalysisQuarantineScreening · object"},"action":{"oneOf":[{"type":"object","title":"RequestApproval","description":"\nThis action means that activity will first require an Approval process to be completed before it can be executed (or be aborted if someone rejects it during the approval process).\n\nOne or several groups of approvers need to be specified. These groups define who is allowed to approve / reject an activity.\n\nThe activity will only be executed if all approver groups reach their \"quorum\" of approvals. Otherwise, if any one user within any approver group rejects, then the activity is aborted and the call is not executed.\n\nThe example below shows a `RequestApproval` action, configured with one approval group requiring 2 approvals amongst three specific users.\n\n```json\n{\n \"action\": {\n \"kind\": \"RequestApproval\",\n \"autoRejectTimeout\": 60, // minutes\n \"approvalGroups\": [\n {\n \"name\": \"Admins\",\n \"quorum\": 2, // only 2 approvers required in that group \n \"approvers\": {\n \"userId\": {\n \"in\": [\"us-...1\", \"us-...2\", \"us-...3\"],\n }\n }\n }\n ],\n\n }\n}\n```\n\n**Don't lock yourself up**\n\nBy default, users cannot approve an activity they initiated themselves, even if they are in an approval group. To allow this, you must set `initiatorCanApprove: true`.\n\n*Example 1:* For any wallet transfer, a policy is setup to require approval from **1 specific admin user** (eg. the CEO). `initiatorCanApprove` was not set to `true`. If the CEO himself initiates a transfer, no-one can approve his transfer and it's stuck.\n\n*Example 2:* Company has only 3 users. A policy is setup to require approval from **any 3 users** (`quorum: 3`) for any modification of a policy. `initiatorCanApprove` was not set to `true`. In this case, they are locked, and the policy cannot be modified: whoever requests a modification cannot approve, and the policy is therefore always missing one approver. To unlock, they would need to invite a new user and give him the rights to approve as well.\n ","required":["kind","approvalGroups"],"properties":{"kind":{"type":"string","enum":["RequestApproval"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.3.pendingChangeRequest.body.oneOf.7.action.oneOf.0.kind","typeLabel":"enum\u003cstring>"},"approvalGroups":{"type":"array","items":{"type":"object","properties":{"quorum":{"type":"integer","minimum":1,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.3.pendingChangeRequest.body.oneOf.7.action.oneOf.0.approvalGroups.items.[INDEX].quorum","typeLabel":"integer"},"approvers":{"type":"object","properties":{"userId":{"type":"object","properties":{"in":{"type":"array","items":{"type":"string","minLength":1,"uniqueKey":"\\items.items.[INDEX].oneOf.3.pendingChangeRequest.body.oneOf.7.action.oneOf.0.approvalGroups.items.[INDEX].approvers.userId.in.items.[INDEX]","typeLabel":"string"},"minItems":1,"maxItems":100,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.3.pendingChangeRequest.body.oneOf.7.action.oneOf.0.approvalGroups.items.[INDEX].approvers.userId.in","typeLabel":"string[]"}},"required":["in"],"additionalProperties":false,"description":"Users and service accounts who may approve.","uniqueKey":"\\items.items.[INDEX].oneOf.3.pendingChangeRequest.body.oneOf.7.action.oneOf.0.approvalGroups.items.[INDEX].approvers.userId","typeLabel":"object"},"userGroupId":{"type":"object","properties":{"in":{"type":"array","items":{"type":"string","minLength":1,"maxLength":64,"pattern":"^ug-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"User group id.","example":"ug-139tf-f58l8-lsbt6dp47lfsdvgh","uniqueKey":"\\items.items.[INDEX].oneOf.3.pendingChangeRequest.body.oneOf.7.action.oneOf.0.approvalGroups.items.[INDEX].approvers.userGroupId.in.items.[INDEX]","typeLabel":"string"},"minItems":1,"maxItems":100,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.3.pendingChangeRequest.body.oneOf.7.action.oneOf.0.approvalGroups.items.[INDEX].approvers.userGroupId.in","typeLabel":"string[]"}},"required":["in"],"additionalProperties":false,"description":"User groups whose members may approve.","uniqueKey":"\\items.items.[INDEX].oneOf.3.pendingChangeRequest.body.oneOf.7.action.oneOf.0.approvalGroups.items.[INDEX].approvers.userGroupId","typeLabel":"object"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.3.pendingChangeRequest.body.oneOf.7.action.oneOf.0.approvalGroups.items.[INDEX].approvers","typeLabel":"object"},"name":{"type":"string","uniqueKey":"\\items.items.[INDEX].oneOf.3.pendingChangeRequest.body.oneOf.7.action.oneOf.0.approvalGroups.items.[INDEX].name","typeLabel":"string"},"initiatorCanApprove":{"type":"boolean","description":"Whether the initiator of the activity can participate in the approval.","uniqueKey":"\\items.items.[INDEX].oneOf.3.pendingChangeRequest.body.oneOf.7.action.oneOf.0.approvalGroups.items.[INDEX].initiatorCanApprove","typeLabel":"boolean"},"serviceAccountsCanApprove":{"type":"boolean","description":"Whether service accounts can participate in the approval for this group.","uniqueKey":"\\items.items.[INDEX].oneOf.3.pendingChangeRequest.body.oneOf.7.action.oneOf.0.approvalGroups.items.[INDEX].serviceAccountsCanApprove","typeLabel":"boolean"}},"required":["quorum","approvers"],"additionalProperties":false,"uniqueKey":"\\items.items.[INDEX].oneOf.3.pendingChangeRequest.body.oneOf.7.action.oneOf.0.approvalGroups.items.[INDEX]","typeLabel":"object"},"minItems":1,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.3.pendingChangeRequest.body.oneOf.7.action.oneOf.0.approvalGroups","typeLabel":"object[]"},"autoRejectTimeout":{"oneOf":[{"type":"integer","minimum":1,"uniqueKey":"\\items.items.[INDEX].oneOf.3.pendingChangeRequest.body.oneOf.7.action.oneOf.0.autoRejectTimeout.oneOf.0","typeLabel":"integer"},{"type":"null","minimum":1,"uniqueKey":"\\items.items.[INDEX].oneOf.3.pendingChangeRequest.body.oneOf.7.action.oneOf.0.autoRejectTimeout.oneOf.1","typeLabel":"null"}],"uniqueKey":"\\items.items.[INDEX].oneOf.3.pendingChangeRequest.body.oneOf.7.action.oneOf.0.autoRejectTimeout","typeLabel":"integer | null"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.3.pendingChangeRequest.body.oneOf.7.action.oneOf.0","typeLabel":"RequestApproval · object"},{"type":"object","title":"Block","description":"This action means that the activity will be blocked if the policy is triggered.\n\n```json\n{\n \"action\": {\n \"kind\": \"Block\"\n }\n}\n```\n","required":["kind"],"properties":{"kind":{"type":"string","enum":["Block"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.3.pendingChangeRequest.body.oneOf.7.action.oneOf.1.kind","typeLabel":"enum\u003cstring>"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.3.pendingChangeRequest.body.oneOf.7.action.oneOf.1","typeLabel":"Block · object"}],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.3.pendingChangeRequest.body.oneOf.7.action","typeLabel":"RequestApproval · object | Block · object"},"dateCreated":{"type":"string","uniqueKey":"\\items.items.[INDEX].oneOf.3.pendingChangeRequest.body.oneOf.7.dateCreated","typeLabel":"string"},"dateUpdated":{"type":"string","uniqueKey":"\\items.items.[INDEX].oneOf.3.pendingChangeRequest.body.oneOf.7.dateUpdated","typeLabel":"string"},"filters":{"type":"object","properties":{"vaultId":{"type":"object","properties":{"in":{"type":"array","items":{"type":"string","minLength":1,"uniqueKey":"\\items.items.[INDEX].oneOf.3.pendingChangeRequest.body.oneOf.7.filters.vaultId.in.items.[INDEX]","typeLabel":"string"},"minItems":1,"maxItems":100,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.3.pendingChangeRequest.body.oneOf.7.filters.vaultId.in","typeLabel":"string[]"}},"required":["in"],"additionalProperties":false,"uniqueKey":"\\items.items.[INDEX].oneOf.3.pendingChangeRequest.body.oneOf.7.filters.vaultId","typeLabel":"object"},"vaultTags":{"type":"object","properties":{"hasAny":{"type":"array","items":{"type":"string","minLength":1,"uniqueKey":"\\items.items.[INDEX].oneOf.3.pendingChangeRequest.body.oneOf.7.filters.vaultTags.hasAny.items.[INDEX]","typeLabel":"string"},"minItems":1,"maxItems":100,"uniqueKey":"\\items.items.[INDEX].oneOf.3.pendingChangeRequest.body.oneOf.7.filters.vaultTags.hasAny","typeLabel":"string[]"},"hasAll":{"type":"array","items":{"type":"string","minLength":1,"uniqueKey":"\\items.items.[INDEX].oneOf.3.pendingChangeRequest.body.oneOf.7.filters.vaultTags.hasAll.items.[INDEX]","typeLabel":"string"},"minItems":1,"maxItems":100,"uniqueKey":"\\items.items.[INDEX].oneOf.3.pendingChangeRequest.body.oneOf.7.filters.vaultTags.hasAll","typeLabel":"string[]"}},"additionalProperties":false,"uniqueKey":"\\items.items.[INDEX].oneOf.3.pendingChangeRequest.body.oneOf.7.filters.vaultTags","typeLabel":"object"}},"additionalProperties":false,"uniqueKey":"\\items.items.[INDEX].oneOf.3.pendingChangeRequest.body.oneOf.7.filters","typeLabel":"object"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.3.pendingChangeRequest.body.oneOf.7","typeLabel":"Vaults:ReleaseQuarantine · object"},{"type":"object","title":"Vaults:CreateLock","required":["id","name","status","activityKind","rule","action"],"properties":{"id":{"type":"string","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.3.pendingChangeRequest.body.oneOf.8.id","typeLabel":"string"},"name":{"type":"string","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.3.pendingChangeRequest.body.oneOf.8.name","typeLabel":"string"},"status":{"type":"string","enum":["Active","Archived"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.3.pendingChangeRequest.body.oneOf.8.status","typeLabel":"enum\u003cstring>"},"activityKind":{"type":"string","enum":["Vaults:CreateLock"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.3.pendingChangeRequest.body.oneOf.8.activityKind","typeLabel":"enum\u003cstring>"},"rule":{"type":"object","title":"AlwaysTrigger","description":"This rule will always be triggered, meaning that if this rule is defined on a policy, the policy will always trigger the policy action, regardless of the activity details.","required":["kind"],"properties":{"kind":{"type":"string","enum":["AlwaysTrigger"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.3.pendingChangeRequest.body.oneOf.8.rule.kind","typeLabel":"enum\u003cstring>"},"configuration":{"type":"object","properties":{},"additionalProperties":false,"uniqueKey":"\\items.items.[INDEX].oneOf.3.pendingChangeRequest.body.oneOf.8.rule.configuration","typeLabel":"object"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.3.pendingChangeRequest.body.oneOf.8.rule","typeLabel":"AlwaysTrigger · object"},"action":{"oneOf":[{"type":"object","title":"RequestApproval","description":"\nThis action means that activity will first require an Approval process to be completed before it can be executed (or be aborted if someone rejects it during the approval process).\n\nOne or several groups of approvers need to be specified. These groups define who is allowed to approve / reject an activity.\n\nThe activity will only be executed if all approver groups reach their \"quorum\" of approvals. Otherwise, if any one user within any approver group rejects, then the activity is aborted and the call is not executed.\n\nThe example below shows a `RequestApproval` action, configured with one approval group requiring 2 approvals amongst three specific users.\n\n```json\n{\n \"action\": {\n \"kind\": \"RequestApproval\",\n \"autoRejectTimeout\": 60, // minutes\n \"approvalGroups\": [\n {\n \"name\": \"Admins\",\n \"quorum\": 2, // only 2 approvers required in that group \n \"approvers\": {\n \"userId\": {\n \"in\": [\"us-...1\", \"us-...2\", \"us-...3\"],\n }\n }\n }\n ],\n\n }\n}\n```\n\n**Don't lock yourself up**\n\nBy default, users cannot approve an activity they initiated themselves, even if they are in an approval group. To allow this, you must set `initiatorCanApprove: true`.\n\n*Example 1:* For any wallet transfer, a policy is setup to require approval from **1 specific admin user** (eg. the CEO). `initiatorCanApprove` was not set to `true`. If the CEO himself initiates a transfer, no-one can approve his transfer and it's stuck.\n\n*Example 2:* Company has only 3 users. A policy is setup to require approval from **any 3 users** (`quorum: 3`) for any modification of a policy. `initiatorCanApprove` was not set to `true`. In this case, they are locked, and the policy cannot be modified: whoever requests a modification cannot approve, and the policy is therefore always missing one approver. To unlock, they would need to invite a new user and give him the rights to approve as well.\n ","required":["kind","approvalGroups"],"properties":{"kind":{"type":"string","enum":["RequestApproval"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.3.pendingChangeRequest.body.oneOf.8.action.oneOf.0.kind","typeLabel":"enum\u003cstring>"},"approvalGroups":{"type":"array","items":{"type":"object","properties":{"quorum":{"type":"integer","minimum":1,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.3.pendingChangeRequest.body.oneOf.8.action.oneOf.0.approvalGroups.items.[INDEX].quorum","typeLabel":"integer"},"approvers":{"type":"object","properties":{"userId":{"type":"object","properties":{"in":{"type":"array","items":{"type":"string","minLength":1,"uniqueKey":"\\items.items.[INDEX].oneOf.3.pendingChangeRequest.body.oneOf.8.action.oneOf.0.approvalGroups.items.[INDEX].approvers.userId.in.items.[INDEX]","typeLabel":"string"},"minItems":1,"maxItems":100,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.3.pendingChangeRequest.body.oneOf.8.action.oneOf.0.approvalGroups.items.[INDEX].approvers.userId.in","typeLabel":"string[]"}},"required":["in"],"additionalProperties":false,"description":"Users and service accounts who may approve.","uniqueKey":"\\items.items.[INDEX].oneOf.3.pendingChangeRequest.body.oneOf.8.action.oneOf.0.approvalGroups.items.[INDEX].approvers.userId","typeLabel":"object"},"userGroupId":{"type":"object","properties":{"in":{"type":"array","items":{"type":"string","minLength":1,"maxLength":64,"pattern":"^ug-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"User group id.","example":"ug-139tf-f58l8-lsbt6dp47lfsdvgh","uniqueKey":"\\items.items.[INDEX].oneOf.3.pendingChangeRequest.body.oneOf.8.action.oneOf.0.approvalGroups.items.[INDEX].approvers.userGroupId.in.items.[INDEX]","typeLabel":"string"},"minItems":1,"maxItems":100,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.3.pendingChangeRequest.body.oneOf.8.action.oneOf.0.approvalGroups.items.[INDEX].approvers.userGroupId.in","typeLabel":"string[]"}},"required":["in"],"additionalProperties":false,"description":"User groups whose members may approve.","uniqueKey":"\\items.items.[INDEX].oneOf.3.pendingChangeRequest.body.oneOf.8.action.oneOf.0.approvalGroups.items.[INDEX].approvers.userGroupId","typeLabel":"object"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.3.pendingChangeRequest.body.oneOf.8.action.oneOf.0.approvalGroups.items.[INDEX].approvers","typeLabel":"object"},"name":{"type":"string","uniqueKey":"\\items.items.[INDEX].oneOf.3.pendingChangeRequest.body.oneOf.8.action.oneOf.0.approvalGroups.items.[INDEX].name","typeLabel":"string"},"initiatorCanApprove":{"type":"boolean","description":"Whether the initiator of the activity can participate in the approval.","uniqueKey":"\\items.items.[INDEX].oneOf.3.pendingChangeRequest.body.oneOf.8.action.oneOf.0.approvalGroups.items.[INDEX].initiatorCanApprove","typeLabel":"boolean"},"serviceAccountsCanApprove":{"type":"boolean","description":"Whether service accounts can participate in the approval for this group.","uniqueKey":"\\items.items.[INDEX].oneOf.3.pendingChangeRequest.body.oneOf.8.action.oneOf.0.approvalGroups.items.[INDEX].serviceAccountsCanApprove","typeLabel":"boolean"}},"required":["quorum","approvers"],"additionalProperties":false,"uniqueKey":"\\items.items.[INDEX].oneOf.3.pendingChangeRequest.body.oneOf.8.action.oneOf.0.approvalGroups.items.[INDEX]","typeLabel":"object"},"minItems":1,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.3.pendingChangeRequest.body.oneOf.8.action.oneOf.0.approvalGroups","typeLabel":"object[]"},"autoRejectTimeout":{"oneOf":[{"type":"integer","minimum":1,"uniqueKey":"\\items.items.[INDEX].oneOf.3.pendingChangeRequest.body.oneOf.8.action.oneOf.0.autoRejectTimeout.oneOf.0","typeLabel":"integer"},{"type":"null","minimum":1,"uniqueKey":"\\items.items.[INDEX].oneOf.3.pendingChangeRequest.body.oneOf.8.action.oneOf.0.autoRejectTimeout.oneOf.1","typeLabel":"null"}],"uniqueKey":"\\items.items.[INDEX].oneOf.3.pendingChangeRequest.body.oneOf.8.action.oneOf.0.autoRejectTimeout","typeLabel":"integer | null"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.3.pendingChangeRequest.body.oneOf.8.action.oneOf.0","typeLabel":"RequestApproval · object"},{"type":"object","title":"Block","description":"This action means that the activity will be blocked if the policy is triggered.\n\n```json\n{\n \"action\": {\n \"kind\": \"Block\"\n }\n}\n```\n","required":["kind"],"properties":{"kind":{"type":"string","enum":["Block"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.3.pendingChangeRequest.body.oneOf.8.action.oneOf.1.kind","typeLabel":"enum\u003cstring>"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.3.pendingChangeRequest.body.oneOf.8.action.oneOf.1","typeLabel":"Block · object"}],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.3.pendingChangeRequest.body.oneOf.8.action","typeLabel":"RequestApproval · object | Block · object"},"dateCreated":{"type":"string","uniqueKey":"\\items.items.[INDEX].oneOf.3.pendingChangeRequest.body.oneOf.8.dateCreated","typeLabel":"string"},"dateUpdated":{"type":"string","uniqueKey":"\\items.items.[INDEX].oneOf.3.pendingChangeRequest.body.oneOf.8.dateUpdated","typeLabel":"string"},"filters":{"type":"object","properties":{"vaultId":{"type":"object","properties":{"in":{"type":"array","items":{"type":"string","minLength":1,"uniqueKey":"\\items.items.[INDEX].oneOf.3.pendingChangeRequest.body.oneOf.8.filters.vaultId.in.items.[INDEX]","typeLabel":"string"},"minItems":1,"maxItems":100,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.3.pendingChangeRequest.body.oneOf.8.filters.vaultId.in","typeLabel":"string[]"}},"required":["in"],"additionalProperties":false,"uniqueKey":"\\items.items.[INDEX].oneOf.3.pendingChangeRequest.body.oneOf.8.filters.vaultId","typeLabel":"object"},"vaultTags":{"type":"object","properties":{"hasAny":{"type":"array","items":{"type":"string","minLength":1,"uniqueKey":"\\items.items.[INDEX].oneOf.3.pendingChangeRequest.body.oneOf.8.filters.vaultTags.hasAny.items.[INDEX]","typeLabel":"string"},"minItems":1,"maxItems":100,"uniqueKey":"\\items.items.[INDEX].oneOf.3.pendingChangeRequest.body.oneOf.8.filters.vaultTags.hasAny","typeLabel":"string[]"},"hasAll":{"type":"array","items":{"type":"string","minLength":1,"uniqueKey":"\\items.items.[INDEX].oneOf.3.pendingChangeRequest.body.oneOf.8.filters.vaultTags.hasAll.items.[INDEX]","typeLabel":"string"},"minItems":1,"maxItems":100,"uniqueKey":"\\items.items.[INDEX].oneOf.3.pendingChangeRequest.body.oneOf.8.filters.vaultTags.hasAll","typeLabel":"string[]"}},"additionalProperties":false,"uniqueKey":"\\items.items.[INDEX].oneOf.3.pendingChangeRequest.body.oneOf.8.filters.vaultTags","typeLabel":"object"}},"additionalProperties":false,"uniqueKey":"\\items.items.[INDEX].oneOf.3.pendingChangeRequest.body.oneOf.8.filters","typeLabel":"object"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.3.pendingChangeRequest.body.oneOf.8","typeLabel":"Vaults:CreateLock · object"},{"type":"object","title":"Vaults:ReplaceLock","required":["id","name","status","activityKind","rule","action"],"properties":{"id":{"type":"string","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.3.pendingChangeRequest.body.oneOf.9.id","typeLabel":"string"},"name":{"type":"string","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.3.pendingChangeRequest.body.oneOf.9.name","typeLabel":"string"},"status":{"type":"string","enum":["Active","Archived"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.3.pendingChangeRequest.body.oneOf.9.status","typeLabel":"enum\u003cstring>"},"activityKind":{"type":"string","enum":["Vaults:ReplaceLock"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.3.pendingChangeRequest.body.oneOf.9.activityKind","typeLabel":"enum\u003cstring>"},"rule":{"type":"object","title":"AlwaysTrigger","description":"This rule will always be triggered, meaning that if this rule is defined on a policy, the policy will always trigger the policy action, regardless of the activity details.","required":["kind"],"properties":{"kind":{"type":"string","enum":["AlwaysTrigger"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.3.pendingChangeRequest.body.oneOf.9.rule.kind","typeLabel":"enum\u003cstring>"},"configuration":{"type":"object","properties":{},"additionalProperties":false,"uniqueKey":"\\items.items.[INDEX].oneOf.3.pendingChangeRequest.body.oneOf.9.rule.configuration","typeLabel":"object"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.3.pendingChangeRequest.body.oneOf.9.rule","typeLabel":"AlwaysTrigger · object"},"action":{"oneOf":[{"type":"object","title":"RequestApproval","description":"\nThis action means that activity will first require an Approval process to be completed before it can be executed (or be aborted if someone rejects it during the approval process).\n\nOne or several groups of approvers need to be specified. These groups define who is allowed to approve / reject an activity.\n\nThe activity will only be executed if all approver groups reach their \"quorum\" of approvals. Otherwise, if any one user within any approver group rejects, then the activity is aborted and the call is not executed.\n\nThe example below shows a `RequestApproval` action, configured with one approval group requiring 2 approvals amongst three specific users.\n\n```json\n{\n \"action\": {\n \"kind\": \"RequestApproval\",\n \"autoRejectTimeout\": 60, // minutes\n \"approvalGroups\": [\n {\n \"name\": \"Admins\",\n \"quorum\": 2, // only 2 approvers required in that group \n \"approvers\": {\n \"userId\": {\n \"in\": [\"us-...1\", \"us-...2\", \"us-...3\"],\n }\n }\n }\n ],\n\n }\n}\n```\n\n**Don't lock yourself up**\n\nBy default, users cannot approve an activity they initiated themselves, even if they are in an approval group. To allow this, you must set `initiatorCanApprove: true`.\n\n*Example 1:* For any wallet transfer, a policy is setup to require approval from **1 specific admin user** (eg. the CEO). `initiatorCanApprove` was not set to `true`. If the CEO himself initiates a transfer, no-one can approve his transfer and it's stuck.\n\n*Example 2:* Company has only 3 users. A policy is setup to require approval from **any 3 users** (`quorum: 3`) for any modification of a policy. `initiatorCanApprove` was not set to `true`. In this case, they are locked, and the policy cannot be modified: whoever requests a modification cannot approve, and the policy is therefore always missing one approver. To unlock, they would need to invite a new user and give him the rights to approve as well.\n ","required":["kind","approvalGroups"],"properties":{"kind":{"type":"string","enum":["RequestApproval"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.3.pendingChangeRequest.body.oneOf.9.action.oneOf.0.kind","typeLabel":"enum\u003cstring>"},"approvalGroups":{"type":"array","items":{"type":"object","properties":{"quorum":{"type":"integer","minimum":1,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.3.pendingChangeRequest.body.oneOf.9.action.oneOf.0.approvalGroups.items.[INDEX].quorum","typeLabel":"integer"},"approvers":{"type":"object","properties":{"userId":{"type":"object","properties":{"in":{"type":"array","items":{"type":"string","minLength":1,"uniqueKey":"\\items.items.[INDEX].oneOf.3.pendingChangeRequest.body.oneOf.9.action.oneOf.0.approvalGroups.items.[INDEX].approvers.userId.in.items.[INDEX]","typeLabel":"string"},"minItems":1,"maxItems":100,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.3.pendingChangeRequest.body.oneOf.9.action.oneOf.0.approvalGroups.items.[INDEX].approvers.userId.in","typeLabel":"string[]"}},"required":["in"],"additionalProperties":false,"description":"Users and service accounts who may approve.","uniqueKey":"\\items.items.[INDEX].oneOf.3.pendingChangeRequest.body.oneOf.9.action.oneOf.0.approvalGroups.items.[INDEX].approvers.userId","typeLabel":"object"},"userGroupId":{"type":"object","properties":{"in":{"type":"array","items":{"type":"string","minLength":1,"maxLength":64,"pattern":"^ug-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"User group id.","example":"ug-139tf-f58l8-lsbt6dp47lfsdvgh","uniqueKey":"\\items.items.[INDEX].oneOf.3.pendingChangeRequest.body.oneOf.9.action.oneOf.0.approvalGroups.items.[INDEX].approvers.userGroupId.in.items.[INDEX]","typeLabel":"string"},"minItems":1,"maxItems":100,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.3.pendingChangeRequest.body.oneOf.9.action.oneOf.0.approvalGroups.items.[INDEX].approvers.userGroupId.in","typeLabel":"string[]"}},"required":["in"],"additionalProperties":false,"description":"User groups whose members may approve.","uniqueKey":"\\items.items.[INDEX].oneOf.3.pendingChangeRequest.body.oneOf.9.action.oneOf.0.approvalGroups.items.[INDEX].approvers.userGroupId","typeLabel":"object"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.3.pendingChangeRequest.body.oneOf.9.action.oneOf.0.approvalGroups.items.[INDEX].approvers","typeLabel":"object"},"name":{"type":"string","uniqueKey":"\\items.items.[INDEX].oneOf.3.pendingChangeRequest.body.oneOf.9.action.oneOf.0.approvalGroups.items.[INDEX].name","typeLabel":"string"},"initiatorCanApprove":{"type":"boolean","description":"Whether the initiator of the activity can participate in the approval.","uniqueKey":"\\items.items.[INDEX].oneOf.3.pendingChangeRequest.body.oneOf.9.action.oneOf.0.approvalGroups.items.[INDEX].initiatorCanApprove","typeLabel":"boolean"},"serviceAccountsCanApprove":{"type":"boolean","description":"Whether service accounts can participate in the approval for this group.","uniqueKey":"\\items.items.[INDEX].oneOf.3.pendingChangeRequest.body.oneOf.9.action.oneOf.0.approvalGroups.items.[INDEX].serviceAccountsCanApprove","typeLabel":"boolean"}},"required":["quorum","approvers"],"additionalProperties":false,"uniqueKey":"\\items.items.[INDEX].oneOf.3.pendingChangeRequest.body.oneOf.9.action.oneOf.0.approvalGroups.items.[INDEX]","typeLabel":"object"},"minItems":1,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.3.pendingChangeRequest.body.oneOf.9.action.oneOf.0.approvalGroups","typeLabel":"object[]"},"autoRejectTimeout":{"oneOf":[{"type":"integer","minimum":1,"uniqueKey":"\\items.items.[INDEX].oneOf.3.pendingChangeRequest.body.oneOf.9.action.oneOf.0.autoRejectTimeout.oneOf.0","typeLabel":"integer"},{"type":"null","minimum":1,"uniqueKey":"\\items.items.[INDEX].oneOf.3.pendingChangeRequest.body.oneOf.9.action.oneOf.0.autoRejectTimeout.oneOf.1","typeLabel":"null"}],"uniqueKey":"\\items.items.[INDEX].oneOf.3.pendingChangeRequest.body.oneOf.9.action.oneOf.0.autoRejectTimeout","typeLabel":"integer | null"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.3.pendingChangeRequest.body.oneOf.9.action.oneOf.0","typeLabel":"RequestApproval · object"},{"type":"object","title":"Block","description":"This action means that the activity will be blocked if the policy is triggered.\n\n```json\n{\n \"action\": {\n \"kind\": \"Block\"\n }\n}\n```\n","required":["kind"],"properties":{"kind":{"type":"string","enum":["Block"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.3.pendingChangeRequest.body.oneOf.9.action.oneOf.1.kind","typeLabel":"enum\u003cstring>"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.3.pendingChangeRequest.body.oneOf.9.action.oneOf.1","typeLabel":"Block · object"}],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.3.pendingChangeRequest.body.oneOf.9.action","typeLabel":"RequestApproval · object | Block · object"},"dateCreated":{"type":"string","uniqueKey":"\\items.items.[INDEX].oneOf.3.pendingChangeRequest.body.oneOf.9.dateCreated","typeLabel":"string"},"dateUpdated":{"type":"string","uniqueKey":"\\items.items.[INDEX].oneOf.3.pendingChangeRequest.body.oneOf.9.dateUpdated","typeLabel":"string"},"filters":{"type":"object","properties":{"vaultId":{"type":"object","properties":{"in":{"type":"array","items":{"type":"string","minLength":1,"uniqueKey":"\\items.items.[INDEX].oneOf.3.pendingChangeRequest.body.oneOf.9.filters.vaultId.in.items.[INDEX]","typeLabel":"string"},"minItems":1,"maxItems":100,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.3.pendingChangeRequest.body.oneOf.9.filters.vaultId.in","typeLabel":"string[]"}},"required":["in"],"additionalProperties":false,"uniqueKey":"\\items.items.[INDEX].oneOf.3.pendingChangeRequest.body.oneOf.9.filters.vaultId","typeLabel":"object"},"vaultTags":{"type":"object","properties":{"hasAny":{"type":"array","items":{"type":"string","minLength":1,"uniqueKey":"\\items.items.[INDEX].oneOf.3.pendingChangeRequest.body.oneOf.9.filters.vaultTags.hasAny.items.[INDEX]","typeLabel":"string"},"minItems":1,"maxItems":100,"uniqueKey":"\\items.items.[INDEX].oneOf.3.pendingChangeRequest.body.oneOf.9.filters.vaultTags.hasAny","typeLabel":"string[]"},"hasAll":{"type":"array","items":{"type":"string","minLength":1,"uniqueKey":"\\items.items.[INDEX].oneOf.3.pendingChangeRequest.body.oneOf.9.filters.vaultTags.hasAll.items.[INDEX]","typeLabel":"string"},"minItems":1,"maxItems":100,"uniqueKey":"\\items.items.[INDEX].oneOf.3.pendingChangeRequest.body.oneOf.9.filters.vaultTags.hasAll","typeLabel":"string[]"}},"additionalProperties":false,"uniqueKey":"\\items.items.[INDEX].oneOf.3.pendingChangeRequest.body.oneOf.9.filters.vaultTags","typeLabel":"object"}},"additionalProperties":false,"uniqueKey":"\\items.items.[INDEX].oneOf.3.pendingChangeRequest.body.oneOf.9.filters","typeLabel":"object"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.3.pendingChangeRequest.body.oneOf.9","typeLabel":"Vaults:ReplaceLock · object"},{"type":"object","title":"UserAction","required":["id","name","status","activityKind","rule","action"],"properties":{"id":{"type":"string","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.3.pendingChangeRequest.body.oneOf.10.id","typeLabel":"string"},"name":{"type":"string","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.3.pendingChangeRequest.body.oneOf.10.name","typeLabel":"string"},"status":{"type":"string","enum":["Active","Archived"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.3.pendingChangeRequest.body.oneOf.10.status","typeLabel":"enum\u003cstring>"},"activityKind":{"type":"string","enum":["UserAction"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.3.pendingChangeRequest.body.oneOf.10.activityKind","typeLabel":"enum\u003cstring>"},"rule":{"type":"object","properties":{"kind":{"type":"string","enum":["UserAction"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.3.pendingChangeRequest.body.oneOf.10.rule.kind","typeLabel":"enum\u003cstring>"},"configuration":{"type":"object","properties":{"userActionKinds":{"type":"array","items":{"type":"string","uniqueKey":"\\items.items.[INDEX].oneOf.3.pendingChangeRequest.body.oneOf.10.rule.configuration.userActionKinds.items.[INDEX]","typeLabel":"string"},"minItems":1,"description":"The user actions this rule applies to. The rule triggers on any of them.","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.3.pendingChangeRequest.body.oneOf.10.rule.configuration.userActionKinds","typeLabel":"string[]"}},"required":["userActionKinds"],"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.3.pendingChangeRequest.body.oneOf.10.rule.configuration","typeLabel":"object"}},"required":["kind","configuration"],"additionalProperties":false,"title":"UserAction","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.3.pendingChangeRequest.body.oneOf.10.rule","typeLabel":"UserAction · object"},"action":{"oneOf":[{"type":"object","title":"RequestApproval","description":"\nThis action means that activity will first require an Approval process to be completed before it can be executed (or be aborted if someone rejects it during the approval process).\n\nOne or several groups of approvers need to be specified. These groups define who is allowed to approve / reject an activity.\n\nThe activity will only be executed if all approver groups reach their \"quorum\" of approvals. Otherwise, if any one user within any approver group rejects, then the activity is aborted and the call is not executed.\n\nThe example below shows a `RequestApproval` action, configured with one approval group requiring 2 approvals amongst three specific users.\n\n```json\n{\n \"action\": {\n \"kind\": \"RequestApproval\",\n \"autoRejectTimeout\": 60, // minutes\n \"approvalGroups\": [\n {\n \"name\": \"Admins\",\n \"quorum\": 2, // only 2 approvers required in that group \n \"approvers\": {\n \"userId\": {\n \"in\": [\"us-...1\", \"us-...2\", \"us-...3\"],\n }\n }\n }\n ],\n\n }\n}\n```\n\n**Don't lock yourself up**\n\nBy default, users cannot approve an activity they initiated themselves, even if they are in an approval group. To allow this, you must set `initiatorCanApprove: true`.\n\n*Example 1:* For any wallet transfer, a policy is setup to require approval from **1 specific admin user** (eg. the CEO). `initiatorCanApprove` was not set to `true`. If the CEO himself initiates a transfer, no-one can approve his transfer and it's stuck.\n\n*Example 2:* Company has only 3 users. A policy is setup to require approval from **any 3 users** (`quorum: 3`) for any modification of a policy. `initiatorCanApprove` was not set to `true`. In this case, they are locked, and the policy cannot be modified: whoever requests a modification cannot approve, and the policy is therefore always missing one approver. To unlock, they would need to invite a new user and give him the rights to approve as well.\n ","required":["kind","approvalGroups"],"properties":{"kind":{"type":"string","enum":["RequestApproval"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.3.pendingChangeRequest.body.oneOf.10.action.oneOf.0.kind","typeLabel":"enum\u003cstring>"},"approvalGroups":{"type":"array","items":{"type":"object","properties":{"quorum":{"type":"integer","minimum":1,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.3.pendingChangeRequest.body.oneOf.10.action.oneOf.0.approvalGroups.items.[INDEX].quorum","typeLabel":"integer"},"approvers":{"type":"object","properties":{"userId":{"type":"object","properties":{"in":{"type":"array","items":{"type":"string","minLength":1,"uniqueKey":"\\items.items.[INDEX].oneOf.3.pendingChangeRequest.body.oneOf.10.action.oneOf.0.approvalGroups.items.[INDEX].approvers.userId.in.items.[INDEX]","typeLabel":"string"},"minItems":1,"maxItems":100,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.3.pendingChangeRequest.body.oneOf.10.action.oneOf.0.approvalGroups.items.[INDEX].approvers.userId.in","typeLabel":"string[]"}},"required":["in"],"additionalProperties":false,"description":"Users and service accounts who may approve.","uniqueKey":"\\items.items.[INDEX].oneOf.3.pendingChangeRequest.body.oneOf.10.action.oneOf.0.approvalGroups.items.[INDEX].approvers.userId","typeLabel":"object"},"userGroupId":{"type":"object","properties":{"in":{"type":"array","items":{"type":"string","minLength":1,"maxLength":64,"pattern":"^ug-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"User group id.","example":"ug-139tf-f58l8-lsbt6dp47lfsdvgh","uniqueKey":"\\items.items.[INDEX].oneOf.3.pendingChangeRequest.body.oneOf.10.action.oneOf.0.approvalGroups.items.[INDEX].approvers.userGroupId.in.items.[INDEX]","typeLabel":"string"},"minItems":1,"maxItems":100,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.3.pendingChangeRequest.body.oneOf.10.action.oneOf.0.approvalGroups.items.[INDEX].approvers.userGroupId.in","typeLabel":"string[]"}},"required":["in"],"additionalProperties":false,"description":"User groups whose members may approve.","uniqueKey":"\\items.items.[INDEX].oneOf.3.pendingChangeRequest.body.oneOf.10.action.oneOf.0.approvalGroups.items.[INDEX].approvers.userGroupId","typeLabel":"object"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.3.pendingChangeRequest.body.oneOf.10.action.oneOf.0.approvalGroups.items.[INDEX].approvers","typeLabel":"object"},"name":{"type":"string","uniqueKey":"\\items.items.[INDEX].oneOf.3.pendingChangeRequest.body.oneOf.10.action.oneOf.0.approvalGroups.items.[INDEX].name","typeLabel":"string"},"initiatorCanApprove":{"type":"boolean","description":"Whether the initiator of the activity can participate in the approval.","uniqueKey":"\\items.items.[INDEX].oneOf.3.pendingChangeRequest.body.oneOf.10.action.oneOf.0.approvalGroups.items.[INDEX].initiatorCanApprove","typeLabel":"boolean"},"serviceAccountsCanApprove":{"type":"boolean","description":"Whether service accounts can participate in the approval for this group.","uniqueKey":"\\items.items.[INDEX].oneOf.3.pendingChangeRequest.body.oneOf.10.action.oneOf.0.approvalGroups.items.[INDEX].serviceAccountsCanApprove","typeLabel":"boolean"}},"required":["quorum","approvers"],"additionalProperties":false,"uniqueKey":"\\items.items.[INDEX].oneOf.3.pendingChangeRequest.body.oneOf.10.action.oneOf.0.approvalGroups.items.[INDEX]","typeLabel":"object"},"minItems":1,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.3.pendingChangeRequest.body.oneOf.10.action.oneOf.0.approvalGroups","typeLabel":"object[]"},"autoRejectTimeout":{"oneOf":[{"type":"integer","minimum":1,"uniqueKey":"\\items.items.[INDEX].oneOf.3.pendingChangeRequest.body.oneOf.10.action.oneOf.0.autoRejectTimeout.oneOf.0","typeLabel":"integer"},{"type":"null","minimum":1,"uniqueKey":"\\items.items.[INDEX].oneOf.3.pendingChangeRequest.body.oneOf.10.action.oneOf.0.autoRejectTimeout.oneOf.1","typeLabel":"null"}],"uniqueKey":"\\items.items.[INDEX].oneOf.3.pendingChangeRequest.body.oneOf.10.action.oneOf.0.autoRejectTimeout","typeLabel":"integer | null"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.3.pendingChangeRequest.body.oneOf.10.action.oneOf.0","typeLabel":"RequestApproval · object"},{"type":"object","title":"Block","description":"This action means that the activity will be blocked if the policy is triggered.\n\n```json\n{\n \"action\": {\n \"kind\": \"Block\"\n }\n}\n```\n","required":["kind"],"properties":{"kind":{"type":"string","enum":["Block"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.3.pendingChangeRequest.body.oneOf.10.action.oneOf.1.kind","typeLabel":"enum\u003cstring>"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.3.pendingChangeRequest.body.oneOf.10.action.oneOf.1","typeLabel":"Block · object"}],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.3.pendingChangeRequest.body.oneOf.10.action","typeLabel":"RequestApproval · object | Block · object"},"dateCreated":{"type":"string","uniqueKey":"\\items.items.[INDEX].oneOf.3.pendingChangeRequest.body.oneOf.10.dateCreated","typeLabel":"string"},"dateUpdated":{"type":"string","uniqueKey":"\\items.items.[INDEX].oneOf.3.pendingChangeRequest.body.oneOf.10.dateUpdated","typeLabel":"string"},"filters":{"type":"object","properties":{},"uniqueKey":"\\items.items.[INDEX].oneOf.3.pendingChangeRequest.body.oneOf.10.filters","typeLabel":"object"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.3.pendingChangeRequest.body.oneOf.10","typeLabel":"UserAction · object"}],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.3.pendingChangeRequest.body","typeLabel":"Registry:Addresses:Modify · object | Permissions:Assign · object | Permissions:Modify · object | Policies:Modify · object | Registry:ContractSchemas:Modify · object | Wallets:Sign · object | Wallets:IncomingTransaction · object | Vaults:ReleaseQuarantine · object | Vaults:CreateLock · object | Vaults:ReplaceLock · object | UserAction · object"},"dateResolved":{"type":"string","format":"date-time","uniqueKey":"\\items.items.[INDEX].oneOf.3.pendingChangeRequest.dateResolved","typeLabel":"string\u003cdate-time>"},"approvalId":{"type":"string","uniqueKey":"\\items.items.[INDEX].oneOf.3.pendingChangeRequest.approvalId","typeLabel":"string"}},"required":["id","requester","kind","operationKind","status","entityId","dateCreated","body"],"additionalProperties":false,"uniqueKey":"\\items.items.[INDEX].oneOf.3.pendingChangeRequest","typeLabel":"object"}},"additionalProperties":false,"uniqueKey":"\\items.items.[INDEX].oneOf.3","typeLabel":"Policies:Modify · object"},{"type":"object","title":"Registry:ContractSchemas:Modify","required":["id","name","status","activityKind","rule","action"],"properties":{"id":{"type":"string","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.4.id","typeLabel":"string"},"name":{"type":"string","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.4.name","typeLabel":"string"},"status":{"type":"string","enum":["Active","Archived"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.4.status","typeLabel":"enum\u003cstring>"},"activityKind":{"type":"string","enum":["Registry:ContractSchemas:Modify"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.4.activityKind","typeLabel":"enum\u003cstring>"},"rule":{"type":"object","properties":{"kind":{"type":"string","enum":["AlwaysTrigger"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.4.rule.kind","typeLabel":"enum\u003cstring>"},"configuration":{"type":"object","properties":{},"additionalProperties":false,"uniqueKey":"\\items.items.[INDEX].oneOf.4.rule.configuration","typeLabel":"object"}},"required":["kind"],"additionalProperties":false,"description":"This rule will always be triggered, meaning that if this rule is defined on a policy, the policy will always trigger the policy action, regardless of the activity details.","title":"AlwaysTrigger","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.4.rule","typeLabel":"AlwaysTrigger · object"},"action":{"oneOf":[{"type":"object","title":"RequestApproval","description":"\nThis action means that activity will first require an Approval process to be completed before it can be executed (or be aborted if someone rejects it during the approval process).\n\nOne or several groups of approvers need to be specified. These groups define who is allowed to approve / reject an activity.\n\nThe activity will only be executed if all approver groups reach their \"quorum\" of approvals. Otherwise, if any one user within any approver group rejects, then the activity is aborted and the call is not executed.\n\nThe example below shows a `RequestApproval` action, configured with one approval group requiring 2 approvals amongst three specific users.\n\n```json\n{\n \"action\": {\n \"kind\": \"RequestApproval\",\n \"autoRejectTimeout\": 60, // minutes\n \"approvalGroups\": [\n {\n \"name\": \"Admins\",\n \"quorum\": 2, // only 2 approvers required in that group \n \"approvers\": {\n \"userId\": {\n \"in\": [\"us-...1\", \"us-...2\", \"us-...3\"],\n }\n }\n }\n ],\n\n }\n}\n```\n\n**Don't lock yourself up**\n\nBy default, users cannot approve an activity they initiated themselves, even if they are in an approval group. To allow this, you must set `initiatorCanApprove: true`.\n\n*Example 1:* For any wallet transfer, a policy is setup to require approval from **1 specific admin user** (eg. the CEO). `initiatorCanApprove` was not set to `true`. If the CEO himself initiates a transfer, no-one can approve his transfer and it's stuck.\n\n*Example 2:* Company has only 3 users. A policy is setup to require approval from **any 3 users** (`quorum: 3`) for any modification of a policy. `initiatorCanApprove` was not set to `true`. In this case, they are locked, and the policy cannot be modified: whoever requests a modification cannot approve, and the policy is therefore always missing one approver. To unlock, they would need to invite a new user and give him the rights to approve as well.\n ","required":["kind","approvalGroups"],"properties":{"kind":{"type":"string","enum":["RequestApproval"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.4.action.oneOf.0.kind","typeLabel":"enum\u003cstring>"},"approvalGroups":{"type":"array","items":{"type":"object","properties":{"quorum":{"type":"integer","minimum":1,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.4.action.oneOf.0.approvalGroups.items.[INDEX].quorum","typeLabel":"integer"},"approvers":{"type":"object","properties":{"userId":{"type":"object","properties":{"in":{"type":"array","items":{"type":"string","minLength":1,"uniqueKey":"\\items.items.[INDEX].oneOf.4.action.oneOf.0.approvalGroups.items.[INDEX].approvers.userId.in.items.[INDEX]","typeLabel":"string"},"minItems":1,"maxItems":100,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.4.action.oneOf.0.approvalGroups.items.[INDEX].approvers.userId.in","typeLabel":"string[]"}},"required":["in"],"additionalProperties":false,"description":"Users and service accounts who may approve.","uniqueKey":"\\items.items.[INDEX].oneOf.4.action.oneOf.0.approvalGroups.items.[INDEX].approvers.userId","typeLabel":"object"},"userGroupId":{"type":"object","properties":{"in":{"type":"array","items":{"type":"string","minLength":1,"maxLength":64,"pattern":"^ug-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"User group id.","example":"ug-139tf-f58l8-lsbt6dp47lfsdvgh","uniqueKey":"\\items.items.[INDEX].oneOf.4.action.oneOf.0.approvalGroups.items.[INDEX].approvers.userGroupId.in.items.[INDEX]","typeLabel":"string"},"minItems":1,"maxItems":100,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.4.action.oneOf.0.approvalGroups.items.[INDEX].approvers.userGroupId.in","typeLabel":"string[]"}},"required":["in"],"additionalProperties":false,"description":"User groups whose members may approve.","uniqueKey":"\\items.items.[INDEX].oneOf.4.action.oneOf.0.approvalGroups.items.[INDEX].approvers.userGroupId","typeLabel":"object"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.4.action.oneOf.0.approvalGroups.items.[INDEX].approvers","typeLabel":"object"},"name":{"type":"string","uniqueKey":"\\items.items.[INDEX].oneOf.4.action.oneOf.0.approvalGroups.items.[INDEX].name","typeLabel":"string"},"initiatorCanApprove":{"type":"boolean","description":"Whether the initiator of the activity can participate in the approval.","uniqueKey":"\\items.items.[INDEX].oneOf.4.action.oneOf.0.approvalGroups.items.[INDEX].initiatorCanApprove","typeLabel":"boolean"},"serviceAccountsCanApprove":{"type":"boolean","description":"Whether service accounts can participate in the approval for this group.","uniqueKey":"\\items.items.[INDEX].oneOf.4.action.oneOf.0.approvalGroups.items.[INDEX].serviceAccountsCanApprove","typeLabel":"boolean"}},"required":["quorum","approvers"],"additionalProperties":false,"uniqueKey":"\\items.items.[INDEX].oneOf.4.action.oneOf.0.approvalGroups.items.[INDEX]","typeLabel":"object"},"minItems":1,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.4.action.oneOf.0.approvalGroups","typeLabel":"object[]"},"autoRejectTimeout":{"oneOf":[{"type":"integer","minimum":1,"uniqueKey":"\\items.items.[INDEX].oneOf.4.action.oneOf.0.autoRejectTimeout.oneOf.0","typeLabel":"integer"},{"type":"null","minimum":1,"uniqueKey":"\\items.items.[INDEX].oneOf.4.action.oneOf.0.autoRejectTimeout.oneOf.1","typeLabel":"null"}],"uniqueKey":"\\items.items.[INDEX].oneOf.4.action.oneOf.0.autoRejectTimeout","typeLabel":"integer | null"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.4.action.oneOf.0","typeLabel":"RequestApproval · object"},{"type":"object","title":"Block","description":"This action means that the activity will be blocked if the policy is triggered.\n\n```json\n{\n \"action\": {\n \"kind\": \"Block\"\n }\n}\n```\n","required":["kind"],"properties":{"kind":{"type":"string","enum":["Block"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.4.action.oneOf.1.kind","typeLabel":"enum\u003cstring>"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.4.action.oneOf.1","typeLabel":"Block · object"}],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.4.action","typeLabel":"RequestApproval · object | Block · object"},"dateCreated":{"type":"string","uniqueKey":"\\items.items.[INDEX].oneOf.4.dateCreated","typeLabel":"string"},"dateUpdated":{"type":"string","uniqueKey":"\\items.items.[INDEX].oneOf.4.dateUpdated","typeLabel":"string"},"filters":{"type":"object","properties":{},"uniqueKey":"\\items.items.[INDEX].oneOf.4.filters","typeLabel":"object"},"pendingChangeRequest":{"type":"object","properties":{"id":{"type":"string","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.4.pendingChangeRequest.id","typeLabel":"string"},"requester":{"type":"object","properties":{"userId":{"type":"string","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.4.pendingChangeRequest.requester.userId","typeLabel":"string"},"tokenId":{"type":"string","uniqueKey":"\\items.items.[INDEX].oneOf.4.pendingChangeRequest.requester.tokenId","typeLabel":"string"},"appId":{"type":"string","uniqueKey":"\\items.items.[INDEX].oneOf.4.pendingChangeRequest.requester.appId","typeLabel":"string"}},"required":["userId"],"description":"The user who initiated the change request.","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.4.pendingChangeRequest.requester","typeLabel":"object"},"kind":{"type":"string","enum":["Policy"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.4.pendingChangeRequest.kind","typeLabel":"enum\u003cstring>"},"operationKind":{"type":"string","enum":["Update"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.4.pendingChangeRequest.operationKind","typeLabel":"enum\u003cstring>"},"status":{"type":"string","enum":["Applied","Failed","Pending","Rejected"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.4.pendingChangeRequest.status","typeLabel":"enum\u003cstring>"},"entityId":{"type":"string","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.4.pendingChangeRequest.entityId","typeLabel":"string"},"dateCreated":{"type":"string","format":"date-time","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.4.pendingChangeRequest.dateCreated","typeLabel":"string\u003cdate-time>"},"body":{"oneOf":[{"type":"object","title":"Registry:Addresses:Modify","required":["id","name","status","activityKind","rule","action"],"properties":{"id":{"type":"string","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.4.pendingChangeRequest.body.oneOf.0.id","typeLabel":"string"},"name":{"type":"string","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.4.pendingChangeRequest.body.oneOf.0.name","typeLabel":"string"},"status":{"type":"string","enum":["Active","Archived"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.4.pendingChangeRequest.body.oneOf.0.status","typeLabel":"enum\u003cstring>"},"activityKind":{"type":"string","enum":["Registry:Addresses:Modify"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.4.pendingChangeRequest.body.oneOf.0.activityKind","typeLabel":"enum\u003cstring>"},"rule":{"type":"object","properties":{"kind":{"type":"string","enum":["AlwaysTrigger"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.4.pendingChangeRequest.body.oneOf.0.rule.kind","typeLabel":"enum\u003cstring>"},"configuration":{"type":"object","properties":{},"additionalProperties":false,"uniqueKey":"\\items.items.[INDEX].oneOf.4.pendingChangeRequest.body.oneOf.0.rule.configuration","typeLabel":"object"}},"required":["kind"],"additionalProperties":false,"description":"This rule will always be triggered, meaning that if this rule is defined on a policy, the policy will always trigger the policy action, regardless of the activity details.","title":"AlwaysTrigger","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.4.pendingChangeRequest.body.oneOf.0.rule","typeLabel":"AlwaysTrigger · object"},"action":{"oneOf":[{"type":"object","title":"RequestApproval","description":"\nThis action means that activity will first require an Approval process to be completed before it can be executed (or be aborted if someone rejects it during the approval process).\n\nOne or several groups of approvers need to be specified. These groups define who is allowed to approve / reject an activity.\n\nThe activity will only be executed if all approver groups reach their \"quorum\" of approvals. Otherwise, if any one user within any approver group rejects, then the activity is aborted and the call is not executed.\n\nThe example below shows a `RequestApproval` action, configured with one approval group requiring 2 approvals amongst three specific users.\n\n```json\n{\n \"action\": {\n \"kind\": \"RequestApproval\",\n \"autoRejectTimeout\": 60, // minutes\n \"approvalGroups\": [\n {\n \"name\": \"Admins\",\n \"quorum\": 2, // only 2 approvers required in that group \n \"approvers\": {\n \"userId\": {\n \"in\": [\"us-...1\", \"us-...2\", \"us-...3\"],\n }\n }\n }\n ],\n\n }\n}\n```\n\n**Don't lock yourself up**\n\nBy default, users cannot approve an activity they initiated themselves, even if they are in an approval group. To allow this, you must set `initiatorCanApprove: true`.\n\n*Example 1:* For any wallet transfer, a policy is setup to require approval from **1 specific admin user** (eg. the CEO). `initiatorCanApprove` was not set to `true`. If the CEO himself initiates a transfer, no-one can approve his transfer and it's stuck.\n\n*Example 2:* Company has only 3 users. A policy is setup to require approval from **any 3 users** (`quorum: 3`) for any modification of a policy. `initiatorCanApprove` was not set to `true`. In this case, they are locked, and the policy cannot be modified: whoever requests a modification cannot approve, and the policy is therefore always missing one approver. To unlock, they would need to invite a new user and give him the rights to approve as well.\n ","required":["kind","approvalGroups"],"properties":{"kind":{"type":"string","enum":["RequestApproval"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.4.pendingChangeRequest.body.oneOf.0.action.oneOf.0.kind","typeLabel":"enum\u003cstring>"},"approvalGroups":{"type":"array","items":{"type":"object","properties":{"quorum":{"type":"integer","minimum":1,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.4.pendingChangeRequest.body.oneOf.0.action.oneOf.0.approvalGroups.items.[INDEX].quorum","typeLabel":"integer"},"approvers":{"type":"object","properties":{"userId":{"type":"object","properties":{"in":{"type":"array","items":{"type":"string","minLength":1,"uniqueKey":"\\items.items.[INDEX].oneOf.4.pendingChangeRequest.body.oneOf.0.action.oneOf.0.approvalGroups.items.[INDEX].approvers.userId.in.items.[INDEX]","typeLabel":"string"},"minItems":1,"maxItems":100,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.4.pendingChangeRequest.body.oneOf.0.action.oneOf.0.approvalGroups.items.[INDEX].approvers.userId.in","typeLabel":"string[]"}},"required":["in"],"additionalProperties":false,"description":"Users and service accounts who may approve.","uniqueKey":"\\items.items.[INDEX].oneOf.4.pendingChangeRequest.body.oneOf.0.action.oneOf.0.approvalGroups.items.[INDEX].approvers.userId","typeLabel":"object"},"userGroupId":{"type":"object","properties":{"in":{"type":"array","items":{"type":"string","minLength":1,"maxLength":64,"pattern":"^ug-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"User group id.","example":"ug-139tf-f58l8-lsbt6dp47lfsdvgh","uniqueKey":"\\items.items.[INDEX].oneOf.4.pendingChangeRequest.body.oneOf.0.action.oneOf.0.approvalGroups.items.[INDEX].approvers.userGroupId.in.items.[INDEX]","typeLabel":"string"},"minItems":1,"maxItems":100,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.4.pendingChangeRequest.body.oneOf.0.action.oneOf.0.approvalGroups.items.[INDEX].approvers.userGroupId.in","typeLabel":"string[]"}},"required":["in"],"additionalProperties":false,"description":"User groups whose members may approve.","uniqueKey":"\\items.items.[INDEX].oneOf.4.pendingChangeRequest.body.oneOf.0.action.oneOf.0.approvalGroups.items.[INDEX].approvers.userGroupId","typeLabel":"object"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.4.pendingChangeRequest.body.oneOf.0.action.oneOf.0.approvalGroups.items.[INDEX].approvers","typeLabel":"object"},"name":{"type":"string","uniqueKey":"\\items.items.[INDEX].oneOf.4.pendingChangeRequest.body.oneOf.0.action.oneOf.0.approvalGroups.items.[INDEX].name","typeLabel":"string"},"initiatorCanApprove":{"type":"boolean","description":"Whether the initiator of the activity can participate in the approval.","uniqueKey":"\\items.items.[INDEX].oneOf.4.pendingChangeRequest.body.oneOf.0.action.oneOf.0.approvalGroups.items.[INDEX].initiatorCanApprove","typeLabel":"boolean"},"serviceAccountsCanApprove":{"type":"boolean","description":"Whether service accounts can participate in the approval for this group.","uniqueKey":"\\items.items.[INDEX].oneOf.4.pendingChangeRequest.body.oneOf.0.action.oneOf.0.approvalGroups.items.[INDEX].serviceAccountsCanApprove","typeLabel":"boolean"}},"required":["quorum","approvers"],"additionalProperties":false,"uniqueKey":"\\items.items.[INDEX].oneOf.4.pendingChangeRequest.body.oneOf.0.action.oneOf.0.approvalGroups.items.[INDEX]","typeLabel":"object"},"minItems":1,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.4.pendingChangeRequest.body.oneOf.0.action.oneOf.0.approvalGroups","typeLabel":"object[]"},"autoRejectTimeout":{"oneOf":[{"type":"integer","minimum":1,"uniqueKey":"\\items.items.[INDEX].oneOf.4.pendingChangeRequest.body.oneOf.0.action.oneOf.0.autoRejectTimeout.oneOf.0","typeLabel":"integer"},{"type":"null","minimum":1,"uniqueKey":"\\items.items.[INDEX].oneOf.4.pendingChangeRequest.body.oneOf.0.action.oneOf.0.autoRejectTimeout.oneOf.1","typeLabel":"null"}],"uniqueKey":"\\items.items.[INDEX].oneOf.4.pendingChangeRequest.body.oneOf.0.action.oneOf.0.autoRejectTimeout","typeLabel":"integer | null"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.4.pendingChangeRequest.body.oneOf.0.action.oneOf.0","typeLabel":"RequestApproval · object"},{"type":"object","title":"Block","description":"This action means that the activity will be blocked if the policy is triggered.\n\n```json\n{\n \"action\": {\n \"kind\": \"Block\"\n }\n}\n```\n","required":["kind"],"properties":{"kind":{"type":"string","enum":["Block"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.4.pendingChangeRequest.body.oneOf.0.action.oneOf.1.kind","typeLabel":"enum\u003cstring>"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.4.pendingChangeRequest.body.oneOf.0.action.oneOf.1","typeLabel":"Block · object"}],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.4.pendingChangeRequest.body.oneOf.0.action","typeLabel":"RequestApproval · object | Block · object"},"dateCreated":{"type":"string","uniqueKey":"\\items.items.[INDEX].oneOf.4.pendingChangeRequest.body.oneOf.0.dateCreated","typeLabel":"string"},"dateUpdated":{"type":"string","uniqueKey":"\\items.items.[INDEX].oneOf.4.pendingChangeRequest.body.oneOf.0.dateUpdated","typeLabel":"string"},"filters":{"type":"object","properties":{},"uniqueKey":"\\items.items.[INDEX].oneOf.4.pendingChangeRequest.body.oneOf.0.filters","typeLabel":"object"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.4.pendingChangeRequest.body.oneOf.0","typeLabel":"Registry:Addresses:Modify · object"},{"type":"object","title":"Permissions:Assign","required":["id","name","status","activityKind","rule","action"],"properties":{"id":{"type":"string","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.4.pendingChangeRequest.body.oneOf.1.id","typeLabel":"string"},"name":{"type":"string","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.4.pendingChangeRequest.body.oneOf.1.name","typeLabel":"string"},"status":{"type":"string","enum":["Active","Archived"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.4.pendingChangeRequest.body.oneOf.1.status","typeLabel":"enum\u003cstring>"},"activityKind":{"type":"string","enum":["Permissions:Assign"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.4.pendingChangeRequest.body.oneOf.1.activityKind","typeLabel":"enum\u003cstring>"},"rule":{"type":"object","properties":{"kind":{"type":"string","enum":["AlwaysTrigger"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.4.pendingChangeRequest.body.oneOf.1.rule.kind","typeLabel":"enum\u003cstring>"},"configuration":{"type":"object","properties":{},"additionalProperties":false,"uniqueKey":"\\items.items.[INDEX].oneOf.4.pendingChangeRequest.body.oneOf.1.rule.configuration","typeLabel":"object"}},"required":["kind"],"additionalProperties":false,"description":"This rule will always be triggered, meaning that if this rule is defined on a policy, the policy will always trigger the policy action, regardless of the activity details.","title":"AlwaysTrigger","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.4.pendingChangeRequest.body.oneOf.1.rule","typeLabel":"AlwaysTrigger · object"},"action":{"oneOf":[{"type":"object","title":"RequestApproval","description":"\nThis action means that activity will first require an Approval process to be completed before it can be executed (or be aborted if someone rejects it during the approval process).\n\nOne or several groups of approvers need to be specified. These groups define who is allowed to approve / reject an activity.\n\nThe activity will only be executed if all approver groups reach their \"quorum\" of approvals. Otherwise, if any one user within any approver group rejects, then the activity is aborted and the call is not executed.\n\nThe example below shows a `RequestApproval` action, configured with one approval group requiring 2 approvals amongst three specific users.\n\n```json\n{\n \"action\": {\n \"kind\": \"RequestApproval\",\n \"autoRejectTimeout\": 60, // minutes\n \"approvalGroups\": [\n {\n \"name\": \"Admins\",\n \"quorum\": 2, // only 2 approvers required in that group \n \"approvers\": {\n \"userId\": {\n \"in\": [\"us-...1\", \"us-...2\", \"us-...3\"],\n }\n }\n }\n ],\n\n }\n}\n```\n\n**Don't lock yourself up**\n\nBy default, users cannot approve an activity they initiated themselves, even if they are in an approval group. To allow this, you must set `initiatorCanApprove: true`.\n\n*Example 1:* For any wallet transfer, a policy is setup to require approval from **1 specific admin user** (eg. the CEO). `initiatorCanApprove` was not set to `true`. If the CEO himself initiates a transfer, no-one can approve his transfer and it's stuck.\n\n*Example 2:* Company has only 3 users. A policy is setup to require approval from **any 3 users** (`quorum: 3`) for any modification of a policy. `initiatorCanApprove` was not set to `true`. In this case, they are locked, and the policy cannot be modified: whoever requests a modification cannot approve, and the policy is therefore always missing one approver. To unlock, they would need to invite a new user and give him the rights to approve as well.\n ","required":["kind","approvalGroups"],"properties":{"kind":{"type":"string","enum":["RequestApproval"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.4.pendingChangeRequest.body.oneOf.1.action.oneOf.0.kind","typeLabel":"enum\u003cstring>"},"approvalGroups":{"type":"array","items":{"type":"object","properties":{"quorum":{"type":"integer","minimum":1,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.4.pendingChangeRequest.body.oneOf.1.action.oneOf.0.approvalGroups.items.[INDEX].quorum","typeLabel":"integer"},"approvers":{"type":"object","properties":{"userId":{"type":"object","properties":{"in":{"type":"array","items":{"type":"string","minLength":1,"uniqueKey":"\\items.items.[INDEX].oneOf.4.pendingChangeRequest.body.oneOf.1.action.oneOf.0.approvalGroups.items.[INDEX].approvers.userId.in.items.[INDEX]","typeLabel":"string"},"minItems":1,"maxItems":100,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.4.pendingChangeRequest.body.oneOf.1.action.oneOf.0.approvalGroups.items.[INDEX].approvers.userId.in","typeLabel":"string[]"}},"required":["in"],"additionalProperties":false,"description":"Users and service accounts who may approve.","uniqueKey":"\\items.items.[INDEX].oneOf.4.pendingChangeRequest.body.oneOf.1.action.oneOf.0.approvalGroups.items.[INDEX].approvers.userId","typeLabel":"object"},"userGroupId":{"type":"object","properties":{"in":{"type":"array","items":{"type":"string","minLength":1,"maxLength":64,"pattern":"^ug-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"User group id.","example":"ug-139tf-f58l8-lsbt6dp47lfsdvgh","uniqueKey":"\\items.items.[INDEX].oneOf.4.pendingChangeRequest.body.oneOf.1.action.oneOf.0.approvalGroups.items.[INDEX].approvers.userGroupId.in.items.[INDEX]","typeLabel":"string"},"minItems":1,"maxItems":100,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.4.pendingChangeRequest.body.oneOf.1.action.oneOf.0.approvalGroups.items.[INDEX].approvers.userGroupId.in","typeLabel":"string[]"}},"required":["in"],"additionalProperties":false,"description":"User groups whose members may approve.","uniqueKey":"\\items.items.[INDEX].oneOf.4.pendingChangeRequest.body.oneOf.1.action.oneOf.0.approvalGroups.items.[INDEX].approvers.userGroupId","typeLabel":"object"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.4.pendingChangeRequest.body.oneOf.1.action.oneOf.0.approvalGroups.items.[INDEX].approvers","typeLabel":"object"},"name":{"type":"string","uniqueKey":"\\items.items.[INDEX].oneOf.4.pendingChangeRequest.body.oneOf.1.action.oneOf.0.approvalGroups.items.[INDEX].name","typeLabel":"string"},"initiatorCanApprove":{"type":"boolean","description":"Whether the initiator of the activity can participate in the approval.","uniqueKey":"\\items.items.[INDEX].oneOf.4.pendingChangeRequest.body.oneOf.1.action.oneOf.0.approvalGroups.items.[INDEX].initiatorCanApprove","typeLabel":"boolean"},"serviceAccountsCanApprove":{"type":"boolean","description":"Whether service accounts can participate in the approval for this group.","uniqueKey":"\\items.items.[INDEX].oneOf.4.pendingChangeRequest.body.oneOf.1.action.oneOf.0.approvalGroups.items.[INDEX].serviceAccountsCanApprove","typeLabel":"boolean"}},"required":["quorum","approvers"],"additionalProperties":false,"uniqueKey":"\\items.items.[INDEX].oneOf.4.pendingChangeRequest.body.oneOf.1.action.oneOf.0.approvalGroups.items.[INDEX]","typeLabel":"object"},"minItems":1,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.4.pendingChangeRequest.body.oneOf.1.action.oneOf.0.approvalGroups","typeLabel":"object[]"},"autoRejectTimeout":{"oneOf":[{"type":"integer","minimum":1,"uniqueKey":"\\items.items.[INDEX].oneOf.4.pendingChangeRequest.body.oneOf.1.action.oneOf.0.autoRejectTimeout.oneOf.0","typeLabel":"integer"},{"type":"null","minimum":1,"uniqueKey":"\\items.items.[INDEX].oneOf.4.pendingChangeRequest.body.oneOf.1.action.oneOf.0.autoRejectTimeout.oneOf.1","typeLabel":"null"}],"uniqueKey":"\\items.items.[INDEX].oneOf.4.pendingChangeRequest.body.oneOf.1.action.oneOf.0.autoRejectTimeout","typeLabel":"integer | null"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.4.pendingChangeRequest.body.oneOf.1.action.oneOf.0","typeLabel":"RequestApproval · object"},{"type":"object","title":"Block","description":"This action means that the activity will be blocked if the policy is triggered.\n\n```json\n{\n \"action\": {\n \"kind\": \"Block\"\n }\n}\n```\n","required":["kind"],"properties":{"kind":{"type":"string","enum":["Block"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.4.pendingChangeRequest.body.oneOf.1.action.oneOf.1.kind","typeLabel":"enum\u003cstring>"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.4.pendingChangeRequest.body.oneOf.1.action.oneOf.1","typeLabel":"Block · object"}],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.4.pendingChangeRequest.body.oneOf.1.action","typeLabel":"RequestApproval · object | Block · object"},"dateCreated":{"type":"string","uniqueKey":"\\items.items.[INDEX].oneOf.4.pendingChangeRequest.body.oneOf.1.dateCreated","typeLabel":"string"},"dateUpdated":{"type":"string","uniqueKey":"\\items.items.[INDEX].oneOf.4.pendingChangeRequest.body.oneOf.1.dateUpdated","typeLabel":"string"},"filters":{"type":"object","properties":{"permissionId":{"type":"object","properties":{"in":{"type":"array","items":{"type":"string","minLength":1,"uniqueKey":"\\items.items.[INDEX].oneOf.4.pendingChangeRequest.body.oneOf.1.filters.permissionId.in.items.[INDEX]","typeLabel":"string"},"minItems":1,"maxItems":100,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.4.pendingChangeRequest.body.oneOf.1.filters.permissionId.in","typeLabel":"string[]"}},"required":["in"],"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.4.pendingChangeRequest.body.oneOf.1.filters.permissionId","typeLabel":"object"}},"required":["permissionId"],"additionalProperties":false,"uniqueKey":"\\items.items.[INDEX].oneOf.4.pendingChangeRequest.body.oneOf.1.filters","typeLabel":"object"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.4.pendingChangeRequest.body.oneOf.1","typeLabel":"Permissions:Assign · object"},{"type":"object","title":"Permissions:Modify","required":["id","name","status","activityKind","rule","action"],"properties":{"id":{"type":"string","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.4.pendingChangeRequest.body.oneOf.2.id","typeLabel":"string"},"name":{"type":"string","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.4.pendingChangeRequest.body.oneOf.2.name","typeLabel":"string"},"status":{"type":"string","enum":["Active","Archived"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.4.pendingChangeRequest.body.oneOf.2.status","typeLabel":"enum\u003cstring>"},"activityKind":{"type":"string","enum":["Permissions:Modify"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.4.pendingChangeRequest.body.oneOf.2.activityKind","typeLabel":"enum\u003cstring>"},"rule":{"type":"object","properties":{"kind":{"type":"string","enum":["AlwaysTrigger"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.4.pendingChangeRequest.body.oneOf.2.rule.kind","typeLabel":"enum\u003cstring>"},"configuration":{"type":"object","properties":{},"additionalProperties":false,"uniqueKey":"\\items.items.[INDEX].oneOf.4.pendingChangeRequest.body.oneOf.2.rule.configuration","typeLabel":"object"}},"required":["kind"],"additionalProperties":false,"description":"This rule will always be triggered, meaning that if this rule is defined on a policy, the policy will always trigger the policy action, regardless of the activity details.","title":"AlwaysTrigger","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.4.pendingChangeRequest.body.oneOf.2.rule","typeLabel":"AlwaysTrigger · object"},"action":{"oneOf":[{"type":"object","title":"RequestApproval","description":"\nThis action means that activity will first require an Approval process to be completed before it can be executed (or be aborted if someone rejects it during the approval process).\n\nOne or several groups of approvers need to be specified. These groups define who is allowed to approve / reject an activity.\n\nThe activity will only be executed if all approver groups reach their \"quorum\" of approvals. Otherwise, if any one user within any approver group rejects, then the activity is aborted and the call is not executed.\n\nThe example below shows a `RequestApproval` action, configured with one approval group requiring 2 approvals amongst three specific users.\n\n```json\n{\n \"action\": {\n \"kind\": \"RequestApproval\",\n \"autoRejectTimeout\": 60, // minutes\n \"approvalGroups\": [\n {\n \"name\": \"Admins\",\n \"quorum\": 2, // only 2 approvers required in that group \n \"approvers\": {\n \"userId\": {\n \"in\": [\"us-...1\", \"us-...2\", \"us-...3\"],\n }\n }\n }\n ],\n\n }\n}\n```\n\n**Don't lock yourself up**\n\nBy default, users cannot approve an activity they initiated themselves, even if they are in an approval group. To allow this, you must set `initiatorCanApprove: true`.\n\n*Example 1:* For any wallet transfer, a policy is setup to require approval from **1 specific admin user** (eg. the CEO). `initiatorCanApprove` was not set to `true`. If the CEO himself initiates a transfer, no-one can approve his transfer and it's stuck.\n\n*Example 2:* Company has only 3 users. A policy is setup to require approval from **any 3 users** (`quorum: 3`) for any modification of a policy. `initiatorCanApprove` was not set to `true`. In this case, they are locked, and the policy cannot be modified: whoever requests a modification cannot approve, and the policy is therefore always missing one approver. To unlock, they would need to invite a new user and give him the rights to approve as well.\n ","required":["kind","approvalGroups"],"properties":{"kind":{"type":"string","enum":["RequestApproval"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.4.pendingChangeRequest.body.oneOf.2.action.oneOf.0.kind","typeLabel":"enum\u003cstring>"},"approvalGroups":{"type":"array","items":{"type":"object","properties":{"quorum":{"type":"integer","minimum":1,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.4.pendingChangeRequest.body.oneOf.2.action.oneOf.0.approvalGroups.items.[INDEX].quorum","typeLabel":"integer"},"approvers":{"type":"object","properties":{"userId":{"type":"object","properties":{"in":{"type":"array","items":{"type":"string","minLength":1,"uniqueKey":"\\items.items.[INDEX].oneOf.4.pendingChangeRequest.body.oneOf.2.action.oneOf.0.approvalGroups.items.[INDEX].approvers.userId.in.items.[INDEX]","typeLabel":"string"},"minItems":1,"maxItems":100,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.4.pendingChangeRequest.body.oneOf.2.action.oneOf.0.approvalGroups.items.[INDEX].approvers.userId.in","typeLabel":"string[]"}},"required":["in"],"additionalProperties":false,"description":"Users and service accounts who may approve.","uniqueKey":"\\items.items.[INDEX].oneOf.4.pendingChangeRequest.body.oneOf.2.action.oneOf.0.approvalGroups.items.[INDEX].approvers.userId","typeLabel":"object"},"userGroupId":{"type":"object","properties":{"in":{"type":"array","items":{"type":"string","minLength":1,"maxLength":64,"pattern":"^ug-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"User group id.","example":"ug-139tf-f58l8-lsbt6dp47lfsdvgh","uniqueKey":"\\items.items.[INDEX].oneOf.4.pendingChangeRequest.body.oneOf.2.action.oneOf.0.approvalGroups.items.[INDEX].approvers.userGroupId.in.items.[INDEX]","typeLabel":"string"},"minItems":1,"maxItems":100,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.4.pendingChangeRequest.body.oneOf.2.action.oneOf.0.approvalGroups.items.[INDEX].approvers.userGroupId.in","typeLabel":"string[]"}},"required":["in"],"additionalProperties":false,"description":"User groups whose members may approve.","uniqueKey":"\\items.items.[INDEX].oneOf.4.pendingChangeRequest.body.oneOf.2.action.oneOf.0.approvalGroups.items.[INDEX].approvers.userGroupId","typeLabel":"object"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.4.pendingChangeRequest.body.oneOf.2.action.oneOf.0.approvalGroups.items.[INDEX].approvers","typeLabel":"object"},"name":{"type":"string","uniqueKey":"\\items.items.[INDEX].oneOf.4.pendingChangeRequest.body.oneOf.2.action.oneOf.0.approvalGroups.items.[INDEX].name","typeLabel":"string"},"initiatorCanApprove":{"type":"boolean","description":"Whether the initiator of the activity can participate in the approval.","uniqueKey":"\\items.items.[INDEX].oneOf.4.pendingChangeRequest.body.oneOf.2.action.oneOf.0.approvalGroups.items.[INDEX].initiatorCanApprove","typeLabel":"boolean"},"serviceAccountsCanApprove":{"type":"boolean","description":"Whether service accounts can participate in the approval for this group.","uniqueKey":"\\items.items.[INDEX].oneOf.4.pendingChangeRequest.body.oneOf.2.action.oneOf.0.approvalGroups.items.[INDEX].serviceAccountsCanApprove","typeLabel":"boolean"}},"required":["quorum","approvers"],"additionalProperties":false,"uniqueKey":"\\items.items.[INDEX].oneOf.4.pendingChangeRequest.body.oneOf.2.action.oneOf.0.approvalGroups.items.[INDEX]","typeLabel":"object"},"minItems":1,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.4.pendingChangeRequest.body.oneOf.2.action.oneOf.0.approvalGroups","typeLabel":"object[]"},"autoRejectTimeout":{"oneOf":[{"type":"integer","minimum":1,"uniqueKey":"\\items.items.[INDEX].oneOf.4.pendingChangeRequest.body.oneOf.2.action.oneOf.0.autoRejectTimeout.oneOf.0","typeLabel":"integer"},{"type":"null","minimum":1,"uniqueKey":"\\items.items.[INDEX].oneOf.4.pendingChangeRequest.body.oneOf.2.action.oneOf.0.autoRejectTimeout.oneOf.1","typeLabel":"null"}],"uniqueKey":"\\items.items.[INDEX].oneOf.4.pendingChangeRequest.body.oneOf.2.action.oneOf.0.autoRejectTimeout","typeLabel":"integer | null"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.4.pendingChangeRequest.body.oneOf.2.action.oneOf.0","typeLabel":"RequestApproval · object"},{"type":"object","title":"Block","description":"This action means that the activity will be blocked if the policy is triggered.\n\n```json\n{\n \"action\": {\n \"kind\": \"Block\"\n }\n}\n```\n","required":["kind"],"properties":{"kind":{"type":"string","enum":["Block"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.4.pendingChangeRequest.body.oneOf.2.action.oneOf.1.kind","typeLabel":"enum\u003cstring>"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.4.pendingChangeRequest.body.oneOf.2.action.oneOf.1","typeLabel":"Block · object"}],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.4.pendingChangeRequest.body.oneOf.2.action","typeLabel":"RequestApproval · object | Block · object"},"dateCreated":{"type":"string","uniqueKey":"\\items.items.[INDEX].oneOf.4.pendingChangeRequest.body.oneOf.2.dateCreated","typeLabel":"string"},"dateUpdated":{"type":"string","uniqueKey":"\\items.items.[INDEX].oneOf.4.pendingChangeRequest.body.oneOf.2.dateUpdated","typeLabel":"string"},"filters":{"type":"object","properties":{"permissionId":{"type":"object","properties":{"in":{"type":"array","items":{"type":"string","minLength":1,"uniqueKey":"\\items.items.[INDEX].oneOf.4.pendingChangeRequest.body.oneOf.2.filters.permissionId.in.items.[INDEX]","typeLabel":"string"},"minItems":1,"maxItems":100,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.4.pendingChangeRequest.body.oneOf.2.filters.permissionId.in","typeLabel":"string[]"}},"required":["in"],"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.4.pendingChangeRequest.body.oneOf.2.filters.permissionId","typeLabel":"object"}},"required":["permissionId"],"additionalProperties":false,"uniqueKey":"\\items.items.[INDEX].oneOf.4.pendingChangeRequest.body.oneOf.2.filters","typeLabel":"object"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.4.pendingChangeRequest.body.oneOf.2","typeLabel":"Permissions:Modify · object"},{"type":"object","title":"Policies:Modify","required":["id","name","status","activityKind","rule","action"],"properties":{"id":{"type":"string","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.4.pendingChangeRequest.body.oneOf.3.id","typeLabel":"string"},"name":{"type":"string","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.4.pendingChangeRequest.body.oneOf.3.name","typeLabel":"string"},"status":{"type":"string","enum":["Active","Archived"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.4.pendingChangeRequest.body.oneOf.3.status","typeLabel":"enum\u003cstring>"},"activityKind":{"type":"string","enum":["Policies:Modify"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.4.pendingChangeRequest.body.oneOf.3.activityKind","typeLabel":"enum\u003cstring>"},"rule":{"type":"object","properties":{"kind":{"type":"string","enum":["AlwaysTrigger"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.4.pendingChangeRequest.body.oneOf.3.rule.kind","typeLabel":"enum\u003cstring>"},"configuration":{"type":"object","properties":{},"additionalProperties":false,"uniqueKey":"\\items.items.[INDEX].oneOf.4.pendingChangeRequest.body.oneOf.3.rule.configuration","typeLabel":"object"}},"required":["kind"],"additionalProperties":false,"description":"This rule will always be triggered, meaning that if this rule is defined on a policy, the policy will always trigger the policy action, regardless of the activity details.","title":"AlwaysTrigger","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.4.pendingChangeRequest.body.oneOf.3.rule","typeLabel":"AlwaysTrigger · object"},"action":{"type":"object","properties":{"kind":{"type":"string","enum":["RequestApproval"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.4.pendingChangeRequest.body.oneOf.3.action.kind","typeLabel":"enum\u003cstring>"},"approvalGroups":{"type":"array","items":{"type":"object","properties":{"quorum":{"type":"integer","minimum":1,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.4.pendingChangeRequest.body.oneOf.3.action.approvalGroups.items.[INDEX].quorum","typeLabel":"integer"},"approvers":{"type":"object","properties":{"userId":{"type":"object","properties":{"in":{"type":"array","items":{"type":"string","minLength":1,"uniqueKey":"\\items.items.[INDEX].oneOf.4.pendingChangeRequest.body.oneOf.3.action.approvalGroups.items.[INDEX].approvers.userId.in.items.[INDEX]","typeLabel":"string"},"minItems":1,"maxItems":100,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.4.pendingChangeRequest.body.oneOf.3.action.approvalGroups.items.[INDEX].approvers.userId.in","typeLabel":"string[]"}},"required":["in"],"additionalProperties":false,"description":"Users and service accounts who may approve.","uniqueKey":"\\items.items.[INDEX].oneOf.4.pendingChangeRequest.body.oneOf.3.action.approvalGroups.items.[INDEX].approvers.userId","typeLabel":"object"},"userGroupId":{"type":"object","properties":{"in":{"type":"array","items":{"type":"string","minLength":1,"maxLength":64,"pattern":"^ug-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"User group id.","example":"ug-139tf-f58l8-lsbt6dp47lfsdvgh","uniqueKey":"\\items.items.[INDEX].oneOf.4.pendingChangeRequest.body.oneOf.3.action.approvalGroups.items.[INDEX].approvers.userGroupId.in.items.[INDEX]","typeLabel":"string"},"minItems":1,"maxItems":100,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.4.pendingChangeRequest.body.oneOf.3.action.approvalGroups.items.[INDEX].approvers.userGroupId.in","typeLabel":"string[]"}},"required":["in"],"additionalProperties":false,"description":"User groups whose members may approve.","uniqueKey":"\\items.items.[INDEX].oneOf.4.pendingChangeRequest.body.oneOf.3.action.approvalGroups.items.[INDEX].approvers.userGroupId","typeLabel":"object"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.4.pendingChangeRequest.body.oneOf.3.action.approvalGroups.items.[INDEX].approvers","typeLabel":"object"},"name":{"type":"string","uniqueKey":"\\items.items.[INDEX].oneOf.4.pendingChangeRequest.body.oneOf.3.action.approvalGroups.items.[INDEX].name","typeLabel":"string"},"initiatorCanApprove":{"type":"boolean","description":"Whether the initiator of the activity can participate in the approval.","uniqueKey":"\\items.items.[INDEX].oneOf.4.pendingChangeRequest.body.oneOf.3.action.approvalGroups.items.[INDEX].initiatorCanApprove","typeLabel":"boolean"},"serviceAccountsCanApprove":{"type":"boolean","description":"Whether service accounts can participate in the approval for this group.","uniqueKey":"\\items.items.[INDEX].oneOf.4.pendingChangeRequest.body.oneOf.3.action.approvalGroups.items.[INDEX].serviceAccountsCanApprove","typeLabel":"boolean"}},"required":["quorum","approvers"],"additionalProperties":false,"uniqueKey":"\\items.items.[INDEX].oneOf.4.pendingChangeRequest.body.oneOf.3.action.approvalGroups.items.[INDEX]","typeLabel":"object"},"minItems":1,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.4.pendingChangeRequest.body.oneOf.3.action.approvalGroups","typeLabel":"object[]"},"autoRejectTimeout":{"oneOf":[{"type":"integer","minimum":1,"uniqueKey":"\\items.items.[INDEX].oneOf.4.pendingChangeRequest.body.oneOf.3.action.autoRejectTimeout.oneOf.0","typeLabel":"integer"},{"type":"null","minimum":1,"uniqueKey":"\\items.items.[INDEX].oneOf.4.pendingChangeRequest.body.oneOf.3.action.autoRejectTimeout.oneOf.1","typeLabel":"null"}],"uniqueKey":"\\items.items.[INDEX].oneOf.4.pendingChangeRequest.body.oneOf.3.action.autoRejectTimeout","typeLabel":"integer | null"}},"required":["kind","approvalGroups"],"additionalProperties":false,"description":"\nThis action means that activity will first require an Approval process to be completed before it can be executed (or be aborted if someone rejects it during the approval process).\n\nOne or several groups of approvers need to be specified. These groups define who is allowed to approve / reject an activity.\n\nThe activity will only be executed if all approver groups reach their \"quorum\" of approvals. Otherwise, if any one user within any approver group rejects, then the activity is aborted and the call is not executed.\n\nThe example below shows a `RequestApproval` action, configured with one approval group requiring 2 approvals amongst three specific users.\n\n```json\n{\n \"action\": {\n \"kind\": \"RequestApproval\",\n \"autoRejectTimeout\": 60, // minutes\n \"approvalGroups\": [\n {\n \"name\": \"Admins\",\n \"quorum\": 2, // only 2 approvers required in that group \n \"approvers\": {\n \"userId\": {\n \"in\": [\"us-...1\", \"us-...2\", \"us-...3\"],\n }\n }\n }\n ],\n\n }\n}\n```\n\n**Don't lock yourself up**\n\nBy default, users cannot approve an activity they initiated themselves, even if they are in an approval group. To allow this, you must set `initiatorCanApprove: true`.\n\n*Example 1:* For any wallet transfer, a policy is setup to require approval from **1 specific admin user** (eg. the CEO). `initiatorCanApprove` was not set to `true`. If the CEO himself initiates a transfer, no-one can approve his transfer and it's stuck.\n\n*Example 2:* Company has only 3 users. A policy is setup to require approval from **any 3 users** (`quorum: 3`) for any modification of a policy. `initiatorCanApprove` was not set to `true`. In this case, they are locked, and the policy cannot be modified: whoever requests a modification cannot approve, and the policy is therefore always missing one approver. To unlock, they would need to invite a new user and give him the rights to approve as well.\n ","title":"RequestApproval","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.4.pendingChangeRequest.body.oneOf.3.action","typeLabel":"RequestApproval · object"},"dateCreated":{"type":"string","uniqueKey":"\\items.items.[INDEX].oneOf.4.pendingChangeRequest.body.oneOf.3.dateCreated","typeLabel":"string"},"dateUpdated":{"type":"string","uniqueKey":"\\items.items.[INDEX].oneOf.4.pendingChangeRequest.body.oneOf.3.dateUpdated","typeLabel":"string"},"filters":{"type":"object","properties":{"policyId":{"type":"object","properties":{"in":{"type":"array","items":{"type":"string","minLength":1,"uniqueKey":"\\items.items.[INDEX].oneOf.4.pendingChangeRequest.body.oneOf.3.filters.policyId.in.items.[INDEX]","typeLabel":"string"},"minItems":1,"maxItems":100,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.4.pendingChangeRequest.body.oneOf.3.filters.policyId.in","typeLabel":"string[]"}},"required":["in"],"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.4.pendingChangeRequest.body.oneOf.3.filters.policyId","typeLabel":"object"}},"required":["policyId"],"additionalProperties":false,"uniqueKey":"\\items.items.[INDEX].oneOf.4.pendingChangeRequest.body.oneOf.3.filters","typeLabel":"object"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.4.pendingChangeRequest.body.oneOf.3","typeLabel":"Policies:Modify · object"},{"type":"object","title":"Registry:ContractSchemas:Modify","required":["id","name","status","activityKind","rule","action"],"properties":{"id":{"type":"string","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.4.pendingChangeRequest.body.oneOf.4.id","typeLabel":"string"},"name":{"type":"string","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.4.pendingChangeRequest.body.oneOf.4.name","typeLabel":"string"},"status":{"type":"string","enum":["Active","Archived"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.4.pendingChangeRequest.body.oneOf.4.status","typeLabel":"enum\u003cstring>"},"activityKind":{"type":"string","enum":["Registry:ContractSchemas:Modify"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.4.pendingChangeRequest.body.oneOf.4.activityKind","typeLabel":"enum\u003cstring>"},"rule":{"type":"object","properties":{"kind":{"type":"string","enum":["AlwaysTrigger"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.4.pendingChangeRequest.body.oneOf.4.rule.kind","typeLabel":"enum\u003cstring>"},"configuration":{"type":"object","properties":{},"additionalProperties":false,"uniqueKey":"\\items.items.[INDEX].oneOf.4.pendingChangeRequest.body.oneOf.4.rule.configuration","typeLabel":"object"}},"required":["kind"],"additionalProperties":false,"description":"This rule will always be triggered, meaning that if this rule is defined on a policy, the policy will always trigger the policy action, regardless of the activity details.","title":"AlwaysTrigger","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.4.pendingChangeRequest.body.oneOf.4.rule","typeLabel":"AlwaysTrigger · object"},"action":{"oneOf":[{"type":"object","title":"RequestApproval","description":"\nThis action means that activity will first require an Approval process to be completed before it can be executed (or be aborted if someone rejects it during the approval process).\n\nOne or several groups of approvers need to be specified. These groups define who is allowed to approve / reject an activity.\n\nThe activity will only be executed if all approver groups reach their \"quorum\" of approvals. Otherwise, if any one user within any approver group rejects, then the activity is aborted and the call is not executed.\n\nThe example below shows a `RequestApproval` action, configured with one approval group requiring 2 approvals amongst three specific users.\n\n```json\n{\n \"action\": {\n \"kind\": \"RequestApproval\",\n \"autoRejectTimeout\": 60, // minutes\n \"approvalGroups\": [\n {\n \"name\": \"Admins\",\n \"quorum\": 2, // only 2 approvers required in that group \n \"approvers\": {\n \"userId\": {\n \"in\": [\"us-...1\", \"us-...2\", \"us-...3\"],\n }\n }\n }\n ],\n\n }\n}\n```\n\n**Don't lock yourself up**\n\nBy default, users cannot approve an activity they initiated themselves, even if they are in an approval group. To allow this, you must set `initiatorCanApprove: true`.\n\n*Example 1:* For any wallet transfer, a policy is setup to require approval from **1 specific admin user** (eg. the CEO). `initiatorCanApprove` was not set to `true`. If the CEO himself initiates a transfer, no-one can approve his transfer and it's stuck.\n\n*Example 2:* Company has only 3 users. A policy is setup to require approval from **any 3 users** (`quorum: 3`) for any modification of a policy. `initiatorCanApprove` was not set to `true`. In this case, they are locked, and the policy cannot be modified: whoever requests a modification cannot approve, and the policy is therefore always missing one approver. To unlock, they would need to invite a new user and give him the rights to approve as well.\n ","required":["kind","approvalGroups"],"properties":{"kind":{"type":"string","enum":["RequestApproval"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.4.pendingChangeRequest.body.oneOf.4.action.oneOf.0.kind","typeLabel":"enum\u003cstring>"},"approvalGroups":{"type":"array","items":{"type":"object","properties":{"quorum":{"type":"integer","minimum":1,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.4.pendingChangeRequest.body.oneOf.4.action.oneOf.0.approvalGroups.items.[INDEX].quorum","typeLabel":"integer"},"approvers":{"type":"object","properties":{"userId":{"type":"object","properties":{"in":{"type":"array","items":{"type":"string","minLength":1,"uniqueKey":"\\items.items.[INDEX].oneOf.4.pendingChangeRequest.body.oneOf.4.action.oneOf.0.approvalGroups.items.[INDEX].approvers.userId.in.items.[INDEX]","typeLabel":"string"},"minItems":1,"maxItems":100,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.4.pendingChangeRequest.body.oneOf.4.action.oneOf.0.approvalGroups.items.[INDEX].approvers.userId.in","typeLabel":"string[]"}},"required":["in"],"additionalProperties":false,"description":"Users and service accounts who may approve.","uniqueKey":"\\items.items.[INDEX].oneOf.4.pendingChangeRequest.body.oneOf.4.action.oneOf.0.approvalGroups.items.[INDEX].approvers.userId","typeLabel":"object"},"userGroupId":{"type":"object","properties":{"in":{"type":"array","items":{"type":"string","minLength":1,"maxLength":64,"pattern":"^ug-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"User group id.","example":"ug-139tf-f58l8-lsbt6dp47lfsdvgh","uniqueKey":"\\items.items.[INDEX].oneOf.4.pendingChangeRequest.body.oneOf.4.action.oneOf.0.approvalGroups.items.[INDEX].approvers.userGroupId.in.items.[INDEX]","typeLabel":"string"},"minItems":1,"maxItems":100,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.4.pendingChangeRequest.body.oneOf.4.action.oneOf.0.approvalGroups.items.[INDEX].approvers.userGroupId.in","typeLabel":"string[]"}},"required":["in"],"additionalProperties":false,"description":"User groups whose members may approve.","uniqueKey":"\\items.items.[INDEX].oneOf.4.pendingChangeRequest.body.oneOf.4.action.oneOf.0.approvalGroups.items.[INDEX].approvers.userGroupId","typeLabel":"object"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.4.pendingChangeRequest.body.oneOf.4.action.oneOf.0.approvalGroups.items.[INDEX].approvers","typeLabel":"object"},"name":{"type":"string","uniqueKey":"\\items.items.[INDEX].oneOf.4.pendingChangeRequest.body.oneOf.4.action.oneOf.0.approvalGroups.items.[INDEX].name","typeLabel":"string"},"initiatorCanApprove":{"type":"boolean","description":"Whether the initiator of the activity can participate in the approval.","uniqueKey":"\\items.items.[INDEX].oneOf.4.pendingChangeRequest.body.oneOf.4.action.oneOf.0.approvalGroups.items.[INDEX].initiatorCanApprove","typeLabel":"boolean"},"serviceAccountsCanApprove":{"type":"boolean","description":"Whether service accounts can participate in the approval for this group.","uniqueKey":"\\items.items.[INDEX].oneOf.4.pendingChangeRequest.body.oneOf.4.action.oneOf.0.approvalGroups.items.[INDEX].serviceAccountsCanApprove","typeLabel":"boolean"}},"required":["quorum","approvers"],"additionalProperties":false,"uniqueKey":"\\items.items.[INDEX].oneOf.4.pendingChangeRequest.body.oneOf.4.action.oneOf.0.approvalGroups.items.[INDEX]","typeLabel":"object"},"minItems":1,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.4.pendingChangeRequest.body.oneOf.4.action.oneOf.0.approvalGroups","typeLabel":"object[]"},"autoRejectTimeout":{"oneOf":[{"type":"integer","minimum":1,"uniqueKey":"\\items.items.[INDEX].oneOf.4.pendingChangeRequest.body.oneOf.4.action.oneOf.0.autoRejectTimeout.oneOf.0","typeLabel":"integer"},{"type":"null","minimum":1,"uniqueKey":"\\items.items.[INDEX].oneOf.4.pendingChangeRequest.body.oneOf.4.action.oneOf.0.autoRejectTimeout.oneOf.1","typeLabel":"null"}],"uniqueKey":"\\items.items.[INDEX].oneOf.4.pendingChangeRequest.body.oneOf.4.action.oneOf.0.autoRejectTimeout","typeLabel":"integer | null"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.4.pendingChangeRequest.body.oneOf.4.action.oneOf.0","typeLabel":"RequestApproval · object"},{"type":"object","title":"Block","description":"This action means that the activity will be blocked if the policy is triggered.\n\n```json\n{\n \"action\": {\n \"kind\": \"Block\"\n }\n}\n```\n","required":["kind"],"properties":{"kind":{"type":"string","enum":["Block"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.4.pendingChangeRequest.body.oneOf.4.action.oneOf.1.kind","typeLabel":"enum\u003cstring>"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.4.pendingChangeRequest.body.oneOf.4.action.oneOf.1","typeLabel":"Block · object"}],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.4.pendingChangeRequest.body.oneOf.4.action","typeLabel":"RequestApproval · object | Block · object"},"dateCreated":{"type":"string","uniqueKey":"\\items.items.[INDEX].oneOf.4.pendingChangeRequest.body.oneOf.4.dateCreated","typeLabel":"string"},"dateUpdated":{"type":"string","uniqueKey":"\\items.items.[INDEX].oneOf.4.pendingChangeRequest.body.oneOf.4.dateUpdated","typeLabel":"string"},"filters":{"type":"object","properties":{},"uniqueKey":"\\items.items.[INDEX].oneOf.4.pendingChangeRequest.body.oneOf.4.filters","typeLabel":"object"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.4.pendingChangeRequest.body.oneOf.4","typeLabel":"Registry:ContractSchemas:Modify · object"},{"type":"object","title":"Wallets:Sign","required":["id","name","status","activityKind","rule","action"],"properties":{"id":{"type":"string","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.4.pendingChangeRequest.body.oneOf.5.id","typeLabel":"string"},"name":{"type":"string","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.4.pendingChangeRequest.body.oneOf.5.name","typeLabel":"string"},"status":{"type":"string","enum":["Active","Archived"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.4.pendingChangeRequest.body.oneOf.5.status","typeLabel":"enum\u003cstring>"},"activityKind":{"type":"string","enum":["Wallets:Sign"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.4.pendingChangeRequest.body.oneOf.5.activityKind","typeLabel":"enum\u003cstring>"},"rule":{"oneOf":[{"type":"object","title":"AlwaysTrigger","description":"This rule will always be triggered, meaning that if this rule is defined on a policy, the policy will always trigger the policy action, regardless of the activity details.","required":["kind"],"properties":{"kind":{"type":"string","enum":["AlwaysTrigger"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.4.pendingChangeRequest.body.oneOf.5.rule.oneOf.0.kind","typeLabel":"enum\u003cstring>"},"configuration":{"type":"object","properties":{},"additionalProperties":false,"uniqueKey":"\\items.items.[INDEX].oneOf.4.pendingChangeRequest.body.oneOf.5.rule.oneOf.0.configuration","typeLabel":"object"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.4.pendingChangeRequest.body.oneOf.5.rule.oneOf.0","typeLabel":"AlwaysTrigger · object"},{"type":"object","title":"TransactionRecipientWhitelist","description":"This rule will trigger if the destination address *is NOT whitelisted*.","required":["kind","configuration"],"properties":{"kind":{"type":"string","enum":["TransactionRecipientWhitelist"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.4.pendingChangeRequest.body.oneOf.5.rule.oneOf.1.kind","typeLabel":"enum\u003cstring>"},"configuration":{"type":"object","properties":{"addresses":{"type":"array","items":{"type":"string","minLength":1,"uniqueKey":"\\items.items.[INDEX].oneOf.4.pendingChangeRequest.body.oneOf.5.rule.oneOf.1.configuration.addresses.items.[INDEX]","typeLabel":"string"},"description":"Whitelisted recipient addresses","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.4.pendingChangeRequest.body.oneOf.5.rule.oneOf.1.configuration.addresses","typeLabel":"string[]"}},"required":["addresses"],"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.4.pendingChangeRequest.body.oneOf.5.rule.oneOf.1.configuration","typeLabel":"object"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.4.pendingChangeRequest.body.oneOf.5.rule.oneOf.1","typeLabel":"TransactionRecipientWhitelist · object"},{"type":"object","title":"TransactionAmountLimit","description":"This rule will trigger if the wallet activity detected is transferring some value whose amount is equal to or greater than a given limit. The limit is inclusive: a transfer whose value exactly equals the limit also triggers.\n\nThe limit is expressed in a fiat `currency` and evaluated against the market value of the transfer. To set a threshold in the asset's own units instead, use `TransactionAmountLimitNominal`.\n\nNote: If the amount of the wallet activity cannot be evaluated for any reason (eg. market prices are not available, or eg. the amount cannot be inferred from a wallet signature request, etc.), by default the rule will trigger the policy (this is called \"failing closed\" and is generally considered a security best practice).","required":["kind","configuration"],"properties":{"kind":{"type":"string","enum":["TransactionAmountLimit"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.4.pendingChangeRequest.body.oneOf.5.rule.oneOf.2.kind","typeLabel":"enum\u003cstring>"},"configuration":{"type":"object","properties":{"limit":{"type":"number","description":"Amount limit in `currency`","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.4.pendingChangeRequest.body.oneOf.5.rule.oneOf.2.configuration.limit","typeLabel":"number"},"currency":{"type":"string","enum":["USD"],"description":"Fiat currency, currently only `USD`","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.4.pendingChangeRequest.body.oneOf.5.rule.oneOf.2.configuration.currency","typeLabel":"enum\u003cstring>"}},"required":["limit","currency"],"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.4.pendingChangeRequest.body.oneOf.5.rule.oneOf.2.configuration","typeLabel":"object"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.4.pendingChangeRequest.body.oneOf.5.rule.oneOf.2","typeLabel":"TransactionAmountLimit · object"},{"type":"object","title":"TransactionAmountLimitNominal","description":"This rule will trigger if the wallet activity detected is transferring more of a listed asset than that asset's limit.\n\nEach limit is expressed in the minimum denomination of its own asset and compared against the transferred amount directly, so the verdict needs no market data and does not move with a price. To set a threshold on the fiat value of a transfer instead, use `TransactionAmountLimit`.\n\nLimits are asset exact: an asset is identified by its network and its Dfns token identifier, so a wrapped or staked derivative is a different asset from the thing it tracks, and a transfer of an asset the rule does not list will not trigger it.\n\nNote: If the transferred amount or the asset cannot be determined for any reason, by default the rule will trigger the policy (this is called \"failing closed\" and is generally considered a security best practice).","required":["kind","configuration"],"properties":{"kind":{"type":"string","enum":["TransactionAmountLimitNominal"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.4.pendingChangeRequest.body.oneOf.5.rule.oneOf.3.kind","typeLabel":"enum\u003cstring>"},"configuration":{"type":"object","properties":{"assets":{"type":"array","items":{"type":"object","properties":{"network":{"type":"string","title":"Network","description":"The network the asset lives on.","enum":["Algorand","AlgorandTestnet","Aptos","AptosTestnet","ArbitrumOne","ArbitrumSepolia","Arc","ArcTestnet","Areum","AvalancheC","AvalancheCFuji","Base","BaseSepolia","Berachain","BerachainBepolia","Bitcoin","BitcoinSignet","BitcoinTestnet4","BitcoinCash","Bob","BobSepolia","Bsc","BscTestnet","Canton","CantonTestnet","Cardano","CardanoPreprod","Concordium","ConcordiumTestnet","Celo","CeloSepolia","Codex","CodexSepolia","CosmosHub4","CosmosIcsTestnet","Dogecoin","DogecoinTestnet","Ethereum","EthereumClassic","EthereumClassicMordor","EthereumSepolia","EthereumHoodi","FlareC","FlareCCoston2","FlowEvm","FlowEvmTestnet","Hedera","HederaTestnet","HyperEvm","HyperEvmTestnet","Ink","InkSepolia","InternetComputer","Ion","IonTestnet","Iota","IotaTestnet","Kusama","KusamaAssetHub","Litecoin","LitecoinTestnet","Monad","MonadTestnet","Movement","MovementTestnet","Near","NearTestnet","Optimism","OptimismSepolia","Origyn","Plasma","PlasmaTestnet","Plume","PlumeSepolia","Paseo","PaseoAssetHub","Polkadot","PolkadotAssetHub","Polygon","PolygonAmoy","Polymesh","PolymeshTestnet","Rayls","RaylsTestnet","Robinhood","RobinhoodSepolia","SeiAtlantic2","SeiPacific1","Solana","SolanaDevnet","Sonic","SonicTestnet","Starknet","StarknetSepolia","Stellar","StellarTestnet","Sui","SuiTestnet","Tezos","TezosShadownet","Tempo","TempoModerato","Tsc","TscTestnet1","Ton","TonTestnet","Tron","TronNile","Westend","WestendAssetHub","Xdc","XdcApothem","XLayer","XLayerSepolia","XrpLedger","XrpLedgerTestnet"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.4.pendingChangeRequest.body.oneOf.5.rule.oneOf.3.configuration.assets.items.[INDEX].network","typeLabel":"enum\u003cstring>"},"tid":{"type":"string","minLength":1,"maxLength":200,"pattern":"^[a-z0-9_]+:[^\\s](?:[ ]?[^\\s])*$","description":"The Dfns token identifier of the asset, for example `native:eth` or `erc20:0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48`. Must be canonical: token contract addresses on hex based networks are lower cased.","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.4.pendingChangeRequest.body.oneOf.5.rule.oneOf.3.configuration.assets.items.[INDEX].tid","typeLabel":"string"},"limit":{"type":"string","pattern":"^\\d+$","description":"Amount limit in the minimum denomination of the asset, as an integer string, matching how a transfer expresses its amount. For an 18 decimal token `\"5000000000000000000\"` is 5 whole tokens.","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.4.pendingChangeRequest.body.oneOf.5.rule.oneOf.3.configuration.assets.items.[INDEX].limit","typeLabel":"string"}},"required":["network","tid","limit"],"additionalProperties":false,"uniqueKey":"\\items.items.[INDEX].oneOf.4.pendingChangeRequest.body.oneOf.5.rule.oneOf.3.configuration.assets.items.[INDEX]","typeLabel":"object"},"minItems":1,"maxItems":100,"description":"The assets this rule applies to, each with its own limit. A transfer of an asset that is not listed does not trigger the rule. The limit applies to each matching transfer individually; nothing is accumulated across transfers.","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.4.pendingChangeRequest.body.oneOf.5.rule.oneOf.3.configuration.assets","typeLabel":"object[]"}},"required":["assets"],"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.4.pendingChangeRequest.body.oneOf.5.rule.oneOf.3.configuration","typeLabel":"object"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.4.pendingChangeRequest.body.oneOf.5.rule.oneOf.3","typeLabel":"TransactionAmountLimitNominal · object"},{"type":"object","title":"TransactionAmountVelocity","description":"This rule will trigger if the cumulative amount transferred from a given wallet within a given timeframe is greater than a specified limit. The aggregate amount evaluated is based only on the wallet that triggered the policy.","required":["kind","configuration"],"properties":{"kind":{"type":"string","enum":["TransactionAmountVelocity"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.4.pendingChangeRequest.body.oneOf.5.rule.oneOf.4.kind","typeLabel":"enum\u003cstring>"},"configuration":{"type":"object","properties":{"limit":{"type":"number","description":"Amount limit in `currency`","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.4.pendingChangeRequest.body.oneOf.5.rule.oneOf.4.configuration.limit","typeLabel":"number"},"currency":{"type":"string","enum":["USD"],"description":"Currency for the amount limit above","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.4.pendingChangeRequest.body.oneOf.5.rule.oneOf.4.configuration.currency","typeLabel":"enum\u003cstring>"},"timeframe":{"type":"integer","minimum":1,"maximum":43200,"description":"Time period in minutes. Minimum 1, Maximum 43,200.","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.4.pendingChangeRequest.body.oneOf.5.rule.oneOf.4.configuration.timeframe","typeLabel":"integer"}},"required":["limit","currency","timeframe"],"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.4.pendingChangeRequest.body.oneOf.5.rule.oneOf.4.configuration","typeLabel":"object"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.4.pendingChangeRequest.body.oneOf.5.rule.oneOf.4","typeLabel":"TransactionAmountVelocity · object"},{"type":"object","title":"TransactionCountVelocity","description":"This rule will trigger if the number of wallet activities for a given wallet within a given timeframe, is greater than a specified limit. The aggregate number of transactions evaluated is based only on the wallet that triggered the policy.","required":["kind","configuration"],"properties":{"kind":{"type":"string","enum":["TransactionCountVelocity"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.4.pendingChangeRequest.body.oneOf.5.rule.oneOf.5.kind","typeLabel":"enum\u003cstring>"},"configuration":{"type":"object","properties":{"limit":{"type":"number","description":"Count limit","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.4.pendingChangeRequest.body.oneOf.5.rule.oneOf.5.configuration.limit","typeLabel":"number"},"timeframe":{"type":"integer","minimum":1,"maximum":43200,"description":"Time period in minutes. Minimum 1, Maximum 43,200.","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.4.pendingChangeRequest.body.oneOf.5.rule.oneOf.5.configuration.timeframe","typeLabel":"integer"}},"required":["limit","timeframe"],"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.4.pendingChangeRequest.body.oneOf.5.rule.oneOf.5.configuration","typeLabel":"object"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.4.pendingChangeRequest.body.oneOf.5.rule.oneOf.5","typeLabel":"TransactionCountVelocity · object"},{"type":"object","title":"ChainalysisTransactionPrescreening","description":"\n\u003cInfo>\nThis rule can only be used once the Chainalysis integration is activated from the Dfns dashboard settings. (see more on [Chainalysis](https://docs.dfns.co/integrations/aml-kyt/chainalysis) integration page).\n\u003c/Info>\n\nIt's a rule based on [Chainalysis](https://docs.dfns.co/integrations/aml-kyt/chainalysis) KYT integration (Know-Your-Transaction). Upon transfer attempt, we will first register the transfer with Chainalysis (as a [\"withdrawal attempt\"](https://docs.chainalysis.com/api/kyt/#registration-register-a-withdrawal-attempt)), and fetch the screening results (alerts, exposures, addresses detected). Based on the results, and the configuration of this rule, the policy will be triggered.\n\nIt's called \"Pre\"-screening, because the scanned transaction is not on chain yet, it's still a transaction attempt (before the transaction actually make it on chain).\n\n```json\n{\n \"rule\": {\n \"kind\": \"ChainalysisTransactionPrescreening\",\n \"configuration\": {\n \"alerts\": {\n \"alertLevel\": \"LOW\",\n \"categoryIds\": []\n },\n \"exposures\": {\n \"direct\": {\n \"categoryIds\": []\n }\n },\n \"addresses\": {\n \"categoryIds\": []\n },\n \"fallbackBehaviours\": {\n \"skipUnscreenableTransaction\": false,\n \"skipUnsupportedNetwork\": false,\n \"skipUnsupportedAsset\": false,\n \"skipChainalysisFailure\": false\n }\n }\n }\n}\n```\n\n**Configuration**\n\n| Property | Type | Description |\n| --- | --- | --- |\n| `alerts`\u003cbr>\u003cbr>`.alertLevel`* | `string` | Minimum alert level above which the rule should trigger, if any [alert is returned in Chainalysis results](https://docs.chainalysis.com/api/kyt/#withdrawal-attempts-get-alerts). Can be `LOW`, `MEDIUM`, `HIGH`, or `SEVERE` |\n| `alerts`\u003cbr>\u003cbr>`.categoryIds`* | list of integers | List of Chainalysis category IDs (see [here](https://docs.chainalysis.com/api/kyt/#categories)). If you leave this list empty, alerts of any category will trigger the rule. Otherwise, if you only want the rule to trigger on specific categories, you can specify some in the list. |\n| `exposures`\u003cbr>\u003cbr>`.direct`\u003cbr>\u003cbr>`.categoryIds`* | list of integers | List of Chainalysis category IDs (see [here](https://docs.chainalysis.com/api/kyt/#categories)). If you leave this list empty, a [direct exposure](https://docs.chainalysis.com/api/kyt/#withdrawal-attempts-get-direct-exposure) of any category detected by chainalysis will trigger the rule. Otherwise, if you only want the rule to trigger on specific categories, you can specify some in the list. |\n| `addresses`\u003cbr>\u003cbr>`.categoryIds`* | list of integers | List of Chainalysis category IDs (see [here](https://docs.chainalysis.com/api/kyt/#categories)). If you leave this list empty, an [address](https://docs.chainalysis.com/api/kyt/#withdrawal-attempts-get-address-identifications) of any category identified by chainalysis will trigger the rule. Otherwise, if you only want the rule to trigger on specific categories, you can specify some in the list. |\n| `fallbackBehaviours`\u003cbr>\u003cbr>`.skipUnscreenableTransaction`* | boolean | Behaviour if the wallet activity is not screenable (eg. if it's a signature request of a hash). If true, a transaction which is \"unscreenable\" will just be skipped, and policy will not trigger |\n| `fallbackBehaviours.skipUnsupportedNetwork`* | boolean | Behaviour if the wallet activity is on a network not supported by chainalysis, or not yet supported in the dfns-chainalysis integration. If true, an unsupported network will just be skipped, and policy will not trigger |\n| `fallbackBehaviours.skipUnsupportedAsset`* | boolean | Behaviour if the wallet activity is with a asset not supported by chainalysis, or not yet supported in the dfns-chainalysis integration. If true, an unsupported asset will just be skipped, and policy will not trigger |\n| `fallbackBehaviours.skipChainalysisFailure`* | boolean | Behaviour if any issue with Chainalysis calls (timeout, results took too long, rate limiting errors, any error). If true, will skip if any error happens |\n\n","required":["kind","configuration"],"properties":{"kind":{"type":"string","enum":["ChainalysisTransactionPrescreening"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.4.pendingChangeRequest.body.oneOf.5.rule.oneOf.6.kind","typeLabel":"enum\u003cstring>"},"configuration":{"type":"object","properties":{"alerts":{"type":"object","properties":{"alertLevel":{"type":"string","enum":["LOW","MEDIUM","HIGH","SEVERE"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.4.pendingChangeRequest.body.oneOf.5.rule.oneOf.6.configuration.alerts.alertLevel","typeLabel":"enum\u003cstring>"},"categoryIds":{"type":"array","items":{"type":"integer","exclusiveMinimum":0,"uniqueKey":"\\items.items.[INDEX].oneOf.4.pendingChangeRequest.body.oneOf.5.rule.oneOf.6.configuration.alerts.categoryIds.items.[INDEX]","typeLabel":"integer"},"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.4.pendingChangeRequest.body.oneOf.5.rule.oneOf.6.configuration.alerts.categoryIds","typeLabel":"integer[]"}},"required":["alertLevel","categoryIds"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.4.pendingChangeRequest.body.oneOf.5.rule.oneOf.6.configuration.alerts","typeLabel":"object"},"exposures":{"type":"object","properties":{"direct":{"type":"object","properties":{"categoryIds":{"type":"array","items":{"type":"integer","exclusiveMinimum":0,"uniqueKey":"\\items.items.[INDEX].oneOf.4.pendingChangeRequest.body.oneOf.5.rule.oneOf.6.configuration.exposures.direct.categoryIds.items.[INDEX]","typeLabel":"integer"},"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.4.pendingChangeRequest.body.oneOf.5.rule.oneOf.6.configuration.exposures.direct.categoryIds","typeLabel":"integer[]"}},"required":["categoryIds"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.4.pendingChangeRequest.body.oneOf.5.rule.oneOf.6.configuration.exposures.direct","typeLabel":"object"}},"required":["direct"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.4.pendingChangeRequest.body.oneOf.5.rule.oneOf.6.configuration.exposures","typeLabel":"object"},"addresses":{"type":"object","properties":{"categoryIds":{"type":"array","items":{"type":"integer","exclusiveMinimum":0,"uniqueKey":"\\items.items.[INDEX].oneOf.4.pendingChangeRequest.body.oneOf.5.rule.oneOf.6.configuration.addresses.categoryIds.items.[INDEX]","typeLabel":"integer"},"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.4.pendingChangeRequest.body.oneOf.5.rule.oneOf.6.configuration.addresses.categoryIds","typeLabel":"integer[]"}},"required":["categoryIds"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.4.pendingChangeRequest.body.oneOf.5.rule.oneOf.6.configuration.addresses","typeLabel":"object"},"fallbackBehaviours":{"type":"object","properties":{"skipUnscreenableTransaction":{"type":"boolean","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.4.pendingChangeRequest.body.oneOf.5.rule.oneOf.6.configuration.fallbackBehaviours.skipUnscreenableTransaction","typeLabel":"boolean"},"skipUnsupportedNetwork":{"type":"boolean","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.4.pendingChangeRequest.body.oneOf.5.rule.oneOf.6.configuration.fallbackBehaviours.skipUnsupportedNetwork","typeLabel":"boolean"},"skipUnsupportedAsset":{"type":"boolean","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.4.pendingChangeRequest.body.oneOf.5.rule.oneOf.6.configuration.fallbackBehaviours.skipUnsupportedAsset","typeLabel":"boolean"},"skipChainalysisFailure":{"type":"boolean","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.4.pendingChangeRequest.body.oneOf.5.rule.oneOf.6.configuration.fallbackBehaviours.skipChainalysisFailure","typeLabel":"boolean"}},"required":["skipUnscreenableTransaction","skipUnsupportedNetwork","skipUnsupportedAsset","skipChainalysisFailure"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.4.pendingChangeRequest.body.oneOf.5.rule.oneOf.6.configuration.fallbackBehaviours","typeLabel":"object"},"userIdTemplate":{"type":"string","minLength":1,"maxLength":50,"pattern":"^([a-zA-Z0-9_:-]|{wallet\\.id}|{wallet\\.externalId})+$","default":"dfns","description":"**Deprecated** — set `userIdTemplate` on the Chainalysis integration setting instead; when set there, the integration-level template takes precedence over this one.\n\nValue sent to Chainalysis as the \"user ID\". Used by Chainalysis for grouping transaction screenings.\n \nThis template can include variables, included in brackets. The following variables are currently supported: `{wallet.id}` and `{wallet.externalId}`.\nAs an example, if you set `userIdTemplate: \"dfns:{wallet.id}_{wallet.externalId}\"`, when your wallet receives a transaction that gets screened by a Chainalysis policy, the \"user ID\" sent to Chainalysis will be `dfns:wa-xxx_yyy` (`wa-xxx` being the wallet ID, and `yyy` being the wallet external ID).","uniqueKey":"\\items.items.[INDEX].oneOf.4.pendingChangeRequest.body.oneOf.5.rule.oneOf.6.configuration.userIdTemplate","typeLabel":"string"}},"required":["alerts","exposures","addresses","fallbackBehaviours"],"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.4.pendingChangeRequest.body.oneOf.5.rule.oneOf.6.configuration","typeLabel":"object"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.4.pendingChangeRequest.body.oneOf.5.rule.oneOf.6","typeLabel":"ChainalysisTransactionPrescreening · object"},{"type":"object","title":"EllipticTransactionPrescreening","description":"\n\u003cInfo>\nThis rule can only be used once the Elliptic integration is activated from the Dfns dashboard settings.\n\u003c/Info>\n\nThis rule uses Elliptic KYT for pre-screening outgoing transfers. Upon transfer attempt, we run a synchronous Elliptic wallet analysis of the destination address, and check the returned risk score against the configured threshold, plus any configured risk rules / categories. If at or above the threshold, or if a configured rule / category matched, the policy is triggered.\n\nIt's called \"Pre\"-screening, because the scanned transaction is not on chain yet, it's still a transaction attempt.","required":["kind","configuration"],"properties":{"kind":{"type":"string","enum":["EllipticTransactionPrescreening"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.4.pendingChangeRequest.body.oneOf.5.rule.oneOf.7.kind","typeLabel":"enum\u003cstring>"},"configuration":{"type":"object","properties":{"riskScoreThreshold":{"type":"number","minimum":0,"maximum":10,"description":"Risk score threshold (0-10, decimals allowed). The policy triggers if the Elliptic risk score is at or above the threshold.","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.4.pendingChangeRequest.body.oneOf.5.rule.oneOf.7.configuration.riskScoreThreshold","typeLabel":"number"},"triggeredRules":{"type":"object","properties":{"ruleIds":{"type":"array","items":{"type":"string","format":"uuid","uniqueKey":"\\items.items.[INDEX].oneOf.4.pendingChangeRequest.body.oneOf.5.rule.oneOf.7.configuration.triggeredRules.ruleIds.items.[INDEX]","typeLabel":"string\u003cuuid>"},"description":"IDs of risk rules from your Elliptic risk model. If any of these rules matched the analysis, the policy triggers regardless of the risk score. Leave empty to trigger on the risk score threshold only.","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.4.pendingChangeRequest.body.oneOf.5.rule.oneOf.7.configuration.triggeredRules.ruleIds","typeLabel":"string\u003cuuid>[]"},"categories":{"type":"array","items":{"type":"string","minLength":1,"uniqueKey":"\\items.items.[INDEX].oneOf.4.pendingChangeRequest.body.oneOf.5.rule.oneOf.7.configuration.triggeredRules.categories.items.[INDEX]","typeLabel":"string"},"description":"Elliptic category names (eg. \"Dark Market\"), matched case-insensitively. If a matched risk rule involves any of these categories, the policy triggers regardless of the risk score. Leave empty to trigger on the risk score threshold only.","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.4.pendingChangeRequest.body.oneOf.5.rule.oneOf.7.configuration.triggeredRules.categories","typeLabel":"string[]"}},"required":["ruleIds","categories"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.4.pendingChangeRequest.body.oneOf.5.rule.oneOf.7.configuration.triggeredRules","typeLabel":"object"},"fallbackBehaviours":{"type":"object","properties":{"skipUnscreenableTransaction":{"type":"boolean","description":"skip all wallet requests that cannot be screened (eg. raw signatures)","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.4.pendingChangeRequest.body.oneOf.5.rule.oneOf.7.configuration.fallbackBehaviours.skipUnscreenableTransaction","typeLabel":"boolean"},"skipUnsupportedNetwork":{"type":"boolean","description":"skip requests on a network not supported yet in our Elliptic integration","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.4.pendingChangeRequest.body.oneOf.5.rule.oneOf.7.configuration.fallbackBehaviours.skipUnsupportedNetwork","typeLabel":"boolean"},"skipEllipticFailure":{"type":"boolean","description":"skip any failure of the Elliptic analysis (timeout, rate limiting, any error)","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.4.pendingChangeRequest.body.oneOf.5.rule.oneOf.7.configuration.fallbackBehaviours.skipEllipticFailure","typeLabel":"boolean"}},"required":["skipUnscreenableTransaction","skipUnsupportedNetwork","skipEllipticFailure"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.4.pendingChangeRequest.body.oneOf.5.rule.oneOf.7.configuration.fallbackBehaviours","typeLabel":"object"}},"required":["riskScoreThreshold","triggeredRules","fallbackBehaviours"],"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.4.pendingChangeRequest.body.oneOf.5.rule.oneOf.7.configuration","typeLabel":"object"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.4.pendingChangeRequest.body.oneOf.5.rule.oneOf.7","typeLabel":"EllipticTransactionPrescreening · object"},{"type":"object","title":"GlobalLedgerTransactionPrescreening","description":"This rule uses GlobalLedger KYT for pre-screening outgoing transfers by checking the destination address risk score.\n\nUpon transfer attempt, we will query GlobalLedger's address risk API, and check if the risk score (0-100) is at or above the configured threshold, or if any alerts show up. If so, the policy will be triggered.\n\nIt's called \"Pre\"-screening, because the scanned transaction is not on chain yet, it's still a transaction attempt.","required":["kind","configuration"],"properties":{"kind":{"type":"string","enum":["GlobalLedgerTransactionPrescreening"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.4.pendingChangeRequest.body.oneOf.5.rule.oneOf.8.kind","typeLabel":"enum\u003cstring>"},"configuration":{"type":"object","properties":{"riskScoreThreshold":{"type":"integer","minimum":0,"maximum":100,"description":"Risk score threshold (0-100). Policy triggers if address/transaction risk score >= threshold","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.4.pendingChangeRequest.body.oneOf.5.rule.oneOf.8.configuration.riskScoreThreshold","typeLabel":"integer"},"fallbackBehaviours":{"type":"object","properties":{"skipUnscreenableTransaction":{"type":"boolean","description":"skip all wallet requests that cannot be screened (eg. raw signatures)","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.4.pendingChangeRequest.body.oneOf.5.rule.oneOf.8.configuration.fallbackBehaviours.skipUnscreenableTransaction","typeLabel":"boolean"},"skipUnsupportedNetwork":{"type":"boolean","description":"skip transfer requests to a network not supported yet in our GlobalLedger integration","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.4.pendingChangeRequest.body.oneOf.5.rule.oneOf.8.configuration.fallbackBehaviours.skipUnsupportedNetwork","typeLabel":"boolean"},"skipUnsupportedAsset":{"type":"boolean","description":"skip transfer requests of an asset not supported by our GlobalLedger integration","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.4.pendingChangeRequest.body.oneOf.5.rule.oneOf.8.configuration.fallbackBehaviours.skipUnsupportedAsset","typeLabel":"boolean"},"skipGlobalLedgerFailure":{"type":"boolean","description":"skips any errors from GlobalLedger API request","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.4.pendingChangeRequest.body.oneOf.5.rule.oneOf.8.configuration.fallbackBehaviours.skipGlobalLedgerFailure","typeLabel":"boolean"}},"required":["skipUnscreenableTransaction","skipUnsupportedNetwork","skipUnsupportedAsset","skipGlobalLedgerFailure"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.4.pendingChangeRequest.body.oneOf.5.rule.oneOf.8.configuration.fallbackBehaviours","typeLabel":"object"}},"required":["riskScoreThreshold","fallbackBehaviours"],"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.4.pendingChangeRequest.body.oneOf.5.rule.oneOf.8.configuration","typeLabel":"object"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.4.pendingChangeRequest.body.oneOf.5.rule.oneOf.8","typeLabel":"GlobalLedgerTransactionPrescreening · object"},{"type":"object","title":"TravelRuleTransactionPrescreening","description":"This rule applies a Travel Rule check to outgoing transfers through the vendor selected in `configuration.vendor`: [Notabene](https://docs.dfns.co/integrations/travel-rule/notabene) or Sumsub. It can only be used once that vendor's integration is activated from the Dfns dashboard settings.\n\nIt ***ONLY*** applies to Dfns [Transfer Asset](https://docs.dfns.co/api-reference/wallets/transfer-asset) Api Calls. It is NOT supported for Transfers initiated via the dashboard. Upon transfer attempt with a [TravelRule](https://docs.dfns.co/api-reference/wallets/transfer-asset#body-travel-rule) payload, we call the vendor's APIs on your behalf to validate and submit the travel rule message, then wait for its outcome. With Notabene, Dfns waits for a response from the counterparty (for custodial transfers) or from Notabene (for non-custodial transfers). With Sumsub, Dfns submits a Travel Rule message and waits for Sumsub to report its outcome. In both cases the wait is bounded by `configuration.autoTriggerTimeoutSeconds`, after which the policy's configured action is applied.\n\nThe transfer's `travelRule` payload must be of the kind matching `configuration.vendor` — a mismatch triggers the policy and applies its configured action. A given wallet must be covered by at most one travel-rule policy (of any vendor): if several travel-rule policies apply to the same transfer carrying a `travelRule` payload, it is treated as a misconfiguration and blocked without contacting any vendor. Signatures and transfers without a payload are not affected, since the rule does not apply to them.\n\nIt's called \"Pre\"-screening, because the transaction is not on chain yet, it's still a transaction attempt (before the transaction actually make it on chain).","required":["kind","configuration"],"properties":{"kind":{"type":"string","enum":["TravelRuleTransactionPrescreening"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.4.pendingChangeRequest.body.oneOf.5.rule.oneOf.9.kind","typeLabel":"enum\u003cstring>"},"configuration":{"oneOf":[{"type":"object","title":"TravelRuleNotabeneConfiguration","required":["vendor"],"properties":{"vendor":{"type":"string","enum":["Notabene"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.4.pendingChangeRequest.body.oneOf.5.rule.oneOf.9.configuration.oneOf.0.vendor","typeLabel":"enum\u003cstring>"},"autoTriggerTimeoutSeconds":{"type":"integer","minimum":0,"maximum":2592000,"default":86400,"description":"Seconds to wait for the vendor's verdict before the policy action applies. Maximum 2592000 (30 days). Defaults to 86400 (24 hours).","uniqueKey":"\\items.items.[INDEX].oneOf.4.pendingChangeRequest.body.oneOf.5.rule.oneOf.9.configuration.oneOf.0.autoTriggerTimeoutSeconds","typeLabel":"integer"},"autoClearAfterDeliveredTimeoutSeconds":{"type":"integer","minimum":0,"maximum":2592000,"description":"Seconds after delivery before a still-pending evaluation clears. Maximum 2592000 (30 days).","uniqueKey":"\\items.items.[INDEX].oneOf.4.pendingChangeRequest.body.oneOf.5.rule.oneOf.9.configuration.oneOf.0.autoClearAfterDeliveredTimeoutSeconds","typeLabel":"integer"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.4.pendingChangeRequest.body.oneOf.5.rule.oneOf.9.configuration.oneOf.0","typeLabel":"TravelRuleNotabeneConfiguration · object"},{"type":"object","title":"TravelRuleSumsubConfiguration","required":["vendor"],"properties":{"vendor":{"type":"string","enum":["Sumsub"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.4.pendingChangeRequest.body.oneOf.5.rule.oneOf.9.configuration.oneOf.1.vendor","typeLabel":"enum\u003cstring>"},"autoTriggerTimeoutSeconds":{"type":"integer","minimum":0,"maximum":2592000,"default":86400,"description":"Seconds to wait for the vendor's verdict before the policy action applies. Maximum 2592000 (30 days). Defaults to 86400 (24 hours).","uniqueKey":"\\items.items.[INDEX].oneOf.4.pendingChangeRequest.body.oneOf.5.rule.oneOf.9.configuration.oneOf.1.autoTriggerTimeoutSeconds","typeLabel":"integer"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.4.pendingChangeRequest.body.oneOf.5.rule.oneOf.9.configuration.oneOf.1","typeLabel":"TravelRuleSumsubConfiguration · object"}],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.4.pendingChangeRequest.body.oneOf.5.rule.oneOf.9.configuration","typeLabel":"TravelRuleNotabeneConfiguration · object | TravelRuleSumsubConfiguration · object"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.4.pendingChangeRequest.body.oneOf.5.rule.oneOf.9","typeLabel":"TravelRuleTransactionPrescreening · object"}],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.4.pendingChangeRequest.body.oneOf.5.rule","typeLabel":"AlwaysTrigger · object | TransactionRecipientWhitelist · object | TransactionAmountLimit · object | TransactionAmountLimitNominal · object | TransactionAmountVelocity · object | TransactionCountVelocity · object | ChainalysisTransactionPrescreening · object | EllipticTransactionPrescreening · object | GlobalLedgerTransactionPrescreening · object | TravelRuleTransactionPrescreening · object"},"action":{"oneOf":[{"type":"object","title":"RequestApproval","description":"\nThis action means that activity will first require an Approval process to be completed before it can be executed (or be aborted if someone rejects it during the approval process).\n\nOne or several groups of approvers need to be specified. These groups define who is allowed to approve / reject an activity.\n\nThe activity will only be executed if all approver groups reach their \"quorum\" of approvals. Otherwise, if any one user within any approver group rejects, then the activity is aborted and the call is not executed.\n\nThe example below shows a `RequestApproval` action, configured with one approval group requiring 2 approvals amongst three specific users.\n\n```json\n{\n \"action\": {\n \"kind\": \"RequestApproval\",\n \"autoRejectTimeout\": 60, // minutes\n \"approvalGroups\": [\n {\n \"name\": \"Admins\",\n \"quorum\": 2, // only 2 approvers required in that group \n \"approvers\": {\n \"userId\": {\n \"in\": [\"us-...1\", \"us-...2\", \"us-...3\"],\n }\n }\n }\n ],\n\n }\n}\n```\n\n**Don't lock yourself up**\n\nBy default, users cannot approve an activity they initiated themselves, even if they are in an approval group. To allow this, you must set `initiatorCanApprove: true`.\n\n*Example 1:* For any wallet transfer, a policy is setup to require approval from **1 specific admin user** (eg. the CEO). `initiatorCanApprove` was not set to `true`. If the CEO himself initiates a transfer, no-one can approve his transfer and it's stuck.\n\n*Example 2:* Company has only 3 users. A policy is setup to require approval from **any 3 users** (`quorum: 3`) for any modification of a policy. `initiatorCanApprove` was not set to `true`. In this case, they are locked, and the policy cannot be modified: whoever requests a modification cannot approve, and the policy is therefore always missing one approver. To unlock, they would need to invite a new user and give him the rights to approve as well.\n ","required":["kind","approvalGroups"],"properties":{"kind":{"type":"string","enum":["RequestApproval"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.4.pendingChangeRequest.body.oneOf.5.action.oneOf.0.kind","typeLabel":"enum\u003cstring>"},"approvalGroups":{"type":"array","items":{"type":"object","properties":{"quorum":{"type":"integer","minimum":1,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.4.pendingChangeRequest.body.oneOf.5.action.oneOf.0.approvalGroups.items.[INDEX].quorum","typeLabel":"integer"},"approvers":{"type":"object","properties":{"userId":{"type":"object","properties":{"in":{"type":"array","items":{"type":"string","minLength":1,"uniqueKey":"\\items.items.[INDEX].oneOf.4.pendingChangeRequest.body.oneOf.5.action.oneOf.0.approvalGroups.items.[INDEX].approvers.userId.in.items.[INDEX]","typeLabel":"string"},"minItems":1,"maxItems":100,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.4.pendingChangeRequest.body.oneOf.5.action.oneOf.0.approvalGroups.items.[INDEX].approvers.userId.in","typeLabel":"string[]"}},"required":["in"],"additionalProperties":false,"description":"Users and service accounts who may approve.","uniqueKey":"\\items.items.[INDEX].oneOf.4.pendingChangeRequest.body.oneOf.5.action.oneOf.0.approvalGroups.items.[INDEX].approvers.userId","typeLabel":"object"},"userGroupId":{"type":"object","properties":{"in":{"type":"array","items":{"type":"string","minLength":1,"maxLength":64,"pattern":"^ug-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"User group id.","example":"ug-139tf-f58l8-lsbt6dp47lfsdvgh","uniqueKey":"\\items.items.[INDEX].oneOf.4.pendingChangeRequest.body.oneOf.5.action.oneOf.0.approvalGroups.items.[INDEX].approvers.userGroupId.in.items.[INDEX]","typeLabel":"string"},"minItems":1,"maxItems":100,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.4.pendingChangeRequest.body.oneOf.5.action.oneOf.0.approvalGroups.items.[INDEX].approvers.userGroupId.in","typeLabel":"string[]"}},"required":["in"],"additionalProperties":false,"description":"User groups whose members may approve.","uniqueKey":"\\items.items.[INDEX].oneOf.4.pendingChangeRequest.body.oneOf.5.action.oneOf.0.approvalGroups.items.[INDEX].approvers.userGroupId","typeLabel":"object"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.4.pendingChangeRequest.body.oneOf.5.action.oneOf.0.approvalGroups.items.[INDEX].approvers","typeLabel":"object"},"name":{"type":"string","uniqueKey":"\\items.items.[INDEX].oneOf.4.pendingChangeRequest.body.oneOf.5.action.oneOf.0.approvalGroups.items.[INDEX].name","typeLabel":"string"},"initiatorCanApprove":{"type":"boolean","description":"Whether the initiator of the activity can participate in the approval.","uniqueKey":"\\items.items.[INDEX].oneOf.4.pendingChangeRequest.body.oneOf.5.action.oneOf.0.approvalGroups.items.[INDEX].initiatorCanApprove","typeLabel":"boolean"},"serviceAccountsCanApprove":{"type":"boolean","description":"Whether service accounts can participate in the approval for this group.","uniqueKey":"\\items.items.[INDEX].oneOf.4.pendingChangeRequest.body.oneOf.5.action.oneOf.0.approvalGroups.items.[INDEX].serviceAccountsCanApprove","typeLabel":"boolean"}},"required":["quorum","approvers"],"additionalProperties":false,"uniqueKey":"\\items.items.[INDEX].oneOf.4.pendingChangeRequest.body.oneOf.5.action.oneOf.0.approvalGroups.items.[INDEX]","typeLabel":"object"},"minItems":1,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.4.pendingChangeRequest.body.oneOf.5.action.oneOf.0.approvalGroups","typeLabel":"object[]"},"autoRejectTimeout":{"oneOf":[{"type":"integer","minimum":1,"uniqueKey":"\\items.items.[INDEX].oneOf.4.pendingChangeRequest.body.oneOf.5.action.oneOf.0.autoRejectTimeout.oneOf.0","typeLabel":"integer"},{"type":"null","minimum":1,"uniqueKey":"\\items.items.[INDEX].oneOf.4.pendingChangeRequest.body.oneOf.5.action.oneOf.0.autoRejectTimeout.oneOf.1","typeLabel":"null"}],"uniqueKey":"\\items.items.[INDEX].oneOf.4.pendingChangeRequest.body.oneOf.5.action.oneOf.0.autoRejectTimeout","typeLabel":"integer | null"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.4.pendingChangeRequest.body.oneOf.5.action.oneOf.0","typeLabel":"RequestApproval · object"},{"type":"object","title":"Block","description":"This action means that the activity will be blocked if the policy is triggered.\n\n```json\n{\n \"action\": {\n \"kind\": \"Block\"\n }\n}\n```\n","required":["kind"],"properties":{"kind":{"type":"string","enum":["Block"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.4.pendingChangeRequest.body.oneOf.5.action.oneOf.1.kind","typeLabel":"enum\u003cstring>"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.4.pendingChangeRequest.body.oneOf.5.action.oneOf.1","typeLabel":"Block · object"},{"type":"object","title":"NoAction","description":"\n This action kind means that nothing will happen after policy rule evaluation. It's meant to be used with policy rules \"`ChainalysisTransactionPrescreening`\" or \"`ChainalysisTransactionScreening`\". This action is for when you just want the KYT analysis rule to be run, and then if triggered, those result returned in a `policy.triggered` [Webhook Event](https://docs.dfns.co/api-reference/webhook-events).\n\n```json\n{\n \"action\": {\n \"kind\": \"NoAction\"\n }\n}\n```\n ","required":["kind"],"properties":{"kind":{"type":"string","enum":["NoAction"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.4.pendingChangeRequest.body.oneOf.5.action.oneOf.2.kind","typeLabel":"enum\u003cstring>"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.4.pendingChangeRequest.body.oneOf.5.action.oneOf.2","typeLabel":"NoAction · object"}],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.4.pendingChangeRequest.body.oneOf.5.action","typeLabel":"RequestApproval · object | Block · object | NoAction · object"},"dateCreated":{"type":"string","uniqueKey":"\\items.items.[INDEX].oneOf.4.pendingChangeRequest.body.oneOf.5.dateCreated","typeLabel":"string"},"dateUpdated":{"type":"string","uniqueKey":"\\items.items.[INDEX].oneOf.4.pendingChangeRequest.body.oneOf.5.dateUpdated","typeLabel":"string"},"filters":{"type":"object","properties":{"walletId":{"type":"object","properties":{"in":{"type":"array","items":{"type":"string","minLength":1,"uniqueKey":"\\items.items.[INDEX].oneOf.4.pendingChangeRequest.body.oneOf.5.filters.walletId.in.items.[INDEX]","typeLabel":"string"},"minItems":1,"maxItems":100,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.4.pendingChangeRequest.body.oneOf.5.filters.walletId.in","typeLabel":"string[]"}},"required":["in"],"additionalProperties":false,"uniqueKey":"\\items.items.[INDEX].oneOf.4.pendingChangeRequest.body.oneOf.5.filters.walletId","typeLabel":"object"},"walletTags":{"type":"object","properties":{"hasAny":{"type":"array","items":{"type":"string","minLength":1,"uniqueKey":"\\items.items.[INDEX].oneOf.4.pendingChangeRequest.body.oneOf.5.filters.walletTags.hasAny.items.[INDEX]","typeLabel":"string"},"minItems":1,"maxItems":100,"uniqueKey":"\\items.items.[INDEX].oneOf.4.pendingChangeRequest.body.oneOf.5.filters.walletTags.hasAny","typeLabel":"string[]"},"hasAll":{"type":"array","items":{"type":"string","minLength":1,"uniqueKey":"\\items.items.[INDEX].oneOf.4.pendingChangeRequest.body.oneOf.5.filters.walletTags.hasAll.items.[INDEX]","typeLabel":"string"},"minItems":1,"maxItems":100,"uniqueKey":"\\items.items.[INDEX].oneOf.4.pendingChangeRequest.body.oneOf.5.filters.walletTags.hasAll","typeLabel":"string[]"}},"additionalProperties":false,"uniqueKey":"\\items.items.[INDEX].oneOf.4.pendingChangeRequest.body.oneOf.5.filters.walletTags","typeLabel":"object"},"keyId":{"type":"object","properties":{"in":{"type":"array","items":{"type":"string","minLength":1,"maxLength":64,"pattern":"^key-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"Key id.","example":"key-01snl-t56gb-j8tsok0vn802p80i","uniqueKey":"\\items.items.[INDEX].oneOf.4.pendingChangeRequest.body.oneOf.5.filters.keyId.in.items.[INDEX]","typeLabel":"string"},"minItems":1,"maxItems":100,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.4.pendingChangeRequest.body.oneOf.5.filters.keyId.in","typeLabel":"string[]"}},"required":["in"],"additionalProperties":false,"uniqueKey":"\\items.items.[INDEX].oneOf.4.pendingChangeRequest.body.oneOf.5.filters.keyId","typeLabel":"object"},"keyStoreId":{"type":"object","properties":{"in":{"type":"array","items":{"type":"string","minLength":1,"maxLength":64,"pattern":"^store-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"Key store id.","example":"store-425nf-ebf0a-qq22t6qra51tj8j0","uniqueKey":"\\items.items.[INDEX].oneOf.4.pendingChangeRequest.body.oneOf.5.filters.keyStoreId.in.items.[INDEX]","typeLabel":"string"},"minItems":1,"maxItems":100,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.4.pendingChangeRequest.body.oneOf.5.filters.keyStoreId.in","typeLabel":"string[]"}},"required":["in"],"additionalProperties":false,"uniqueKey":"\\items.items.[INDEX].oneOf.4.pendingChangeRequest.body.oneOf.5.filters.keyStoreId","typeLabel":"object"}},"additionalProperties":false,"uniqueKey":"\\items.items.[INDEX].oneOf.4.pendingChangeRequest.body.oneOf.5.filters","typeLabel":"object"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.4.pendingChangeRequest.body.oneOf.5","typeLabel":"Wallets:Sign · object"},{"type":"object","title":"Wallets:IncomingTransaction","required":["id","name","status","activityKind","rule","action"],"properties":{"id":{"type":"string","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.4.pendingChangeRequest.body.oneOf.6.id","typeLabel":"string"},"name":{"type":"string","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.4.pendingChangeRequest.body.oneOf.6.name","typeLabel":"string"},"status":{"type":"string","enum":["Active","Archived"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.4.pendingChangeRequest.body.oneOf.6.status","typeLabel":"enum\u003cstring>"},"activityKind":{"type":"string","enum":["Wallets:IncomingTransaction"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.4.pendingChangeRequest.body.oneOf.6.activityKind","typeLabel":"enum\u003cstring>"},"rule":{"type":"object","title":"ChainalysisTransactionScreening","description":"\n\u003cInfo>\nThis rule can only be used once the Chainalysis integration is activated from the Dfns dashboard settings. (see more on [Chainalysis](https://docs.dfns.co/integrations/aml-kyt/chainalysis) integration page).\n\u003c/Info>\n\nThis rule can be used on a policy of `activityKind` = `Wallets:IncomingTransaction`, and with the action kind `NoAction`. It's a rule based on Chainalysis KYT integration (Know-Your-Transaction). Upon an incoming transaction detectedby our indexers, we will [register the transfer with Chainalysis](https://docs.chainalysis.com/api/kyt/#registration-register-a-transfer), and fetch the results of the analysis (alerts \u0026 exposures detected). Based on the results, and the configuration of this rule, the policy will be triggered.\n\nThe shape of the rule is almost like the `ChainalysisTransactionPrescreening` rule, expect the the `address` property is not supported.\n\n```json\n{\n \"rule\": {\n \"kind\": \"ChainalysisTransactionPrescreening\",\n \"configuration\": {\n \"alerts\": {\n \"alertLevel\": \"LOW\",\n \"categoryIds\": []\n },\n \"exposures\": {\n \"direct\": {\n \"categoryIds\": []\n }\n },\n \"fallbackBehaviours\": {\n \"skipUnscreenableTransaction\": false,\n \"skipUnsupportedNetwork\": false,\n \"skipUnsupportedAsset\": false,\n \"skipChainalysisFailure\": false\n }\n }\n }\n}\n```\n\n**Configuration**\n\nPlease refer to the configuration for the `ChainalysisTransactionPrescreening` rule.\n","required":["kind","configuration"],"properties":{"kind":{"type":"string","enum":["ChainalysisTransactionScreening"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.4.pendingChangeRequest.body.oneOf.6.rule.kind","typeLabel":"enum\u003cstring>"},"configuration":{"type":"object","properties":{"alerts":{"type":"object","properties":{"alertLevel":{"type":"string","enum":["LOW","MEDIUM","HIGH","SEVERE"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.4.pendingChangeRequest.body.oneOf.6.rule.configuration.alerts.alertLevel","typeLabel":"enum\u003cstring>"},"categoryIds":{"type":"array","items":{"type":"integer","exclusiveMinimum":0,"uniqueKey":"\\items.items.[INDEX].oneOf.4.pendingChangeRequest.body.oneOf.6.rule.configuration.alerts.categoryIds.items.[INDEX]","typeLabel":"integer"},"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.4.pendingChangeRequest.body.oneOf.6.rule.configuration.alerts.categoryIds","typeLabel":"integer[]"}},"required":["alertLevel","categoryIds"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.4.pendingChangeRequest.body.oneOf.6.rule.configuration.alerts","typeLabel":"object"},"exposures":{"type":"object","properties":{"direct":{"type":"object","properties":{"categoryIds":{"type":"array","items":{"type":"integer","exclusiveMinimum":0,"uniqueKey":"\\items.items.[INDEX].oneOf.4.pendingChangeRequest.body.oneOf.6.rule.configuration.exposures.direct.categoryIds.items.[INDEX]","typeLabel":"integer"},"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.4.pendingChangeRequest.body.oneOf.6.rule.configuration.exposures.direct.categoryIds","typeLabel":"integer[]"}},"required":["categoryIds"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.4.pendingChangeRequest.body.oneOf.6.rule.configuration.exposures.direct","typeLabel":"object"}},"required":["direct"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.4.pendingChangeRequest.body.oneOf.6.rule.configuration.exposures","typeLabel":"object"},"fallbackBehaviours":{"type":"object","properties":{"skipUnscreenableTransaction":{"type":"boolean","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.4.pendingChangeRequest.body.oneOf.6.rule.configuration.fallbackBehaviours.skipUnscreenableTransaction","typeLabel":"boolean"},"skipUnsupportedNetwork":{"type":"boolean","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.4.pendingChangeRequest.body.oneOf.6.rule.configuration.fallbackBehaviours.skipUnsupportedNetwork","typeLabel":"boolean"},"skipUnsupportedAsset":{"type":"boolean","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.4.pendingChangeRequest.body.oneOf.6.rule.configuration.fallbackBehaviours.skipUnsupportedAsset","typeLabel":"boolean"},"skipChainalysisFailure":{"type":"boolean","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.4.pendingChangeRequest.body.oneOf.6.rule.configuration.fallbackBehaviours.skipChainalysisFailure","typeLabel":"boolean"}},"required":["skipUnscreenableTransaction","skipUnsupportedNetwork","skipUnsupportedAsset","skipChainalysisFailure"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.4.pendingChangeRequest.body.oneOf.6.rule.configuration.fallbackBehaviours","typeLabel":"object"},"userIdTemplate":{"type":"string","minLength":1,"maxLength":50,"pattern":"^([a-zA-Z0-9_:-]|{wallet\\.id}|{wallet\\.externalId})+$","default":"dfns","description":"**Deprecated** — set `userIdTemplate` on the Chainalysis integration setting instead; when set there, the integration-level template takes precedence over this one.\n\nValue sent to Chainalysis as the \"user ID\". Used by Chainalysis for grouping transaction screenings.\n \nThis template can include variables, included in brackets. The following variables are currently supported: `{wallet.id}` and `{wallet.externalId}`.\nAs an example, if you set `userIdTemplate: \"dfns:{wallet.id}_{wallet.externalId}\"`, when your wallet receives a transaction that gets screened by a Chainalysis policy, the \"user ID\" sent to Chainalysis will be `dfns:wa-xxx_yyy` (`wa-xxx` being the wallet ID, and `yyy` being the wallet external ID).","uniqueKey":"\\items.items.[INDEX].oneOf.4.pendingChangeRequest.body.oneOf.6.rule.configuration.userIdTemplate","typeLabel":"string"}},"required":["alerts","exposures","fallbackBehaviours"],"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.4.pendingChangeRequest.body.oneOf.6.rule.configuration","typeLabel":"object"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.4.pendingChangeRequest.body.oneOf.6.rule","typeLabel":"ChainalysisTransactionScreening · object"},"action":{"type":"object","title":"NoAction","description":"\n This action kind means that nothing will happen after policy rule evaluation. It's meant to be used with policy rules \"`ChainalysisTransactionPrescreening`\" or \"`ChainalysisTransactionScreening`\". This action is for when you just want the KYT analysis rule to be run, and then if triggered, those result returned in a `policy.triggered` [Webhook Event](https://docs.dfns.co/api-reference/webhook-events).\n\n```json\n{\n \"action\": {\n \"kind\": \"NoAction\"\n }\n}\n```\n ","required":["kind"],"properties":{"kind":{"type":"string","enum":["NoAction"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.4.pendingChangeRequest.body.oneOf.6.action.kind","typeLabel":"enum\u003cstring>"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.4.pendingChangeRequest.body.oneOf.6.action","typeLabel":"NoAction · object"},"dateCreated":{"type":"string","uniqueKey":"\\items.items.[INDEX].oneOf.4.pendingChangeRequest.body.oneOf.6.dateCreated","typeLabel":"string"},"dateUpdated":{"type":"string","uniqueKey":"\\items.items.[INDEX].oneOf.4.pendingChangeRequest.body.oneOf.6.dateUpdated","typeLabel":"string"},"filters":{"type":"object","properties":{"walletId":{"type":"object","properties":{"in":{"type":"array","items":{"type":"string","minLength":1,"uniqueKey":"\\items.items.[INDEX].oneOf.4.pendingChangeRequest.body.oneOf.6.filters.walletId.in.items.[INDEX]","typeLabel":"string"},"minItems":1,"maxItems":100,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.4.pendingChangeRequest.body.oneOf.6.filters.walletId.in","typeLabel":"string[]"}},"required":["in"],"additionalProperties":false,"uniqueKey":"\\items.items.[INDEX].oneOf.4.pendingChangeRequest.body.oneOf.6.filters.walletId","typeLabel":"object"},"walletTags":{"type":"object","properties":{"hasAny":{"type":"array","items":{"type":"string","minLength":1,"uniqueKey":"\\items.items.[INDEX].oneOf.4.pendingChangeRequest.body.oneOf.6.filters.walletTags.hasAny.items.[INDEX]","typeLabel":"string"},"minItems":1,"maxItems":100,"uniqueKey":"\\items.items.[INDEX].oneOf.4.pendingChangeRequest.body.oneOf.6.filters.walletTags.hasAny","typeLabel":"string[]"},"hasAll":{"type":"array","items":{"type":"string","minLength":1,"uniqueKey":"\\items.items.[INDEX].oneOf.4.pendingChangeRequest.body.oneOf.6.filters.walletTags.hasAll.items.[INDEX]","typeLabel":"string"},"minItems":1,"maxItems":100,"uniqueKey":"\\items.items.[INDEX].oneOf.4.pendingChangeRequest.body.oneOf.6.filters.walletTags.hasAll","typeLabel":"string[]"}},"additionalProperties":false,"uniqueKey":"\\items.items.[INDEX].oneOf.4.pendingChangeRequest.body.oneOf.6.filters.walletTags","typeLabel":"object"},"keyId":{"type":"object","properties":{"in":{"type":"array","items":{"type":"string","minLength":1,"maxLength":64,"pattern":"^key-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"Key id.","example":"key-01snl-t56gb-j8tsok0vn802p80i","uniqueKey":"\\items.items.[INDEX].oneOf.4.pendingChangeRequest.body.oneOf.6.filters.keyId.in.items.[INDEX]","typeLabel":"string"},"minItems":1,"maxItems":100,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.4.pendingChangeRequest.body.oneOf.6.filters.keyId.in","typeLabel":"string[]"}},"required":["in"],"additionalProperties":false,"uniqueKey":"\\items.items.[INDEX].oneOf.4.pendingChangeRequest.body.oneOf.6.filters.keyId","typeLabel":"object"},"keyStoreId":{"type":"object","properties":{"in":{"type":"array","items":{"type":"string","minLength":1,"maxLength":64,"pattern":"^store-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"Key store id.","example":"store-425nf-ebf0a-qq22t6qra51tj8j0","uniqueKey":"\\items.items.[INDEX].oneOf.4.pendingChangeRequest.body.oneOf.6.filters.keyStoreId.in.items.[INDEX]","typeLabel":"string"},"minItems":1,"maxItems":100,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.4.pendingChangeRequest.body.oneOf.6.filters.keyStoreId.in","typeLabel":"string[]"}},"required":["in"],"additionalProperties":false,"uniqueKey":"\\items.items.[INDEX].oneOf.4.pendingChangeRequest.body.oneOf.6.filters.keyStoreId","typeLabel":"object"}},"additionalProperties":false,"uniqueKey":"\\items.items.[INDEX].oneOf.4.pendingChangeRequest.body.oneOf.6.filters","typeLabel":"object"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.4.pendingChangeRequest.body.oneOf.6","typeLabel":"Wallets:IncomingTransaction · object"},{"type":"object","title":"Vaults:ReleaseQuarantine","required":["id","name","status","activityKind","rule","action"],"properties":{"id":{"type":"string","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.4.pendingChangeRequest.body.oneOf.7.id","typeLabel":"string"},"name":{"type":"string","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.4.pendingChangeRequest.body.oneOf.7.name","typeLabel":"string"},"status":{"type":"string","enum":["Active","Archived"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.4.pendingChangeRequest.body.oneOf.7.status","typeLabel":"enum\u003cstring>"},"activityKind":{"type":"string","enum":["Vaults:ReleaseQuarantine"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.4.pendingChangeRequest.body.oneOf.7.activityKind","typeLabel":"enum\u003cstring>"},"rule":{"oneOf":[{"type":"object","title":"AlwaysTrigger","description":"This rule will always be triggered, meaning that if this rule is defined on a policy, the policy will always trigger the policy action, regardless of the activity details.","required":["kind"],"properties":{"kind":{"type":"string","enum":["AlwaysTrigger"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.4.pendingChangeRequest.body.oneOf.7.rule.oneOf.0.kind","typeLabel":"enum\u003cstring>"},"configuration":{"type":"object","properties":{},"additionalProperties":false,"uniqueKey":"\\items.items.[INDEX].oneOf.4.pendingChangeRequest.body.oneOf.7.rule.oneOf.0.configuration","typeLabel":"object"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.4.pendingChangeRequest.body.oneOf.7.rule.oneOf.0","typeLabel":"AlwaysTrigger · object"},{"type":"object","title":"ChainalysisQuarantineScreening","description":"\n\u003cInfo>\nThis rule can only be used once the Chainalysis integration is activated from the Dfns dashboard settings. (see more on [Chainalysis](https://docs.dfns.co/integrations/aml-kyt/chainalysis) integration page).\n\u003c/Info>\n\nThis rule can be used on a policy of `activityKind` = `Vaults:ReleaseQuarantine`. When a quarantined vault deposit was screened by Chainalysis KYT, the screening result (alerts \u0026 direct exposure) is stored with the quarantine. When a release of the quarantined funds is requested, this rule evaluates that **stored** result — no new Chainalysis call is made. Based on the stored result and the configuration of this rule, the policy will be triggered.\n\nIf the quarantine has **no stored KYT result** (the result was not received yet, the network/asset is not supported by the Chainalysis integration, or screening failed), the rule **always triggers** (fail closed): the release then follows the policy action (approval or block).\n\n```json\n{\n \"rule\": {\n \"kind\": \"ChainalysisQuarantineScreening\",\n \"configuration\": {\n \"alerts\": {\n \"alertLevel\": \"LOW\",\n \"categoryIds\": []\n },\n \"exposures\": {\n \"direct\": {\n \"categoryIds\": []\n }\n }\n }\n }\n}\n```\n\n**Configuration**\n\n| Property | Type | Description |\n| --- | --- | --- |\n| `alerts`\u003cbr>\u003cbr>`.alertLevel`* | `string` | Minimum alert level above which the rule should trigger, if any alert was returned in the stored Chainalysis results. Can be `LOW`, `MEDIUM`, `HIGH`, or `SEVERE` |\n| `alerts`\u003cbr>\u003cbr>`.categoryIds`* | list of integers | List of Chainalysis category IDs (see [here](https://docs.chainalysis.com/api/kyt/#categories)). If you leave this list empty, alerts of any category will trigger the rule. Otherwise, if you only want the rule to trigger on specific categories, you can specify some in the list. |\n| `exposures`\u003cbr>\u003cbr>`.direct`\u003cbr>\u003cbr>`.categoryIds`* | list of integers | List of Chainalysis category IDs (see [here](https://docs.chainalysis.com/api/kyt/#categories)). If you leave this list empty, a direct exposure of any category in the stored results will trigger the rule. Otherwise, if you only want the rule to trigger on specific categories, you can specify some in the list. |\n","required":["kind","configuration"],"properties":{"kind":{"type":"string","enum":["ChainalysisQuarantineScreening"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.4.pendingChangeRequest.body.oneOf.7.rule.oneOf.1.kind","typeLabel":"enum\u003cstring>"},"configuration":{"type":"object","properties":{"alerts":{"type":"object","properties":{"alertLevel":{"type":"string","enum":["LOW","MEDIUM","HIGH","SEVERE"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.4.pendingChangeRequest.body.oneOf.7.rule.oneOf.1.configuration.alerts.alertLevel","typeLabel":"enum\u003cstring>"},"categoryIds":{"type":"array","items":{"type":"integer","exclusiveMinimum":0,"uniqueKey":"\\items.items.[INDEX].oneOf.4.pendingChangeRequest.body.oneOf.7.rule.oneOf.1.configuration.alerts.categoryIds.items.[INDEX]","typeLabel":"integer"},"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.4.pendingChangeRequest.body.oneOf.7.rule.oneOf.1.configuration.alerts.categoryIds","typeLabel":"integer[]"}},"required":["alertLevel","categoryIds"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.4.pendingChangeRequest.body.oneOf.7.rule.oneOf.1.configuration.alerts","typeLabel":"object"},"exposures":{"type":"object","properties":{"direct":{"type":"object","properties":{"categoryIds":{"type":"array","items":{"type":"integer","exclusiveMinimum":0,"uniqueKey":"\\items.items.[INDEX].oneOf.4.pendingChangeRequest.body.oneOf.7.rule.oneOf.1.configuration.exposures.direct.categoryIds.items.[INDEX]","typeLabel":"integer"},"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.4.pendingChangeRequest.body.oneOf.7.rule.oneOf.1.configuration.exposures.direct.categoryIds","typeLabel":"integer[]"}},"required":["categoryIds"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.4.pendingChangeRequest.body.oneOf.7.rule.oneOf.1.configuration.exposures.direct","typeLabel":"object"}},"required":["direct"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.4.pendingChangeRequest.body.oneOf.7.rule.oneOf.1.configuration.exposures","typeLabel":"object"}},"required":["alerts","exposures"],"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.4.pendingChangeRequest.body.oneOf.7.rule.oneOf.1.configuration","typeLabel":"object"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.4.pendingChangeRequest.body.oneOf.7.rule.oneOf.1","typeLabel":"ChainalysisQuarantineScreening · object"}],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.4.pendingChangeRequest.body.oneOf.7.rule","typeLabel":"AlwaysTrigger · object | ChainalysisQuarantineScreening · object"},"action":{"oneOf":[{"type":"object","title":"RequestApproval","description":"\nThis action means that activity will first require an Approval process to be completed before it can be executed (or be aborted if someone rejects it during the approval process).\n\nOne or several groups of approvers need to be specified. These groups define who is allowed to approve / reject an activity.\n\nThe activity will only be executed if all approver groups reach their \"quorum\" of approvals. Otherwise, if any one user within any approver group rejects, then the activity is aborted and the call is not executed.\n\nThe example below shows a `RequestApproval` action, configured with one approval group requiring 2 approvals amongst three specific users.\n\n```json\n{\n \"action\": {\n \"kind\": \"RequestApproval\",\n \"autoRejectTimeout\": 60, // minutes\n \"approvalGroups\": [\n {\n \"name\": \"Admins\",\n \"quorum\": 2, // only 2 approvers required in that group \n \"approvers\": {\n \"userId\": {\n \"in\": [\"us-...1\", \"us-...2\", \"us-...3\"],\n }\n }\n }\n ],\n\n }\n}\n```\n\n**Don't lock yourself up**\n\nBy default, users cannot approve an activity they initiated themselves, even if they are in an approval group. To allow this, you must set `initiatorCanApprove: true`.\n\n*Example 1:* For any wallet transfer, a policy is setup to require approval from **1 specific admin user** (eg. the CEO). `initiatorCanApprove` was not set to `true`. If the CEO himself initiates a transfer, no-one can approve his transfer and it's stuck.\n\n*Example 2:* Company has only 3 users. A policy is setup to require approval from **any 3 users** (`quorum: 3`) for any modification of a policy. `initiatorCanApprove` was not set to `true`. In this case, they are locked, and the policy cannot be modified: whoever requests a modification cannot approve, and the policy is therefore always missing one approver. To unlock, they would need to invite a new user and give him the rights to approve as well.\n ","required":["kind","approvalGroups"],"properties":{"kind":{"type":"string","enum":["RequestApproval"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.4.pendingChangeRequest.body.oneOf.7.action.oneOf.0.kind","typeLabel":"enum\u003cstring>"},"approvalGroups":{"type":"array","items":{"type":"object","properties":{"quorum":{"type":"integer","minimum":1,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.4.pendingChangeRequest.body.oneOf.7.action.oneOf.0.approvalGroups.items.[INDEX].quorum","typeLabel":"integer"},"approvers":{"type":"object","properties":{"userId":{"type":"object","properties":{"in":{"type":"array","items":{"type":"string","minLength":1,"uniqueKey":"\\items.items.[INDEX].oneOf.4.pendingChangeRequest.body.oneOf.7.action.oneOf.0.approvalGroups.items.[INDEX].approvers.userId.in.items.[INDEX]","typeLabel":"string"},"minItems":1,"maxItems":100,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.4.pendingChangeRequest.body.oneOf.7.action.oneOf.0.approvalGroups.items.[INDEX].approvers.userId.in","typeLabel":"string[]"}},"required":["in"],"additionalProperties":false,"description":"Users and service accounts who may approve.","uniqueKey":"\\items.items.[INDEX].oneOf.4.pendingChangeRequest.body.oneOf.7.action.oneOf.0.approvalGroups.items.[INDEX].approvers.userId","typeLabel":"object"},"userGroupId":{"type":"object","properties":{"in":{"type":"array","items":{"type":"string","minLength":1,"maxLength":64,"pattern":"^ug-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"User group id.","example":"ug-139tf-f58l8-lsbt6dp47lfsdvgh","uniqueKey":"\\items.items.[INDEX].oneOf.4.pendingChangeRequest.body.oneOf.7.action.oneOf.0.approvalGroups.items.[INDEX].approvers.userGroupId.in.items.[INDEX]","typeLabel":"string"},"minItems":1,"maxItems":100,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.4.pendingChangeRequest.body.oneOf.7.action.oneOf.0.approvalGroups.items.[INDEX].approvers.userGroupId.in","typeLabel":"string[]"}},"required":["in"],"additionalProperties":false,"description":"User groups whose members may approve.","uniqueKey":"\\items.items.[INDEX].oneOf.4.pendingChangeRequest.body.oneOf.7.action.oneOf.0.approvalGroups.items.[INDEX].approvers.userGroupId","typeLabel":"object"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.4.pendingChangeRequest.body.oneOf.7.action.oneOf.0.approvalGroups.items.[INDEX].approvers","typeLabel":"object"},"name":{"type":"string","uniqueKey":"\\items.items.[INDEX].oneOf.4.pendingChangeRequest.body.oneOf.7.action.oneOf.0.approvalGroups.items.[INDEX].name","typeLabel":"string"},"initiatorCanApprove":{"type":"boolean","description":"Whether the initiator of the activity can participate in the approval.","uniqueKey":"\\items.items.[INDEX].oneOf.4.pendingChangeRequest.body.oneOf.7.action.oneOf.0.approvalGroups.items.[INDEX].initiatorCanApprove","typeLabel":"boolean"},"serviceAccountsCanApprove":{"type":"boolean","description":"Whether service accounts can participate in the approval for this group.","uniqueKey":"\\items.items.[INDEX].oneOf.4.pendingChangeRequest.body.oneOf.7.action.oneOf.0.approvalGroups.items.[INDEX].serviceAccountsCanApprove","typeLabel":"boolean"}},"required":["quorum","approvers"],"additionalProperties":false,"uniqueKey":"\\items.items.[INDEX].oneOf.4.pendingChangeRequest.body.oneOf.7.action.oneOf.0.approvalGroups.items.[INDEX]","typeLabel":"object"},"minItems":1,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.4.pendingChangeRequest.body.oneOf.7.action.oneOf.0.approvalGroups","typeLabel":"object[]"},"autoRejectTimeout":{"oneOf":[{"type":"integer","minimum":1,"uniqueKey":"\\items.items.[INDEX].oneOf.4.pendingChangeRequest.body.oneOf.7.action.oneOf.0.autoRejectTimeout.oneOf.0","typeLabel":"integer"},{"type":"null","minimum":1,"uniqueKey":"\\items.items.[INDEX].oneOf.4.pendingChangeRequest.body.oneOf.7.action.oneOf.0.autoRejectTimeout.oneOf.1","typeLabel":"null"}],"uniqueKey":"\\items.items.[INDEX].oneOf.4.pendingChangeRequest.body.oneOf.7.action.oneOf.0.autoRejectTimeout","typeLabel":"integer | null"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.4.pendingChangeRequest.body.oneOf.7.action.oneOf.0","typeLabel":"RequestApproval · object"},{"type":"object","title":"Block","description":"This action means that the activity will be blocked if the policy is triggered.\n\n```json\n{\n \"action\": {\n \"kind\": \"Block\"\n }\n}\n```\n","required":["kind"],"properties":{"kind":{"type":"string","enum":["Block"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.4.pendingChangeRequest.body.oneOf.7.action.oneOf.1.kind","typeLabel":"enum\u003cstring>"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.4.pendingChangeRequest.body.oneOf.7.action.oneOf.1","typeLabel":"Block · object"}],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.4.pendingChangeRequest.body.oneOf.7.action","typeLabel":"RequestApproval · object | Block · object"},"dateCreated":{"type":"string","uniqueKey":"\\items.items.[INDEX].oneOf.4.pendingChangeRequest.body.oneOf.7.dateCreated","typeLabel":"string"},"dateUpdated":{"type":"string","uniqueKey":"\\items.items.[INDEX].oneOf.4.pendingChangeRequest.body.oneOf.7.dateUpdated","typeLabel":"string"},"filters":{"type":"object","properties":{"vaultId":{"type":"object","properties":{"in":{"type":"array","items":{"type":"string","minLength":1,"uniqueKey":"\\items.items.[INDEX].oneOf.4.pendingChangeRequest.body.oneOf.7.filters.vaultId.in.items.[INDEX]","typeLabel":"string"},"minItems":1,"maxItems":100,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.4.pendingChangeRequest.body.oneOf.7.filters.vaultId.in","typeLabel":"string[]"}},"required":["in"],"additionalProperties":false,"uniqueKey":"\\items.items.[INDEX].oneOf.4.pendingChangeRequest.body.oneOf.7.filters.vaultId","typeLabel":"object"},"vaultTags":{"type":"object","properties":{"hasAny":{"type":"array","items":{"type":"string","minLength":1,"uniqueKey":"\\items.items.[INDEX].oneOf.4.pendingChangeRequest.body.oneOf.7.filters.vaultTags.hasAny.items.[INDEX]","typeLabel":"string"},"minItems":1,"maxItems":100,"uniqueKey":"\\items.items.[INDEX].oneOf.4.pendingChangeRequest.body.oneOf.7.filters.vaultTags.hasAny","typeLabel":"string[]"},"hasAll":{"type":"array","items":{"type":"string","minLength":1,"uniqueKey":"\\items.items.[INDEX].oneOf.4.pendingChangeRequest.body.oneOf.7.filters.vaultTags.hasAll.items.[INDEX]","typeLabel":"string"},"minItems":1,"maxItems":100,"uniqueKey":"\\items.items.[INDEX].oneOf.4.pendingChangeRequest.body.oneOf.7.filters.vaultTags.hasAll","typeLabel":"string[]"}},"additionalProperties":false,"uniqueKey":"\\items.items.[INDEX].oneOf.4.pendingChangeRequest.body.oneOf.7.filters.vaultTags","typeLabel":"object"}},"additionalProperties":false,"uniqueKey":"\\items.items.[INDEX].oneOf.4.pendingChangeRequest.body.oneOf.7.filters","typeLabel":"object"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.4.pendingChangeRequest.body.oneOf.7","typeLabel":"Vaults:ReleaseQuarantine · object"},{"type":"object","title":"Vaults:CreateLock","required":["id","name","status","activityKind","rule","action"],"properties":{"id":{"type":"string","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.4.pendingChangeRequest.body.oneOf.8.id","typeLabel":"string"},"name":{"type":"string","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.4.pendingChangeRequest.body.oneOf.8.name","typeLabel":"string"},"status":{"type":"string","enum":["Active","Archived"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.4.pendingChangeRequest.body.oneOf.8.status","typeLabel":"enum\u003cstring>"},"activityKind":{"type":"string","enum":["Vaults:CreateLock"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.4.pendingChangeRequest.body.oneOf.8.activityKind","typeLabel":"enum\u003cstring>"},"rule":{"type":"object","title":"AlwaysTrigger","description":"This rule will always be triggered, meaning that if this rule is defined on a policy, the policy will always trigger the policy action, regardless of the activity details.","required":["kind"],"properties":{"kind":{"type":"string","enum":["AlwaysTrigger"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.4.pendingChangeRequest.body.oneOf.8.rule.kind","typeLabel":"enum\u003cstring>"},"configuration":{"type":"object","properties":{},"additionalProperties":false,"uniqueKey":"\\items.items.[INDEX].oneOf.4.pendingChangeRequest.body.oneOf.8.rule.configuration","typeLabel":"object"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.4.pendingChangeRequest.body.oneOf.8.rule","typeLabel":"AlwaysTrigger · object"},"action":{"oneOf":[{"type":"object","title":"RequestApproval","description":"\nThis action means that activity will first require an Approval process to be completed before it can be executed (or be aborted if someone rejects it during the approval process).\n\nOne or several groups of approvers need to be specified. These groups define who is allowed to approve / reject an activity.\n\nThe activity will only be executed if all approver groups reach their \"quorum\" of approvals. Otherwise, if any one user within any approver group rejects, then the activity is aborted and the call is not executed.\n\nThe example below shows a `RequestApproval` action, configured with one approval group requiring 2 approvals amongst three specific users.\n\n```json\n{\n \"action\": {\n \"kind\": \"RequestApproval\",\n \"autoRejectTimeout\": 60, // minutes\n \"approvalGroups\": [\n {\n \"name\": \"Admins\",\n \"quorum\": 2, // only 2 approvers required in that group \n \"approvers\": {\n \"userId\": {\n \"in\": [\"us-...1\", \"us-...2\", \"us-...3\"],\n }\n }\n }\n ],\n\n }\n}\n```\n\n**Don't lock yourself up**\n\nBy default, users cannot approve an activity they initiated themselves, even if they are in an approval group. To allow this, you must set `initiatorCanApprove: true`.\n\n*Example 1:* For any wallet transfer, a policy is setup to require approval from **1 specific admin user** (eg. the CEO). `initiatorCanApprove` was not set to `true`. If the CEO himself initiates a transfer, no-one can approve his transfer and it's stuck.\n\n*Example 2:* Company has only 3 users. A policy is setup to require approval from **any 3 users** (`quorum: 3`) for any modification of a policy. `initiatorCanApprove` was not set to `true`. In this case, they are locked, and the policy cannot be modified: whoever requests a modification cannot approve, and the policy is therefore always missing one approver. To unlock, they would need to invite a new user and give him the rights to approve as well.\n ","required":["kind","approvalGroups"],"properties":{"kind":{"type":"string","enum":["RequestApproval"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.4.pendingChangeRequest.body.oneOf.8.action.oneOf.0.kind","typeLabel":"enum\u003cstring>"},"approvalGroups":{"type":"array","items":{"type":"object","properties":{"quorum":{"type":"integer","minimum":1,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.4.pendingChangeRequest.body.oneOf.8.action.oneOf.0.approvalGroups.items.[INDEX].quorum","typeLabel":"integer"},"approvers":{"type":"object","properties":{"userId":{"type":"object","properties":{"in":{"type":"array","items":{"type":"string","minLength":1,"uniqueKey":"\\items.items.[INDEX].oneOf.4.pendingChangeRequest.body.oneOf.8.action.oneOf.0.approvalGroups.items.[INDEX].approvers.userId.in.items.[INDEX]","typeLabel":"string"},"minItems":1,"maxItems":100,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.4.pendingChangeRequest.body.oneOf.8.action.oneOf.0.approvalGroups.items.[INDEX].approvers.userId.in","typeLabel":"string[]"}},"required":["in"],"additionalProperties":false,"description":"Users and service accounts who may approve.","uniqueKey":"\\items.items.[INDEX].oneOf.4.pendingChangeRequest.body.oneOf.8.action.oneOf.0.approvalGroups.items.[INDEX].approvers.userId","typeLabel":"object"},"userGroupId":{"type":"object","properties":{"in":{"type":"array","items":{"type":"string","minLength":1,"maxLength":64,"pattern":"^ug-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"User group id.","example":"ug-139tf-f58l8-lsbt6dp47lfsdvgh","uniqueKey":"\\items.items.[INDEX].oneOf.4.pendingChangeRequest.body.oneOf.8.action.oneOf.0.approvalGroups.items.[INDEX].approvers.userGroupId.in.items.[INDEX]","typeLabel":"string"},"minItems":1,"maxItems":100,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.4.pendingChangeRequest.body.oneOf.8.action.oneOf.0.approvalGroups.items.[INDEX].approvers.userGroupId.in","typeLabel":"string[]"}},"required":["in"],"additionalProperties":false,"description":"User groups whose members may approve.","uniqueKey":"\\items.items.[INDEX].oneOf.4.pendingChangeRequest.body.oneOf.8.action.oneOf.0.approvalGroups.items.[INDEX].approvers.userGroupId","typeLabel":"object"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.4.pendingChangeRequest.body.oneOf.8.action.oneOf.0.approvalGroups.items.[INDEX].approvers","typeLabel":"object"},"name":{"type":"string","uniqueKey":"\\items.items.[INDEX].oneOf.4.pendingChangeRequest.body.oneOf.8.action.oneOf.0.approvalGroups.items.[INDEX].name","typeLabel":"string"},"initiatorCanApprove":{"type":"boolean","description":"Whether the initiator of the activity can participate in the approval.","uniqueKey":"\\items.items.[INDEX].oneOf.4.pendingChangeRequest.body.oneOf.8.action.oneOf.0.approvalGroups.items.[INDEX].initiatorCanApprove","typeLabel":"boolean"},"serviceAccountsCanApprove":{"type":"boolean","description":"Whether service accounts can participate in the approval for this group.","uniqueKey":"\\items.items.[INDEX].oneOf.4.pendingChangeRequest.body.oneOf.8.action.oneOf.0.approvalGroups.items.[INDEX].serviceAccountsCanApprove","typeLabel":"boolean"}},"required":["quorum","approvers"],"additionalProperties":false,"uniqueKey":"\\items.items.[INDEX].oneOf.4.pendingChangeRequest.body.oneOf.8.action.oneOf.0.approvalGroups.items.[INDEX]","typeLabel":"object"},"minItems":1,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.4.pendingChangeRequest.body.oneOf.8.action.oneOf.0.approvalGroups","typeLabel":"object[]"},"autoRejectTimeout":{"oneOf":[{"type":"integer","minimum":1,"uniqueKey":"\\items.items.[INDEX].oneOf.4.pendingChangeRequest.body.oneOf.8.action.oneOf.0.autoRejectTimeout.oneOf.0","typeLabel":"integer"},{"type":"null","minimum":1,"uniqueKey":"\\items.items.[INDEX].oneOf.4.pendingChangeRequest.body.oneOf.8.action.oneOf.0.autoRejectTimeout.oneOf.1","typeLabel":"null"}],"uniqueKey":"\\items.items.[INDEX].oneOf.4.pendingChangeRequest.body.oneOf.8.action.oneOf.0.autoRejectTimeout","typeLabel":"integer | null"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.4.pendingChangeRequest.body.oneOf.8.action.oneOf.0","typeLabel":"RequestApproval · object"},{"type":"object","title":"Block","description":"This action means that the activity will be blocked if the policy is triggered.\n\n```json\n{\n \"action\": {\n \"kind\": \"Block\"\n }\n}\n```\n","required":["kind"],"properties":{"kind":{"type":"string","enum":["Block"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.4.pendingChangeRequest.body.oneOf.8.action.oneOf.1.kind","typeLabel":"enum\u003cstring>"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.4.pendingChangeRequest.body.oneOf.8.action.oneOf.1","typeLabel":"Block · object"}],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.4.pendingChangeRequest.body.oneOf.8.action","typeLabel":"RequestApproval · object | Block · object"},"dateCreated":{"type":"string","uniqueKey":"\\items.items.[INDEX].oneOf.4.pendingChangeRequest.body.oneOf.8.dateCreated","typeLabel":"string"},"dateUpdated":{"type":"string","uniqueKey":"\\items.items.[INDEX].oneOf.4.pendingChangeRequest.body.oneOf.8.dateUpdated","typeLabel":"string"},"filters":{"type":"object","properties":{"vaultId":{"type":"object","properties":{"in":{"type":"array","items":{"type":"string","minLength":1,"uniqueKey":"\\items.items.[INDEX].oneOf.4.pendingChangeRequest.body.oneOf.8.filters.vaultId.in.items.[INDEX]","typeLabel":"string"},"minItems":1,"maxItems":100,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.4.pendingChangeRequest.body.oneOf.8.filters.vaultId.in","typeLabel":"string[]"}},"required":["in"],"additionalProperties":false,"uniqueKey":"\\items.items.[INDEX].oneOf.4.pendingChangeRequest.body.oneOf.8.filters.vaultId","typeLabel":"object"},"vaultTags":{"type":"object","properties":{"hasAny":{"type":"array","items":{"type":"string","minLength":1,"uniqueKey":"\\items.items.[INDEX].oneOf.4.pendingChangeRequest.body.oneOf.8.filters.vaultTags.hasAny.items.[INDEX]","typeLabel":"string"},"minItems":1,"maxItems":100,"uniqueKey":"\\items.items.[INDEX].oneOf.4.pendingChangeRequest.body.oneOf.8.filters.vaultTags.hasAny","typeLabel":"string[]"},"hasAll":{"type":"array","items":{"type":"string","minLength":1,"uniqueKey":"\\items.items.[INDEX].oneOf.4.pendingChangeRequest.body.oneOf.8.filters.vaultTags.hasAll.items.[INDEX]","typeLabel":"string"},"minItems":1,"maxItems":100,"uniqueKey":"\\items.items.[INDEX].oneOf.4.pendingChangeRequest.body.oneOf.8.filters.vaultTags.hasAll","typeLabel":"string[]"}},"additionalProperties":false,"uniqueKey":"\\items.items.[INDEX].oneOf.4.pendingChangeRequest.body.oneOf.8.filters.vaultTags","typeLabel":"object"}},"additionalProperties":false,"uniqueKey":"\\items.items.[INDEX].oneOf.4.pendingChangeRequest.body.oneOf.8.filters","typeLabel":"object"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.4.pendingChangeRequest.body.oneOf.8","typeLabel":"Vaults:CreateLock · object"},{"type":"object","title":"Vaults:ReplaceLock","required":["id","name","status","activityKind","rule","action"],"properties":{"id":{"type":"string","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.4.pendingChangeRequest.body.oneOf.9.id","typeLabel":"string"},"name":{"type":"string","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.4.pendingChangeRequest.body.oneOf.9.name","typeLabel":"string"},"status":{"type":"string","enum":["Active","Archived"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.4.pendingChangeRequest.body.oneOf.9.status","typeLabel":"enum\u003cstring>"},"activityKind":{"type":"string","enum":["Vaults:ReplaceLock"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.4.pendingChangeRequest.body.oneOf.9.activityKind","typeLabel":"enum\u003cstring>"},"rule":{"type":"object","title":"AlwaysTrigger","description":"This rule will always be triggered, meaning that if this rule is defined on a policy, the policy will always trigger the policy action, regardless of the activity details.","required":["kind"],"properties":{"kind":{"type":"string","enum":["AlwaysTrigger"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.4.pendingChangeRequest.body.oneOf.9.rule.kind","typeLabel":"enum\u003cstring>"},"configuration":{"type":"object","properties":{},"additionalProperties":false,"uniqueKey":"\\items.items.[INDEX].oneOf.4.pendingChangeRequest.body.oneOf.9.rule.configuration","typeLabel":"object"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.4.pendingChangeRequest.body.oneOf.9.rule","typeLabel":"AlwaysTrigger · object"},"action":{"oneOf":[{"type":"object","title":"RequestApproval","description":"\nThis action means that activity will first require an Approval process to be completed before it can be executed (or be aborted if someone rejects it during the approval process).\n\nOne or several groups of approvers need to be specified. These groups define who is allowed to approve / reject an activity.\n\nThe activity will only be executed if all approver groups reach their \"quorum\" of approvals. Otherwise, if any one user within any approver group rejects, then the activity is aborted and the call is not executed.\n\nThe example below shows a `RequestApproval` action, configured with one approval group requiring 2 approvals amongst three specific users.\n\n```json\n{\n \"action\": {\n \"kind\": \"RequestApproval\",\n \"autoRejectTimeout\": 60, // minutes\n \"approvalGroups\": [\n {\n \"name\": \"Admins\",\n \"quorum\": 2, // only 2 approvers required in that group \n \"approvers\": {\n \"userId\": {\n \"in\": [\"us-...1\", \"us-...2\", \"us-...3\"],\n }\n }\n }\n ],\n\n }\n}\n```\n\n**Don't lock yourself up**\n\nBy default, users cannot approve an activity they initiated themselves, even if they are in an approval group. To allow this, you must set `initiatorCanApprove: true`.\n\n*Example 1:* For any wallet transfer, a policy is setup to require approval from **1 specific admin user** (eg. the CEO). `initiatorCanApprove` was not set to `true`. If the CEO himself initiates a transfer, no-one can approve his transfer and it's stuck.\n\n*Example 2:* Company has only 3 users. A policy is setup to require approval from **any 3 users** (`quorum: 3`) for any modification of a policy. `initiatorCanApprove` was not set to `true`. In this case, they are locked, and the policy cannot be modified: whoever requests a modification cannot approve, and the policy is therefore always missing one approver. To unlock, they would need to invite a new user and give him the rights to approve as well.\n ","required":["kind","approvalGroups"],"properties":{"kind":{"type":"string","enum":["RequestApproval"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.4.pendingChangeRequest.body.oneOf.9.action.oneOf.0.kind","typeLabel":"enum\u003cstring>"},"approvalGroups":{"type":"array","items":{"type":"object","properties":{"quorum":{"type":"integer","minimum":1,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.4.pendingChangeRequest.body.oneOf.9.action.oneOf.0.approvalGroups.items.[INDEX].quorum","typeLabel":"integer"},"approvers":{"type":"object","properties":{"userId":{"type":"object","properties":{"in":{"type":"array","items":{"type":"string","minLength":1,"uniqueKey":"\\items.items.[INDEX].oneOf.4.pendingChangeRequest.body.oneOf.9.action.oneOf.0.approvalGroups.items.[INDEX].approvers.userId.in.items.[INDEX]","typeLabel":"string"},"minItems":1,"maxItems":100,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.4.pendingChangeRequest.body.oneOf.9.action.oneOf.0.approvalGroups.items.[INDEX].approvers.userId.in","typeLabel":"string[]"}},"required":["in"],"additionalProperties":false,"description":"Users and service accounts who may approve.","uniqueKey":"\\items.items.[INDEX].oneOf.4.pendingChangeRequest.body.oneOf.9.action.oneOf.0.approvalGroups.items.[INDEX].approvers.userId","typeLabel":"object"},"userGroupId":{"type":"object","properties":{"in":{"type":"array","items":{"type":"string","minLength":1,"maxLength":64,"pattern":"^ug-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"User group id.","example":"ug-139tf-f58l8-lsbt6dp47lfsdvgh","uniqueKey":"\\items.items.[INDEX].oneOf.4.pendingChangeRequest.body.oneOf.9.action.oneOf.0.approvalGroups.items.[INDEX].approvers.userGroupId.in.items.[INDEX]","typeLabel":"string"},"minItems":1,"maxItems":100,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.4.pendingChangeRequest.body.oneOf.9.action.oneOf.0.approvalGroups.items.[INDEX].approvers.userGroupId.in","typeLabel":"string[]"}},"required":["in"],"additionalProperties":false,"description":"User groups whose members may approve.","uniqueKey":"\\items.items.[INDEX].oneOf.4.pendingChangeRequest.body.oneOf.9.action.oneOf.0.approvalGroups.items.[INDEX].approvers.userGroupId","typeLabel":"object"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.4.pendingChangeRequest.body.oneOf.9.action.oneOf.0.approvalGroups.items.[INDEX].approvers","typeLabel":"object"},"name":{"type":"string","uniqueKey":"\\items.items.[INDEX].oneOf.4.pendingChangeRequest.body.oneOf.9.action.oneOf.0.approvalGroups.items.[INDEX].name","typeLabel":"string"},"initiatorCanApprove":{"type":"boolean","description":"Whether the initiator of the activity can participate in the approval.","uniqueKey":"\\items.items.[INDEX].oneOf.4.pendingChangeRequest.body.oneOf.9.action.oneOf.0.approvalGroups.items.[INDEX].initiatorCanApprove","typeLabel":"boolean"},"serviceAccountsCanApprove":{"type":"boolean","description":"Whether service accounts can participate in the approval for this group.","uniqueKey":"\\items.items.[INDEX].oneOf.4.pendingChangeRequest.body.oneOf.9.action.oneOf.0.approvalGroups.items.[INDEX].serviceAccountsCanApprove","typeLabel":"boolean"}},"required":["quorum","approvers"],"additionalProperties":false,"uniqueKey":"\\items.items.[INDEX].oneOf.4.pendingChangeRequest.body.oneOf.9.action.oneOf.0.approvalGroups.items.[INDEX]","typeLabel":"object"},"minItems":1,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.4.pendingChangeRequest.body.oneOf.9.action.oneOf.0.approvalGroups","typeLabel":"object[]"},"autoRejectTimeout":{"oneOf":[{"type":"integer","minimum":1,"uniqueKey":"\\items.items.[INDEX].oneOf.4.pendingChangeRequest.body.oneOf.9.action.oneOf.0.autoRejectTimeout.oneOf.0","typeLabel":"integer"},{"type":"null","minimum":1,"uniqueKey":"\\items.items.[INDEX].oneOf.4.pendingChangeRequest.body.oneOf.9.action.oneOf.0.autoRejectTimeout.oneOf.1","typeLabel":"null"}],"uniqueKey":"\\items.items.[INDEX].oneOf.4.pendingChangeRequest.body.oneOf.9.action.oneOf.0.autoRejectTimeout","typeLabel":"integer | null"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.4.pendingChangeRequest.body.oneOf.9.action.oneOf.0","typeLabel":"RequestApproval · object"},{"type":"object","title":"Block","description":"This action means that the activity will be blocked if the policy is triggered.\n\n```json\n{\n \"action\": {\n \"kind\": \"Block\"\n }\n}\n```\n","required":["kind"],"properties":{"kind":{"type":"string","enum":["Block"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.4.pendingChangeRequest.body.oneOf.9.action.oneOf.1.kind","typeLabel":"enum\u003cstring>"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.4.pendingChangeRequest.body.oneOf.9.action.oneOf.1","typeLabel":"Block · object"}],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.4.pendingChangeRequest.body.oneOf.9.action","typeLabel":"RequestApproval · object | Block · object"},"dateCreated":{"type":"string","uniqueKey":"\\items.items.[INDEX].oneOf.4.pendingChangeRequest.body.oneOf.9.dateCreated","typeLabel":"string"},"dateUpdated":{"type":"string","uniqueKey":"\\items.items.[INDEX].oneOf.4.pendingChangeRequest.body.oneOf.9.dateUpdated","typeLabel":"string"},"filters":{"type":"object","properties":{"vaultId":{"type":"object","properties":{"in":{"type":"array","items":{"type":"string","minLength":1,"uniqueKey":"\\items.items.[INDEX].oneOf.4.pendingChangeRequest.body.oneOf.9.filters.vaultId.in.items.[INDEX]","typeLabel":"string"},"minItems":1,"maxItems":100,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.4.pendingChangeRequest.body.oneOf.9.filters.vaultId.in","typeLabel":"string[]"}},"required":["in"],"additionalProperties":false,"uniqueKey":"\\items.items.[INDEX].oneOf.4.pendingChangeRequest.body.oneOf.9.filters.vaultId","typeLabel":"object"},"vaultTags":{"type":"object","properties":{"hasAny":{"type":"array","items":{"type":"string","minLength":1,"uniqueKey":"\\items.items.[INDEX].oneOf.4.pendingChangeRequest.body.oneOf.9.filters.vaultTags.hasAny.items.[INDEX]","typeLabel":"string"},"minItems":1,"maxItems":100,"uniqueKey":"\\items.items.[INDEX].oneOf.4.pendingChangeRequest.body.oneOf.9.filters.vaultTags.hasAny","typeLabel":"string[]"},"hasAll":{"type":"array","items":{"type":"string","minLength":1,"uniqueKey":"\\items.items.[INDEX].oneOf.4.pendingChangeRequest.body.oneOf.9.filters.vaultTags.hasAll.items.[INDEX]","typeLabel":"string"},"minItems":1,"maxItems":100,"uniqueKey":"\\items.items.[INDEX].oneOf.4.pendingChangeRequest.body.oneOf.9.filters.vaultTags.hasAll","typeLabel":"string[]"}},"additionalProperties":false,"uniqueKey":"\\items.items.[INDEX].oneOf.4.pendingChangeRequest.body.oneOf.9.filters.vaultTags","typeLabel":"object"}},"additionalProperties":false,"uniqueKey":"\\items.items.[INDEX].oneOf.4.pendingChangeRequest.body.oneOf.9.filters","typeLabel":"object"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.4.pendingChangeRequest.body.oneOf.9","typeLabel":"Vaults:ReplaceLock · object"},{"type":"object","title":"UserAction","required":["id","name","status","activityKind","rule","action"],"properties":{"id":{"type":"string","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.4.pendingChangeRequest.body.oneOf.10.id","typeLabel":"string"},"name":{"type":"string","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.4.pendingChangeRequest.body.oneOf.10.name","typeLabel":"string"},"status":{"type":"string","enum":["Active","Archived"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.4.pendingChangeRequest.body.oneOf.10.status","typeLabel":"enum\u003cstring>"},"activityKind":{"type":"string","enum":["UserAction"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.4.pendingChangeRequest.body.oneOf.10.activityKind","typeLabel":"enum\u003cstring>"},"rule":{"type":"object","properties":{"kind":{"type":"string","enum":["UserAction"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.4.pendingChangeRequest.body.oneOf.10.rule.kind","typeLabel":"enum\u003cstring>"},"configuration":{"type":"object","properties":{"userActionKinds":{"type":"array","items":{"type":"string","uniqueKey":"\\items.items.[INDEX].oneOf.4.pendingChangeRequest.body.oneOf.10.rule.configuration.userActionKinds.items.[INDEX]","typeLabel":"string"},"minItems":1,"description":"The user actions this rule applies to. The rule triggers on any of them.","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.4.pendingChangeRequest.body.oneOf.10.rule.configuration.userActionKinds","typeLabel":"string[]"}},"required":["userActionKinds"],"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.4.pendingChangeRequest.body.oneOf.10.rule.configuration","typeLabel":"object"}},"required":["kind","configuration"],"additionalProperties":false,"title":"UserAction","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.4.pendingChangeRequest.body.oneOf.10.rule","typeLabel":"UserAction · object"},"action":{"oneOf":[{"type":"object","title":"RequestApproval","description":"\nThis action means that activity will first require an Approval process to be completed before it can be executed (or be aborted if someone rejects it during the approval process).\n\nOne or several groups of approvers need to be specified. These groups define who is allowed to approve / reject an activity.\n\nThe activity will only be executed if all approver groups reach their \"quorum\" of approvals. Otherwise, if any one user within any approver group rejects, then the activity is aborted and the call is not executed.\n\nThe example below shows a `RequestApproval` action, configured with one approval group requiring 2 approvals amongst three specific users.\n\n```json\n{\n \"action\": {\n \"kind\": \"RequestApproval\",\n \"autoRejectTimeout\": 60, // minutes\n \"approvalGroups\": [\n {\n \"name\": \"Admins\",\n \"quorum\": 2, // only 2 approvers required in that group \n \"approvers\": {\n \"userId\": {\n \"in\": [\"us-...1\", \"us-...2\", \"us-...3\"],\n }\n }\n }\n ],\n\n }\n}\n```\n\n**Don't lock yourself up**\n\nBy default, users cannot approve an activity they initiated themselves, even if they are in an approval group. To allow this, you must set `initiatorCanApprove: true`.\n\n*Example 1:* For any wallet transfer, a policy is setup to require approval from **1 specific admin user** (eg. the CEO). `initiatorCanApprove` was not set to `true`. If the CEO himself initiates a transfer, no-one can approve his transfer and it's stuck.\n\n*Example 2:* Company has only 3 users. A policy is setup to require approval from **any 3 users** (`quorum: 3`) for any modification of a policy. `initiatorCanApprove` was not set to `true`. In this case, they are locked, and the policy cannot be modified: whoever requests a modification cannot approve, and the policy is therefore always missing one approver. To unlock, they would need to invite a new user and give him the rights to approve as well.\n ","required":["kind","approvalGroups"],"properties":{"kind":{"type":"string","enum":["RequestApproval"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.4.pendingChangeRequest.body.oneOf.10.action.oneOf.0.kind","typeLabel":"enum\u003cstring>"},"approvalGroups":{"type":"array","items":{"type":"object","properties":{"quorum":{"type":"integer","minimum":1,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.4.pendingChangeRequest.body.oneOf.10.action.oneOf.0.approvalGroups.items.[INDEX].quorum","typeLabel":"integer"},"approvers":{"type":"object","properties":{"userId":{"type":"object","properties":{"in":{"type":"array","items":{"type":"string","minLength":1,"uniqueKey":"\\items.items.[INDEX].oneOf.4.pendingChangeRequest.body.oneOf.10.action.oneOf.0.approvalGroups.items.[INDEX].approvers.userId.in.items.[INDEX]","typeLabel":"string"},"minItems":1,"maxItems":100,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.4.pendingChangeRequest.body.oneOf.10.action.oneOf.0.approvalGroups.items.[INDEX].approvers.userId.in","typeLabel":"string[]"}},"required":["in"],"additionalProperties":false,"description":"Users and service accounts who may approve.","uniqueKey":"\\items.items.[INDEX].oneOf.4.pendingChangeRequest.body.oneOf.10.action.oneOf.0.approvalGroups.items.[INDEX].approvers.userId","typeLabel":"object"},"userGroupId":{"type":"object","properties":{"in":{"type":"array","items":{"type":"string","minLength":1,"maxLength":64,"pattern":"^ug-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"User group id.","example":"ug-139tf-f58l8-lsbt6dp47lfsdvgh","uniqueKey":"\\items.items.[INDEX].oneOf.4.pendingChangeRequest.body.oneOf.10.action.oneOf.0.approvalGroups.items.[INDEX].approvers.userGroupId.in.items.[INDEX]","typeLabel":"string"},"minItems":1,"maxItems":100,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.4.pendingChangeRequest.body.oneOf.10.action.oneOf.0.approvalGroups.items.[INDEX].approvers.userGroupId.in","typeLabel":"string[]"}},"required":["in"],"additionalProperties":false,"description":"User groups whose members may approve.","uniqueKey":"\\items.items.[INDEX].oneOf.4.pendingChangeRequest.body.oneOf.10.action.oneOf.0.approvalGroups.items.[INDEX].approvers.userGroupId","typeLabel":"object"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.4.pendingChangeRequest.body.oneOf.10.action.oneOf.0.approvalGroups.items.[INDEX].approvers","typeLabel":"object"},"name":{"type":"string","uniqueKey":"\\items.items.[INDEX].oneOf.4.pendingChangeRequest.body.oneOf.10.action.oneOf.0.approvalGroups.items.[INDEX].name","typeLabel":"string"},"initiatorCanApprove":{"type":"boolean","description":"Whether the initiator of the activity can participate in the approval.","uniqueKey":"\\items.items.[INDEX].oneOf.4.pendingChangeRequest.body.oneOf.10.action.oneOf.0.approvalGroups.items.[INDEX].initiatorCanApprove","typeLabel":"boolean"},"serviceAccountsCanApprove":{"type":"boolean","description":"Whether service accounts can participate in the approval for this group.","uniqueKey":"\\items.items.[INDEX].oneOf.4.pendingChangeRequest.body.oneOf.10.action.oneOf.0.approvalGroups.items.[INDEX].serviceAccountsCanApprove","typeLabel":"boolean"}},"required":["quorum","approvers"],"additionalProperties":false,"uniqueKey":"\\items.items.[INDEX].oneOf.4.pendingChangeRequest.body.oneOf.10.action.oneOf.0.approvalGroups.items.[INDEX]","typeLabel":"object"},"minItems":1,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.4.pendingChangeRequest.body.oneOf.10.action.oneOf.0.approvalGroups","typeLabel":"object[]"},"autoRejectTimeout":{"oneOf":[{"type":"integer","minimum":1,"uniqueKey":"\\items.items.[INDEX].oneOf.4.pendingChangeRequest.body.oneOf.10.action.oneOf.0.autoRejectTimeout.oneOf.0","typeLabel":"integer"},{"type":"null","minimum":1,"uniqueKey":"\\items.items.[INDEX].oneOf.4.pendingChangeRequest.body.oneOf.10.action.oneOf.0.autoRejectTimeout.oneOf.1","typeLabel":"null"}],"uniqueKey":"\\items.items.[INDEX].oneOf.4.pendingChangeRequest.body.oneOf.10.action.oneOf.0.autoRejectTimeout","typeLabel":"integer | null"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.4.pendingChangeRequest.body.oneOf.10.action.oneOf.0","typeLabel":"RequestApproval · object"},{"type":"object","title":"Block","description":"This action means that the activity will be blocked if the policy is triggered.\n\n```json\n{\n \"action\": {\n \"kind\": \"Block\"\n }\n}\n```\n","required":["kind"],"properties":{"kind":{"type":"string","enum":["Block"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.4.pendingChangeRequest.body.oneOf.10.action.oneOf.1.kind","typeLabel":"enum\u003cstring>"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.4.pendingChangeRequest.body.oneOf.10.action.oneOf.1","typeLabel":"Block · object"}],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.4.pendingChangeRequest.body.oneOf.10.action","typeLabel":"RequestApproval · object | Block · object"},"dateCreated":{"type":"string","uniqueKey":"\\items.items.[INDEX].oneOf.4.pendingChangeRequest.body.oneOf.10.dateCreated","typeLabel":"string"},"dateUpdated":{"type":"string","uniqueKey":"\\items.items.[INDEX].oneOf.4.pendingChangeRequest.body.oneOf.10.dateUpdated","typeLabel":"string"},"filters":{"type":"object","properties":{},"uniqueKey":"\\items.items.[INDEX].oneOf.4.pendingChangeRequest.body.oneOf.10.filters","typeLabel":"object"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.4.pendingChangeRequest.body.oneOf.10","typeLabel":"UserAction · object"}],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.4.pendingChangeRequest.body","typeLabel":"Registry:Addresses:Modify · object | Permissions:Assign · object | Permissions:Modify · object | Policies:Modify · object | Registry:ContractSchemas:Modify · object | Wallets:Sign · object | Wallets:IncomingTransaction · object | Vaults:ReleaseQuarantine · object | Vaults:CreateLock · object | Vaults:ReplaceLock · object | UserAction · object"},"dateResolved":{"type":"string","format":"date-time","uniqueKey":"\\items.items.[INDEX].oneOf.4.pendingChangeRequest.dateResolved","typeLabel":"string\u003cdate-time>"},"approvalId":{"type":"string","uniqueKey":"\\items.items.[INDEX].oneOf.4.pendingChangeRequest.approvalId","typeLabel":"string"}},"required":["id","requester","kind","operationKind","status","entityId","dateCreated","body"],"additionalProperties":false,"uniqueKey":"\\items.items.[INDEX].oneOf.4.pendingChangeRequest","typeLabel":"object"}},"additionalProperties":false,"uniqueKey":"\\items.items.[INDEX].oneOf.4","typeLabel":"Registry:ContractSchemas:Modify · object"},{"type":"object","title":"Wallets:Sign","required":["id","name","status","activityKind","rule","action"],"properties":{"id":{"type":"string","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.5.id","typeLabel":"string"},"name":{"type":"string","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.5.name","typeLabel":"string"},"status":{"type":"string","enum":["Active","Archived"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.5.status","typeLabel":"enum\u003cstring>"},"activityKind":{"type":"string","enum":["Wallets:Sign"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.5.activityKind","typeLabel":"enum\u003cstring>"},"rule":{"oneOf":[{"type":"object","title":"AlwaysTrigger","description":"This rule will always be triggered, meaning that if this rule is defined on a policy, the policy will always trigger the policy action, regardless of the activity details.","required":["kind"],"properties":{"kind":{"type":"string","enum":["AlwaysTrigger"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.5.rule.oneOf.0.kind","typeLabel":"enum\u003cstring>"},"configuration":{"type":"object","properties":{},"additionalProperties":false,"uniqueKey":"\\items.items.[INDEX].oneOf.5.rule.oneOf.0.configuration","typeLabel":"object"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.5.rule.oneOf.0","typeLabel":"AlwaysTrigger · object"},{"type":"object","title":"TransactionRecipientWhitelist","description":"This rule will trigger if the destination address *is NOT whitelisted*.","required":["kind","configuration"],"properties":{"kind":{"type":"string","enum":["TransactionRecipientWhitelist"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.5.rule.oneOf.1.kind","typeLabel":"enum\u003cstring>"},"configuration":{"type":"object","properties":{"addresses":{"type":"array","items":{"type":"string","minLength":1,"uniqueKey":"\\items.items.[INDEX].oneOf.5.rule.oneOf.1.configuration.addresses.items.[INDEX]","typeLabel":"string"},"description":"Whitelisted recipient addresses","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.5.rule.oneOf.1.configuration.addresses","typeLabel":"string[]"}},"required":["addresses"],"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.5.rule.oneOf.1.configuration","typeLabel":"object"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.5.rule.oneOf.1","typeLabel":"TransactionRecipientWhitelist · object"},{"type":"object","title":"TransactionAmountLimit","description":"This rule will trigger if the wallet activity detected is transferring some value whose amount is equal to or greater than a given limit. The limit is inclusive: a transfer whose value exactly equals the limit also triggers.\n\nThe limit is expressed in a fiat `currency` and evaluated against the market value of the transfer. To set a threshold in the asset's own units instead, use `TransactionAmountLimitNominal`.\n\nNote: If the amount of the wallet activity cannot be evaluated for any reason (eg. market prices are not available, or eg. the amount cannot be inferred from a wallet signature request, etc.), by default the rule will trigger the policy (this is called \"failing closed\" and is generally considered a security best practice).","required":["kind","configuration"],"properties":{"kind":{"type":"string","enum":["TransactionAmountLimit"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.5.rule.oneOf.2.kind","typeLabel":"enum\u003cstring>"},"configuration":{"type":"object","properties":{"limit":{"type":"number","description":"Amount limit in `currency`","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.5.rule.oneOf.2.configuration.limit","typeLabel":"number"},"currency":{"type":"string","enum":["USD"],"description":"Fiat currency, currently only `USD`","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.5.rule.oneOf.2.configuration.currency","typeLabel":"enum\u003cstring>"}},"required":["limit","currency"],"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.5.rule.oneOf.2.configuration","typeLabel":"object"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.5.rule.oneOf.2","typeLabel":"TransactionAmountLimit · object"},{"type":"object","title":"TransactionAmountLimitNominal","description":"This rule will trigger if the wallet activity detected is transferring more of a listed asset than that asset's limit.\n\nEach limit is expressed in the minimum denomination of its own asset and compared against the transferred amount directly, so the verdict needs no market data and does not move with a price. To set a threshold on the fiat value of a transfer instead, use `TransactionAmountLimit`.\n\nLimits are asset exact: an asset is identified by its network and its Dfns token identifier, so a wrapped or staked derivative is a different asset from the thing it tracks, and a transfer of an asset the rule does not list will not trigger it.\n\nNote: If the transferred amount or the asset cannot be determined for any reason, by default the rule will trigger the policy (this is called \"failing closed\" and is generally considered a security best practice).","required":["kind","configuration"],"properties":{"kind":{"type":"string","enum":["TransactionAmountLimitNominal"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.5.rule.oneOf.3.kind","typeLabel":"enum\u003cstring>"},"configuration":{"type":"object","properties":{"assets":{"type":"array","items":{"type":"object","properties":{"network":{"type":"string","title":"Network","description":"The network the asset lives on.","enum":["Algorand","AlgorandTestnet","Aptos","AptosTestnet","ArbitrumOne","ArbitrumSepolia","Arc","ArcTestnet","Areum","AvalancheC","AvalancheCFuji","Base","BaseSepolia","Berachain","BerachainBepolia","Bitcoin","BitcoinSignet","BitcoinTestnet4","BitcoinCash","Bob","BobSepolia","Bsc","BscTestnet","Canton","CantonTestnet","Cardano","CardanoPreprod","Concordium","ConcordiumTestnet","Celo","CeloSepolia","Codex","CodexSepolia","CosmosHub4","CosmosIcsTestnet","Dogecoin","DogecoinTestnet","Ethereum","EthereumClassic","EthereumClassicMordor","EthereumSepolia","EthereumHoodi","FlareC","FlareCCoston2","FlowEvm","FlowEvmTestnet","Hedera","HederaTestnet","HyperEvm","HyperEvmTestnet","Ink","InkSepolia","InternetComputer","Ion","IonTestnet","Iota","IotaTestnet","Kusama","KusamaAssetHub","Litecoin","LitecoinTestnet","Monad","MonadTestnet","Movement","MovementTestnet","Near","NearTestnet","Optimism","OptimismSepolia","Origyn","Plasma","PlasmaTestnet","Plume","PlumeSepolia","Paseo","PaseoAssetHub","Polkadot","PolkadotAssetHub","Polygon","PolygonAmoy","Polymesh","PolymeshTestnet","Rayls","RaylsTestnet","Robinhood","RobinhoodSepolia","SeiAtlantic2","SeiPacific1","Solana","SolanaDevnet","Sonic","SonicTestnet","Starknet","StarknetSepolia","Stellar","StellarTestnet","Sui","SuiTestnet","Tezos","TezosShadownet","Tempo","TempoModerato","Tsc","TscTestnet1","Ton","TonTestnet","Tron","TronNile","Westend","WestendAssetHub","Xdc","XdcApothem","XLayer","XLayerSepolia","XrpLedger","XrpLedgerTestnet"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.5.rule.oneOf.3.configuration.assets.items.[INDEX].network","typeLabel":"enum\u003cstring>"},"tid":{"type":"string","minLength":1,"maxLength":200,"pattern":"^[a-z0-9_]+:[^\\s](?:[ ]?[^\\s])*$","description":"The Dfns token identifier of the asset, for example `native:eth` or `erc20:0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48`. Must be canonical: token contract addresses on hex based networks are lower cased.","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.5.rule.oneOf.3.configuration.assets.items.[INDEX].tid","typeLabel":"string"},"limit":{"type":"string","pattern":"^\\d+$","description":"Amount limit in the minimum denomination of the asset, as an integer string, matching how a transfer expresses its amount. For an 18 decimal token `\"5000000000000000000\"` is 5 whole tokens.","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.5.rule.oneOf.3.configuration.assets.items.[INDEX].limit","typeLabel":"string"}},"required":["network","tid","limit"],"additionalProperties":false,"uniqueKey":"\\items.items.[INDEX].oneOf.5.rule.oneOf.3.configuration.assets.items.[INDEX]","typeLabel":"object"},"minItems":1,"maxItems":100,"description":"The assets this rule applies to, each with its own limit. A transfer of an asset that is not listed does not trigger the rule. The limit applies to each matching transfer individually; nothing is accumulated across transfers.","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.5.rule.oneOf.3.configuration.assets","typeLabel":"object[]"}},"required":["assets"],"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.5.rule.oneOf.3.configuration","typeLabel":"object"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.5.rule.oneOf.3","typeLabel":"TransactionAmountLimitNominal · object"},{"type":"object","title":"TransactionAmountVelocity","description":"This rule will trigger if the cumulative amount transferred from a given wallet within a given timeframe is greater than a specified limit. The aggregate amount evaluated is based only on the wallet that triggered the policy.","required":["kind","configuration"],"properties":{"kind":{"type":"string","enum":["TransactionAmountVelocity"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.5.rule.oneOf.4.kind","typeLabel":"enum\u003cstring>"},"configuration":{"type":"object","properties":{"limit":{"type":"number","description":"Amount limit in `currency`","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.5.rule.oneOf.4.configuration.limit","typeLabel":"number"},"currency":{"type":"string","enum":["USD"],"description":"Currency for the amount limit above","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.5.rule.oneOf.4.configuration.currency","typeLabel":"enum\u003cstring>"},"timeframe":{"type":"integer","minimum":1,"maximum":43200,"description":"Time period in minutes. Minimum 1, Maximum 43,200.","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.5.rule.oneOf.4.configuration.timeframe","typeLabel":"integer"}},"required":["limit","currency","timeframe"],"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.5.rule.oneOf.4.configuration","typeLabel":"object"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.5.rule.oneOf.4","typeLabel":"TransactionAmountVelocity · object"},{"type":"object","title":"TransactionCountVelocity","description":"This rule will trigger if the number of wallet activities for a given wallet within a given timeframe, is greater than a specified limit. The aggregate number of transactions evaluated is based only on the wallet that triggered the policy.","required":["kind","configuration"],"properties":{"kind":{"type":"string","enum":["TransactionCountVelocity"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.5.rule.oneOf.5.kind","typeLabel":"enum\u003cstring>"},"configuration":{"type":"object","properties":{"limit":{"type":"number","description":"Count limit","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.5.rule.oneOf.5.configuration.limit","typeLabel":"number"},"timeframe":{"type":"integer","minimum":1,"maximum":43200,"description":"Time period in minutes. Minimum 1, Maximum 43,200.","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.5.rule.oneOf.5.configuration.timeframe","typeLabel":"integer"}},"required":["limit","timeframe"],"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.5.rule.oneOf.5.configuration","typeLabel":"object"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.5.rule.oneOf.5","typeLabel":"TransactionCountVelocity · object"},{"type":"object","title":"ChainalysisTransactionPrescreening","description":"\n\u003cInfo>\nThis rule can only be used once the Chainalysis integration is activated from the Dfns dashboard settings. (see more on [Chainalysis](https://docs.dfns.co/integrations/aml-kyt/chainalysis) integration page).\n\u003c/Info>\n\nIt's a rule based on [Chainalysis](https://docs.dfns.co/integrations/aml-kyt/chainalysis) KYT integration (Know-Your-Transaction). Upon transfer attempt, we will first register the transfer with Chainalysis (as a [\"withdrawal attempt\"](https://docs.chainalysis.com/api/kyt/#registration-register-a-withdrawal-attempt)), and fetch the screening results (alerts, exposures, addresses detected). Based on the results, and the configuration of this rule, the policy will be triggered.\n\nIt's called \"Pre\"-screening, because the scanned transaction is not on chain yet, it's still a transaction attempt (before the transaction actually make it on chain).\n\n```json\n{\n \"rule\": {\n \"kind\": \"ChainalysisTransactionPrescreening\",\n \"configuration\": {\n \"alerts\": {\n \"alertLevel\": \"LOW\",\n \"categoryIds\": []\n },\n \"exposures\": {\n \"direct\": {\n \"categoryIds\": []\n }\n },\n \"addresses\": {\n \"categoryIds\": []\n },\n \"fallbackBehaviours\": {\n \"skipUnscreenableTransaction\": false,\n \"skipUnsupportedNetwork\": false,\n \"skipUnsupportedAsset\": false,\n \"skipChainalysisFailure\": false\n }\n }\n }\n}\n```\n\n**Configuration**\n\n| Property | Type | Description |\n| --- | --- | --- |\n| `alerts`\u003cbr>\u003cbr>`.alertLevel`* | `string` | Minimum alert level above which the rule should trigger, if any [alert is returned in Chainalysis results](https://docs.chainalysis.com/api/kyt/#withdrawal-attempts-get-alerts). Can be `LOW`, `MEDIUM`, `HIGH`, or `SEVERE` |\n| `alerts`\u003cbr>\u003cbr>`.categoryIds`* | list of integers | List of Chainalysis category IDs (see [here](https://docs.chainalysis.com/api/kyt/#categories)). If you leave this list empty, alerts of any category will trigger the rule. Otherwise, if you only want the rule to trigger on specific categories, you can specify some in the list. |\n| `exposures`\u003cbr>\u003cbr>`.direct`\u003cbr>\u003cbr>`.categoryIds`* | list of integers | List of Chainalysis category IDs (see [here](https://docs.chainalysis.com/api/kyt/#categories)). If you leave this list empty, a [direct exposure](https://docs.chainalysis.com/api/kyt/#withdrawal-attempts-get-direct-exposure) of any category detected by chainalysis will trigger the rule. Otherwise, if you only want the rule to trigger on specific categories, you can specify some in the list. |\n| `addresses`\u003cbr>\u003cbr>`.categoryIds`* | list of integers | List of Chainalysis category IDs (see [here](https://docs.chainalysis.com/api/kyt/#categories)). If you leave this list empty, an [address](https://docs.chainalysis.com/api/kyt/#withdrawal-attempts-get-address-identifications) of any category identified by chainalysis will trigger the rule. Otherwise, if you only want the rule to trigger on specific categories, you can specify some in the list. |\n| `fallbackBehaviours`\u003cbr>\u003cbr>`.skipUnscreenableTransaction`* | boolean | Behaviour if the wallet activity is not screenable (eg. if it's a signature request of a hash). If true, a transaction which is \"unscreenable\" will just be skipped, and policy will not trigger |\n| `fallbackBehaviours.skipUnsupportedNetwork`* | boolean | Behaviour if the wallet activity is on a network not supported by chainalysis, or not yet supported in the dfns-chainalysis integration. If true, an unsupported network will just be skipped, and policy will not trigger |\n| `fallbackBehaviours.skipUnsupportedAsset`* | boolean | Behaviour if the wallet activity is with a asset not supported by chainalysis, or not yet supported in the dfns-chainalysis integration. If true, an unsupported asset will just be skipped, and policy will not trigger |\n| `fallbackBehaviours.skipChainalysisFailure`* | boolean | Behaviour if any issue with Chainalysis calls (timeout, results took too long, rate limiting errors, any error). If true, will skip if any error happens |\n\n","required":["kind","configuration"],"properties":{"kind":{"type":"string","enum":["ChainalysisTransactionPrescreening"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.5.rule.oneOf.6.kind","typeLabel":"enum\u003cstring>"},"configuration":{"type":"object","properties":{"alerts":{"type":"object","properties":{"alertLevel":{"type":"string","enum":["LOW","MEDIUM","HIGH","SEVERE"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.5.rule.oneOf.6.configuration.alerts.alertLevel","typeLabel":"enum\u003cstring>"},"categoryIds":{"type":"array","items":{"type":"integer","exclusiveMinimum":0,"uniqueKey":"\\items.items.[INDEX].oneOf.5.rule.oneOf.6.configuration.alerts.categoryIds.items.[INDEX]","typeLabel":"integer"},"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.5.rule.oneOf.6.configuration.alerts.categoryIds","typeLabel":"integer[]"}},"required":["alertLevel","categoryIds"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.5.rule.oneOf.6.configuration.alerts","typeLabel":"object"},"exposures":{"type":"object","properties":{"direct":{"type":"object","properties":{"categoryIds":{"type":"array","items":{"type":"integer","exclusiveMinimum":0,"uniqueKey":"\\items.items.[INDEX].oneOf.5.rule.oneOf.6.configuration.exposures.direct.categoryIds.items.[INDEX]","typeLabel":"integer"},"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.5.rule.oneOf.6.configuration.exposures.direct.categoryIds","typeLabel":"integer[]"}},"required":["categoryIds"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.5.rule.oneOf.6.configuration.exposures.direct","typeLabel":"object"}},"required":["direct"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.5.rule.oneOf.6.configuration.exposures","typeLabel":"object"},"addresses":{"type":"object","properties":{"categoryIds":{"type":"array","items":{"type":"integer","exclusiveMinimum":0,"uniqueKey":"\\items.items.[INDEX].oneOf.5.rule.oneOf.6.configuration.addresses.categoryIds.items.[INDEX]","typeLabel":"integer"},"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.5.rule.oneOf.6.configuration.addresses.categoryIds","typeLabel":"integer[]"}},"required":["categoryIds"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.5.rule.oneOf.6.configuration.addresses","typeLabel":"object"},"fallbackBehaviours":{"type":"object","properties":{"skipUnscreenableTransaction":{"type":"boolean","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.5.rule.oneOf.6.configuration.fallbackBehaviours.skipUnscreenableTransaction","typeLabel":"boolean"},"skipUnsupportedNetwork":{"type":"boolean","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.5.rule.oneOf.6.configuration.fallbackBehaviours.skipUnsupportedNetwork","typeLabel":"boolean"},"skipUnsupportedAsset":{"type":"boolean","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.5.rule.oneOf.6.configuration.fallbackBehaviours.skipUnsupportedAsset","typeLabel":"boolean"},"skipChainalysisFailure":{"type":"boolean","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.5.rule.oneOf.6.configuration.fallbackBehaviours.skipChainalysisFailure","typeLabel":"boolean"}},"required":["skipUnscreenableTransaction","skipUnsupportedNetwork","skipUnsupportedAsset","skipChainalysisFailure"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.5.rule.oneOf.6.configuration.fallbackBehaviours","typeLabel":"object"},"userIdTemplate":{"type":"string","minLength":1,"maxLength":50,"pattern":"^([a-zA-Z0-9_:-]|{wallet\\.id}|{wallet\\.externalId})+$","default":"dfns","description":"**Deprecated** — set `userIdTemplate` on the Chainalysis integration setting instead; when set there, the integration-level template takes precedence over this one.\n\nValue sent to Chainalysis as the \"user ID\". Used by Chainalysis for grouping transaction screenings.\n \nThis template can include variables, included in brackets. The following variables are currently supported: `{wallet.id}` and `{wallet.externalId}`.\nAs an example, if you set `userIdTemplate: \"dfns:{wallet.id}_{wallet.externalId}\"`, when your wallet receives a transaction that gets screened by a Chainalysis policy, the \"user ID\" sent to Chainalysis will be `dfns:wa-xxx_yyy` (`wa-xxx` being the wallet ID, and `yyy` being the wallet external ID).","uniqueKey":"\\items.items.[INDEX].oneOf.5.rule.oneOf.6.configuration.userIdTemplate","typeLabel":"string"}},"required":["alerts","exposures","addresses","fallbackBehaviours"],"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.5.rule.oneOf.6.configuration","typeLabel":"object"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.5.rule.oneOf.6","typeLabel":"ChainalysisTransactionPrescreening · object"},{"type":"object","title":"EllipticTransactionPrescreening","description":"\n\u003cInfo>\nThis rule can only be used once the Elliptic integration is activated from the Dfns dashboard settings.\n\u003c/Info>\n\nThis rule uses Elliptic KYT for pre-screening outgoing transfers. Upon transfer attempt, we run a synchronous Elliptic wallet analysis of the destination address, and check the returned risk score against the configured threshold, plus any configured risk rules / categories. If at or above the threshold, or if a configured rule / category matched, the policy is triggered.\n\nIt's called \"Pre\"-screening, because the scanned transaction is not on chain yet, it's still a transaction attempt.","required":["kind","configuration"],"properties":{"kind":{"type":"string","enum":["EllipticTransactionPrescreening"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.5.rule.oneOf.7.kind","typeLabel":"enum\u003cstring>"},"configuration":{"type":"object","properties":{"riskScoreThreshold":{"type":"number","minimum":0,"maximum":10,"description":"Risk score threshold (0-10, decimals allowed). The policy triggers if the Elliptic risk score is at or above the threshold.","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.5.rule.oneOf.7.configuration.riskScoreThreshold","typeLabel":"number"},"triggeredRules":{"type":"object","properties":{"ruleIds":{"type":"array","items":{"type":"string","format":"uuid","uniqueKey":"\\items.items.[INDEX].oneOf.5.rule.oneOf.7.configuration.triggeredRules.ruleIds.items.[INDEX]","typeLabel":"string\u003cuuid>"},"description":"IDs of risk rules from your Elliptic risk model. If any of these rules matched the analysis, the policy triggers regardless of the risk score. Leave empty to trigger on the risk score threshold only.","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.5.rule.oneOf.7.configuration.triggeredRules.ruleIds","typeLabel":"string\u003cuuid>[]"},"categories":{"type":"array","items":{"type":"string","minLength":1,"uniqueKey":"\\items.items.[INDEX].oneOf.5.rule.oneOf.7.configuration.triggeredRules.categories.items.[INDEX]","typeLabel":"string"},"description":"Elliptic category names (eg. \"Dark Market\"), matched case-insensitively. If a matched risk rule involves any of these categories, the policy triggers regardless of the risk score. Leave empty to trigger on the risk score threshold only.","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.5.rule.oneOf.7.configuration.triggeredRules.categories","typeLabel":"string[]"}},"required":["ruleIds","categories"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.5.rule.oneOf.7.configuration.triggeredRules","typeLabel":"object"},"fallbackBehaviours":{"type":"object","properties":{"skipUnscreenableTransaction":{"type":"boolean","description":"skip all wallet requests that cannot be screened (eg. raw signatures)","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.5.rule.oneOf.7.configuration.fallbackBehaviours.skipUnscreenableTransaction","typeLabel":"boolean"},"skipUnsupportedNetwork":{"type":"boolean","description":"skip requests on a network not supported yet in our Elliptic integration","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.5.rule.oneOf.7.configuration.fallbackBehaviours.skipUnsupportedNetwork","typeLabel":"boolean"},"skipEllipticFailure":{"type":"boolean","description":"skip any failure of the Elliptic analysis (timeout, rate limiting, any error)","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.5.rule.oneOf.7.configuration.fallbackBehaviours.skipEllipticFailure","typeLabel":"boolean"}},"required":["skipUnscreenableTransaction","skipUnsupportedNetwork","skipEllipticFailure"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.5.rule.oneOf.7.configuration.fallbackBehaviours","typeLabel":"object"}},"required":["riskScoreThreshold","triggeredRules","fallbackBehaviours"],"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.5.rule.oneOf.7.configuration","typeLabel":"object"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.5.rule.oneOf.7","typeLabel":"EllipticTransactionPrescreening · object"},{"type":"object","title":"GlobalLedgerTransactionPrescreening","description":"This rule uses GlobalLedger KYT for pre-screening outgoing transfers by checking the destination address risk score.\n\nUpon transfer attempt, we will query GlobalLedger's address risk API, and check if the risk score (0-100) is at or above the configured threshold, or if any alerts show up. If so, the policy will be triggered.\n\nIt's called \"Pre\"-screening, because the scanned transaction is not on chain yet, it's still a transaction attempt.","required":["kind","configuration"],"properties":{"kind":{"type":"string","enum":["GlobalLedgerTransactionPrescreening"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.5.rule.oneOf.8.kind","typeLabel":"enum\u003cstring>"},"configuration":{"type":"object","properties":{"riskScoreThreshold":{"type":"integer","minimum":0,"maximum":100,"description":"Risk score threshold (0-100). Policy triggers if address/transaction risk score >= threshold","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.5.rule.oneOf.8.configuration.riskScoreThreshold","typeLabel":"integer"},"fallbackBehaviours":{"type":"object","properties":{"skipUnscreenableTransaction":{"type":"boolean","description":"skip all wallet requests that cannot be screened (eg. raw signatures)","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.5.rule.oneOf.8.configuration.fallbackBehaviours.skipUnscreenableTransaction","typeLabel":"boolean"},"skipUnsupportedNetwork":{"type":"boolean","description":"skip transfer requests to a network not supported yet in our GlobalLedger integration","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.5.rule.oneOf.8.configuration.fallbackBehaviours.skipUnsupportedNetwork","typeLabel":"boolean"},"skipUnsupportedAsset":{"type":"boolean","description":"skip transfer requests of an asset not supported by our GlobalLedger integration","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.5.rule.oneOf.8.configuration.fallbackBehaviours.skipUnsupportedAsset","typeLabel":"boolean"},"skipGlobalLedgerFailure":{"type":"boolean","description":"skips any errors from GlobalLedger API request","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.5.rule.oneOf.8.configuration.fallbackBehaviours.skipGlobalLedgerFailure","typeLabel":"boolean"}},"required":["skipUnscreenableTransaction","skipUnsupportedNetwork","skipUnsupportedAsset","skipGlobalLedgerFailure"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.5.rule.oneOf.8.configuration.fallbackBehaviours","typeLabel":"object"}},"required":["riskScoreThreshold","fallbackBehaviours"],"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.5.rule.oneOf.8.configuration","typeLabel":"object"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.5.rule.oneOf.8","typeLabel":"GlobalLedgerTransactionPrescreening · object"},{"type":"object","title":"TravelRuleTransactionPrescreening","description":"This rule applies a Travel Rule check to outgoing transfers through the vendor selected in `configuration.vendor`: [Notabene](https://docs.dfns.co/integrations/travel-rule/notabene) or Sumsub. It can only be used once that vendor's integration is activated from the Dfns dashboard settings.\n\nIt ***ONLY*** applies to Dfns [Transfer Asset](https://docs.dfns.co/api-reference/wallets/transfer-asset) Api Calls. It is NOT supported for Transfers initiated via the dashboard. Upon transfer attempt with a [TravelRule](https://docs.dfns.co/api-reference/wallets/transfer-asset#body-travel-rule) payload, we call the vendor's APIs on your behalf to validate and submit the travel rule message, then wait for its outcome. With Notabene, Dfns waits for a response from the counterparty (for custodial transfers) or from Notabene (for non-custodial transfers). With Sumsub, Dfns submits a Travel Rule message and waits for Sumsub to report its outcome. In both cases the wait is bounded by `configuration.autoTriggerTimeoutSeconds`, after which the policy's configured action is applied.\n\nThe transfer's `travelRule` payload must be of the kind matching `configuration.vendor` — a mismatch triggers the policy and applies its configured action. A given wallet must be covered by at most one travel-rule policy (of any vendor): if several travel-rule policies apply to the same transfer carrying a `travelRule` payload, it is treated as a misconfiguration and blocked without contacting any vendor. Signatures and transfers without a payload are not affected, since the rule does not apply to them.\n\nIt's called \"Pre\"-screening, because the transaction is not on chain yet, it's still a transaction attempt (before the transaction actually make it on chain).","required":["kind","configuration"],"properties":{"kind":{"type":"string","enum":["TravelRuleTransactionPrescreening"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.5.rule.oneOf.9.kind","typeLabel":"enum\u003cstring>"},"configuration":{"oneOf":[{"type":"object","title":"TravelRuleNotabeneConfiguration","required":["vendor"],"properties":{"vendor":{"type":"string","enum":["Notabene"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.5.rule.oneOf.9.configuration.oneOf.0.vendor","typeLabel":"enum\u003cstring>"},"autoTriggerTimeoutSeconds":{"type":"integer","minimum":0,"maximum":2592000,"default":86400,"description":"Seconds to wait for the vendor's verdict before the policy action applies. Maximum 2592000 (30 days). Defaults to 86400 (24 hours).","uniqueKey":"\\items.items.[INDEX].oneOf.5.rule.oneOf.9.configuration.oneOf.0.autoTriggerTimeoutSeconds","typeLabel":"integer"},"autoClearAfterDeliveredTimeoutSeconds":{"type":"integer","minimum":0,"maximum":2592000,"description":"Seconds after delivery before a still-pending evaluation clears. Maximum 2592000 (30 days).","uniqueKey":"\\items.items.[INDEX].oneOf.5.rule.oneOf.9.configuration.oneOf.0.autoClearAfterDeliveredTimeoutSeconds","typeLabel":"integer"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.5.rule.oneOf.9.configuration.oneOf.0","typeLabel":"TravelRuleNotabeneConfiguration · object"},{"type":"object","title":"TravelRuleSumsubConfiguration","required":["vendor"],"properties":{"vendor":{"type":"string","enum":["Sumsub"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.5.rule.oneOf.9.configuration.oneOf.1.vendor","typeLabel":"enum\u003cstring>"},"autoTriggerTimeoutSeconds":{"type":"integer","minimum":0,"maximum":2592000,"default":86400,"description":"Seconds to wait for the vendor's verdict before the policy action applies. Maximum 2592000 (30 days). Defaults to 86400 (24 hours).","uniqueKey":"\\items.items.[INDEX].oneOf.5.rule.oneOf.9.configuration.oneOf.1.autoTriggerTimeoutSeconds","typeLabel":"integer"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.5.rule.oneOf.9.configuration.oneOf.1","typeLabel":"TravelRuleSumsubConfiguration · object"}],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.5.rule.oneOf.9.configuration","typeLabel":"TravelRuleNotabeneConfiguration · object | TravelRuleSumsubConfiguration · object"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.5.rule.oneOf.9","typeLabel":"TravelRuleTransactionPrescreening · object"}],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.5.rule","typeLabel":"AlwaysTrigger · object | TransactionRecipientWhitelist · object | TransactionAmountLimit · object | TransactionAmountLimitNominal · object | TransactionAmountVelocity · object | TransactionCountVelocity · object | ChainalysisTransactionPrescreening · object | EllipticTransactionPrescreening · object | GlobalLedgerTransactionPrescreening · object | TravelRuleTransactionPrescreening · object"},"action":{"oneOf":[{"type":"object","title":"RequestApproval","description":"\nThis action means that activity will first require an Approval process to be completed before it can be executed (or be aborted if someone rejects it during the approval process).\n\nOne or several groups of approvers need to be specified. These groups define who is allowed to approve / reject an activity.\n\nThe activity will only be executed if all approver groups reach their \"quorum\" of approvals. Otherwise, if any one user within any approver group rejects, then the activity is aborted and the call is not executed.\n\nThe example below shows a `RequestApproval` action, configured with one approval group requiring 2 approvals amongst three specific users.\n\n```json\n{\n \"action\": {\n \"kind\": \"RequestApproval\",\n \"autoRejectTimeout\": 60, // minutes\n \"approvalGroups\": [\n {\n \"name\": \"Admins\",\n \"quorum\": 2, // only 2 approvers required in that group \n \"approvers\": {\n \"userId\": {\n \"in\": [\"us-...1\", \"us-...2\", \"us-...3\"],\n }\n }\n }\n ],\n\n }\n}\n```\n\n**Don't lock yourself up**\n\nBy default, users cannot approve an activity they initiated themselves, even if they are in an approval group. To allow this, you must set `initiatorCanApprove: true`.\n\n*Example 1:* For any wallet transfer, a policy is setup to require approval from **1 specific admin user** (eg. the CEO). `initiatorCanApprove` was not set to `true`. If the CEO himself initiates a transfer, no-one can approve his transfer and it's stuck.\n\n*Example 2:* Company has only 3 users. A policy is setup to require approval from **any 3 users** (`quorum: 3`) for any modification of a policy. `initiatorCanApprove` was not set to `true`. In this case, they are locked, and the policy cannot be modified: whoever requests a modification cannot approve, and the policy is therefore always missing one approver. To unlock, they would need to invite a new user and give him the rights to approve as well.\n ","required":["kind","approvalGroups"],"properties":{"kind":{"type":"string","enum":["RequestApproval"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.5.action.oneOf.0.kind","typeLabel":"enum\u003cstring>"},"approvalGroups":{"type":"array","items":{"type":"object","properties":{"quorum":{"type":"integer","minimum":1,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.5.action.oneOf.0.approvalGroups.items.[INDEX].quorum","typeLabel":"integer"},"approvers":{"type":"object","properties":{"userId":{"type":"object","properties":{"in":{"type":"array","items":{"type":"string","minLength":1,"uniqueKey":"\\items.items.[INDEX].oneOf.5.action.oneOf.0.approvalGroups.items.[INDEX].approvers.userId.in.items.[INDEX]","typeLabel":"string"},"minItems":1,"maxItems":100,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.5.action.oneOf.0.approvalGroups.items.[INDEX].approvers.userId.in","typeLabel":"string[]"}},"required":["in"],"additionalProperties":false,"description":"Users and service accounts who may approve.","uniqueKey":"\\items.items.[INDEX].oneOf.5.action.oneOf.0.approvalGroups.items.[INDEX].approvers.userId","typeLabel":"object"},"userGroupId":{"type":"object","properties":{"in":{"type":"array","items":{"type":"string","minLength":1,"maxLength":64,"pattern":"^ug-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"User group id.","example":"ug-139tf-f58l8-lsbt6dp47lfsdvgh","uniqueKey":"\\items.items.[INDEX].oneOf.5.action.oneOf.0.approvalGroups.items.[INDEX].approvers.userGroupId.in.items.[INDEX]","typeLabel":"string"},"minItems":1,"maxItems":100,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.5.action.oneOf.0.approvalGroups.items.[INDEX].approvers.userGroupId.in","typeLabel":"string[]"}},"required":["in"],"additionalProperties":false,"description":"User groups whose members may approve.","uniqueKey":"\\items.items.[INDEX].oneOf.5.action.oneOf.0.approvalGroups.items.[INDEX].approvers.userGroupId","typeLabel":"object"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.5.action.oneOf.0.approvalGroups.items.[INDEX].approvers","typeLabel":"object"},"name":{"type":"string","uniqueKey":"\\items.items.[INDEX].oneOf.5.action.oneOf.0.approvalGroups.items.[INDEX].name","typeLabel":"string"},"initiatorCanApprove":{"type":"boolean","description":"Whether the initiator of the activity can participate in the approval.","uniqueKey":"\\items.items.[INDEX].oneOf.5.action.oneOf.0.approvalGroups.items.[INDEX].initiatorCanApprove","typeLabel":"boolean"},"serviceAccountsCanApprove":{"type":"boolean","description":"Whether service accounts can participate in the approval for this group.","uniqueKey":"\\items.items.[INDEX].oneOf.5.action.oneOf.0.approvalGroups.items.[INDEX].serviceAccountsCanApprove","typeLabel":"boolean"}},"required":["quorum","approvers"],"additionalProperties":false,"uniqueKey":"\\items.items.[INDEX].oneOf.5.action.oneOf.0.approvalGroups.items.[INDEX]","typeLabel":"object"},"minItems":1,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.5.action.oneOf.0.approvalGroups","typeLabel":"object[]"},"autoRejectTimeout":{"oneOf":[{"type":"integer","minimum":1,"uniqueKey":"\\items.items.[INDEX].oneOf.5.action.oneOf.0.autoRejectTimeout.oneOf.0","typeLabel":"integer"},{"type":"null","minimum":1,"uniqueKey":"\\items.items.[INDEX].oneOf.5.action.oneOf.0.autoRejectTimeout.oneOf.1","typeLabel":"null"}],"uniqueKey":"\\items.items.[INDEX].oneOf.5.action.oneOf.0.autoRejectTimeout","typeLabel":"integer | null"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.5.action.oneOf.0","typeLabel":"RequestApproval · object"},{"type":"object","title":"Block","description":"This action means that the activity will be blocked if the policy is triggered.\n\n```json\n{\n \"action\": {\n \"kind\": \"Block\"\n }\n}\n```\n","required":["kind"],"properties":{"kind":{"type":"string","enum":["Block"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.5.action.oneOf.1.kind","typeLabel":"enum\u003cstring>"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.5.action.oneOf.1","typeLabel":"Block · object"},{"type":"object","title":"NoAction","description":"\n This action kind means that nothing will happen after policy rule evaluation. It's meant to be used with policy rules \"`ChainalysisTransactionPrescreening`\" or \"`ChainalysisTransactionScreening`\". This action is for when you just want the KYT analysis rule to be run, and then if triggered, those result returned in a `policy.triggered` [Webhook Event](https://docs.dfns.co/api-reference/webhook-events).\n\n```json\n{\n \"action\": {\n \"kind\": \"NoAction\"\n }\n}\n```\n ","required":["kind"],"properties":{"kind":{"type":"string","enum":["NoAction"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.5.action.oneOf.2.kind","typeLabel":"enum\u003cstring>"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.5.action.oneOf.2","typeLabel":"NoAction · object"}],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.5.action","typeLabel":"RequestApproval · object | Block · object | NoAction · object"},"dateCreated":{"type":"string","uniqueKey":"\\items.items.[INDEX].oneOf.5.dateCreated","typeLabel":"string"},"dateUpdated":{"type":"string","uniqueKey":"\\items.items.[INDEX].oneOf.5.dateUpdated","typeLabel":"string"},"filters":{"type":"object","properties":{"walletId":{"type":"object","properties":{"in":{"type":"array","items":{"type":"string","minLength":1,"uniqueKey":"\\items.items.[INDEX].oneOf.5.filters.walletId.in.items.[INDEX]","typeLabel":"string"},"minItems":1,"maxItems":100,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.5.filters.walletId.in","typeLabel":"string[]"}},"required":["in"],"additionalProperties":false,"uniqueKey":"\\items.items.[INDEX].oneOf.5.filters.walletId","typeLabel":"object"},"walletTags":{"type":"object","properties":{"hasAny":{"type":"array","items":{"type":"string","minLength":1,"uniqueKey":"\\items.items.[INDEX].oneOf.5.filters.walletTags.hasAny.items.[INDEX]","typeLabel":"string"},"minItems":1,"maxItems":100,"uniqueKey":"\\items.items.[INDEX].oneOf.5.filters.walletTags.hasAny","typeLabel":"string[]"},"hasAll":{"type":"array","items":{"type":"string","minLength":1,"uniqueKey":"\\items.items.[INDEX].oneOf.5.filters.walletTags.hasAll.items.[INDEX]","typeLabel":"string"},"minItems":1,"maxItems":100,"uniqueKey":"\\items.items.[INDEX].oneOf.5.filters.walletTags.hasAll","typeLabel":"string[]"}},"additionalProperties":false,"uniqueKey":"\\items.items.[INDEX].oneOf.5.filters.walletTags","typeLabel":"object"},"keyId":{"type":"object","properties":{"in":{"type":"array","items":{"type":"string","minLength":1,"maxLength":64,"pattern":"^key-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"Key id.","example":"key-01snl-t56gb-j8tsok0vn802p80i","uniqueKey":"\\items.items.[INDEX].oneOf.5.filters.keyId.in.items.[INDEX]","typeLabel":"string"},"minItems":1,"maxItems":100,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.5.filters.keyId.in","typeLabel":"string[]"}},"required":["in"],"additionalProperties":false,"uniqueKey":"\\items.items.[INDEX].oneOf.5.filters.keyId","typeLabel":"object"},"keyStoreId":{"type":"object","properties":{"in":{"type":"array","items":{"type":"string","minLength":1,"maxLength":64,"pattern":"^store-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"Key store id.","example":"store-425nf-ebf0a-qq22t6qra51tj8j0","uniqueKey":"\\items.items.[INDEX].oneOf.5.filters.keyStoreId.in.items.[INDEX]","typeLabel":"string"},"minItems":1,"maxItems":100,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.5.filters.keyStoreId.in","typeLabel":"string[]"}},"required":["in"],"additionalProperties":false,"uniqueKey":"\\items.items.[INDEX].oneOf.5.filters.keyStoreId","typeLabel":"object"}},"additionalProperties":false,"uniqueKey":"\\items.items.[INDEX].oneOf.5.filters","typeLabel":"object"},"pendingChangeRequest":{"type":"object","properties":{"id":{"type":"string","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.5.pendingChangeRequest.id","typeLabel":"string"},"requester":{"type":"object","properties":{"userId":{"type":"string","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.5.pendingChangeRequest.requester.userId","typeLabel":"string"},"tokenId":{"type":"string","uniqueKey":"\\items.items.[INDEX].oneOf.5.pendingChangeRequest.requester.tokenId","typeLabel":"string"},"appId":{"type":"string","uniqueKey":"\\items.items.[INDEX].oneOf.5.pendingChangeRequest.requester.appId","typeLabel":"string"}},"required":["userId"],"description":"The user who initiated the change request.","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.5.pendingChangeRequest.requester","typeLabel":"object"},"kind":{"type":"string","enum":["Policy"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.5.pendingChangeRequest.kind","typeLabel":"enum\u003cstring>"},"operationKind":{"type":"string","enum":["Update"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.5.pendingChangeRequest.operationKind","typeLabel":"enum\u003cstring>"},"status":{"type":"string","enum":["Applied","Failed","Pending","Rejected"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.5.pendingChangeRequest.status","typeLabel":"enum\u003cstring>"},"entityId":{"type":"string","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.5.pendingChangeRequest.entityId","typeLabel":"string"},"dateCreated":{"type":"string","format":"date-time","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.5.pendingChangeRequest.dateCreated","typeLabel":"string\u003cdate-time>"},"body":{"oneOf":[{"type":"object","title":"Registry:Addresses:Modify","required":["id","name","status","activityKind","rule","action"],"properties":{"id":{"type":"string","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.5.pendingChangeRequest.body.oneOf.0.id","typeLabel":"string"},"name":{"type":"string","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.5.pendingChangeRequest.body.oneOf.0.name","typeLabel":"string"},"status":{"type":"string","enum":["Active","Archived"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.5.pendingChangeRequest.body.oneOf.0.status","typeLabel":"enum\u003cstring>"},"activityKind":{"type":"string","enum":["Registry:Addresses:Modify"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.5.pendingChangeRequest.body.oneOf.0.activityKind","typeLabel":"enum\u003cstring>"},"rule":{"type":"object","properties":{"kind":{"type":"string","enum":["AlwaysTrigger"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.5.pendingChangeRequest.body.oneOf.0.rule.kind","typeLabel":"enum\u003cstring>"},"configuration":{"type":"object","properties":{},"additionalProperties":false,"uniqueKey":"\\items.items.[INDEX].oneOf.5.pendingChangeRequest.body.oneOf.0.rule.configuration","typeLabel":"object"}},"required":["kind"],"additionalProperties":false,"description":"This rule will always be triggered, meaning that if this rule is defined on a policy, the policy will always trigger the policy action, regardless of the activity details.","title":"AlwaysTrigger","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.5.pendingChangeRequest.body.oneOf.0.rule","typeLabel":"AlwaysTrigger · object"},"action":{"oneOf":[{"type":"object","title":"RequestApproval","description":"\nThis action means that activity will first require an Approval process to be completed before it can be executed (or be aborted if someone rejects it during the approval process).\n\nOne or several groups of approvers need to be specified. These groups define who is allowed to approve / reject an activity.\n\nThe activity will only be executed if all approver groups reach their \"quorum\" of approvals. Otherwise, if any one user within any approver group rejects, then the activity is aborted and the call is not executed.\n\nThe example below shows a `RequestApproval` action, configured with one approval group requiring 2 approvals amongst three specific users.\n\n```json\n{\n \"action\": {\n \"kind\": \"RequestApproval\",\n \"autoRejectTimeout\": 60, // minutes\n \"approvalGroups\": [\n {\n \"name\": \"Admins\",\n \"quorum\": 2, // only 2 approvers required in that group \n \"approvers\": {\n \"userId\": {\n \"in\": [\"us-...1\", \"us-...2\", \"us-...3\"],\n }\n }\n }\n ],\n\n }\n}\n```\n\n**Don't lock yourself up**\n\nBy default, users cannot approve an activity they initiated themselves, even if they are in an approval group. To allow this, you must set `initiatorCanApprove: true`.\n\n*Example 1:* For any wallet transfer, a policy is setup to require approval from **1 specific admin user** (eg. the CEO). `initiatorCanApprove` was not set to `true`. If the CEO himself initiates a transfer, no-one can approve his transfer and it's stuck.\n\n*Example 2:* Company has only 3 users. A policy is setup to require approval from **any 3 users** (`quorum: 3`) for any modification of a policy. `initiatorCanApprove` was not set to `true`. In this case, they are locked, and the policy cannot be modified: whoever requests a modification cannot approve, and the policy is therefore always missing one approver. To unlock, they would need to invite a new user and give him the rights to approve as well.\n ","required":["kind","approvalGroups"],"properties":{"kind":{"type":"string","enum":["RequestApproval"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.5.pendingChangeRequest.body.oneOf.0.action.oneOf.0.kind","typeLabel":"enum\u003cstring>"},"approvalGroups":{"type":"array","items":{"type":"object","properties":{"quorum":{"type":"integer","minimum":1,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.5.pendingChangeRequest.body.oneOf.0.action.oneOf.0.approvalGroups.items.[INDEX].quorum","typeLabel":"integer"},"approvers":{"type":"object","properties":{"userId":{"type":"object","properties":{"in":{"type":"array","items":{"type":"string","minLength":1,"uniqueKey":"\\items.items.[INDEX].oneOf.5.pendingChangeRequest.body.oneOf.0.action.oneOf.0.approvalGroups.items.[INDEX].approvers.userId.in.items.[INDEX]","typeLabel":"string"},"minItems":1,"maxItems":100,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.5.pendingChangeRequest.body.oneOf.0.action.oneOf.0.approvalGroups.items.[INDEX].approvers.userId.in","typeLabel":"string[]"}},"required":["in"],"additionalProperties":false,"description":"Users and service accounts who may approve.","uniqueKey":"\\items.items.[INDEX].oneOf.5.pendingChangeRequest.body.oneOf.0.action.oneOf.0.approvalGroups.items.[INDEX].approvers.userId","typeLabel":"object"},"userGroupId":{"type":"object","properties":{"in":{"type":"array","items":{"type":"string","minLength":1,"maxLength":64,"pattern":"^ug-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"User group id.","example":"ug-139tf-f58l8-lsbt6dp47lfsdvgh","uniqueKey":"\\items.items.[INDEX].oneOf.5.pendingChangeRequest.body.oneOf.0.action.oneOf.0.approvalGroups.items.[INDEX].approvers.userGroupId.in.items.[INDEX]","typeLabel":"string"},"minItems":1,"maxItems":100,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.5.pendingChangeRequest.body.oneOf.0.action.oneOf.0.approvalGroups.items.[INDEX].approvers.userGroupId.in","typeLabel":"string[]"}},"required":["in"],"additionalProperties":false,"description":"User groups whose members may approve.","uniqueKey":"\\items.items.[INDEX].oneOf.5.pendingChangeRequest.body.oneOf.0.action.oneOf.0.approvalGroups.items.[INDEX].approvers.userGroupId","typeLabel":"object"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.5.pendingChangeRequest.body.oneOf.0.action.oneOf.0.approvalGroups.items.[INDEX].approvers","typeLabel":"object"},"name":{"type":"string","uniqueKey":"\\items.items.[INDEX].oneOf.5.pendingChangeRequest.body.oneOf.0.action.oneOf.0.approvalGroups.items.[INDEX].name","typeLabel":"string"},"initiatorCanApprove":{"type":"boolean","description":"Whether the initiator of the activity can participate in the approval.","uniqueKey":"\\items.items.[INDEX].oneOf.5.pendingChangeRequest.body.oneOf.0.action.oneOf.0.approvalGroups.items.[INDEX].initiatorCanApprove","typeLabel":"boolean"},"serviceAccountsCanApprove":{"type":"boolean","description":"Whether service accounts can participate in the approval for this group.","uniqueKey":"\\items.items.[INDEX].oneOf.5.pendingChangeRequest.body.oneOf.0.action.oneOf.0.approvalGroups.items.[INDEX].serviceAccountsCanApprove","typeLabel":"boolean"}},"required":["quorum","approvers"],"additionalProperties":false,"uniqueKey":"\\items.items.[INDEX].oneOf.5.pendingChangeRequest.body.oneOf.0.action.oneOf.0.approvalGroups.items.[INDEX]","typeLabel":"object"},"minItems":1,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.5.pendingChangeRequest.body.oneOf.0.action.oneOf.0.approvalGroups","typeLabel":"object[]"},"autoRejectTimeout":{"oneOf":[{"type":"integer","minimum":1,"uniqueKey":"\\items.items.[INDEX].oneOf.5.pendingChangeRequest.body.oneOf.0.action.oneOf.0.autoRejectTimeout.oneOf.0","typeLabel":"integer"},{"type":"null","minimum":1,"uniqueKey":"\\items.items.[INDEX].oneOf.5.pendingChangeRequest.body.oneOf.0.action.oneOf.0.autoRejectTimeout.oneOf.1","typeLabel":"null"}],"uniqueKey":"\\items.items.[INDEX].oneOf.5.pendingChangeRequest.body.oneOf.0.action.oneOf.0.autoRejectTimeout","typeLabel":"integer | null"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.5.pendingChangeRequest.body.oneOf.0.action.oneOf.0","typeLabel":"RequestApproval · object"},{"type":"object","title":"Block","description":"This action means that the activity will be blocked if the policy is triggered.\n\n```json\n{\n \"action\": {\n \"kind\": \"Block\"\n }\n}\n```\n","required":["kind"],"properties":{"kind":{"type":"string","enum":["Block"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.5.pendingChangeRequest.body.oneOf.0.action.oneOf.1.kind","typeLabel":"enum\u003cstring>"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.5.pendingChangeRequest.body.oneOf.0.action.oneOf.1","typeLabel":"Block · object"}],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.5.pendingChangeRequest.body.oneOf.0.action","typeLabel":"RequestApproval · object | Block · object"},"dateCreated":{"type":"string","uniqueKey":"\\items.items.[INDEX].oneOf.5.pendingChangeRequest.body.oneOf.0.dateCreated","typeLabel":"string"},"dateUpdated":{"type":"string","uniqueKey":"\\items.items.[INDEX].oneOf.5.pendingChangeRequest.body.oneOf.0.dateUpdated","typeLabel":"string"},"filters":{"type":"object","properties":{},"uniqueKey":"\\items.items.[INDEX].oneOf.5.pendingChangeRequest.body.oneOf.0.filters","typeLabel":"object"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.5.pendingChangeRequest.body.oneOf.0","typeLabel":"Registry:Addresses:Modify · object"},{"type":"object","title":"Permissions:Assign","required":["id","name","status","activityKind","rule","action"],"properties":{"id":{"type":"string","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.5.pendingChangeRequest.body.oneOf.1.id","typeLabel":"string"},"name":{"type":"string","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.5.pendingChangeRequest.body.oneOf.1.name","typeLabel":"string"},"status":{"type":"string","enum":["Active","Archived"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.5.pendingChangeRequest.body.oneOf.1.status","typeLabel":"enum\u003cstring>"},"activityKind":{"type":"string","enum":["Permissions:Assign"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.5.pendingChangeRequest.body.oneOf.1.activityKind","typeLabel":"enum\u003cstring>"},"rule":{"type":"object","properties":{"kind":{"type":"string","enum":["AlwaysTrigger"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.5.pendingChangeRequest.body.oneOf.1.rule.kind","typeLabel":"enum\u003cstring>"},"configuration":{"type":"object","properties":{},"additionalProperties":false,"uniqueKey":"\\items.items.[INDEX].oneOf.5.pendingChangeRequest.body.oneOf.1.rule.configuration","typeLabel":"object"}},"required":["kind"],"additionalProperties":false,"description":"This rule will always be triggered, meaning that if this rule is defined on a policy, the policy will always trigger the policy action, regardless of the activity details.","title":"AlwaysTrigger","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.5.pendingChangeRequest.body.oneOf.1.rule","typeLabel":"AlwaysTrigger · object"},"action":{"oneOf":[{"type":"object","title":"RequestApproval","description":"\nThis action means that activity will first require an Approval process to be completed before it can be executed (or be aborted if someone rejects it during the approval process).\n\nOne or several groups of approvers need to be specified. These groups define who is allowed to approve / reject an activity.\n\nThe activity will only be executed if all approver groups reach their \"quorum\" of approvals. Otherwise, if any one user within any approver group rejects, then the activity is aborted and the call is not executed.\n\nThe example below shows a `RequestApproval` action, configured with one approval group requiring 2 approvals amongst three specific users.\n\n```json\n{\n \"action\": {\n \"kind\": \"RequestApproval\",\n \"autoRejectTimeout\": 60, // minutes\n \"approvalGroups\": [\n {\n \"name\": \"Admins\",\n \"quorum\": 2, // only 2 approvers required in that group \n \"approvers\": {\n \"userId\": {\n \"in\": [\"us-...1\", \"us-...2\", \"us-...3\"],\n }\n }\n }\n ],\n\n }\n}\n```\n\n**Don't lock yourself up**\n\nBy default, users cannot approve an activity they initiated themselves, even if they are in an approval group. To allow this, you must set `initiatorCanApprove: true`.\n\n*Example 1:* For any wallet transfer, a policy is setup to require approval from **1 specific admin user** (eg. the CEO). `initiatorCanApprove` was not set to `true`. If the CEO himself initiates a transfer, no-one can approve his transfer and it's stuck.\n\n*Example 2:* Company has only 3 users. A policy is setup to require approval from **any 3 users** (`quorum: 3`) for any modification of a policy. `initiatorCanApprove` was not set to `true`. In this case, they are locked, and the policy cannot be modified: whoever requests a modification cannot approve, and the policy is therefore always missing one approver. To unlock, they would need to invite a new user and give him the rights to approve as well.\n ","required":["kind","approvalGroups"],"properties":{"kind":{"type":"string","enum":["RequestApproval"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.5.pendingChangeRequest.body.oneOf.1.action.oneOf.0.kind","typeLabel":"enum\u003cstring>"},"approvalGroups":{"type":"array","items":{"type":"object","properties":{"quorum":{"type":"integer","minimum":1,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.5.pendingChangeRequest.body.oneOf.1.action.oneOf.0.approvalGroups.items.[INDEX].quorum","typeLabel":"integer"},"approvers":{"type":"object","properties":{"userId":{"type":"object","properties":{"in":{"type":"array","items":{"type":"string","minLength":1,"uniqueKey":"\\items.items.[INDEX].oneOf.5.pendingChangeRequest.body.oneOf.1.action.oneOf.0.approvalGroups.items.[INDEX].approvers.userId.in.items.[INDEX]","typeLabel":"string"},"minItems":1,"maxItems":100,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.5.pendingChangeRequest.body.oneOf.1.action.oneOf.0.approvalGroups.items.[INDEX].approvers.userId.in","typeLabel":"string[]"}},"required":["in"],"additionalProperties":false,"description":"Users and service accounts who may approve.","uniqueKey":"\\items.items.[INDEX].oneOf.5.pendingChangeRequest.body.oneOf.1.action.oneOf.0.approvalGroups.items.[INDEX].approvers.userId","typeLabel":"object"},"userGroupId":{"type":"object","properties":{"in":{"type":"array","items":{"type":"string","minLength":1,"maxLength":64,"pattern":"^ug-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"User group id.","example":"ug-139tf-f58l8-lsbt6dp47lfsdvgh","uniqueKey":"\\items.items.[INDEX].oneOf.5.pendingChangeRequest.body.oneOf.1.action.oneOf.0.approvalGroups.items.[INDEX].approvers.userGroupId.in.items.[INDEX]","typeLabel":"string"},"minItems":1,"maxItems":100,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.5.pendingChangeRequest.body.oneOf.1.action.oneOf.0.approvalGroups.items.[INDEX].approvers.userGroupId.in","typeLabel":"string[]"}},"required":["in"],"additionalProperties":false,"description":"User groups whose members may approve.","uniqueKey":"\\items.items.[INDEX].oneOf.5.pendingChangeRequest.body.oneOf.1.action.oneOf.0.approvalGroups.items.[INDEX].approvers.userGroupId","typeLabel":"object"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.5.pendingChangeRequest.body.oneOf.1.action.oneOf.0.approvalGroups.items.[INDEX].approvers","typeLabel":"object"},"name":{"type":"string","uniqueKey":"\\items.items.[INDEX].oneOf.5.pendingChangeRequest.body.oneOf.1.action.oneOf.0.approvalGroups.items.[INDEX].name","typeLabel":"string"},"initiatorCanApprove":{"type":"boolean","description":"Whether the initiator of the activity can participate in the approval.","uniqueKey":"\\items.items.[INDEX].oneOf.5.pendingChangeRequest.body.oneOf.1.action.oneOf.0.approvalGroups.items.[INDEX].initiatorCanApprove","typeLabel":"boolean"},"serviceAccountsCanApprove":{"type":"boolean","description":"Whether service accounts can participate in the approval for this group.","uniqueKey":"\\items.items.[INDEX].oneOf.5.pendingChangeRequest.body.oneOf.1.action.oneOf.0.approvalGroups.items.[INDEX].serviceAccountsCanApprove","typeLabel":"boolean"}},"required":["quorum","approvers"],"additionalProperties":false,"uniqueKey":"\\items.items.[INDEX].oneOf.5.pendingChangeRequest.body.oneOf.1.action.oneOf.0.approvalGroups.items.[INDEX]","typeLabel":"object"},"minItems":1,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.5.pendingChangeRequest.body.oneOf.1.action.oneOf.0.approvalGroups","typeLabel":"object[]"},"autoRejectTimeout":{"oneOf":[{"type":"integer","minimum":1,"uniqueKey":"\\items.items.[INDEX].oneOf.5.pendingChangeRequest.body.oneOf.1.action.oneOf.0.autoRejectTimeout.oneOf.0","typeLabel":"integer"},{"type":"null","minimum":1,"uniqueKey":"\\items.items.[INDEX].oneOf.5.pendingChangeRequest.body.oneOf.1.action.oneOf.0.autoRejectTimeout.oneOf.1","typeLabel":"null"}],"uniqueKey":"\\items.items.[INDEX].oneOf.5.pendingChangeRequest.body.oneOf.1.action.oneOf.0.autoRejectTimeout","typeLabel":"integer | null"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.5.pendingChangeRequest.body.oneOf.1.action.oneOf.0","typeLabel":"RequestApproval · object"},{"type":"object","title":"Block","description":"This action means that the activity will be blocked if the policy is triggered.\n\n```json\n{\n \"action\": {\n \"kind\": \"Block\"\n }\n}\n```\n","required":["kind"],"properties":{"kind":{"type":"string","enum":["Block"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.5.pendingChangeRequest.body.oneOf.1.action.oneOf.1.kind","typeLabel":"enum\u003cstring>"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.5.pendingChangeRequest.body.oneOf.1.action.oneOf.1","typeLabel":"Block · object"}],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.5.pendingChangeRequest.body.oneOf.1.action","typeLabel":"RequestApproval · object | Block · object"},"dateCreated":{"type":"string","uniqueKey":"\\items.items.[INDEX].oneOf.5.pendingChangeRequest.body.oneOf.1.dateCreated","typeLabel":"string"},"dateUpdated":{"type":"string","uniqueKey":"\\items.items.[INDEX].oneOf.5.pendingChangeRequest.body.oneOf.1.dateUpdated","typeLabel":"string"},"filters":{"type":"object","properties":{"permissionId":{"type":"object","properties":{"in":{"type":"array","items":{"type":"string","minLength":1,"uniqueKey":"\\items.items.[INDEX].oneOf.5.pendingChangeRequest.body.oneOf.1.filters.permissionId.in.items.[INDEX]","typeLabel":"string"},"minItems":1,"maxItems":100,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.5.pendingChangeRequest.body.oneOf.1.filters.permissionId.in","typeLabel":"string[]"}},"required":["in"],"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.5.pendingChangeRequest.body.oneOf.1.filters.permissionId","typeLabel":"object"}},"required":["permissionId"],"additionalProperties":false,"uniqueKey":"\\items.items.[INDEX].oneOf.5.pendingChangeRequest.body.oneOf.1.filters","typeLabel":"object"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.5.pendingChangeRequest.body.oneOf.1","typeLabel":"Permissions:Assign · object"},{"type":"object","title":"Permissions:Modify","required":["id","name","status","activityKind","rule","action"],"properties":{"id":{"type":"string","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.5.pendingChangeRequest.body.oneOf.2.id","typeLabel":"string"},"name":{"type":"string","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.5.pendingChangeRequest.body.oneOf.2.name","typeLabel":"string"},"status":{"type":"string","enum":["Active","Archived"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.5.pendingChangeRequest.body.oneOf.2.status","typeLabel":"enum\u003cstring>"},"activityKind":{"type":"string","enum":["Permissions:Modify"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.5.pendingChangeRequest.body.oneOf.2.activityKind","typeLabel":"enum\u003cstring>"},"rule":{"type":"object","properties":{"kind":{"type":"string","enum":["AlwaysTrigger"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.5.pendingChangeRequest.body.oneOf.2.rule.kind","typeLabel":"enum\u003cstring>"},"configuration":{"type":"object","properties":{},"additionalProperties":false,"uniqueKey":"\\items.items.[INDEX].oneOf.5.pendingChangeRequest.body.oneOf.2.rule.configuration","typeLabel":"object"}},"required":["kind"],"additionalProperties":false,"description":"This rule will always be triggered, meaning that if this rule is defined on a policy, the policy will always trigger the policy action, regardless of the activity details.","title":"AlwaysTrigger","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.5.pendingChangeRequest.body.oneOf.2.rule","typeLabel":"AlwaysTrigger · object"},"action":{"oneOf":[{"type":"object","title":"RequestApproval","description":"\nThis action means that activity will first require an Approval process to be completed before it can be executed (or be aborted if someone rejects it during the approval process).\n\nOne or several groups of approvers need to be specified. These groups define who is allowed to approve / reject an activity.\n\nThe activity will only be executed if all approver groups reach their \"quorum\" of approvals. Otherwise, if any one user within any approver group rejects, then the activity is aborted and the call is not executed.\n\nThe example below shows a `RequestApproval` action, configured with one approval group requiring 2 approvals amongst three specific users.\n\n```json\n{\n \"action\": {\n \"kind\": \"RequestApproval\",\n \"autoRejectTimeout\": 60, // minutes\n \"approvalGroups\": [\n {\n \"name\": \"Admins\",\n \"quorum\": 2, // only 2 approvers required in that group \n \"approvers\": {\n \"userId\": {\n \"in\": [\"us-...1\", \"us-...2\", \"us-...3\"],\n }\n }\n }\n ],\n\n }\n}\n```\n\n**Don't lock yourself up**\n\nBy default, users cannot approve an activity they initiated themselves, even if they are in an approval group. To allow this, you must set `initiatorCanApprove: true`.\n\n*Example 1:* For any wallet transfer, a policy is setup to require approval from **1 specific admin user** (eg. the CEO). `initiatorCanApprove` was not set to `true`. If the CEO himself initiates a transfer, no-one can approve his transfer and it's stuck.\n\n*Example 2:* Company has only 3 users. A policy is setup to require approval from **any 3 users** (`quorum: 3`) for any modification of a policy. `initiatorCanApprove` was not set to `true`. In this case, they are locked, and the policy cannot be modified: whoever requests a modification cannot approve, and the policy is therefore always missing one approver. To unlock, they would need to invite a new user and give him the rights to approve as well.\n ","required":["kind","approvalGroups"],"properties":{"kind":{"type":"string","enum":["RequestApproval"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.5.pendingChangeRequest.body.oneOf.2.action.oneOf.0.kind","typeLabel":"enum\u003cstring>"},"approvalGroups":{"type":"array","items":{"type":"object","properties":{"quorum":{"type":"integer","minimum":1,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.5.pendingChangeRequest.body.oneOf.2.action.oneOf.0.approvalGroups.items.[INDEX].quorum","typeLabel":"integer"},"approvers":{"type":"object","properties":{"userId":{"type":"object","properties":{"in":{"type":"array","items":{"type":"string","minLength":1,"uniqueKey":"\\items.items.[INDEX].oneOf.5.pendingChangeRequest.body.oneOf.2.action.oneOf.0.approvalGroups.items.[INDEX].approvers.userId.in.items.[INDEX]","typeLabel":"string"},"minItems":1,"maxItems":100,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.5.pendingChangeRequest.body.oneOf.2.action.oneOf.0.approvalGroups.items.[INDEX].approvers.userId.in","typeLabel":"string[]"}},"required":["in"],"additionalProperties":false,"description":"Users and service accounts who may approve.","uniqueKey":"\\items.items.[INDEX].oneOf.5.pendingChangeRequest.body.oneOf.2.action.oneOf.0.approvalGroups.items.[INDEX].approvers.userId","typeLabel":"object"},"userGroupId":{"type":"object","properties":{"in":{"type":"array","items":{"type":"string","minLength":1,"maxLength":64,"pattern":"^ug-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"User group id.","example":"ug-139tf-f58l8-lsbt6dp47lfsdvgh","uniqueKey":"\\items.items.[INDEX].oneOf.5.pendingChangeRequest.body.oneOf.2.action.oneOf.0.approvalGroups.items.[INDEX].approvers.userGroupId.in.items.[INDEX]","typeLabel":"string"},"minItems":1,"maxItems":100,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.5.pendingChangeRequest.body.oneOf.2.action.oneOf.0.approvalGroups.items.[INDEX].approvers.userGroupId.in","typeLabel":"string[]"}},"required":["in"],"additionalProperties":false,"description":"User groups whose members may approve.","uniqueKey":"\\items.items.[INDEX].oneOf.5.pendingChangeRequest.body.oneOf.2.action.oneOf.0.approvalGroups.items.[INDEX].approvers.userGroupId","typeLabel":"object"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.5.pendingChangeRequest.body.oneOf.2.action.oneOf.0.approvalGroups.items.[INDEX].approvers","typeLabel":"object"},"name":{"type":"string","uniqueKey":"\\items.items.[INDEX].oneOf.5.pendingChangeRequest.body.oneOf.2.action.oneOf.0.approvalGroups.items.[INDEX].name","typeLabel":"string"},"initiatorCanApprove":{"type":"boolean","description":"Whether the initiator of the activity can participate in the approval.","uniqueKey":"\\items.items.[INDEX].oneOf.5.pendingChangeRequest.body.oneOf.2.action.oneOf.0.approvalGroups.items.[INDEX].initiatorCanApprove","typeLabel":"boolean"},"serviceAccountsCanApprove":{"type":"boolean","description":"Whether service accounts can participate in the approval for this group.","uniqueKey":"\\items.items.[INDEX].oneOf.5.pendingChangeRequest.body.oneOf.2.action.oneOf.0.approvalGroups.items.[INDEX].serviceAccountsCanApprove","typeLabel":"boolean"}},"required":["quorum","approvers"],"additionalProperties":false,"uniqueKey":"\\items.items.[INDEX].oneOf.5.pendingChangeRequest.body.oneOf.2.action.oneOf.0.approvalGroups.items.[INDEX]","typeLabel":"object"},"minItems":1,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.5.pendingChangeRequest.body.oneOf.2.action.oneOf.0.approvalGroups","typeLabel":"object[]"},"autoRejectTimeout":{"oneOf":[{"type":"integer","minimum":1,"uniqueKey":"\\items.items.[INDEX].oneOf.5.pendingChangeRequest.body.oneOf.2.action.oneOf.0.autoRejectTimeout.oneOf.0","typeLabel":"integer"},{"type":"null","minimum":1,"uniqueKey":"\\items.items.[INDEX].oneOf.5.pendingChangeRequest.body.oneOf.2.action.oneOf.0.autoRejectTimeout.oneOf.1","typeLabel":"null"}],"uniqueKey":"\\items.items.[INDEX].oneOf.5.pendingChangeRequest.body.oneOf.2.action.oneOf.0.autoRejectTimeout","typeLabel":"integer | null"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.5.pendingChangeRequest.body.oneOf.2.action.oneOf.0","typeLabel":"RequestApproval · object"},{"type":"object","title":"Block","description":"This action means that the activity will be blocked if the policy is triggered.\n\n```json\n{\n \"action\": {\n \"kind\": \"Block\"\n }\n}\n```\n","required":["kind"],"properties":{"kind":{"type":"string","enum":["Block"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.5.pendingChangeRequest.body.oneOf.2.action.oneOf.1.kind","typeLabel":"enum\u003cstring>"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.5.pendingChangeRequest.body.oneOf.2.action.oneOf.1","typeLabel":"Block · object"}],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.5.pendingChangeRequest.body.oneOf.2.action","typeLabel":"RequestApproval · object | Block · object"},"dateCreated":{"type":"string","uniqueKey":"\\items.items.[INDEX].oneOf.5.pendingChangeRequest.body.oneOf.2.dateCreated","typeLabel":"string"},"dateUpdated":{"type":"string","uniqueKey":"\\items.items.[INDEX].oneOf.5.pendingChangeRequest.body.oneOf.2.dateUpdated","typeLabel":"string"},"filters":{"type":"object","properties":{"permissionId":{"type":"object","properties":{"in":{"type":"array","items":{"type":"string","minLength":1,"uniqueKey":"\\items.items.[INDEX].oneOf.5.pendingChangeRequest.body.oneOf.2.filters.permissionId.in.items.[INDEX]","typeLabel":"string"},"minItems":1,"maxItems":100,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.5.pendingChangeRequest.body.oneOf.2.filters.permissionId.in","typeLabel":"string[]"}},"required":["in"],"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.5.pendingChangeRequest.body.oneOf.2.filters.permissionId","typeLabel":"object"}},"required":["permissionId"],"additionalProperties":false,"uniqueKey":"\\items.items.[INDEX].oneOf.5.pendingChangeRequest.body.oneOf.2.filters","typeLabel":"object"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.5.pendingChangeRequest.body.oneOf.2","typeLabel":"Permissions:Modify · object"},{"type":"object","title":"Policies:Modify","required":["id","name","status","activityKind","rule","action"],"properties":{"id":{"type":"string","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.5.pendingChangeRequest.body.oneOf.3.id","typeLabel":"string"},"name":{"type":"string","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.5.pendingChangeRequest.body.oneOf.3.name","typeLabel":"string"},"status":{"type":"string","enum":["Active","Archived"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.5.pendingChangeRequest.body.oneOf.3.status","typeLabel":"enum\u003cstring>"},"activityKind":{"type":"string","enum":["Policies:Modify"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.5.pendingChangeRequest.body.oneOf.3.activityKind","typeLabel":"enum\u003cstring>"},"rule":{"type":"object","properties":{"kind":{"type":"string","enum":["AlwaysTrigger"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.5.pendingChangeRequest.body.oneOf.3.rule.kind","typeLabel":"enum\u003cstring>"},"configuration":{"type":"object","properties":{},"additionalProperties":false,"uniqueKey":"\\items.items.[INDEX].oneOf.5.pendingChangeRequest.body.oneOf.3.rule.configuration","typeLabel":"object"}},"required":["kind"],"additionalProperties":false,"description":"This rule will always be triggered, meaning that if this rule is defined on a policy, the policy will always trigger the policy action, regardless of the activity details.","title":"AlwaysTrigger","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.5.pendingChangeRequest.body.oneOf.3.rule","typeLabel":"AlwaysTrigger · object"},"action":{"type":"object","properties":{"kind":{"type":"string","enum":["RequestApproval"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.5.pendingChangeRequest.body.oneOf.3.action.kind","typeLabel":"enum\u003cstring>"},"approvalGroups":{"type":"array","items":{"type":"object","properties":{"quorum":{"type":"integer","minimum":1,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.5.pendingChangeRequest.body.oneOf.3.action.approvalGroups.items.[INDEX].quorum","typeLabel":"integer"},"approvers":{"type":"object","properties":{"userId":{"type":"object","properties":{"in":{"type":"array","items":{"type":"string","minLength":1,"uniqueKey":"\\items.items.[INDEX].oneOf.5.pendingChangeRequest.body.oneOf.3.action.approvalGroups.items.[INDEX].approvers.userId.in.items.[INDEX]","typeLabel":"string"},"minItems":1,"maxItems":100,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.5.pendingChangeRequest.body.oneOf.3.action.approvalGroups.items.[INDEX].approvers.userId.in","typeLabel":"string[]"}},"required":["in"],"additionalProperties":false,"description":"Users and service accounts who may approve.","uniqueKey":"\\items.items.[INDEX].oneOf.5.pendingChangeRequest.body.oneOf.3.action.approvalGroups.items.[INDEX].approvers.userId","typeLabel":"object"},"userGroupId":{"type":"object","properties":{"in":{"type":"array","items":{"type":"string","minLength":1,"maxLength":64,"pattern":"^ug-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"User group id.","example":"ug-139tf-f58l8-lsbt6dp47lfsdvgh","uniqueKey":"\\items.items.[INDEX].oneOf.5.pendingChangeRequest.body.oneOf.3.action.approvalGroups.items.[INDEX].approvers.userGroupId.in.items.[INDEX]","typeLabel":"string"},"minItems":1,"maxItems":100,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.5.pendingChangeRequest.body.oneOf.3.action.approvalGroups.items.[INDEX].approvers.userGroupId.in","typeLabel":"string[]"}},"required":["in"],"additionalProperties":false,"description":"User groups whose members may approve.","uniqueKey":"\\items.items.[INDEX].oneOf.5.pendingChangeRequest.body.oneOf.3.action.approvalGroups.items.[INDEX].approvers.userGroupId","typeLabel":"object"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.5.pendingChangeRequest.body.oneOf.3.action.approvalGroups.items.[INDEX].approvers","typeLabel":"object"},"name":{"type":"string","uniqueKey":"\\items.items.[INDEX].oneOf.5.pendingChangeRequest.body.oneOf.3.action.approvalGroups.items.[INDEX].name","typeLabel":"string"},"initiatorCanApprove":{"type":"boolean","description":"Whether the initiator of the activity can participate in the approval.","uniqueKey":"\\items.items.[INDEX].oneOf.5.pendingChangeRequest.body.oneOf.3.action.approvalGroups.items.[INDEX].initiatorCanApprove","typeLabel":"boolean"},"serviceAccountsCanApprove":{"type":"boolean","description":"Whether service accounts can participate in the approval for this group.","uniqueKey":"\\items.items.[INDEX].oneOf.5.pendingChangeRequest.body.oneOf.3.action.approvalGroups.items.[INDEX].serviceAccountsCanApprove","typeLabel":"boolean"}},"required":["quorum","approvers"],"additionalProperties":false,"uniqueKey":"\\items.items.[INDEX].oneOf.5.pendingChangeRequest.body.oneOf.3.action.approvalGroups.items.[INDEX]","typeLabel":"object"},"minItems":1,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.5.pendingChangeRequest.body.oneOf.3.action.approvalGroups","typeLabel":"object[]"},"autoRejectTimeout":{"oneOf":[{"type":"integer","minimum":1,"uniqueKey":"\\items.items.[INDEX].oneOf.5.pendingChangeRequest.body.oneOf.3.action.autoRejectTimeout.oneOf.0","typeLabel":"integer"},{"type":"null","minimum":1,"uniqueKey":"\\items.items.[INDEX].oneOf.5.pendingChangeRequest.body.oneOf.3.action.autoRejectTimeout.oneOf.1","typeLabel":"null"}],"uniqueKey":"\\items.items.[INDEX].oneOf.5.pendingChangeRequest.body.oneOf.3.action.autoRejectTimeout","typeLabel":"integer | null"}},"required":["kind","approvalGroups"],"additionalProperties":false,"description":"\nThis action means that activity will first require an Approval process to be completed before it can be executed (or be aborted if someone rejects it during the approval process).\n\nOne or several groups of approvers need to be specified. These groups define who is allowed to approve / reject an activity.\n\nThe activity will only be executed if all approver groups reach their \"quorum\" of approvals. Otherwise, if any one user within any approver group rejects, then the activity is aborted and the call is not executed.\n\nThe example below shows a `RequestApproval` action, configured with one approval group requiring 2 approvals amongst three specific users.\n\n```json\n{\n \"action\": {\n \"kind\": \"RequestApproval\",\n \"autoRejectTimeout\": 60, // minutes\n \"approvalGroups\": [\n {\n \"name\": \"Admins\",\n \"quorum\": 2, // only 2 approvers required in that group \n \"approvers\": {\n \"userId\": {\n \"in\": [\"us-...1\", \"us-...2\", \"us-...3\"],\n }\n }\n }\n ],\n\n }\n}\n```\n\n**Don't lock yourself up**\n\nBy default, users cannot approve an activity they initiated themselves, even if they are in an approval group. To allow this, you must set `initiatorCanApprove: true`.\n\n*Example 1:* For any wallet transfer, a policy is setup to require approval from **1 specific admin user** (eg. the CEO). `initiatorCanApprove` was not set to `true`. If the CEO himself initiates a transfer, no-one can approve his transfer and it's stuck.\n\n*Example 2:* Company has only 3 users. A policy is setup to require approval from **any 3 users** (`quorum: 3`) for any modification of a policy. `initiatorCanApprove` was not set to `true`. In this case, they are locked, and the policy cannot be modified: whoever requests a modification cannot approve, and the policy is therefore always missing one approver. To unlock, they would need to invite a new user and give him the rights to approve as well.\n ","title":"RequestApproval","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.5.pendingChangeRequest.body.oneOf.3.action","typeLabel":"RequestApproval · object"},"dateCreated":{"type":"string","uniqueKey":"\\items.items.[INDEX].oneOf.5.pendingChangeRequest.body.oneOf.3.dateCreated","typeLabel":"string"},"dateUpdated":{"type":"string","uniqueKey":"\\items.items.[INDEX].oneOf.5.pendingChangeRequest.body.oneOf.3.dateUpdated","typeLabel":"string"},"filters":{"type":"object","properties":{"policyId":{"type":"object","properties":{"in":{"type":"array","items":{"type":"string","minLength":1,"uniqueKey":"\\items.items.[INDEX].oneOf.5.pendingChangeRequest.body.oneOf.3.filters.policyId.in.items.[INDEX]","typeLabel":"string"},"minItems":1,"maxItems":100,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.5.pendingChangeRequest.body.oneOf.3.filters.policyId.in","typeLabel":"string[]"}},"required":["in"],"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.5.pendingChangeRequest.body.oneOf.3.filters.policyId","typeLabel":"object"}},"required":["policyId"],"additionalProperties":false,"uniqueKey":"\\items.items.[INDEX].oneOf.5.pendingChangeRequest.body.oneOf.3.filters","typeLabel":"object"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.5.pendingChangeRequest.body.oneOf.3","typeLabel":"Policies:Modify · object"},{"type":"object","title":"Registry:ContractSchemas:Modify","required":["id","name","status","activityKind","rule","action"],"properties":{"id":{"type":"string","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.5.pendingChangeRequest.body.oneOf.4.id","typeLabel":"string"},"name":{"type":"string","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.5.pendingChangeRequest.body.oneOf.4.name","typeLabel":"string"},"status":{"type":"string","enum":["Active","Archived"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.5.pendingChangeRequest.body.oneOf.4.status","typeLabel":"enum\u003cstring>"},"activityKind":{"type":"string","enum":["Registry:ContractSchemas:Modify"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.5.pendingChangeRequest.body.oneOf.4.activityKind","typeLabel":"enum\u003cstring>"},"rule":{"type":"object","properties":{"kind":{"type":"string","enum":["AlwaysTrigger"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.5.pendingChangeRequest.body.oneOf.4.rule.kind","typeLabel":"enum\u003cstring>"},"configuration":{"type":"object","properties":{},"additionalProperties":false,"uniqueKey":"\\items.items.[INDEX].oneOf.5.pendingChangeRequest.body.oneOf.4.rule.configuration","typeLabel":"object"}},"required":["kind"],"additionalProperties":false,"description":"This rule will always be triggered, meaning that if this rule is defined on a policy, the policy will always trigger the policy action, regardless of the activity details.","title":"AlwaysTrigger","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.5.pendingChangeRequest.body.oneOf.4.rule","typeLabel":"AlwaysTrigger · object"},"action":{"oneOf":[{"type":"object","title":"RequestApproval","description":"\nThis action means that activity will first require an Approval process to be completed before it can be executed (or be aborted if someone rejects it during the approval process).\n\nOne or several groups of approvers need to be specified. These groups define who is allowed to approve / reject an activity.\n\nThe activity will only be executed if all approver groups reach their \"quorum\" of approvals. Otherwise, if any one user within any approver group rejects, then the activity is aborted and the call is not executed.\n\nThe example below shows a `RequestApproval` action, configured with one approval group requiring 2 approvals amongst three specific users.\n\n```json\n{\n \"action\": {\n \"kind\": \"RequestApproval\",\n \"autoRejectTimeout\": 60, // minutes\n \"approvalGroups\": [\n {\n \"name\": \"Admins\",\n \"quorum\": 2, // only 2 approvers required in that group \n \"approvers\": {\n \"userId\": {\n \"in\": [\"us-...1\", \"us-...2\", \"us-...3\"],\n }\n }\n }\n ],\n\n }\n}\n```\n\n**Don't lock yourself up**\n\nBy default, users cannot approve an activity they initiated themselves, even if they are in an approval group. To allow this, you must set `initiatorCanApprove: true`.\n\n*Example 1:* For any wallet transfer, a policy is setup to require approval from **1 specific admin user** (eg. the CEO). `initiatorCanApprove` was not set to `true`. If the CEO himself initiates a transfer, no-one can approve his transfer and it's stuck.\n\n*Example 2:* Company has only 3 users. A policy is setup to require approval from **any 3 users** (`quorum: 3`) for any modification of a policy. `initiatorCanApprove` was not set to `true`. In this case, they are locked, and the policy cannot be modified: whoever requests a modification cannot approve, and the policy is therefore always missing one approver. To unlock, they would need to invite a new user and give him the rights to approve as well.\n ","required":["kind","approvalGroups"],"properties":{"kind":{"type":"string","enum":["RequestApproval"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.5.pendingChangeRequest.body.oneOf.4.action.oneOf.0.kind","typeLabel":"enum\u003cstring>"},"approvalGroups":{"type":"array","items":{"type":"object","properties":{"quorum":{"type":"integer","minimum":1,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.5.pendingChangeRequest.body.oneOf.4.action.oneOf.0.approvalGroups.items.[INDEX].quorum","typeLabel":"integer"},"approvers":{"type":"object","properties":{"userId":{"type":"object","properties":{"in":{"type":"array","items":{"type":"string","minLength":1,"uniqueKey":"\\items.items.[INDEX].oneOf.5.pendingChangeRequest.body.oneOf.4.action.oneOf.0.approvalGroups.items.[INDEX].approvers.userId.in.items.[INDEX]","typeLabel":"string"},"minItems":1,"maxItems":100,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.5.pendingChangeRequest.body.oneOf.4.action.oneOf.0.approvalGroups.items.[INDEX].approvers.userId.in","typeLabel":"string[]"}},"required":["in"],"additionalProperties":false,"description":"Users and service accounts who may approve.","uniqueKey":"\\items.items.[INDEX].oneOf.5.pendingChangeRequest.body.oneOf.4.action.oneOf.0.approvalGroups.items.[INDEX].approvers.userId","typeLabel":"object"},"userGroupId":{"type":"object","properties":{"in":{"type":"array","items":{"type":"string","minLength":1,"maxLength":64,"pattern":"^ug-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"User group id.","example":"ug-139tf-f58l8-lsbt6dp47lfsdvgh","uniqueKey":"\\items.items.[INDEX].oneOf.5.pendingChangeRequest.body.oneOf.4.action.oneOf.0.approvalGroups.items.[INDEX].approvers.userGroupId.in.items.[INDEX]","typeLabel":"string"},"minItems":1,"maxItems":100,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.5.pendingChangeRequest.body.oneOf.4.action.oneOf.0.approvalGroups.items.[INDEX].approvers.userGroupId.in","typeLabel":"string[]"}},"required":["in"],"additionalProperties":false,"description":"User groups whose members may approve.","uniqueKey":"\\items.items.[INDEX].oneOf.5.pendingChangeRequest.body.oneOf.4.action.oneOf.0.approvalGroups.items.[INDEX].approvers.userGroupId","typeLabel":"object"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.5.pendingChangeRequest.body.oneOf.4.action.oneOf.0.approvalGroups.items.[INDEX].approvers","typeLabel":"object"},"name":{"type":"string","uniqueKey":"\\items.items.[INDEX].oneOf.5.pendingChangeRequest.body.oneOf.4.action.oneOf.0.approvalGroups.items.[INDEX].name","typeLabel":"string"},"initiatorCanApprove":{"type":"boolean","description":"Whether the initiator of the activity can participate in the approval.","uniqueKey":"\\items.items.[INDEX].oneOf.5.pendingChangeRequest.body.oneOf.4.action.oneOf.0.approvalGroups.items.[INDEX].initiatorCanApprove","typeLabel":"boolean"},"serviceAccountsCanApprove":{"type":"boolean","description":"Whether service accounts can participate in the approval for this group.","uniqueKey":"\\items.items.[INDEX].oneOf.5.pendingChangeRequest.body.oneOf.4.action.oneOf.0.approvalGroups.items.[INDEX].serviceAccountsCanApprove","typeLabel":"boolean"}},"required":["quorum","approvers"],"additionalProperties":false,"uniqueKey":"\\items.items.[INDEX].oneOf.5.pendingChangeRequest.body.oneOf.4.action.oneOf.0.approvalGroups.items.[INDEX]","typeLabel":"object"},"minItems":1,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.5.pendingChangeRequest.body.oneOf.4.action.oneOf.0.approvalGroups","typeLabel":"object[]"},"autoRejectTimeout":{"oneOf":[{"type":"integer","minimum":1,"uniqueKey":"\\items.items.[INDEX].oneOf.5.pendingChangeRequest.body.oneOf.4.action.oneOf.0.autoRejectTimeout.oneOf.0","typeLabel":"integer"},{"type":"null","minimum":1,"uniqueKey":"\\items.items.[INDEX].oneOf.5.pendingChangeRequest.body.oneOf.4.action.oneOf.0.autoRejectTimeout.oneOf.1","typeLabel":"null"}],"uniqueKey":"\\items.items.[INDEX].oneOf.5.pendingChangeRequest.body.oneOf.4.action.oneOf.0.autoRejectTimeout","typeLabel":"integer | null"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.5.pendingChangeRequest.body.oneOf.4.action.oneOf.0","typeLabel":"RequestApproval · object"},{"type":"object","title":"Block","description":"This action means that the activity will be blocked if the policy is triggered.\n\n```json\n{\n \"action\": {\n \"kind\": \"Block\"\n }\n}\n```\n","required":["kind"],"properties":{"kind":{"type":"string","enum":["Block"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.5.pendingChangeRequest.body.oneOf.4.action.oneOf.1.kind","typeLabel":"enum\u003cstring>"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.5.pendingChangeRequest.body.oneOf.4.action.oneOf.1","typeLabel":"Block · object"}],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.5.pendingChangeRequest.body.oneOf.4.action","typeLabel":"RequestApproval · object | Block · object"},"dateCreated":{"type":"string","uniqueKey":"\\items.items.[INDEX].oneOf.5.pendingChangeRequest.body.oneOf.4.dateCreated","typeLabel":"string"},"dateUpdated":{"type":"string","uniqueKey":"\\items.items.[INDEX].oneOf.5.pendingChangeRequest.body.oneOf.4.dateUpdated","typeLabel":"string"},"filters":{"type":"object","properties":{},"uniqueKey":"\\items.items.[INDEX].oneOf.5.pendingChangeRequest.body.oneOf.4.filters","typeLabel":"object"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.5.pendingChangeRequest.body.oneOf.4","typeLabel":"Registry:ContractSchemas:Modify · object"},{"type":"object","title":"Wallets:Sign","required":["id","name","status","activityKind","rule","action"],"properties":{"id":{"type":"string","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.5.pendingChangeRequest.body.oneOf.5.id","typeLabel":"string"},"name":{"type":"string","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.5.pendingChangeRequest.body.oneOf.5.name","typeLabel":"string"},"status":{"type":"string","enum":["Active","Archived"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.5.pendingChangeRequest.body.oneOf.5.status","typeLabel":"enum\u003cstring>"},"activityKind":{"type":"string","enum":["Wallets:Sign"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.5.pendingChangeRequest.body.oneOf.5.activityKind","typeLabel":"enum\u003cstring>"},"rule":{"oneOf":[{"type":"object","title":"AlwaysTrigger","description":"This rule will always be triggered, meaning that if this rule is defined on a policy, the policy will always trigger the policy action, regardless of the activity details.","required":["kind"],"properties":{"kind":{"type":"string","enum":["AlwaysTrigger"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.5.pendingChangeRequest.body.oneOf.5.rule.oneOf.0.kind","typeLabel":"enum\u003cstring>"},"configuration":{"type":"object","properties":{},"additionalProperties":false,"uniqueKey":"\\items.items.[INDEX].oneOf.5.pendingChangeRequest.body.oneOf.5.rule.oneOf.0.configuration","typeLabel":"object"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.5.pendingChangeRequest.body.oneOf.5.rule.oneOf.0","typeLabel":"AlwaysTrigger · object"},{"type":"object","title":"TransactionRecipientWhitelist","description":"This rule will trigger if the destination address *is NOT whitelisted*.","required":["kind","configuration"],"properties":{"kind":{"type":"string","enum":["TransactionRecipientWhitelist"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.5.pendingChangeRequest.body.oneOf.5.rule.oneOf.1.kind","typeLabel":"enum\u003cstring>"},"configuration":{"type":"object","properties":{"addresses":{"type":"array","items":{"type":"string","minLength":1,"uniqueKey":"\\items.items.[INDEX].oneOf.5.pendingChangeRequest.body.oneOf.5.rule.oneOf.1.configuration.addresses.items.[INDEX]","typeLabel":"string"},"description":"Whitelisted recipient addresses","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.5.pendingChangeRequest.body.oneOf.5.rule.oneOf.1.configuration.addresses","typeLabel":"string[]"}},"required":["addresses"],"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.5.pendingChangeRequest.body.oneOf.5.rule.oneOf.1.configuration","typeLabel":"object"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.5.pendingChangeRequest.body.oneOf.5.rule.oneOf.1","typeLabel":"TransactionRecipientWhitelist · object"},{"type":"object","title":"TransactionAmountLimit","description":"This rule will trigger if the wallet activity detected is transferring some value whose amount is equal to or greater than a given limit. The limit is inclusive: a transfer whose value exactly equals the limit also triggers.\n\nThe limit is expressed in a fiat `currency` and evaluated against the market value of the transfer. To set a threshold in the asset's own units instead, use `TransactionAmountLimitNominal`.\n\nNote: If the amount of the wallet activity cannot be evaluated for any reason (eg. market prices are not available, or eg. the amount cannot be inferred from a wallet signature request, etc.), by default the rule will trigger the policy (this is called \"failing closed\" and is generally considered a security best practice).","required":["kind","configuration"],"properties":{"kind":{"type":"string","enum":["TransactionAmountLimit"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.5.pendingChangeRequest.body.oneOf.5.rule.oneOf.2.kind","typeLabel":"enum\u003cstring>"},"configuration":{"type":"object","properties":{"limit":{"type":"number","description":"Amount limit in `currency`","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.5.pendingChangeRequest.body.oneOf.5.rule.oneOf.2.configuration.limit","typeLabel":"number"},"currency":{"type":"string","enum":["USD"],"description":"Fiat currency, currently only `USD`","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.5.pendingChangeRequest.body.oneOf.5.rule.oneOf.2.configuration.currency","typeLabel":"enum\u003cstring>"}},"required":["limit","currency"],"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.5.pendingChangeRequest.body.oneOf.5.rule.oneOf.2.configuration","typeLabel":"object"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.5.pendingChangeRequest.body.oneOf.5.rule.oneOf.2","typeLabel":"TransactionAmountLimit · object"},{"type":"object","title":"TransactionAmountLimitNominal","description":"This rule will trigger if the wallet activity detected is transferring more of a listed asset than that asset's limit.\n\nEach limit is expressed in the minimum denomination of its own asset and compared against the transferred amount directly, so the verdict needs no market data and does not move with a price. To set a threshold on the fiat value of a transfer instead, use `TransactionAmountLimit`.\n\nLimits are asset exact: an asset is identified by its network and its Dfns token identifier, so a wrapped or staked derivative is a different asset from the thing it tracks, and a transfer of an asset the rule does not list will not trigger it.\n\nNote: If the transferred amount or the asset cannot be determined for any reason, by default the rule will trigger the policy (this is called \"failing closed\" and is generally considered a security best practice).","required":["kind","configuration"],"properties":{"kind":{"type":"string","enum":["TransactionAmountLimitNominal"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.5.pendingChangeRequest.body.oneOf.5.rule.oneOf.3.kind","typeLabel":"enum\u003cstring>"},"configuration":{"type":"object","properties":{"assets":{"type":"array","items":{"type":"object","properties":{"network":{"type":"string","title":"Network","description":"The network the asset lives on.","enum":["Algorand","AlgorandTestnet","Aptos","AptosTestnet","ArbitrumOne","ArbitrumSepolia","Arc","ArcTestnet","Areum","AvalancheC","AvalancheCFuji","Base","BaseSepolia","Berachain","BerachainBepolia","Bitcoin","BitcoinSignet","BitcoinTestnet4","BitcoinCash","Bob","BobSepolia","Bsc","BscTestnet","Canton","CantonTestnet","Cardano","CardanoPreprod","Concordium","ConcordiumTestnet","Celo","CeloSepolia","Codex","CodexSepolia","CosmosHub4","CosmosIcsTestnet","Dogecoin","DogecoinTestnet","Ethereum","EthereumClassic","EthereumClassicMordor","EthereumSepolia","EthereumHoodi","FlareC","FlareCCoston2","FlowEvm","FlowEvmTestnet","Hedera","HederaTestnet","HyperEvm","HyperEvmTestnet","Ink","InkSepolia","InternetComputer","Ion","IonTestnet","Iota","IotaTestnet","Kusama","KusamaAssetHub","Litecoin","LitecoinTestnet","Monad","MonadTestnet","Movement","MovementTestnet","Near","NearTestnet","Optimism","OptimismSepolia","Origyn","Plasma","PlasmaTestnet","Plume","PlumeSepolia","Paseo","PaseoAssetHub","Polkadot","PolkadotAssetHub","Polygon","PolygonAmoy","Polymesh","PolymeshTestnet","Rayls","RaylsTestnet","Robinhood","RobinhoodSepolia","SeiAtlantic2","SeiPacific1","Solana","SolanaDevnet","Sonic","SonicTestnet","Starknet","StarknetSepolia","Stellar","StellarTestnet","Sui","SuiTestnet","Tezos","TezosShadownet","Tempo","TempoModerato","Tsc","TscTestnet1","Ton","TonTestnet","Tron","TronNile","Westend","WestendAssetHub","Xdc","XdcApothem","XLayer","XLayerSepolia","XrpLedger","XrpLedgerTestnet"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.5.pendingChangeRequest.body.oneOf.5.rule.oneOf.3.configuration.assets.items.[INDEX].network","typeLabel":"enum\u003cstring>"},"tid":{"type":"string","minLength":1,"maxLength":200,"pattern":"^[a-z0-9_]+:[^\\s](?:[ ]?[^\\s])*$","description":"The Dfns token identifier of the asset, for example `native:eth` or `erc20:0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48`. Must be canonical: token contract addresses on hex based networks are lower cased.","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.5.pendingChangeRequest.body.oneOf.5.rule.oneOf.3.configuration.assets.items.[INDEX].tid","typeLabel":"string"},"limit":{"type":"string","pattern":"^\\d+$","description":"Amount limit in the minimum denomination of the asset, as an integer string, matching how a transfer expresses its amount. For an 18 decimal token `\"5000000000000000000\"` is 5 whole tokens.","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.5.pendingChangeRequest.body.oneOf.5.rule.oneOf.3.configuration.assets.items.[INDEX].limit","typeLabel":"string"}},"required":["network","tid","limit"],"additionalProperties":false,"uniqueKey":"\\items.items.[INDEX].oneOf.5.pendingChangeRequest.body.oneOf.5.rule.oneOf.3.configuration.assets.items.[INDEX]","typeLabel":"object"},"minItems":1,"maxItems":100,"description":"The assets this rule applies to, each with its own limit. A transfer of an asset that is not listed does not trigger the rule. The limit applies to each matching transfer individually; nothing is accumulated across transfers.","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.5.pendingChangeRequest.body.oneOf.5.rule.oneOf.3.configuration.assets","typeLabel":"object[]"}},"required":["assets"],"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.5.pendingChangeRequest.body.oneOf.5.rule.oneOf.3.configuration","typeLabel":"object"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.5.pendingChangeRequest.body.oneOf.5.rule.oneOf.3","typeLabel":"TransactionAmountLimitNominal · object"},{"type":"object","title":"TransactionAmountVelocity","description":"This rule will trigger if the cumulative amount transferred from a given wallet within a given timeframe is greater than a specified limit. The aggregate amount evaluated is based only on the wallet that triggered the policy.","required":["kind","configuration"],"properties":{"kind":{"type":"string","enum":["TransactionAmountVelocity"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.5.pendingChangeRequest.body.oneOf.5.rule.oneOf.4.kind","typeLabel":"enum\u003cstring>"},"configuration":{"type":"object","properties":{"limit":{"type":"number","description":"Amount limit in `currency`","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.5.pendingChangeRequest.body.oneOf.5.rule.oneOf.4.configuration.limit","typeLabel":"number"},"currency":{"type":"string","enum":["USD"],"description":"Currency for the amount limit above","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.5.pendingChangeRequest.body.oneOf.5.rule.oneOf.4.configuration.currency","typeLabel":"enum\u003cstring>"},"timeframe":{"type":"integer","minimum":1,"maximum":43200,"description":"Time period in minutes. Minimum 1, Maximum 43,200.","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.5.pendingChangeRequest.body.oneOf.5.rule.oneOf.4.configuration.timeframe","typeLabel":"integer"}},"required":["limit","currency","timeframe"],"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.5.pendingChangeRequest.body.oneOf.5.rule.oneOf.4.configuration","typeLabel":"object"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.5.pendingChangeRequest.body.oneOf.5.rule.oneOf.4","typeLabel":"TransactionAmountVelocity · object"},{"type":"object","title":"TransactionCountVelocity","description":"This rule will trigger if the number of wallet activities for a given wallet within a given timeframe, is greater than a specified limit. The aggregate number of transactions evaluated is based only on the wallet that triggered the policy.","required":["kind","configuration"],"properties":{"kind":{"type":"string","enum":["TransactionCountVelocity"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.5.pendingChangeRequest.body.oneOf.5.rule.oneOf.5.kind","typeLabel":"enum\u003cstring>"},"configuration":{"type":"object","properties":{"limit":{"type":"number","description":"Count limit","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.5.pendingChangeRequest.body.oneOf.5.rule.oneOf.5.configuration.limit","typeLabel":"number"},"timeframe":{"type":"integer","minimum":1,"maximum":43200,"description":"Time period in minutes. Minimum 1, Maximum 43,200.","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.5.pendingChangeRequest.body.oneOf.5.rule.oneOf.5.configuration.timeframe","typeLabel":"integer"}},"required":["limit","timeframe"],"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.5.pendingChangeRequest.body.oneOf.5.rule.oneOf.5.configuration","typeLabel":"object"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.5.pendingChangeRequest.body.oneOf.5.rule.oneOf.5","typeLabel":"TransactionCountVelocity · object"},{"type":"object","title":"ChainalysisTransactionPrescreening","description":"\n\u003cInfo>\nThis rule can only be used once the Chainalysis integration is activated from the Dfns dashboard settings. (see more on [Chainalysis](https://docs.dfns.co/integrations/aml-kyt/chainalysis) integration page).\n\u003c/Info>\n\nIt's a rule based on [Chainalysis](https://docs.dfns.co/integrations/aml-kyt/chainalysis) KYT integration (Know-Your-Transaction). Upon transfer attempt, we will first register the transfer with Chainalysis (as a [\"withdrawal attempt\"](https://docs.chainalysis.com/api/kyt/#registration-register-a-withdrawal-attempt)), and fetch the screening results (alerts, exposures, addresses detected). Based on the results, and the configuration of this rule, the policy will be triggered.\n\nIt's called \"Pre\"-screening, because the scanned transaction is not on chain yet, it's still a transaction attempt (before the transaction actually make it on chain).\n\n```json\n{\n \"rule\": {\n \"kind\": \"ChainalysisTransactionPrescreening\",\n \"configuration\": {\n \"alerts\": {\n \"alertLevel\": \"LOW\",\n \"categoryIds\": []\n },\n \"exposures\": {\n \"direct\": {\n \"categoryIds\": []\n }\n },\n \"addresses\": {\n \"categoryIds\": []\n },\n \"fallbackBehaviours\": {\n \"skipUnscreenableTransaction\": false,\n \"skipUnsupportedNetwork\": false,\n \"skipUnsupportedAsset\": false,\n \"skipChainalysisFailure\": false\n }\n }\n }\n}\n```\n\n**Configuration**\n\n| Property | Type | Description |\n| --- | --- | --- |\n| `alerts`\u003cbr>\u003cbr>`.alertLevel`* | `string` | Minimum alert level above which the rule should trigger, if any [alert is returned in Chainalysis results](https://docs.chainalysis.com/api/kyt/#withdrawal-attempts-get-alerts). Can be `LOW`, `MEDIUM`, `HIGH`, or `SEVERE` |\n| `alerts`\u003cbr>\u003cbr>`.categoryIds`* | list of integers | List of Chainalysis category IDs (see [here](https://docs.chainalysis.com/api/kyt/#categories)). If you leave this list empty, alerts of any category will trigger the rule. Otherwise, if you only want the rule to trigger on specific categories, you can specify some in the list. |\n| `exposures`\u003cbr>\u003cbr>`.direct`\u003cbr>\u003cbr>`.categoryIds`* | list of integers | List of Chainalysis category IDs (see [here](https://docs.chainalysis.com/api/kyt/#categories)). If you leave this list empty, a [direct exposure](https://docs.chainalysis.com/api/kyt/#withdrawal-attempts-get-direct-exposure) of any category detected by chainalysis will trigger the rule. Otherwise, if you only want the rule to trigger on specific categories, you can specify some in the list. |\n| `addresses`\u003cbr>\u003cbr>`.categoryIds`* | list of integers | List of Chainalysis category IDs (see [here](https://docs.chainalysis.com/api/kyt/#categories)). If you leave this list empty, an [address](https://docs.chainalysis.com/api/kyt/#withdrawal-attempts-get-address-identifications) of any category identified by chainalysis will trigger the rule. Otherwise, if you only want the rule to trigger on specific categories, you can specify some in the list. |\n| `fallbackBehaviours`\u003cbr>\u003cbr>`.skipUnscreenableTransaction`* | boolean | Behaviour if the wallet activity is not screenable (eg. if it's a signature request of a hash). If true, a transaction which is \"unscreenable\" will just be skipped, and policy will not trigger |\n| `fallbackBehaviours.skipUnsupportedNetwork`* | boolean | Behaviour if the wallet activity is on a network not supported by chainalysis, or not yet supported in the dfns-chainalysis integration. If true, an unsupported network will just be skipped, and policy will not trigger |\n| `fallbackBehaviours.skipUnsupportedAsset`* | boolean | Behaviour if the wallet activity is with a asset not supported by chainalysis, or not yet supported in the dfns-chainalysis integration. If true, an unsupported asset will just be skipped, and policy will not trigger |\n| `fallbackBehaviours.skipChainalysisFailure`* | boolean | Behaviour if any issue with Chainalysis calls (timeout, results took too long, rate limiting errors, any error). If true, will skip if any error happens |\n\n","required":["kind","configuration"],"properties":{"kind":{"type":"string","enum":["ChainalysisTransactionPrescreening"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.5.pendingChangeRequest.body.oneOf.5.rule.oneOf.6.kind","typeLabel":"enum\u003cstring>"},"configuration":{"type":"object","properties":{"alerts":{"type":"object","properties":{"alertLevel":{"type":"string","enum":["LOW","MEDIUM","HIGH","SEVERE"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.5.pendingChangeRequest.body.oneOf.5.rule.oneOf.6.configuration.alerts.alertLevel","typeLabel":"enum\u003cstring>"},"categoryIds":{"type":"array","items":{"type":"integer","exclusiveMinimum":0,"uniqueKey":"\\items.items.[INDEX].oneOf.5.pendingChangeRequest.body.oneOf.5.rule.oneOf.6.configuration.alerts.categoryIds.items.[INDEX]","typeLabel":"integer"},"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.5.pendingChangeRequest.body.oneOf.5.rule.oneOf.6.configuration.alerts.categoryIds","typeLabel":"integer[]"}},"required":["alertLevel","categoryIds"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.5.pendingChangeRequest.body.oneOf.5.rule.oneOf.6.configuration.alerts","typeLabel":"object"},"exposures":{"type":"object","properties":{"direct":{"type":"object","properties":{"categoryIds":{"type":"array","items":{"type":"integer","exclusiveMinimum":0,"uniqueKey":"\\items.items.[INDEX].oneOf.5.pendingChangeRequest.body.oneOf.5.rule.oneOf.6.configuration.exposures.direct.categoryIds.items.[INDEX]","typeLabel":"integer"},"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.5.pendingChangeRequest.body.oneOf.5.rule.oneOf.6.configuration.exposures.direct.categoryIds","typeLabel":"integer[]"}},"required":["categoryIds"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.5.pendingChangeRequest.body.oneOf.5.rule.oneOf.6.configuration.exposures.direct","typeLabel":"object"}},"required":["direct"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.5.pendingChangeRequest.body.oneOf.5.rule.oneOf.6.configuration.exposures","typeLabel":"object"},"addresses":{"type":"object","properties":{"categoryIds":{"type":"array","items":{"type":"integer","exclusiveMinimum":0,"uniqueKey":"\\items.items.[INDEX].oneOf.5.pendingChangeRequest.body.oneOf.5.rule.oneOf.6.configuration.addresses.categoryIds.items.[INDEX]","typeLabel":"integer"},"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.5.pendingChangeRequest.body.oneOf.5.rule.oneOf.6.configuration.addresses.categoryIds","typeLabel":"integer[]"}},"required":["categoryIds"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.5.pendingChangeRequest.body.oneOf.5.rule.oneOf.6.configuration.addresses","typeLabel":"object"},"fallbackBehaviours":{"type":"object","properties":{"skipUnscreenableTransaction":{"type":"boolean","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.5.pendingChangeRequest.body.oneOf.5.rule.oneOf.6.configuration.fallbackBehaviours.skipUnscreenableTransaction","typeLabel":"boolean"},"skipUnsupportedNetwork":{"type":"boolean","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.5.pendingChangeRequest.body.oneOf.5.rule.oneOf.6.configuration.fallbackBehaviours.skipUnsupportedNetwork","typeLabel":"boolean"},"skipUnsupportedAsset":{"type":"boolean","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.5.pendingChangeRequest.body.oneOf.5.rule.oneOf.6.configuration.fallbackBehaviours.skipUnsupportedAsset","typeLabel":"boolean"},"skipChainalysisFailure":{"type":"boolean","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.5.pendingChangeRequest.body.oneOf.5.rule.oneOf.6.configuration.fallbackBehaviours.skipChainalysisFailure","typeLabel":"boolean"}},"required":["skipUnscreenableTransaction","skipUnsupportedNetwork","skipUnsupportedAsset","skipChainalysisFailure"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.5.pendingChangeRequest.body.oneOf.5.rule.oneOf.6.configuration.fallbackBehaviours","typeLabel":"object"},"userIdTemplate":{"type":"string","minLength":1,"maxLength":50,"pattern":"^([a-zA-Z0-9_:-]|{wallet\\.id}|{wallet\\.externalId})+$","default":"dfns","description":"**Deprecated** — set `userIdTemplate` on the Chainalysis integration setting instead; when set there, the integration-level template takes precedence over this one.\n\nValue sent to Chainalysis as the \"user ID\". Used by Chainalysis for grouping transaction screenings.\n \nThis template can include variables, included in brackets. The following variables are currently supported: `{wallet.id}` and `{wallet.externalId}`.\nAs an example, if you set `userIdTemplate: \"dfns:{wallet.id}_{wallet.externalId}\"`, when your wallet receives a transaction that gets screened by a Chainalysis policy, the \"user ID\" sent to Chainalysis will be `dfns:wa-xxx_yyy` (`wa-xxx` being the wallet ID, and `yyy` being the wallet external ID).","uniqueKey":"\\items.items.[INDEX].oneOf.5.pendingChangeRequest.body.oneOf.5.rule.oneOf.6.configuration.userIdTemplate","typeLabel":"string"}},"required":["alerts","exposures","addresses","fallbackBehaviours"],"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.5.pendingChangeRequest.body.oneOf.5.rule.oneOf.6.configuration","typeLabel":"object"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.5.pendingChangeRequest.body.oneOf.5.rule.oneOf.6","typeLabel":"ChainalysisTransactionPrescreening · object"},{"type":"object","title":"EllipticTransactionPrescreening","description":"\n\u003cInfo>\nThis rule can only be used once the Elliptic integration is activated from the Dfns dashboard settings.\n\u003c/Info>\n\nThis rule uses Elliptic KYT for pre-screening outgoing transfers. Upon transfer attempt, we run a synchronous Elliptic wallet analysis of the destination address, and check the returned risk score against the configured threshold, plus any configured risk rules / categories. If at or above the threshold, or if a configured rule / category matched, the policy is triggered.\n\nIt's called \"Pre\"-screening, because the scanned transaction is not on chain yet, it's still a transaction attempt.","required":["kind","configuration"],"properties":{"kind":{"type":"string","enum":["EllipticTransactionPrescreening"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.5.pendingChangeRequest.body.oneOf.5.rule.oneOf.7.kind","typeLabel":"enum\u003cstring>"},"configuration":{"type":"object","properties":{"riskScoreThreshold":{"type":"number","minimum":0,"maximum":10,"description":"Risk score threshold (0-10, decimals allowed). The policy triggers if the Elliptic risk score is at or above the threshold.","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.5.pendingChangeRequest.body.oneOf.5.rule.oneOf.7.configuration.riskScoreThreshold","typeLabel":"number"},"triggeredRules":{"type":"object","properties":{"ruleIds":{"type":"array","items":{"type":"string","format":"uuid","uniqueKey":"\\items.items.[INDEX].oneOf.5.pendingChangeRequest.body.oneOf.5.rule.oneOf.7.configuration.triggeredRules.ruleIds.items.[INDEX]","typeLabel":"string\u003cuuid>"},"description":"IDs of risk rules from your Elliptic risk model. If any of these rules matched the analysis, the policy triggers regardless of the risk score. Leave empty to trigger on the risk score threshold only.","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.5.pendingChangeRequest.body.oneOf.5.rule.oneOf.7.configuration.triggeredRules.ruleIds","typeLabel":"string\u003cuuid>[]"},"categories":{"type":"array","items":{"type":"string","minLength":1,"uniqueKey":"\\items.items.[INDEX].oneOf.5.pendingChangeRequest.body.oneOf.5.rule.oneOf.7.configuration.triggeredRules.categories.items.[INDEX]","typeLabel":"string"},"description":"Elliptic category names (eg. \"Dark Market\"), matched case-insensitively. If a matched risk rule involves any of these categories, the policy triggers regardless of the risk score. Leave empty to trigger on the risk score threshold only.","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.5.pendingChangeRequest.body.oneOf.5.rule.oneOf.7.configuration.triggeredRules.categories","typeLabel":"string[]"}},"required":["ruleIds","categories"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.5.pendingChangeRequest.body.oneOf.5.rule.oneOf.7.configuration.triggeredRules","typeLabel":"object"},"fallbackBehaviours":{"type":"object","properties":{"skipUnscreenableTransaction":{"type":"boolean","description":"skip all wallet requests that cannot be screened (eg. raw signatures)","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.5.pendingChangeRequest.body.oneOf.5.rule.oneOf.7.configuration.fallbackBehaviours.skipUnscreenableTransaction","typeLabel":"boolean"},"skipUnsupportedNetwork":{"type":"boolean","description":"skip requests on a network not supported yet in our Elliptic integration","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.5.pendingChangeRequest.body.oneOf.5.rule.oneOf.7.configuration.fallbackBehaviours.skipUnsupportedNetwork","typeLabel":"boolean"},"skipEllipticFailure":{"type":"boolean","description":"skip any failure of the Elliptic analysis (timeout, rate limiting, any error)","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.5.pendingChangeRequest.body.oneOf.5.rule.oneOf.7.configuration.fallbackBehaviours.skipEllipticFailure","typeLabel":"boolean"}},"required":["skipUnscreenableTransaction","skipUnsupportedNetwork","skipEllipticFailure"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.5.pendingChangeRequest.body.oneOf.5.rule.oneOf.7.configuration.fallbackBehaviours","typeLabel":"object"}},"required":["riskScoreThreshold","triggeredRules","fallbackBehaviours"],"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.5.pendingChangeRequest.body.oneOf.5.rule.oneOf.7.configuration","typeLabel":"object"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.5.pendingChangeRequest.body.oneOf.5.rule.oneOf.7","typeLabel":"EllipticTransactionPrescreening · object"},{"type":"object","title":"GlobalLedgerTransactionPrescreening","description":"This rule uses GlobalLedger KYT for pre-screening outgoing transfers by checking the destination address risk score.\n\nUpon transfer attempt, we will query GlobalLedger's address risk API, and check if the risk score (0-100) is at or above the configured threshold, or if any alerts show up. If so, the policy will be triggered.\n\nIt's called \"Pre\"-screening, because the scanned transaction is not on chain yet, it's still a transaction attempt.","required":["kind","configuration"],"properties":{"kind":{"type":"string","enum":["GlobalLedgerTransactionPrescreening"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.5.pendingChangeRequest.body.oneOf.5.rule.oneOf.8.kind","typeLabel":"enum\u003cstring>"},"configuration":{"type":"object","properties":{"riskScoreThreshold":{"type":"integer","minimum":0,"maximum":100,"description":"Risk score threshold (0-100). Policy triggers if address/transaction risk score >= threshold","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.5.pendingChangeRequest.body.oneOf.5.rule.oneOf.8.configuration.riskScoreThreshold","typeLabel":"integer"},"fallbackBehaviours":{"type":"object","properties":{"skipUnscreenableTransaction":{"type":"boolean","description":"skip all wallet requests that cannot be screened (eg. raw signatures)","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.5.pendingChangeRequest.body.oneOf.5.rule.oneOf.8.configuration.fallbackBehaviours.skipUnscreenableTransaction","typeLabel":"boolean"},"skipUnsupportedNetwork":{"type":"boolean","description":"skip transfer requests to a network not supported yet in our GlobalLedger integration","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.5.pendingChangeRequest.body.oneOf.5.rule.oneOf.8.configuration.fallbackBehaviours.skipUnsupportedNetwork","typeLabel":"boolean"},"skipUnsupportedAsset":{"type":"boolean","description":"skip transfer requests of an asset not supported by our GlobalLedger integration","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.5.pendingChangeRequest.body.oneOf.5.rule.oneOf.8.configuration.fallbackBehaviours.skipUnsupportedAsset","typeLabel":"boolean"},"skipGlobalLedgerFailure":{"type":"boolean","description":"skips any errors from GlobalLedger API request","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.5.pendingChangeRequest.body.oneOf.5.rule.oneOf.8.configuration.fallbackBehaviours.skipGlobalLedgerFailure","typeLabel":"boolean"}},"required":["skipUnscreenableTransaction","skipUnsupportedNetwork","skipUnsupportedAsset","skipGlobalLedgerFailure"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.5.pendingChangeRequest.body.oneOf.5.rule.oneOf.8.configuration.fallbackBehaviours","typeLabel":"object"}},"required":["riskScoreThreshold","fallbackBehaviours"],"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.5.pendingChangeRequest.body.oneOf.5.rule.oneOf.8.configuration","typeLabel":"object"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.5.pendingChangeRequest.body.oneOf.5.rule.oneOf.8","typeLabel":"GlobalLedgerTransactionPrescreening · object"},{"type":"object","title":"TravelRuleTransactionPrescreening","description":"This rule applies a Travel Rule check to outgoing transfers through the vendor selected in `configuration.vendor`: [Notabene](https://docs.dfns.co/integrations/travel-rule/notabene) or Sumsub. It can only be used once that vendor's integration is activated from the Dfns dashboard settings.\n\nIt ***ONLY*** applies to Dfns [Transfer Asset](https://docs.dfns.co/api-reference/wallets/transfer-asset) Api Calls. It is NOT supported for Transfers initiated via the dashboard. Upon transfer attempt with a [TravelRule](https://docs.dfns.co/api-reference/wallets/transfer-asset#body-travel-rule) payload, we call the vendor's APIs on your behalf to validate and submit the travel rule message, then wait for its outcome. With Notabene, Dfns waits for a response from the counterparty (for custodial transfers) or from Notabene (for non-custodial transfers). With Sumsub, Dfns submits a Travel Rule message and waits for Sumsub to report its outcome. In both cases the wait is bounded by `configuration.autoTriggerTimeoutSeconds`, after which the policy's configured action is applied.\n\nThe transfer's `travelRule` payload must be of the kind matching `configuration.vendor` — a mismatch triggers the policy and applies its configured action. A given wallet must be covered by at most one travel-rule policy (of any vendor): if several travel-rule policies apply to the same transfer carrying a `travelRule` payload, it is treated as a misconfiguration and blocked without contacting any vendor. Signatures and transfers without a payload are not affected, since the rule does not apply to them.\n\nIt's called \"Pre\"-screening, because the transaction is not on chain yet, it's still a transaction attempt (before the transaction actually make it on chain).","required":["kind","configuration"],"properties":{"kind":{"type":"string","enum":["TravelRuleTransactionPrescreening"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.5.pendingChangeRequest.body.oneOf.5.rule.oneOf.9.kind","typeLabel":"enum\u003cstring>"},"configuration":{"oneOf":[{"type":"object","title":"TravelRuleNotabeneConfiguration","required":["vendor"],"properties":{"vendor":{"type":"string","enum":["Notabene"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.5.pendingChangeRequest.body.oneOf.5.rule.oneOf.9.configuration.oneOf.0.vendor","typeLabel":"enum\u003cstring>"},"autoTriggerTimeoutSeconds":{"type":"integer","minimum":0,"maximum":2592000,"default":86400,"description":"Seconds to wait for the vendor's verdict before the policy action applies. Maximum 2592000 (30 days). Defaults to 86400 (24 hours).","uniqueKey":"\\items.items.[INDEX].oneOf.5.pendingChangeRequest.body.oneOf.5.rule.oneOf.9.configuration.oneOf.0.autoTriggerTimeoutSeconds","typeLabel":"integer"},"autoClearAfterDeliveredTimeoutSeconds":{"type":"integer","minimum":0,"maximum":2592000,"description":"Seconds after delivery before a still-pending evaluation clears. Maximum 2592000 (30 days).","uniqueKey":"\\items.items.[INDEX].oneOf.5.pendingChangeRequest.body.oneOf.5.rule.oneOf.9.configuration.oneOf.0.autoClearAfterDeliveredTimeoutSeconds","typeLabel":"integer"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.5.pendingChangeRequest.body.oneOf.5.rule.oneOf.9.configuration.oneOf.0","typeLabel":"TravelRuleNotabeneConfiguration · object"},{"type":"object","title":"TravelRuleSumsubConfiguration","required":["vendor"],"properties":{"vendor":{"type":"string","enum":["Sumsub"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.5.pendingChangeRequest.body.oneOf.5.rule.oneOf.9.configuration.oneOf.1.vendor","typeLabel":"enum\u003cstring>"},"autoTriggerTimeoutSeconds":{"type":"integer","minimum":0,"maximum":2592000,"default":86400,"description":"Seconds to wait for the vendor's verdict before the policy action applies. Maximum 2592000 (30 days). Defaults to 86400 (24 hours).","uniqueKey":"\\items.items.[INDEX].oneOf.5.pendingChangeRequest.body.oneOf.5.rule.oneOf.9.configuration.oneOf.1.autoTriggerTimeoutSeconds","typeLabel":"integer"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.5.pendingChangeRequest.body.oneOf.5.rule.oneOf.9.configuration.oneOf.1","typeLabel":"TravelRuleSumsubConfiguration · object"}],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.5.pendingChangeRequest.body.oneOf.5.rule.oneOf.9.configuration","typeLabel":"TravelRuleNotabeneConfiguration · object | TravelRuleSumsubConfiguration · object"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.5.pendingChangeRequest.body.oneOf.5.rule.oneOf.9","typeLabel":"TravelRuleTransactionPrescreening · object"}],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.5.pendingChangeRequest.body.oneOf.5.rule","typeLabel":"AlwaysTrigger · object | TransactionRecipientWhitelist · object | TransactionAmountLimit · object | TransactionAmountLimitNominal · object | TransactionAmountVelocity · object | TransactionCountVelocity · object | ChainalysisTransactionPrescreening · object | EllipticTransactionPrescreening · object | GlobalLedgerTransactionPrescreening · object | TravelRuleTransactionPrescreening · object"},"action":{"oneOf":[{"type":"object","title":"RequestApproval","description":"\nThis action means that activity will first require an Approval process to be completed before it can be executed (or be aborted if someone rejects it during the approval process).\n\nOne or several groups of approvers need to be specified. These groups define who is allowed to approve / reject an activity.\n\nThe activity will only be executed if all approver groups reach their \"quorum\" of approvals. Otherwise, if any one user within any approver group rejects, then the activity is aborted and the call is not executed.\n\nThe example below shows a `RequestApproval` action, configured with one approval group requiring 2 approvals amongst three specific users.\n\n```json\n{\n \"action\": {\n \"kind\": \"RequestApproval\",\n \"autoRejectTimeout\": 60, // minutes\n \"approvalGroups\": [\n {\n \"name\": \"Admins\",\n \"quorum\": 2, // only 2 approvers required in that group \n \"approvers\": {\n \"userId\": {\n \"in\": [\"us-...1\", \"us-...2\", \"us-...3\"],\n }\n }\n }\n ],\n\n }\n}\n```\n\n**Don't lock yourself up**\n\nBy default, users cannot approve an activity they initiated themselves, even if they are in an approval group. To allow this, you must set `initiatorCanApprove: true`.\n\n*Example 1:* For any wallet transfer, a policy is setup to require approval from **1 specific admin user** (eg. the CEO). `initiatorCanApprove` was not set to `true`. If the CEO himself initiates a transfer, no-one can approve his transfer and it's stuck.\n\n*Example 2:* Company has only 3 users. A policy is setup to require approval from **any 3 users** (`quorum: 3`) for any modification of a policy. `initiatorCanApprove` was not set to `true`. In this case, they are locked, and the policy cannot be modified: whoever requests a modification cannot approve, and the policy is therefore always missing one approver. To unlock, they would need to invite a new user and give him the rights to approve as well.\n ","required":["kind","approvalGroups"],"properties":{"kind":{"type":"string","enum":["RequestApproval"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.5.pendingChangeRequest.body.oneOf.5.action.oneOf.0.kind","typeLabel":"enum\u003cstring>"},"approvalGroups":{"type":"array","items":{"type":"object","properties":{"quorum":{"type":"integer","minimum":1,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.5.pendingChangeRequest.body.oneOf.5.action.oneOf.0.approvalGroups.items.[INDEX].quorum","typeLabel":"integer"},"approvers":{"type":"object","properties":{"userId":{"type":"object","properties":{"in":{"type":"array","items":{"type":"string","minLength":1,"uniqueKey":"\\items.items.[INDEX].oneOf.5.pendingChangeRequest.body.oneOf.5.action.oneOf.0.approvalGroups.items.[INDEX].approvers.userId.in.items.[INDEX]","typeLabel":"string"},"minItems":1,"maxItems":100,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.5.pendingChangeRequest.body.oneOf.5.action.oneOf.0.approvalGroups.items.[INDEX].approvers.userId.in","typeLabel":"string[]"}},"required":["in"],"additionalProperties":false,"description":"Users and service accounts who may approve.","uniqueKey":"\\items.items.[INDEX].oneOf.5.pendingChangeRequest.body.oneOf.5.action.oneOf.0.approvalGroups.items.[INDEX].approvers.userId","typeLabel":"object"},"userGroupId":{"type":"object","properties":{"in":{"type":"array","items":{"type":"string","minLength":1,"maxLength":64,"pattern":"^ug-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"User group id.","example":"ug-139tf-f58l8-lsbt6dp47lfsdvgh","uniqueKey":"\\items.items.[INDEX].oneOf.5.pendingChangeRequest.body.oneOf.5.action.oneOf.0.approvalGroups.items.[INDEX].approvers.userGroupId.in.items.[INDEX]","typeLabel":"string"},"minItems":1,"maxItems":100,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.5.pendingChangeRequest.body.oneOf.5.action.oneOf.0.approvalGroups.items.[INDEX].approvers.userGroupId.in","typeLabel":"string[]"}},"required":["in"],"additionalProperties":false,"description":"User groups whose members may approve.","uniqueKey":"\\items.items.[INDEX].oneOf.5.pendingChangeRequest.body.oneOf.5.action.oneOf.0.approvalGroups.items.[INDEX].approvers.userGroupId","typeLabel":"object"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.5.pendingChangeRequest.body.oneOf.5.action.oneOf.0.approvalGroups.items.[INDEX].approvers","typeLabel":"object"},"name":{"type":"string","uniqueKey":"\\items.items.[INDEX].oneOf.5.pendingChangeRequest.body.oneOf.5.action.oneOf.0.approvalGroups.items.[INDEX].name","typeLabel":"string"},"initiatorCanApprove":{"type":"boolean","description":"Whether the initiator of the activity can participate in the approval.","uniqueKey":"\\items.items.[INDEX].oneOf.5.pendingChangeRequest.body.oneOf.5.action.oneOf.0.approvalGroups.items.[INDEX].initiatorCanApprove","typeLabel":"boolean"},"serviceAccountsCanApprove":{"type":"boolean","description":"Whether service accounts can participate in the approval for this group.","uniqueKey":"\\items.items.[INDEX].oneOf.5.pendingChangeRequest.body.oneOf.5.action.oneOf.0.approvalGroups.items.[INDEX].serviceAccountsCanApprove","typeLabel":"boolean"}},"required":["quorum","approvers"],"additionalProperties":false,"uniqueKey":"\\items.items.[INDEX].oneOf.5.pendingChangeRequest.body.oneOf.5.action.oneOf.0.approvalGroups.items.[INDEX]","typeLabel":"object"},"minItems":1,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.5.pendingChangeRequest.body.oneOf.5.action.oneOf.0.approvalGroups","typeLabel":"object[]"},"autoRejectTimeout":{"oneOf":[{"type":"integer","minimum":1,"uniqueKey":"\\items.items.[INDEX].oneOf.5.pendingChangeRequest.body.oneOf.5.action.oneOf.0.autoRejectTimeout.oneOf.0","typeLabel":"integer"},{"type":"null","minimum":1,"uniqueKey":"\\items.items.[INDEX].oneOf.5.pendingChangeRequest.body.oneOf.5.action.oneOf.0.autoRejectTimeout.oneOf.1","typeLabel":"null"}],"uniqueKey":"\\items.items.[INDEX].oneOf.5.pendingChangeRequest.body.oneOf.5.action.oneOf.0.autoRejectTimeout","typeLabel":"integer | null"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.5.pendingChangeRequest.body.oneOf.5.action.oneOf.0","typeLabel":"RequestApproval · object"},{"type":"object","title":"Block","description":"This action means that the activity will be blocked if the policy is triggered.\n\n```json\n{\n \"action\": {\n \"kind\": \"Block\"\n }\n}\n```\n","required":["kind"],"properties":{"kind":{"type":"string","enum":["Block"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.5.pendingChangeRequest.body.oneOf.5.action.oneOf.1.kind","typeLabel":"enum\u003cstring>"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.5.pendingChangeRequest.body.oneOf.5.action.oneOf.1","typeLabel":"Block · object"},{"type":"object","title":"NoAction","description":"\n This action kind means that nothing will happen after policy rule evaluation. It's meant to be used with policy rules \"`ChainalysisTransactionPrescreening`\" or \"`ChainalysisTransactionScreening`\". This action is for when you just want the KYT analysis rule to be run, and then if triggered, those result returned in a `policy.triggered` [Webhook Event](https://docs.dfns.co/api-reference/webhook-events).\n\n```json\n{\n \"action\": {\n \"kind\": \"NoAction\"\n }\n}\n```\n ","required":["kind"],"properties":{"kind":{"type":"string","enum":["NoAction"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.5.pendingChangeRequest.body.oneOf.5.action.oneOf.2.kind","typeLabel":"enum\u003cstring>"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.5.pendingChangeRequest.body.oneOf.5.action.oneOf.2","typeLabel":"NoAction · object"}],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.5.pendingChangeRequest.body.oneOf.5.action","typeLabel":"RequestApproval · object | Block · object | NoAction · object"},"dateCreated":{"type":"string","uniqueKey":"\\items.items.[INDEX].oneOf.5.pendingChangeRequest.body.oneOf.5.dateCreated","typeLabel":"string"},"dateUpdated":{"type":"string","uniqueKey":"\\items.items.[INDEX].oneOf.5.pendingChangeRequest.body.oneOf.5.dateUpdated","typeLabel":"string"},"filters":{"type":"object","properties":{"walletId":{"type":"object","properties":{"in":{"type":"array","items":{"type":"string","minLength":1,"uniqueKey":"\\items.items.[INDEX].oneOf.5.pendingChangeRequest.body.oneOf.5.filters.walletId.in.items.[INDEX]","typeLabel":"string"},"minItems":1,"maxItems":100,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.5.pendingChangeRequest.body.oneOf.5.filters.walletId.in","typeLabel":"string[]"}},"required":["in"],"additionalProperties":false,"uniqueKey":"\\items.items.[INDEX].oneOf.5.pendingChangeRequest.body.oneOf.5.filters.walletId","typeLabel":"object"},"walletTags":{"type":"object","properties":{"hasAny":{"type":"array","items":{"type":"string","minLength":1,"uniqueKey":"\\items.items.[INDEX].oneOf.5.pendingChangeRequest.body.oneOf.5.filters.walletTags.hasAny.items.[INDEX]","typeLabel":"string"},"minItems":1,"maxItems":100,"uniqueKey":"\\items.items.[INDEX].oneOf.5.pendingChangeRequest.body.oneOf.5.filters.walletTags.hasAny","typeLabel":"string[]"},"hasAll":{"type":"array","items":{"type":"string","minLength":1,"uniqueKey":"\\items.items.[INDEX].oneOf.5.pendingChangeRequest.body.oneOf.5.filters.walletTags.hasAll.items.[INDEX]","typeLabel":"string"},"minItems":1,"maxItems":100,"uniqueKey":"\\items.items.[INDEX].oneOf.5.pendingChangeRequest.body.oneOf.5.filters.walletTags.hasAll","typeLabel":"string[]"}},"additionalProperties":false,"uniqueKey":"\\items.items.[INDEX].oneOf.5.pendingChangeRequest.body.oneOf.5.filters.walletTags","typeLabel":"object"},"keyId":{"type":"object","properties":{"in":{"type":"array","items":{"type":"string","minLength":1,"maxLength":64,"pattern":"^key-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"Key id.","example":"key-01snl-t56gb-j8tsok0vn802p80i","uniqueKey":"\\items.items.[INDEX].oneOf.5.pendingChangeRequest.body.oneOf.5.filters.keyId.in.items.[INDEX]","typeLabel":"string"},"minItems":1,"maxItems":100,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.5.pendingChangeRequest.body.oneOf.5.filters.keyId.in","typeLabel":"string[]"}},"required":["in"],"additionalProperties":false,"uniqueKey":"\\items.items.[INDEX].oneOf.5.pendingChangeRequest.body.oneOf.5.filters.keyId","typeLabel":"object"},"keyStoreId":{"type":"object","properties":{"in":{"type":"array","items":{"type":"string","minLength":1,"maxLength":64,"pattern":"^store-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"Key store id.","example":"store-425nf-ebf0a-qq22t6qra51tj8j0","uniqueKey":"\\items.items.[INDEX].oneOf.5.pendingChangeRequest.body.oneOf.5.filters.keyStoreId.in.items.[INDEX]","typeLabel":"string"},"minItems":1,"maxItems":100,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.5.pendingChangeRequest.body.oneOf.5.filters.keyStoreId.in","typeLabel":"string[]"}},"required":["in"],"additionalProperties":false,"uniqueKey":"\\items.items.[INDEX].oneOf.5.pendingChangeRequest.body.oneOf.5.filters.keyStoreId","typeLabel":"object"}},"additionalProperties":false,"uniqueKey":"\\items.items.[INDEX].oneOf.5.pendingChangeRequest.body.oneOf.5.filters","typeLabel":"object"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.5.pendingChangeRequest.body.oneOf.5","typeLabel":"Wallets:Sign · object"},{"type":"object","title":"Wallets:IncomingTransaction","required":["id","name","status","activityKind","rule","action"],"properties":{"id":{"type":"string","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.5.pendingChangeRequest.body.oneOf.6.id","typeLabel":"string"},"name":{"type":"string","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.5.pendingChangeRequest.body.oneOf.6.name","typeLabel":"string"},"status":{"type":"string","enum":["Active","Archived"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.5.pendingChangeRequest.body.oneOf.6.status","typeLabel":"enum\u003cstring>"},"activityKind":{"type":"string","enum":["Wallets:IncomingTransaction"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.5.pendingChangeRequest.body.oneOf.6.activityKind","typeLabel":"enum\u003cstring>"},"rule":{"type":"object","title":"ChainalysisTransactionScreening","description":"\n\u003cInfo>\nThis rule can only be used once the Chainalysis integration is activated from the Dfns dashboard settings. (see more on [Chainalysis](https://docs.dfns.co/integrations/aml-kyt/chainalysis) integration page).\n\u003c/Info>\n\nThis rule can be used on a policy of `activityKind` = `Wallets:IncomingTransaction`, and with the action kind `NoAction`. It's a rule based on Chainalysis KYT integration (Know-Your-Transaction). Upon an incoming transaction detectedby our indexers, we will [register the transfer with Chainalysis](https://docs.chainalysis.com/api/kyt/#registration-register-a-transfer), and fetch the results of the analysis (alerts \u0026 exposures detected). Based on the results, and the configuration of this rule, the policy will be triggered.\n\nThe shape of the rule is almost like the `ChainalysisTransactionPrescreening` rule, expect the the `address` property is not supported.\n\n```json\n{\n \"rule\": {\n \"kind\": \"ChainalysisTransactionPrescreening\",\n \"configuration\": {\n \"alerts\": {\n \"alertLevel\": \"LOW\",\n \"categoryIds\": []\n },\n \"exposures\": {\n \"direct\": {\n \"categoryIds\": []\n }\n },\n \"fallbackBehaviours\": {\n \"skipUnscreenableTransaction\": false,\n \"skipUnsupportedNetwork\": false,\n \"skipUnsupportedAsset\": false,\n \"skipChainalysisFailure\": false\n }\n }\n }\n}\n```\n\n**Configuration**\n\nPlease refer to the configuration for the `ChainalysisTransactionPrescreening` rule.\n","required":["kind","configuration"],"properties":{"kind":{"type":"string","enum":["ChainalysisTransactionScreening"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.5.pendingChangeRequest.body.oneOf.6.rule.kind","typeLabel":"enum\u003cstring>"},"configuration":{"type":"object","properties":{"alerts":{"type":"object","properties":{"alertLevel":{"type":"string","enum":["LOW","MEDIUM","HIGH","SEVERE"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.5.pendingChangeRequest.body.oneOf.6.rule.configuration.alerts.alertLevel","typeLabel":"enum\u003cstring>"},"categoryIds":{"type":"array","items":{"type":"integer","exclusiveMinimum":0,"uniqueKey":"\\items.items.[INDEX].oneOf.5.pendingChangeRequest.body.oneOf.6.rule.configuration.alerts.categoryIds.items.[INDEX]","typeLabel":"integer"},"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.5.pendingChangeRequest.body.oneOf.6.rule.configuration.alerts.categoryIds","typeLabel":"integer[]"}},"required":["alertLevel","categoryIds"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.5.pendingChangeRequest.body.oneOf.6.rule.configuration.alerts","typeLabel":"object"},"exposures":{"type":"object","properties":{"direct":{"type":"object","properties":{"categoryIds":{"type":"array","items":{"type":"integer","exclusiveMinimum":0,"uniqueKey":"\\items.items.[INDEX].oneOf.5.pendingChangeRequest.body.oneOf.6.rule.configuration.exposures.direct.categoryIds.items.[INDEX]","typeLabel":"integer"},"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.5.pendingChangeRequest.body.oneOf.6.rule.configuration.exposures.direct.categoryIds","typeLabel":"integer[]"}},"required":["categoryIds"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.5.pendingChangeRequest.body.oneOf.6.rule.configuration.exposures.direct","typeLabel":"object"}},"required":["direct"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.5.pendingChangeRequest.body.oneOf.6.rule.configuration.exposures","typeLabel":"object"},"fallbackBehaviours":{"type":"object","properties":{"skipUnscreenableTransaction":{"type":"boolean","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.5.pendingChangeRequest.body.oneOf.6.rule.configuration.fallbackBehaviours.skipUnscreenableTransaction","typeLabel":"boolean"},"skipUnsupportedNetwork":{"type":"boolean","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.5.pendingChangeRequest.body.oneOf.6.rule.configuration.fallbackBehaviours.skipUnsupportedNetwork","typeLabel":"boolean"},"skipUnsupportedAsset":{"type":"boolean","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.5.pendingChangeRequest.body.oneOf.6.rule.configuration.fallbackBehaviours.skipUnsupportedAsset","typeLabel":"boolean"},"skipChainalysisFailure":{"type":"boolean","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.5.pendingChangeRequest.body.oneOf.6.rule.configuration.fallbackBehaviours.skipChainalysisFailure","typeLabel":"boolean"}},"required":["skipUnscreenableTransaction","skipUnsupportedNetwork","skipUnsupportedAsset","skipChainalysisFailure"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.5.pendingChangeRequest.body.oneOf.6.rule.configuration.fallbackBehaviours","typeLabel":"object"},"userIdTemplate":{"type":"string","minLength":1,"maxLength":50,"pattern":"^([a-zA-Z0-9_:-]|{wallet\\.id}|{wallet\\.externalId})+$","default":"dfns","description":"**Deprecated** — set `userIdTemplate` on the Chainalysis integration setting instead; when set there, the integration-level template takes precedence over this one.\n\nValue sent to Chainalysis as the \"user ID\". Used by Chainalysis for grouping transaction screenings.\n \nThis template can include variables, included in brackets. The following variables are currently supported: `{wallet.id}` and `{wallet.externalId}`.\nAs an example, if you set `userIdTemplate: \"dfns:{wallet.id}_{wallet.externalId}\"`, when your wallet receives a transaction that gets screened by a Chainalysis policy, the \"user ID\" sent to Chainalysis will be `dfns:wa-xxx_yyy` (`wa-xxx` being the wallet ID, and `yyy` being the wallet external ID).","uniqueKey":"\\items.items.[INDEX].oneOf.5.pendingChangeRequest.body.oneOf.6.rule.configuration.userIdTemplate","typeLabel":"string"}},"required":["alerts","exposures","fallbackBehaviours"],"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.5.pendingChangeRequest.body.oneOf.6.rule.configuration","typeLabel":"object"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.5.pendingChangeRequest.body.oneOf.6.rule","typeLabel":"ChainalysisTransactionScreening · object"},"action":{"type":"object","title":"NoAction","description":"\n This action kind means that nothing will happen after policy rule evaluation. It's meant to be used with policy rules \"`ChainalysisTransactionPrescreening`\" or \"`ChainalysisTransactionScreening`\". This action is for when you just want the KYT analysis rule to be run, and then if triggered, those result returned in a `policy.triggered` [Webhook Event](https://docs.dfns.co/api-reference/webhook-events).\n\n```json\n{\n \"action\": {\n \"kind\": \"NoAction\"\n }\n}\n```\n ","required":["kind"],"properties":{"kind":{"type":"string","enum":["NoAction"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.5.pendingChangeRequest.body.oneOf.6.action.kind","typeLabel":"enum\u003cstring>"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.5.pendingChangeRequest.body.oneOf.6.action","typeLabel":"NoAction · object"},"dateCreated":{"type":"string","uniqueKey":"\\items.items.[INDEX].oneOf.5.pendingChangeRequest.body.oneOf.6.dateCreated","typeLabel":"string"},"dateUpdated":{"type":"string","uniqueKey":"\\items.items.[INDEX].oneOf.5.pendingChangeRequest.body.oneOf.6.dateUpdated","typeLabel":"string"},"filters":{"type":"object","properties":{"walletId":{"type":"object","properties":{"in":{"type":"array","items":{"type":"string","minLength":1,"uniqueKey":"\\items.items.[INDEX].oneOf.5.pendingChangeRequest.body.oneOf.6.filters.walletId.in.items.[INDEX]","typeLabel":"string"},"minItems":1,"maxItems":100,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.5.pendingChangeRequest.body.oneOf.6.filters.walletId.in","typeLabel":"string[]"}},"required":["in"],"additionalProperties":false,"uniqueKey":"\\items.items.[INDEX].oneOf.5.pendingChangeRequest.body.oneOf.6.filters.walletId","typeLabel":"object"},"walletTags":{"type":"object","properties":{"hasAny":{"type":"array","items":{"type":"string","minLength":1,"uniqueKey":"\\items.items.[INDEX].oneOf.5.pendingChangeRequest.body.oneOf.6.filters.walletTags.hasAny.items.[INDEX]","typeLabel":"string"},"minItems":1,"maxItems":100,"uniqueKey":"\\items.items.[INDEX].oneOf.5.pendingChangeRequest.body.oneOf.6.filters.walletTags.hasAny","typeLabel":"string[]"},"hasAll":{"type":"array","items":{"type":"string","minLength":1,"uniqueKey":"\\items.items.[INDEX].oneOf.5.pendingChangeRequest.body.oneOf.6.filters.walletTags.hasAll.items.[INDEX]","typeLabel":"string"},"minItems":1,"maxItems":100,"uniqueKey":"\\items.items.[INDEX].oneOf.5.pendingChangeRequest.body.oneOf.6.filters.walletTags.hasAll","typeLabel":"string[]"}},"additionalProperties":false,"uniqueKey":"\\items.items.[INDEX].oneOf.5.pendingChangeRequest.body.oneOf.6.filters.walletTags","typeLabel":"object"},"keyId":{"type":"object","properties":{"in":{"type":"array","items":{"type":"string","minLength":1,"maxLength":64,"pattern":"^key-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"Key id.","example":"key-01snl-t56gb-j8tsok0vn802p80i","uniqueKey":"\\items.items.[INDEX].oneOf.5.pendingChangeRequest.body.oneOf.6.filters.keyId.in.items.[INDEX]","typeLabel":"string"},"minItems":1,"maxItems":100,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.5.pendingChangeRequest.body.oneOf.6.filters.keyId.in","typeLabel":"string[]"}},"required":["in"],"additionalProperties":false,"uniqueKey":"\\items.items.[INDEX].oneOf.5.pendingChangeRequest.body.oneOf.6.filters.keyId","typeLabel":"object"},"keyStoreId":{"type":"object","properties":{"in":{"type":"array","items":{"type":"string","minLength":1,"maxLength":64,"pattern":"^store-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"Key store id.","example":"store-425nf-ebf0a-qq22t6qra51tj8j0","uniqueKey":"\\items.items.[INDEX].oneOf.5.pendingChangeRequest.body.oneOf.6.filters.keyStoreId.in.items.[INDEX]","typeLabel":"string"},"minItems":1,"maxItems":100,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.5.pendingChangeRequest.body.oneOf.6.filters.keyStoreId.in","typeLabel":"string[]"}},"required":["in"],"additionalProperties":false,"uniqueKey":"\\items.items.[INDEX].oneOf.5.pendingChangeRequest.body.oneOf.6.filters.keyStoreId","typeLabel":"object"}},"additionalProperties":false,"uniqueKey":"\\items.items.[INDEX].oneOf.5.pendingChangeRequest.body.oneOf.6.filters","typeLabel":"object"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.5.pendingChangeRequest.body.oneOf.6","typeLabel":"Wallets:IncomingTransaction · object"},{"type":"object","title":"Vaults:ReleaseQuarantine","required":["id","name","status","activityKind","rule","action"],"properties":{"id":{"type":"string","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.5.pendingChangeRequest.body.oneOf.7.id","typeLabel":"string"},"name":{"type":"string","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.5.pendingChangeRequest.body.oneOf.7.name","typeLabel":"string"},"status":{"type":"string","enum":["Active","Archived"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.5.pendingChangeRequest.body.oneOf.7.status","typeLabel":"enum\u003cstring>"},"activityKind":{"type":"string","enum":["Vaults:ReleaseQuarantine"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.5.pendingChangeRequest.body.oneOf.7.activityKind","typeLabel":"enum\u003cstring>"},"rule":{"oneOf":[{"type":"object","title":"AlwaysTrigger","description":"This rule will always be triggered, meaning that if this rule is defined on a policy, the policy will always trigger the policy action, regardless of the activity details.","required":["kind"],"properties":{"kind":{"type":"string","enum":["AlwaysTrigger"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.5.pendingChangeRequest.body.oneOf.7.rule.oneOf.0.kind","typeLabel":"enum\u003cstring>"},"configuration":{"type":"object","properties":{},"additionalProperties":false,"uniqueKey":"\\items.items.[INDEX].oneOf.5.pendingChangeRequest.body.oneOf.7.rule.oneOf.0.configuration","typeLabel":"object"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.5.pendingChangeRequest.body.oneOf.7.rule.oneOf.0","typeLabel":"AlwaysTrigger · object"},{"type":"object","title":"ChainalysisQuarantineScreening","description":"\n\u003cInfo>\nThis rule can only be used once the Chainalysis integration is activated from the Dfns dashboard settings. (see more on [Chainalysis](https://docs.dfns.co/integrations/aml-kyt/chainalysis) integration page).\n\u003c/Info>\n\nThis rule can be used on a policy of `activityKind` = `Vaults:ReleaseQuarantine`. When a quarantined vault deposit was screened by Chainalysis KYT, the screening result (alerts \u0026 direct exposure) is stored with the quarantine. When a release of the quarantined funds is requested, this rule evaluates that **stored** result — no new Chainalysis call is made. Based on the stored result and the configuration of this rule, the policy will be triggered.\n\nIf the quarantine has **no stored KYT result** (the result was not received yet, the network/asset is not supported by the Chainalysis integration, or screening failed), the rule **always triggers** (fail closed): the release then follows the policy action (approval or block).\n\n```json\n{\n \"rule\": {\n \"kind\": \"ChainalysisQuarantineScreening\",\n \"configuration\": {\n \"alerts\": {\n \"alertLevel\": \"LOW\",\n \"categoryIds\": []\n },\n \"exposures\": {\n \"direct\": {\n \"categoryIds\": []\n }\n }\n }\n }\n}\n```\n\n**Configuration**\n\n| Property | Type | Description |\n| --- | --- | --- |\n| `alerts`\u003cbr>\u003cbr>`.alertLevel`* | `string` | Minimum alert level above which the rule should trigger, if any alert was returned in the stored Chainalysis results. Can be `LOW`, `MEDIUM`, `HIGH`, or `SEVERE` |\n| `alerts`\u003cbr>\u003cbr>`.categoryIds`* | list of integers | List of Chainalysis category IDs (see [here](https://docs.chainalysis.com/api/kyt/#categories)). If you leave this list empty, alerts of any category will trigger the rule. Otherwise, if you only want the rule to trigger on specific categories, you can specify some in the list. |\n| `exposures`\u003cbr>\u003cbr>`.direct`\u003cbr>\u003cbr>`.categoryIds`* | list of integers | List of Chainalysis category IDs (see [here](https://docs.chainalysis.com/api/kyt/#categories)). If you leave this list empty, a direct exposure of any category in the stored results will trigger the rule. Otherwise, if you only want the rule to trigger on specific categories, you can specify some in the list. |\n","required":["kind","configuration"],"properties":{"kind":{"type":"string","enum":["ChainalysisQuarantineScreening"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.5.pendingChangeRequest.body.oneOf.7.rule.oneOf.1.kind","typeLabel":"enum\u003cstring>"},"configuration":{"type":"object","properties":{"alerts":{"type":"object","properties":{"alertLevel":{"type":"string","enum":["LOW","MEDIUM","HIGH","SEVERE"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.5.pendingChangeRequest.body.oneOf.7.rule.oneOf.1.configuration.alerts.alertLevel","typeLabel":"enum\u003cstring>"},"categoryIds":{"type":"array","items":{"type":"integer","exclusiveMinimum":0,"uniqueKey":"\\items.items.[INDEX].oneOf.5.pendingChangeRequest.body.oneOf.7.rule.oneOf.1.configuration.alerts.categoryIds.items.[INDEX]","typeLabel":"integer"},"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.5.pendingChangeRequest.body.oneOf.7.rule.oneOf.1.configuration.alerts.categoryIds","typeLabel":"integer[]"}},"required":["alertLevel","categoryIds"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.5.pendingChangeRequest.body.oneOf.7.rule.oneOf.1.configuration.alerts","typeLabel":"object"},"exposures":{"type":"object","properties":{"direct":{"type":"object","properties":{"categoryIds":{"type":"array","items":{"type":"integer","exclusiveMinimum":0,"uniqueKey":"\\items.items.[INDEX].oneOf.5.pendingChangeRequest.body.oneOf.7.rule.oneOf.1.configuration.exposures.direct.categoryIds.items.[INDEX]","typeLabel":"integer"},"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.5.pendingChangeRequest.body.oneOf.7.rule.oneOf.1.configuration.exposures.direct.categoryIds","typeLabel":"integer[]"}},"required":["categoryIds"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.5.pendingChangeRequest.body.oneOf.7.rule.oneOf.1.configuration.exposures.direct","typeLabel":"object"}},"required":["direct"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.5.pendingChangeRequest.body.oneOf.7.rule.oneOf.1.configuration.exposures","typeLabel":"object"}},"required":["alerts","exposures"],"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.5.pendingChangeRequest.body.oneOf.7.rule.oneOf.1.configuration","typeLabel":"object"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.5.pendingChangeRequest.body.oneOf.7.rule.oneOf.1","typeLabel":"ChainalysisQuarantineScreening · object"}],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.5.pendingChangeRequest.body.oneOf.7.rule","typeLabel":"AlwaysTrigger · object | ChainalysisQuarantineScreening · object"},"action":{"oneOf":[{"type":"object","title":"RequestApproval","description":"\nThis action means that activity will first require an Approval process to be completed before it can be executed (or be aborted if someone rejects it during the approval process).\n\nOne or several groups of approvers need to be specified. These groups define who is allowed to approve / reject an activity.\n\nThe activity will only be executed if all approver groups reach their \"quorum\" of approvals. Otherwise, if any one user within any approver group rejects, then the activity is aborted and the call is not executed.\n\nThe example below shows a `RequestApproval` action, configured with one approval group requiring 2 approvals amongst three specific users.\n\n```json\n{\n \"action\": {\n \"kind\": \"RequestApproval\",\n \"autoRejectTimeout\": 60, // minutes\n \"approvalGroups\": [\n {\n \"name\": \"Admins\",\n \"quorum\": 2, // only 2 approvers required in that group \n \"approvers\": {\n \"userId\": {\n \"in\": [\"us-...1\", \"us-...2\", \"us-...3\"],\n }\n }\n }\n ],\n\n }\n}\n```\n\n**Don't lock yourself up**\n\nBy default, users cannot approve an activity they initiated themselves, even if they are in an approval group. To allow this, you must set `initiatorCanApprove: true`.\n\n*Example 1:* For any wallet transfer, a policy is setup to require approval from **1 specific admin user** (eg. the CEO). `initiatorCanApprove` was not set to `true`. If the CEO himself initiates a transfer, no-one can approve his transfer and it's stuck.\n\n*Example 2:* Company has only 3 users. A policy is setup to require approval from **any 3 users** (`quorum: 3`) for any modification of a policy. `initiatorCanApprove` was not set to `true`. In this case, they are locked, and the policy cannot be modified: whoever requests a modification cannot approve, and the policy is therefore always missing one approver. To unlock, they would need to invite a new user and give him the rights to approve as well.\n ","required":["kind","approvalGroups"],"properties":{"kind":{"type":"string","enum":["RequestApproval"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.5.pendingChangeRequest.body.oneOf.7.action.oneOf.0.kind","typeLabel":"enum\u003cstring>"},"approvalGroups":{"type":"array","items":{"type":"object","properties":{"quorum":{"type":"integer","minimum":1,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.5.pendingChangeRequest.body.oneOf.7.action.oneOf.0.approvalGroups.items.[INDEX].quorum","typeLabel":"integer"},"approvers":{"type":"object","properties":{"userId":{"type":"object","properties":{"in":{"type":"array","items":{"type":"string","minLength":1,"uniqueKey":"\\items.items.[INDEX].oneOf.5.pendingChangeRequest.body.oneOf.7.action.oneOf.0.approvalGroups.items.[INDEX].approvers.userId.in.items.[INDEX]","typeLabel":"string"},"minItems":1,"maxItems":100,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.5.pendingChangeRequest.body.oneOf.7.action.oneOf.0.approvalGroups.items.[INDEX].approvers.userId.in","typeLabel":"string[]"}},"required":["in"],"additionalProperties":false,"description":"Users and service accounts who may approve.","uniqueKey":"\\items.items.[INDEX].oneOf.5.pendingChangeRequest.body.oneOf.7.action.oneOf.0.approvalGroups.items.[INDEX].approvers.userId","typeLabel":"object"},"userGroupId":{"type":"object","properties":{"in":{"type":"array","items":{"type":"string","minLength":1,"maxLength":64,"pattern":"^ug-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"User group id.","example":"ug-139tf-f58l8-lsbt6dp47lfsdvgh","uniqueKey":"\\items.items.[INDEX].oneOf.5.pendingChangeRequest.body.oneOf.7.action.oneOf.0.approvalGroups.items.[INDEX].approvers.userGroupId.in.items.[INDEX]","typeLabel":"string"},"minItems":1,"maxItems":100,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.5.pendingChangeRequest.body.oneOf.7.action.oneOf.0.approvalGroups.items.[INDEX].approvers.userGroupId.in","typeLabel":"string[]"}},"required":["in"],"additionalProperties":false,"description":"User groups whose members may approve.","uniqueKey":"\\items.items.[INDEX].oneOf.5.pendingChangeRequest.body.oneOf.7.action.oneOf.0.approvalGroups.items.[INDEX].approvers.userGroupId","typeLabel":"object"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.5.pendingChangeRequest.body.oneOf.7.action.oneOf.0.approvalGroups.items.[INDEX].approvers","typeLabel":"object"},"name":{"type":"string","uniqueKey":"\\items.items.[INDEX].oneOf.5.pendingChangeRequest.body.oneOf.7.action.oneOf.0.approvalGroups.items.[INDEX].name","typeLabel":"string"},"initiatorCanApprove":{"type":"boolean","description":"Whether the initiator of the activity can participate in the approval.","uniqueKey":"\\items.items.[INDEX].oneOf.5.pendingChangeRequest.body.oneOf.7.action.oneOf.0.approvalGroups.items.[INDEX].initiatorCanApprove","typeLabel":"boolean"},"serviceAccountsCanApprove":{"type":"boolean","description":"Whether service accounts can participate in the approval for this group.","uniqueKey":"\\items.items.[INDEX].oneOf.5.pendingChangeRequest.body.oneOf.7.action.oneOf.0.approvalGroups.items.[INDEX].serviceAccountsCanApprove","typeLabel":"boolean"}},"required":["quorum","approvers"],"additionalProperties":false,"uniqueKey":"\\items.items.[INDEX].oneOf.5.pendingChangeRequest.body.oneOf.7.action.oneOf.0.approvalGroups.items.[INDEX]","typeLabel":"object"},"minItems":1,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.5.pendingChangeRequest.body.oneOf.7.action.oneOf.0.approvalGroups","typeLabel":"object[]"},"autoRejectTimeout":{"oneOf":[{"type":"integer","minimum":1,"uniqueKey":"\\items.items.[INDEX].oneOf.5.pendingChangeRequest.body.oneOf.7.action.oneOf.0.autoRejectTimeout.oneOf.0","typeLabel":"integer"},{"type":"null","minimum":1,"uniqueKey":"\\items.items.[INDEX].oneOf.5.pendingChangeRequest.body.oneOf.7.action.oneOf.0.autoRejectTimeout.oneOf.1","typeLabel":"null"}],"uniqueKey":"\\items.items.[INDEX].oneOf.5.pendingChangeRequest.body.oneOf.7.action.oneOf.0.autoRejectTimeout","typeLabel":"integer | null"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.5.pendingChangeRequest.body.oneOf.7.action.oneOf.0","typeLabel":"RequestApproval · object"},{"type":"object","title":"Block","description":"This action means that the activity will be blocked if the policy is triggered.\n\n```json\n{\n \"action\": {\n \"kind\": \"Block\"\n }\n}\n```\n","required":["kind"],"properties":{"kind":{"type":"string","enum":["Block"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.5.pendingChangeRequest.body.oneOf.7.action.oneOf.1.kind","typeLabel":"enum\u003cstring>"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.5.pendingChangeRequest.body.oneOf.7.action.oneOf.1","typeLabel":"Block · object"}],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.5.pendingChangeRequest.body.oneOf.7.action","typeLabel":"RequestApproval · object | Block · object"},"dateCreated":{"type":"string","uniqueKey":"\\items.items.[INDEX].oneOf.5.pendingChangeRequest.body.oneOf.7.dateCreated","typeLabel":"string"},"dateUpdated":{"type":"string","uniqueKey":"\\items.items.[INDEX].oneOf.5.pendingChangeRequest.body.oneOf.7.dateUpdated","typeLabel":"string"},"filters":{"type":"object","properties":{"vaultId":{"type":"object","properties":{"in":{"type":"array","items":{"type":"string","minLength":1,"uniqueKey":"\\items.items.[INDEX].oneOf.5.pendingChangeRequest.body.oneOf.7.filters.vaultId.in.items.[INDEX]","typeLabel":"string"},"minItems":1,"maxItems":100,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.5.pendingChangeRequest.body.oneOf.7.filters.vaultId.in","typeLabel":"string[]"}},"required":["in"],"additionalProperties":false,"uniqueKey":"\\items.items.[INDEX].oneOf.5.pendingChangeRequest.body.oneOf.7.filters.vaultId","typeLabel":"object"},"vaultTags":{"type":"object","properties":{"hasAny":{"type":"array","items":{"type":"string","minLength":1,"uniqueKey":"\\items.items.[INDEX].oneOf.5.pendingChangeRequest.body.oneOf.7.filters.vaultTags.hasAny.items.[INDEX]","typeLabel":"string"},"minItems":1,"maxItems":100,"uniqueKey":"\\items.items.[INDEX].oneOf.5.pendingChangeRequest.body.oneOf.7.filters.vaultTags.hasAny","typeLabel":"string[]"},"hasAll":{"type":"array","items":{"type":"string","minLength":1,"uniqueKey":"\\items.items.[INDEX].oneOf.5.pendingChangeRequest.body.oneOf.7.filters.vaultTags.hasAll.items.[INDEX]","typeLabel":"string"},"minItems":1,"maxItems":100,"uniqueKey":"\\items.items.[INDEX].oneOf.5.pendingChangeRequest.body.oneOf.7.filters.vaultTags.hasAll","typeLabel":"string[]"}},"additionalProperties":false,"uniqueKey":"\\items.items.[INDEX].oneOf.5.pendingChangeRequest.body.oneOf.7.filters.vaultTags","typeLabel":"object"}},"additionalProperties":false,"uniqueKey":"\\items.items.[INDEX].oneOf.5.pendingChangeRequest.body.oneOf.7.filters","typeLabel":"object"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.5.pendingChangeRequest.body.oneOf.7","typeLabel":"Vaults:ReleaseQuarantine · object"},{"type":"object","title":"Vaults:CreateLock","required":["id","name","status","activityKind","rule","action"],"properties":{"id":{"type":"string","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.5.pendingChangeRequest.body.oneOf.8.id","typeLabel":"string"},"name":{"type":"string","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.5.pendingChangeRequest.body.oneOf.8.name","typeLabel":"string"},"status":{"type":"string","enum":["Active","Archived"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.5.pendingChangeRequest.body.oneOf.8.status","typeLabel":"enum\u003cstring>"},"activityKind":{"type":"string","enum":["Vaults:CreateLock"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.5.pendingChangeRequest.body.oneOf.8.activityKind","typeLabel":"enum\u003cstring>"},"rule":{"type":"object","title":"AlwaysTrigger","description":"This rule will always be triggered, meaning that if this rule is defined on a policy, the policy will always trigger the policy action, regardless of the activity details.","required":["kind"],"properties":{"kind":{"type":"string","enum":["AlwaysTrigger"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.5.pendingChangeRequest.body.oneOf.8.rule.kind","typeLabel":"enum\u003cstring>"},"configuration":{"type":"object","properties":{},"additionalProperties":false,"uniqueKey":"\\items.items.[INDEX].oneOf.5.pendingChangeRequest.body.oneOf.8.rule.configuration","typeLabel":"object"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.5.pendingChangeRequest.body.oneOf.8.rule","typeLabel":"AlwaysTrigger · object"},"action":{"oneOf":[{"type":"object","title":"RequestApproval","description":"\nThis action means that activity will first require an Approval process to be completed before it can be executed (or be aborted if someone rejects it during the approval process).\n\nOne or several groups of approvers need to be specified. These groups define who is allowed to approve / reject an activity.\n\nThe activity will only be executed if all approver groups reach their \"quorum\" of approvals. Otherwise, if any one user within any approver group rejects, then the activity is aborted and the call is not executed.\n\nThe example below shows a `RequestApproval` action, configured with one approval group requiring 2 approvals amongst three specific users.\n\n```json\n{\n \"action\": {\n \"kind\": \"RequestApproval\",\n \"autoRejectTimeout\": 60, // minutes\n \"approvalGroups\": [\n {\n \"name\": \"Admins\",\n \"quorum\": 2, // only 2 approvers required in that group \n \"approvers\": {\n \"userId\": {\n \"in\": [\"us-...1\", \"us-...2\", \"us-...3\"],\n }\n }\n }\n ],\n\n }\n}\n```\n\n**Don't lock yourself up**\n\nBy default, users cannot approve an activity they initiated themselves, even if they are in an approval group. To allow this, you must set `initiatorCanApprove: true`.\n\n*Example 1:* For any wallet transfer, a policy is setup to require approval from **1 specific admin user** (eg. the CEO). `initiatorCanApprove` was not set to `true`. If the CEO himself initiates a transfer, no-one can approve his transfer and it's stuck.\n\n*Example 2:* Company has only 3 users. A policy is setup to require approval from **any 3 users** (`quorum: 3`) for any modification of a policy. `initiatorCanApprove` was not set to `true`. In this case, they are locked, and the policy cannot be modified: whoever requests a modification cannot approve, and the policy is therefore always missing one approver. To unlock, they would need to invite a new user and give him the rights to approve as well.\n ","required":["kind","approvalGroups"],"properties":{"kind":{"type":"string","enum":["RequestApproval"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.5.pendingChangeRequest.body.oneOf.8.action.oneOf.0.kind","typeLabel":"enum\u003cstring>"},"approvalGroups":{"type":"array","items":{"type":"object","properties":{"quorum":{"type":"integer","minimum":1,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.5.pendingChangeRequest.body.oneOf.8.action.oneOf.0.approvalGroups.items.[INDEX].quorum","typeLabel":"integer"},"approvers":{"type":"object","properties":{"userId":{"type":"object","properties":{"in":{"type":"array","items":{"type":"string","minLength":1,"uniqueKey":"\\items.items.[INDEX].oneOf.5.pendingChangeRequest.body.oneOf.8.action.oneOf.0.approvalGroups.items.[INDEX].approvers.userId.in.items.[INDEX]","typeLabel":"string"},"minItems":1,"maxItems":100,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.5.pendingChangeRequest.body.oneOf.8.action.oneOf.0.approvalGroups.items.[INDEX].approvers.userId.in","typeLabel":"string[]"}},"required":["in"],"additionalProperties":false,"description":"Users and service accounts who may approve.","uniqueKey":"\\items.items.[INDEX].oneOf.5.pendingChangeRequest.body.oneOf.8.action.oneOf.0.approvalGroups.items.[INDEX].approvers.userId","typeLabel":"object"},"userGroupId":{"type":"object","properties":{"in":{"type":"array","items":{"type":"string","minLength":1,"maxLength":64,"pattern":"^ug-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"User group id.","example":"ug-139tf-f58l8-lsbt6dp47lfsdvgh","uniqueKey":"\\items.items.[INDEX].oneOf.5.pendingChangeRequest.body.oneOf.8.action.oneOf.0.approvalGroups.items.[INDEX].approvers.userGroupId.in.items.[INDEX]","typeLabel":"string"},"minItems":1,"maxItems":100,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.5.pendingChangeRequest.body.oneOf.8.action.oneOf.0.approvalGroups.items.[INDEX].approvers.userGroupId.in","typeLabel":"string[]"}},"required":["in"],"additionalProperties":false,"description":"User groups whose members may approve.","uniqueKey":"\\items.items.[INDEX].oneOf.5.pendingChangeRequest.body.oneOf.8.action.oneOf.0.approvalGroups.items.[INDEX].approvers.userGroupId","typeLabel":"object"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.5.pendingChangeRequest.body.oneOf.8.action.oneOf.0.approvalGroups.items.[INDEX].approvers","typeLabel":"object"},"name":{"type":"string","uniqueKey":"\\items.items.[INDEX].oneOf.5.pendingChangeRequest.body.oneOf.8.action.oneOf.0.approvalGroups.items.[INDEX].name","typeLabel":"string"},"initiatorCanApprove":{"type":"boolean","description":"Whether the initiator of the activity can participate in the approval.","uniqueKey":"\\items.items.[INDEX].oneOf.5.pendingChangeRequest.body.oneOf.8.action.oneOf.0.approvalGroups.items.[INDEX].initiatorCanApprove","typeLabel":"boolean"},"serviceAccountsCanApprove":{"type":"boolean","description":"Whether service accounts can participate in the approval for this group.","uniqueKey":"\\items.items.[INDEX].oneOf.5.pendingChangeRequest.body.oneOf.8.action.oneOf.0.approvalGroups.items.[INDEX].serviceAccountsCanApprove","typeLabel":"boolean"}},"required":["quorum","approvers"],"additionalProperties":false,"uniqueKey":"\\items.items.[INDEX].oneOf.5.pendingChangeRequest.body.oneOf.8.action.oneOf.0.approvalGroups.items.[INDEX]","typeLabel":"object"},"minItems":1,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.5.pendingChangeRequest.body.oneOf.8.action.oneOf.0.approvalGroups","typeLabel":"object[]"},"autoRejectTimeout":{"oneOf":[{"type":"integer","minimum":1,"uniqueKey":"\\items.items.[INDEX].oneOf.5.pendingChangeRequest.body.oneOf.8.action.oneOf.0.autoRejectTimeout.oneOf.0","typeLabel":"integer"},{"type":"null","minimum":1,"uniqueKey":"\\items.items.[INDEX].oneOf.5.pendingChangeRequest.body.oneOf.8.action.oneOf.0.autoRejectTimeout.oneOf.1","typeLabel":"null"}],"uniqueKey":"\\items.items.[INDEX].oneOf.5.pendingChangeRequest.body.oneOf.8.action.oneOf.0.autoRejectTimeout","typeLabel":"integer | null"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.5.pendingChangeRequest.body.oneOf.8.action.oneOf.0","typeLabel":"RequestApproval · object"},{"type":"object","title":"Block","description":"This action means that the activity will be blocked if the policy is triggered.\n\n```json\n{\n \"action\": {\n \"kind\": \"Block\"\n }\n}\n```\n","required":["kind"],"properties":{"kind":{"type":"string","enum":["Block"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.5.pendingChangeRequest.body.oneOf.8.action.oneOf.1.kind","typeLabel":"enum\u003cstring>"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.5.pendingChangeRequest.body.oneOf.8.action.oneOf.1","typeLabel":"Block · object"}],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.5.pendingChangeRequest.body.oneOf.8.action","typeLabel":"RequestApproval · object | Block · object"},"dateCreated":{"type":"string","uniqueKey":"\\items.items.[INDEX].oneOf.5.pendingChangeRequest.body.oneOf.8.dateCreated","typeLabel":"string"},"dateUpdated":{"type":"string","uniqueKey":"\\items.items.[INDEX].oneOf.5.pendingChangeRequest.body.oneOf.8.dateUpdated","typeLabel":"string"},"filters":{"type":"object","properties":{"vaultId":{"type":"object","properties":{"in":{"type":"array","items":{"type":"string","minLength":1,"uniqueKey":"\\items.items.[INDEX].oneOf.5.pendingChangeRequest.body.oneOf.8.filters.vaultId.in.items.[INDEX]","typeLabel":"string"},"minItems":1,"maxItems":100,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.5.pendingChangeRequest.body.oneOf.8.filters.vaultId.in","typeLabel":"string[]"}},"required":["in"],"additionalProperties":false,"uniqueKey":"\\items.items.[INDEX].oneOf.5.pendingChangeRequest.body.oneOf.8.filters.vaultId","typeLabel":"object"},"vaultTags":{"type":"object","properties":{"hasAny":{"type":"array","items":{"type":"string","minLength":1,"uniqueKey":"\\items.items.[INDEX].oneOf.5.pendingChangeRequest.body.oneOf.8.filters.vaultTags.hasAny.items.[INDEX]","typeLabel":"string"},"minItems":1,"maxItems":100,"uniqueKey":"\\items.items.[INDEX].oneOf.5.pendingChangeRequest.body.oneOf.8.filters.vaultTags.hasAny","typeLabel":"string[]"},"hasAll":{"type":"array","items":{"type":"string","minLength":1,"uniqueKey":"\\items.items.[INDEX].oneOf.5.pendingChangeRequest.body.oneOf.8.filters.vaultTags.hasAll.items.[INDEX]","typeLabel":"string"},"minItems":1,"maxItems":100,"uniqueKey":"\\items.items.[INDEX].oneOf.5.pendingChangeRequest.body.oneOf.8.filters.vaultTags.hasAll","typeLabel":"string[]"}},"additionalProperties":false,"uniqueKey":"\\items.items.[INDEX].oneOf.5.pendingChangeRequest.body.oneOf.8.filters.vaultTags","typeLabel":"object"}},"additionalProperties":false,"uniqueKey":"\\items.items.[INDEX].oneOf.5.pendingChangeRequest.body.oneOf.8.filters","typeLabel":"object"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.5.pendingChangeRequest.body.oneOf.8","typeLabel":"Vaults:CreateLock · object"},{"type":"object","title":"Vaults:ReplaceLock","required":["id","name","status","activityKind","rule","action"],"properties":{"id":{"type":"string","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.5.pendingChangeRequest.body.oneOf.9.id","typeLabel":"string"},"name":{"type":"string","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.5.pendingChangeRequest.body.oneOf.9.name","typeLabel":"string"},"status":{"type":"string","enum":["Active","Archived"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.5.pendingChangeRequest.body.oneOf.9.status","typeLabel":"enum\u003cstring>"},"activityKind":{"type":"string","enum":["Vaults:ReplaceLock"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.5.pendingChangeRequest.body.oneOf.9.activityKind","typeLabel":"enum\u003cstring>"},"rule":{"type":"object","title":"AlwaysTrigger","description":"This rule will always be triggered, meaning that if this rule is defined on a policy, the policy will always trigger the policy action, regardless of the activity details.","required":["kind"],"properties":{"kind":{"type":"string","enum":["AlwaysTrigger"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.5.pendingChangeRequest.body.oneOf.9.rule.kind","typeLabel":"enum\u003cstring>"},"configuration":{"type":"object","properties":{},"additionalProperties":false,"uniqueKey":"\\items.items.[INDEX].oneOf.5.pendingChangeRequest.body.oneOf.9.rule.configuration","typeLabel":"object"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.5.pendingChangeRequest.body.oneOf.9.rule","typeLabel":"AlwaysTrigger · object"},"action":{"oneOf":[{"type":"object","title":"RequestApproval","description":"\nThis action means that activity will first require an Approval process to be completed before it can be executed (or be aborted if someone rejects it during the approval process).\n\nOne or several groups of approvers need to be specified. These groups define who is allowed to approve / reject an activity.\n\nThe activity will only be executed if all approver groups reach their \"quorum\" of approvals. Otherwise, if any one user within any approver group rejects, then the activity is aborted and the call is not executed.\n\nThe example below shows a `RequestApproval` action, configured with one approval group requiring 2 approvals amongst three specific users.\n\n```json\n{\n \"action\": {\n \"kind\": \"RequestApproval\",\n \"autoRejectTimeout\": 60, // minutes\n \"approvalGroups\": [\n {\n \"name\": \"Admins\",\n \"quorum\": 2, // only 2 approvers required in that group \n \"approvers\": {\n \"userId\": {\n \"in\": [\"us-...1\", \"us-...2\", \"us-...3\"],\n }\n }\n }\n ],\n\n }\n}\n```\n\n**Don't lock yourself up**\n\nBy default, users cannot approve an activity they initiated themselves, even if they are in an approval group. To allow this, you must set `initiatorCanApprove: true`.\n\n*Example 1:* For any wallet transfer, a policy is setup to require approval from **1 specific admin user** (eg. the CEO). `initiatorCanApprove` was not set to `true`. If the CEO himself initiates a transfer, no-one can approve his transfer and it's stuck.\n\n*Example 2:* Company has only 3 users. A policy is setup to require approval from **any 3 users** (`quorum: 3`) for any modification of a policy. `initiatorCanApprove` was not set to `true`. In this case, they are locked, and the policy cannot be modified: whoever requests a modification cannot approve, and the policy is therefore always missing one approver. To unlock, they would need to invite a new user and give him the rights to approve as well.\n ","required":["kind","approvalGroups"],"properties":{"kind":{"type":"string","enum":["RequestApproval"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.5.pendingChangeRequest.body.oneOf.9.action.oneOf.0.kind","typeLabel":"enum\u003cstring>"},"approvalGroups":{"type":"array","items":{"type":"object","properties":{"quorum":{"type":"integer","minimum":1,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.5.pendingChangeRequest.body.oneOf.9.action.oneOf.0.approvalGroups.items.[INDEX].quorum","typeLabel":"integer"},"approvers":{"type":"object","properties":{"userId":{"type":"object","properties":{"in":{"type":"array","items":{"type":"string","minLength":1,"uniqueKey":"\\items.items.[INDEX].oneOf.5.pendingChangeRequest.body.oneOf.9.action.oneOf.0.approvalGroups.items.[INDEX].approvers.userId.in.items.[INDEX]","typeLabel":"string"},"minItems":1,"maxItems":100,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.5.pendingChangeRequest.body.oneOf.9.action.oneOf.0.approvalGroups.items.[INDEX].approvers.userId.in","typeLabel":"string[]"}},"required":["in"],"additionalProperties":false,"description":"Users and service accounts who may approve.","uniqueKey":"\\items.items.[INDEX].oneOf.5.pendingChangeRequest.body.oneOf.9.action.oneOf.0.approvalGroups.items.[INDEX].approvers.userId","typeLabel":"object"},"userGroupId":{"type":"object","properties":{"in":{"type":"array","items":{"type":"string","minLength":1,"maxLength":64,"pattern":"^ug-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"User group id.","example":"ug-139tf-f58l8-lsbt6dp47lfsdvgh","uniqueKey":"\\items.items.[INDEX].oneOf.5.pendingChangeRequest.body.oneOf.9.action.oneOf.0.approvalGroups.items.[INDEX].approvers.userGroupId.in.items.[INDEX]","typeLabel":"string"},"minItems":1,"maxItems":100,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.5.pendingChangeRequest.body.oneOf.9.action.oneOf.0.approvalGroups.items.[INDEX].approvers.userGroupId.in","typeLabel":"string[]"}},"required":["in"],"additionalProperties":false,"description":"User groups whose members may approve.","uniqueKey":"\\items.items.[INDEX].oneOf.5.pendingChangeRequest.body.oneOf.9.action.oneOf.0.approvalGroups.items.[INDEX].approvers.userGroupId","typeLabel":"object"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.5.pendingChangeRequest.body.oneOf.9.action.oneOf.0.approvalGroups.items.[INDEX].approvers","typeLabel":"object"},"name":{"type":"string","uniqueKey":"\\items.items.[INDEX].oneOf.5.pendingChangeRequest.body.oneOf.9.action.oneOf.0.approvalGroups.items.[INDEX].name","typeLabel":"string"},"initiatorCanApprove":{"type":"boolean","description":"Whether the initiator of the activity can participate in the approval.","uniqueKey":"\\items.items.[INDEX].oneOf.5.pendingChangeRequest.body.oneOf.9.action.oneOf.0.approvalGroups.items.[INDEX].initiatorCanApprove","typeLabel":"boolean"},"serviceAccountsCanApprove":{"type":"boolean","description":"Whether service accounts can participate in the approval for this group.","uniqueKey":"\\items.items.[INDEX].oneOf.5.pendingChangeRequest.body.oneOf.9.action.oneOf.0.approvalGroups.items.[INDEX].serviceAccountsCanApprove","typeLabel":"boolean"}},"required":["quorum","approvers"],"additionalProperties":false,"uniqueKey":"\\items.items.[INDEX].oneOf.5.pendingChangeRequest.body.oneOf.9.action.oneOf.0.approvalGroups.items.[INDEX]","typeLabel":"object"},"minItems":1,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.5.pendingChangeRequest.body.oneOf.9.action.oneOf.0.approvalGroups","typeLabel":"object[]"},"autoRejectTimeout":{"oneOf":[{"type":"integer","minimum":1,"uniqueKey":"\\items.items.[INDEX].oneOf.5.pendingChangeRequest.body.oneOf.9.action.oneOf.0.autoRejectTimeout.oneOf.0","typeLabel":"integer"},{"type":"null","minimum":1,"uniqueKey":"\\items.items.[INDEX].oneOf.5.pendingChangeRequest.body.oneOf.9.action.oneOf.0.autoRejectTimeout.oneOf.1","typeLabel":"null"}],"uniqueKey":"\\items.items.[INDEX].oneOf.5.pendingChangeRequest.body.oneOf.9.action.oneOf.0.autoRejectTimeout","typeLabel":"integer | null"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.5.pendingChangeRequest.body.oneOf.9.action.oneOf.0","typeLabel":"RequestApproval · object"},{"type":"object","title":"Block","description":"This action means that the activity will be blocked if the policy is triggered.\n\n```json\n{\n \"action\": {\n \"kind\": \"Block\"\n }\n}\n```\n","required":["kind"],"properties":{"kind":{"type":"string","enum":["Block"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.5.pendingChangeRequest.body.oneOf.9.action.oneOf.1.kind","typeLabel":"enum\u003cstring>"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.5.pendingChangeRequest.body.oneOf.9.action.oneOf.1","typeLabel":"Block · object"}],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.5.pendingChangeRequest.body.oneOf.9.action","typeLabel":"RequestApproval · object | Block · object"},"dateCreated":{"type":"string","uniqueKey":"\\items.items.[INDEX].oneOf.5.pendingChangeRequest.body.oneOf.9.dateCreated","typeLabel":"string"},"dateUpdated":{"type":"string","uniqueKey":"\\items.items.[INDEX].oneOf.5.pendingChangeRequest.body.oneOf.9.dateUpdated","typeLabel":"string"},"filters":{"type":"object","properties":{"vaultId":{"type":"object","properties":{"in":{"type":"array","items":{"type":"string","minLength":1,"uniqueKey":"\\items.items.[INDEX].oneOf.5.pendingChangeRequest.body.oneOf.9.filters.vaultId.in.items.[INDEX]","typeLabel":"string"},"minItems":1,"maxItems":100,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.5.pendingChangeRequest.body.oneOf.9.filters.vaultId.in","typeLabel":"string[]"}},"required":["in"],"additionalProperties":false,"uniqueKey":"\\items.items.[INDEX].oneOf.5.pendingChangeRequest.body.oneOf.9.filters.vaultId","typeLabel":"object"},"vaultTags":{"type":"object","properties":{"hasAny":{"type":"array","items":{"type":"string","minLength":1,"uniqueKey":"\\items.items.[INDEX].oneOf.5.pendingChangeRequest.body.oneOf.9.filters.vaultTags.hasAny.items.[INDEX]","typeLabel":"string"},"minItems":1,"maxItems":100,"uniqueKey":"\\items.items.[INDEX].oneOf.5.pendingChangeRequest.body.oneOf.9.filters.vaultTags.hasAny","typeLabel":"string[]"},"hasAll":{"type":"array","items":{"type":"string","minLength":1,"uniqueKey":"\\items.items.[INDEX].oneOf.5.pendingChangeRequest.body.oneOf.9.filters.vaultTags.hasAll.items.[INDEX]","typeLabel":"string"},"minItems":1,"maxItems":100,"uniqueKey":"\\items.items.[INDEX].oneOf.5.pendingChangeRequest.body.oneOf.9.filters.vaultTags.hasAll","typeLabel":"string[]"}},"additionalProperties":false,"uniqueKey":"\\items.items.[INDEX].oneOf.5.pendingChangeRequest.body.oneOf.9.filters.vaultTags","typeLabel":"object"}},"additionalProperties":false,"uniqueKey":"\\items.items.[INDEX].oneOf.5.pendingChangeRequest.body.oneOf.9.filters","typeLabel":"object"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.5.pendingChangeRequest.body.oneOf.9","typeLabel":"Vaults:ReplaceLock · object"},{"type":"object","title":"UserAction","required":["id","name","status","activityKind","rule","action"],"properties":{"id":{"type":"string","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.5.pendingChangeRequest.body.oneOf.10.id","typeLabel":"string"},"name":{"type":"string","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.5.pendingChangeRequest.body.oneOf.10.name","typeLabel":"string"},"status":{"type":"string","enum":["Active","Archived"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.5.pendingChangeRequest.body.oneOf.10.status","typeLabel":"enum\u003cstring>"},"activityKind":{"type":"string","enum":["UserAction"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.5.pendingChangeRequest.body.oneOf.10.activityKind","typeLabel":"enum\u003cstring>"},"rule":{"type":"object","properties":{"kind":{"type":"string","enum":["UserAction"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.5.pendingChangeRequest.body.oneOf.10.rule.kind","typeLabel":"enum\u003cstring>"},"configuration":{"type":"object","properties":{"userActionKinds":{"type":"array","items":{"type":"string","uniqueKey":"\\items.items.[INDEX].oneOf.5.pendingChangeRequest.body.oneOf.10.rule.configuration.userActionKinds.items.[INDEX]","typeLabel":"string"},"minItems":1,"description":"The user actions this rule applies to. The rule triggers on any of them.","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.5.pendingChangeRequest.body.oneOf.10.rule.configuration.userActionKinds","typeLabel":"string[]"}},"required":["userActionKinds"],"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.5.pendingChangeRequest.body.oneOf.10.rule.configuration","typeLabel":"object"}},"required":["kind","configuration"],"additionalProperties":false,"title":"UserAction","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.5.pendingChangeRequest.body.oneOf.10.rule","typeLabel":"UserAction · object"},"action":{"oneOf":[{"type":"object","title":"RequestApproval","description":"\nThis action means that activity will first require an Approval process to be completed before it can be executed (or be aborted if someone rejects it during the approval process).\n\nOne or several groups of approvers need to be specified. These groups define who is allowed to approve / reject an activity.\n\nThe activity will only be executed if all approver groups reach their \"quorum\" of approvals. Otherwise, if any one user within any approver group rejects, then the activity is aborted and the call is not executed.\n\nThe example below shows a `RequestApproval` action, configured with one approval group requiring 2 approvals amongst three specific users.\n\n```json\n{\n \"action\": {\n \"kind\": \"RequestApproval\",\n \"autoRejectTimeout\": 60, // minutes\n \"approvalGroups\": [\n {\n \"name\": \"Admins\",\n \"quorum\": 2, // only 2 approvers required in that group \n \"approvers\": {\n \"userId\": {\n \"in\": [\"us-...1\", \"us-...2\", \"us-...3\"],\n }\n }\n }\n ],\n\n }\n}\n```\n\n**Don't lock yourself up**\n\nBy default, users cannot approve an activity they initiated themselves, even if they are in an approval group. To allow this, you must set `initiatorCanApprove: true`.\n\n*Example 1:* For any wallet transfer, a policy is setup to require approval from **1 specific admin user** (eg. the CEO). `initiatorCanApprove` was not set to `true`. If the CEO himself initiates a transfer, no-one can approve his transfer and it's stuck.\n\n*Example 2:* Company has only 3 users. A policy is setup to require approval from **any 3 users** (`quorum: 3`) for any modification of a policy. `initiatorCanApprove` was not set to `true`. In this case, they are locked, and the policy cannot be modified: whoever requests a modification cannot approve, and the policy is therefore always missing one approver. To unlock, they would need to invite a new user and give him the rights to approve as well.\n ","required":["kind","approvalGroups"],"properties":{"kind":{"type":"string","enum":["RequestApproval"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.5.pendingChangeRequest.body.oneOf.10.action.oneOf.0.kind","typeLabel":"enum\u003cstring>"},"approvalGroups":{"type":"array","items":{"type":"object","properties":{"quorum":{"type":"integer","minimum":1,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.5.pendingChangeRequest.body.oneOf.10.action.oneOf.0.approvalGroups.items.[INDEX].quorum","typeLabel":"integer"},"approvers":{"type":"object","properties":{"userId":{"type":"object","properties":{"in":{"type":"array","items":{"type":"string","minLength":1,"uniqueKey":"\\items.items.[INDEX].oneOf.5.pendingChangeRequest.body.oneOf.10.action.oneOf.0.approvalGroups.items.[INDEX].approvers.userId.in.items.[INDEX]","typeLabel":"string"},"minItems":1,"maxItems":100,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.5.pendingChangeRequest.body.oneOf.10.action.oneOf.0.approvalGroups.items.[INDEX].approvers.userId.in","typeLabel":"string[]"}},"required":["in"],"additionalProperties":false,"description":"Users and service accounts who may approve.","uniqueKey":"\\items.items.[INDEX].oneOf.5.pendingChangeRequest.body.oneOf.10.action.oneOf.0.approvalGroups.items.[INDEX].approvers.userId","typeLabel":"object"},"userGroupId":{"type":"object","properties":{"in":{"type":"array","items":{"type":"string","minLength":1,"maxLength":64,"pattern":"^ug-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"User group id.","example":"ug-139tf-f58l8-lsbt6dp47lfsdvgh","uniqueKey":"\\items.items.[INDEX].oneOf.5.pendingChangeRequest.body.oneOf.10.action.oneOf.0.approvalGroups.items.[INDEX].approvers.userGroupId.in.items.[INDEX]","typeLabel":"string"},"minItems":1,"maxItems":100,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.5.pendingChangeRequest.body.oneOf.10.action.oneOf.0.approvalGroups.items.[INDEX].approvers.userGroupId.in","typeLabel":"string[]"}},"required":["in"],"additionalProperties":false,"description":"User groups whose members may approve.","uniqueKey":"\\items.items.[INDEX].oneOf.5.pendingChangeRequest.body.oneOf.10.action.oneOf.0.approvalGroups.items.[INDEX].approvers.userGroupId","typeLabel":"object"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.5.pendingChangeRequest.body.oneOf.10.action.oneOf.0.approvalGroups.items.[INDEX].approvers","typeLabel":"object"},"name":{"type":"string","uniqueKey":"\\items.items.[INDEX].oneOf.5.pendingChangeRequest.body.oneOf.10.action.oneOf.0.approvalGroups.items.[INDEX].name","typeLabel":"string"},"initiatorCanApprove":{"type":"boolean","description":"Whether the initiator of the activity can participate in the approval.","uniqueKey":"\\items.items.[INDEX].oneOf.5.pendingChangeRequest.body.oneOf.10.action.oneOf.0.approvalGroups.items.[INDEX].initiatorCanApprove","typeLabel":"boolean"},"serviceAccountsCanApprove":{"type":"boolean","description":"Whether service accounts can participate in the approval for this group.","uniqueKey":"\\items.items.[INDEX].oneOf.5.pendingChangeRequest.body.oneOf.10.action.oneOf.0.approvalGroups.items.[INDEX].serviceAccountsCanApprove","typeLabel":"boolean"}},"required":["quorum","approvers"],"additionalProperties":false,"uniqueKey":"\\items.items.[INDEX].oneOf.5.pendingChangeRequest.body.oneOf.10.action.oneOf.0.approvalGroups.items.[INDEX]","typeLabel":"object"},"minItems":1,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.5.pendingChangeRequest.body.oneOf.10.action.oneOf.0.approvalGroups","typeLabel":"object[]"},"autoRejectTimeout":{"oneOf":[{"type":"integer","minimum":1,"uniqueKey":"\\items.items.[INDEX].oneOf.5.pendingChangeRequest.body.oneOf.10.action.oneOf.0.autoRejectTimeout.oneOf.0","typeLabel":"integer"},{"type":"null","minimum":1,"uniqueKey":"\\items.items.[INDEX].oneOf.5.pendingChangeRequest.body.oneOf.10.action.oneOf.0.autoRejectTimeout.oneOf.1","typeLabel":"null"}],"uniqueKey":"\\items.items.[INDEX].oneOf.5.pendingChangeRequest.body.oneOf.10.action.oneOf.0.autoRejectTimeout","typeLabel":"integer | null"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.5.pendingChangeRequest.body.oneOf.10.action.oneOf.0","typeLabel":"RequestApproval · object"},{"type":"object","title":"Block","description":"This action means that the activity will be blocked if the policy is triggered.\n\n```json\n{\n \"action\": {\n \"kind\": \"Block\"\n }\n}\n```\n","required":["kind"],"properties":{"kind":{"type":"string","enum":["Block"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.5.pendingChangeRequest.body.oneOf.10.action.oneOf.1.kind","typeLabel":"enum\u003cstring>"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.5.pendingChangeRequest.body.oneOf.10.action.oneOf.1","typeLabel":"Block · object"}],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.5.pendingChangeRequest.body.oneOf.10.action","typeLabel":"RequestApproval · object | Block · object"},"dateCreated":{"type":"string","uniqueKey":"\\items.items.[INDEX].oneOf.5.pendingChangeRequest.body.oneOf.10.dateCreated","typeLabel":"string"},"dateUpdated":{"type":"string","uniqueKey":"\\items.items.[INDEX].oneOf.5.pendingChangeRequest.body.oneOf.10.dateUpdated","typeLabel":"string"},"filters":{"type":"object","properties":{},"uniqueKey":"\\items.items.[INDEX].oneOf.5.pendingChangeRequest.body.oneOf.10.filters","typeLabel":"object"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.5.pendingChangeRequest.body.oneOf.10","typeLabel":"UserAction · object"}],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.5.pendingChangeRequest.body","typeLabel":"Registry:Addresses:Modify · object | Permissions:Assign · object | Permissions:Modify · object | Policies:Modify · object | Registry:ContractSchemas:Modify · object | Wallets:Sign · object | Wallets:IncomingTransaction · object | Vaults:ReleaseQuarantine · object | Vaults:CreateLock · object | Vaults:ReplaceLock · object | UserAction · object"},"dateResolved":{"type":"string","format":"date-time","uniqueKey":"\\items.items.[INDEX].oneOf.5.pendingChangeRequest.dateResolved","typeLabel":"string\u003cdate-time>"},"approvalId":{"type":"string","uniqueKey":"\\items.items.[INDEX].oneOf.5.pendingChangeRequest.approvalId","typeLabel":"string"}},"required":["id","requester","kind","operationKind","status","entityId","dateCreated","body"],"additionalProperties":false,"uniqueKey":"\\items.items.[INDEX].oneOf.5.pendingChangeRequest","typeLabel":"object"}},"additionalProperties":false,"uniqueKey":"\\items.items.[INDEX].oneOf.5","typeLabel":"Wallets:Sign · object"},{"type":"object","title":"Wallets:IncomingTransaction","required":["id","name","status","activityKind","rule","action"],"properties":{"id":{"type":"string","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.6.id","typeLabel":"string"},"name":{"type":"string","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.6.name","typeLabel":"string"},"status":{"type":"string","enum":["Active","Archived"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.6.status","typeLabel":"enum\u003cstring>"},"activityKind":{"type":"string","enum":["Wallets:IncomingTransaction"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.6.activityKind","typeLabel":"enum\u003cstring>"},"rule":{"type":"object","title":"ChainalysisTransactionScreening","description":"\n\u003cInfo>\nThis rule can only be used once the Chainalysis integration is activated from the Dfns dashboard settings. (see more on [Chainalysis](https://docs.dfns.co/integrations/aml-kyt/chainalysis) integration page).\n\u003c/Info>\n\nThis rule can be used on a policy of `activityKind` = `Wallets:IncomingTransaction`, and with the action kind `NoAction`. It's a rule based on Chainalysis KYT integration (Know-Your-Transaction). Upon an incoming transaction detectedby our indexers, we will [register the transfer with Chainalysis](https://docs.chainalysis.com/api/kyt/#registration-register-a-transfer), and fetch the results of the analysis (alerts \u0026 exposures detected). Based on the results, and the configuration of this rule, the policy will be triggered.\n\nThe shape of the rule is almost like the `ChainalysisTransactionPrescreening` rule, expect the the `address` property is not supported.\n\n```json\n{\n \"rule\": {\n \"kind\": \"ChainalysisTransactionPrescreening\",\n \"configuration\": {\n \"alerts\": {\n \"alertLevel\": \"LOW\",\n \"categoryIds\": []\n },\n \"exposures\": {\n \"direct\": {\n \"categoryIds\": []\n }\n },\n \"fallbackBehaviours\": {\n \"skipUnscreenableTransaction\": false,\n \"skipUnsupportedNetwork\": false,\n \"skipUnsupportedAsset\": false,\n \"skipChainalysisFailure\": false\n }\n }\n }\n}\n```\n\n**Configuration**\n\nPlease refer to the configuration for the `ChainalysisTransactionPrescreening` rule.\n","required":["kind","configuration"],"properties":{"kind":{"type":"string","enum":["ChainalysisTransactionScreening"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.6.rule.kind","typeLabel":"enum\u003cstring>"},"configuration":{"type":"object","properties":{"alerts":{"type":"object","properties":{"alertLevel":{"type":"string","enum":["LOW","MEDIUM","HIGH","SEVERE"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.6.rule.configuration.alerts.alertLevel","typeLabel":"enum\u003cstring>"},"categoryIds":{"type":"array","items":{"type":"integer","exclusiveMinimum":0,"uniqueKey":"\\items.items.[INDEX].oneOf.6.rule.configuration.alerts.categoryIds.items.[INDEX]","typeLabel":"integer"},"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.6.rule.configuration.alerts.categoryIds","typeLabel":"integer[]"}},"required":["alertLevel","categoryIds"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.6.rule.configuration.alerts","typeLabel":"object"},"exposures":{"type":"object","properties":{"direct":{"type":"object","properties":{"categoryIds":{"type":"array","items":{"type":"integer","exclusiveMinimum":0,"uniqueKey":"\\items.items.[INDEX].oneOf.6.rule.configuration.exposures.direct.categoryIds.items.[INDEX]","typeLabel":"integer"},"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.6.rule.configuration.exposures.direct.categoryIds","typeLabel":"integer[]"}},"required":["categoryIds"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.6.rule.configuration.exposures.direct","typeLabel":"object"}},"required":["direct"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.6.rule.configuration.exposures","typeLabel":"object"},"fallbackBehaviours":{"type":"object","properties":{"skipUnscreenableTransaction":{"type":"boolean","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.6.rule.configuration.fallbackBehaviours.skipUnscreenableTransaction","typeLabel":"boolean"},"skipUnsupportedNetwork":{"type":"boolean","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.6.rule.configuration.fallbackBehaviours.skipUnsupportedNetwork","typeLabel":"boolean"},"skipUnsupportedAsset":{"type":"boolean","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.6.rule.configuration.fallbackBehaviours.skipUnsupportedAsset","typeLabel":"boolean"},"skipChainalysisFailure":{"type":"boolean","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.6.rule.configuration.fallbackBehaviours.skipChainalysisFailure","typeLabel":"boolean"}},"required":["skipUnscreenableTransaction","skipUnsupportedNetwork","skipUnsupportedAsset","skipChainalysisFailure"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.6.rule.configuration.fallbackBehaviours","typeLabel":"object"},"userIdTemplate":{"type":"string","minLength":1,"maxLength":50,"pattern":"^([a-zA-Z0-9_:-]|{wallet\\.id}|{wallet\\.externalId})+$","default":"dfns","description":"**Deprecated** — set `userIdTemplate` on the Chainalysis integration setting instead; when set there, the integration-level template takes precedence over this one.\n\nValue sent to Chainalysis as the \"user ID\". Used by Chainalysis for grouping transaction screenings.\n \nThis template can include variables, included in brackets. The following variables are currently supported: `{wallet.id}` and `{wallet.externalId}`.\nAs an example, if you set `userIdTemplate: \"dfns:{wallet.id}_{wallet.externalId}\"`, when your wallet receives a transaction that gets screened by a Chainalysis policy, the \"user ID\" sent to Chainalysis will be `dfns:wa-xxx_yyy` (`wa-xxx` being the wallet ID, and `yyy` being the wallet external ID).","uniqueKey":"\\items.items.[INDEX].oneOf.6.rule.configuration.userIdTemplate","typeLabel":"string"}},"required":["alerts","exposures","fallbackBehaviours"],"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.6.rule.configuration","typeLabel":"object"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.6.rule","typeLabel":"ChainalysisTransactionScreening · object"},"action":{"type":"object","title":"NoAction","description":"\n This action kind means that nothing will happen after policy rule evaluation. It's meant to be used with policy rules \"`ChainalysisTransactionPrescreening`\" or \"`ChainalysisTransactionScreening`\". This action is for when you just want the KYT analysis rule to be run, and then if triggered, those result returned in a `policy.triggered` [Webhook Event](https://docs.dfns.co/api-reference/webhook-events).\n\n```json\n{\n \"action\": {\n \"kind\": \"NoAction\"\n }\n}\n```\n ","required":["kind"],"properties":{"kind":{"type":"string","enum":["NoAction"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.6.action.kind","typeLabel":"enum\u003cstring>"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.6.action","typeLabel":"NoAction · object"},"dateCreated":{"type":"string","uniqueKey":"\\items.items.[INDEX].oneOf.6.dateCreated","typeLabel":"string"},"dateUpdated":{"type":"string","uniqueKey":"\\items.items.[INDEX].oneOf.6.dateUpdated","typeLabel":"string"},"filters":{"type":"object","properties":{"walletId":{"type":"object","properties":{"in":{"type":"array","items":{"type":"string","minLength":1,"uniqueKey":"\\items.items.[INDEX].oneOf.6.filters.walletId.in.items.[INDEX]","typeLabel":"string"},"minItems":1,"maxItems":100,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.6.filters.walletId.in","typeLabel":"string[]"}},"required":["in"],"additionalProperties":false,"uniqueKey":"\\items.items.[INDEX].oneOf.6.filters.walletId","typeLabel":"object"},"walletTags":{"type":"object","properties":{"hasAny":{"type":"array","items":{"type":"string","minLength":1,"uniqueKey":"\\items.items.[INDEX].oneOf.6.filters.walletTags.hasAny.items.[INDEX]","typeLabel":"string"},"minItems":1,"maxItems":100,"uniqueKey":"\\items.items.[INDEX].oneOf.6.filters.walletTags.hasAny","typeLabel":"string[]"},"hasAll":{"type":"array","items":{"type":"string","minLength":1,"uniqueKey":"\\items.items.[INDEX].oneOf.6.filters.walletTags.hasAll.items.[INDEX]","typeLabel":"string"},"minItems":1,"maxItems":100,"uniqueKey":"\\items.items.[INDEX].oneOf.6.filters.walletTags.hasAll","typeLabel":"string[]"}},"additionalProperties":false,"uniqueKey":"\\items.items.[INDEX].oneOf.6.filters.walletTags","typeLabel":"object"},"keyId":{"type":"object","properties":{"in":{"type":"array","items":{"type":"string","minLength":1,"maxLength":64,"pattern":"^key-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"Key id.","example":"key-01snl-t56gb-j8tsok0vn802p80i","uniqueKey":"\\items.items.[INDEX].oneOf.6.filters.keyId.in.items.[INDEX]","typeLabel":"string"},"minItems":1,"maxItems":100,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.6.filters.keyId.in","typeLabel":"string[]"}},"required":["in"],"additionalProperties":false,"uniqueKey":"\\items.items.[INDEX].oneOf.6.filters.keyId","typeLabel":"object"},"keyStoreId":{"type":"object","properties":{"in":{"type":"array","items":{"type":"string","minLength":1,"maxLength":64,"pattern":"^store-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"Key store id.","example":"store-425nf-ebf0a-qq22t6qra51tj8j0","uniqueKey":"\\items.items.[INDEX].oneOf.6.filters.keyStoreId.in.items.[INDEX]","typeLabel":"string"},"minItems":1,"maxItems":100,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.6.filters.keyStoreId.in","typeLabel":"string[]"}},"required":["in"],"additionalProperties":false,"uniqueKey":"\\items.items.[INDEX].oneOf.6.filters.keyStoreId","typeLabel":"object"}},"additionalProperties":false,"uniqueKey":"\\items.items.[INDEX].oneOf.6.filters","typeLabel":"object"},"pendingChangeRequest":{"type":"object","properties":{"id":{"type":"string","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.6.pendingChangeRequest.id","typeLabel":"string"},"requester":{"type":"object","properties":{"userId":{"type":"string","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.6.pendingChangeRequest.requester.userId","typeLabel":"string"},"tokenId":{"type":"string","uniqueKey":"\\items.items.[INDEX].oneOf.6.pendingChangeRequest.requester.tokenId","typeLabel":"string"},"appId":{"type":"string","uniqueKey":"\\items.items.[INDEX].oneOf.6.pendingChangeRequest.requester.appId","typeLabel":"string"}},"required":["userId"],"description":"The user who initiated the change request.","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.6.pendingChangeRequest.requester","typeLabel":"object"},"kind":{"type":"string","enum":["Policy"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.6.pendingChangeRequest.kind","typeLabel":"enum\u003cstring>"},"operationKind":{"type":"string","enum":["Update"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.6.pendingChangeRequest.operationKind","typeLabel":"enum\u003cstring>"},"status":{"type":"string","enum":["Applied","Failed","Pending","Rejected"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.6.pendingChangeRequest.status","typeLabel":"enum\u003cstring>"},"entityId":{"type":"string","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.6.pendingChangeRequest.entityId","typeLabel":"string"},"dateCreated":{"type":"string","format":"date-time","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.6.pendingChangeRequest.dateCreated","typeLabel":"string\u003cdate-time>"},"body":{"oneOf":[{"type":"object","title":"Registry:Addresses:Modify","required":["id","name","status","activityKind","rule","action"],"properties":{"id":{"type":"string","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.6.pendingChangeRequest.body.oneOf.0.id","typeLabel":"string"},"name":{"type":"string","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.6.pendingChangeRequest.body.oneOf.0.name","typeLabel":"string"},"status":{"type":"string","enum":["Active","Archived"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.6.pendingChangeRequest.body.oneOf.0.status","typeLabel":"enum\u003cstring>"},"activityKind":{"type":"string","enum":["Registry:Addresses:Modify"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.6.pendingChangeRequest.body.oneOf.0.activityKind","typeLabel":"enum\u003cstring>"},"rule":{"type":"object","properties":{"kind":{"type":"string","enum":["AlwaysTrigger"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.6.pendingChangeRequest.body.oneOf.0.rule.kind","typeLabel":"enum\u003cstring>"},"configuration":{"type":"object","properties":{},"additionalProperties":false,"uniqueKey":"\\items.items.[INDEX].oneOf.6.pendingChangeRequest.body.oneOf.0.rule.configuration","typeLabel":"object"}},"required":["kind"],"additionalProperties":false,"description":"This rule will always be triggered, meaning that if this rule is defined on a policy, the policy will always trigger the policy action, regardless of the activity details.","title":"AlwaysTrigger","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.6.pendingChangeRequest.body.oneOf.0.rule","typeLabel":"AlwaysTrigger · object"},"action":{"oneOf":[{"type":"object","title":"RequestApproval","description":"\nThis action means that activity will first require an Approval process to be completed before it can be executed (or be aborted if someone rejects it during the approval process).\n\nOne or several groups of approvers need to be specified. These groups define who is allowed to approve / reject an activity.\n\nThe activity will only be executed if all approver groups reach their \"quorum\" of approvals. Otherwise, if any one user within any approver group rejects, then the activity is aborted and the call is not executed.\n\nThe example below shows a `RequestApproval` action, configured with one approval group requiring 2 approvals amongst three specific users.\n\n```json\n{\n \"action\": {\n \"kind\": \"RequestApproval\",\n \"autoRejectTimeout\": 60, // minutes\n \"approvalGroups\": [\n {\n \"name\": \"Admins\",\n \"quorum\": 2, // only 2 approvers required in that group \n \"approvers\": {\n \"userId\": {\n \"in\": [\"us-...1\", \"us-...2\", \"us-...3\"],\n }\n }\n }\n ],\n\n }\n}\n```\n\n**Don't lock yourself up**\n\nBy default, users cannot approve an activity they initiated themselves, even if they are in an approval group. To allow this, you must set `initiatorCanApprove: true`.\n\n*Example 1:* For any wallet transfer, a policy is setup to require approval from **1 specific admin user** (eg. the CEO). `initiatorCanApprove` was not set to `true`. If the CEO himself initiates a transfer, no-one can approve his transfer and it's stuck.\n\n*Example 2:* Company has only 3 users. A policy is setup to require approval from **any 3 users** (`quorum: 3`) for any modification of a policy. `initiatorCanApprove` was not set to `true`. In this case, they are locked, and the policy cannot be modified: whoever requests a modification cannot approve, and the policy is therefore always missing one approver. To unlock, they would need to invite a new user and give him the rights to approve as well.\n ","required":["kind","approvalGroups"],"properties":{"kind":{"type":"string","enum":["RequestApproval"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.6.pendingChangeRequest.body.oneOf.0.action.oneOf.0.kind","typeLabel":"enum\u003cstring>"},"approvalGroups":{"type":"array","items":{"type":"object","properties":{"quorum":{"type":"integer","minimum":1,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.6.pendingChangeRequest.body.oneOf.0.action.oneOf.0.approvalGroups.items.[INDEX].quorum","typeLabel":"integer"},"approvers":{"type":"object","properties":{"userId":{"type":"object","properties":{"in":{"type":"array","items":{"type":"string","minLength":1,"uniqueKey":"\\items.items.[INDEX].oneOf.6.pendingChangeRequest.body.oneOf.0.action.oneOf.0.approvalGroups.items.[INDEX].approvers.userId.in.items.[INDEX]","typeLabel":"string"},"minItems":1,"maxItems":100,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.6.pendingChangeRequest.body.oneOf.0.action.oneOf.0.approvalGroups.items.[INDEX].approvers.userId.in","typeLabel":"string[]"}},"required":["in"],"additionalProperties":false,"description":"Users and service accounts who may approve.","uniqueKey":"\\items.items.[INDEX].oneOf.6.pendingChangeRequest.body.oneOf.0.action.oneOf.0.approvalGroups.items.[INDEX].approvers.userId","typeLabel":"object"},"userGroupId":{"type":"object","properties":{"in":{"type":"array","items":{"type":"string","minLength":1,"maxLength":64,"pattern":"^ug-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"User group id.","example":"ug-139tf-f58l8-lsbt6dp47lfsdvgh","uniqueKey":"\\items.items.[INDEX].oneOf.6.pendingChangeRequest.body.oneOf.0.action.oneOf.0.approvalGroups.items.[INDEX].approvers.userGroupId.in.items.[INDEX]","typeLabel":"string"},"minItems":1,"maxItems":100,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.6.pendingChangeRequest.body.oneOf.0.action.oneOf.0.approvalGroups.items.[INDEX].approvers.userGroupId.in","typeLabel":"string[]"}},"required":["in"],"additionalProperties":false,"description":"User groups whose members may approve.","uniqueKey":"\\items.items.[INDEX].oneOf.6.pendingChangeRequest.body.oneOf.0.action.oneOf.0.approvalGroups.items.[INDEX].approvers.userGroupId","typeLabel":"object"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.6.pendingChangeRequest.body.oneOf.0.action.oneOf.0.approvalGroups.items.[INDEX].approvers","typeLabel":"object"},"name":{"type":"string","uniqueKey":"\\items.items.[INDEX].oneOf.6.pendingChangeRequest.body.oneOf.0.action.oneOf.0.approvalGroups.items.[INDEX].name","typeLabel":"string"},"initiatorCanApprove":{"type":"boolean","description":"Whether the initiator of the activity can participate in the approval.","uniqueKey":"\\items.items.[INDEX].oneOf.6.pendingChangeRequest.body.oneOf.0.action.oneOf.0.approvalGroups.items.[INDEX].initiatorCanApprove","typeLabel":"boolean"},"serviceAccountsCanApprove":{"type":"boolean","description":"Whether service accounts can participate in the approval for this group.","uniqueKey":"\\items.items.[INDEX].oneOf.6.pendingChangeRequest.body.oneOf.0.action.oneOf.0.approvalGroups.items.[INDEX].serviceAccountsCanApprove","typeLabel":"boolean"}},"required":["quorum","approvers"],"additionalProperties":false,"uniqueKey":"\\items.items.[INDEX].oneOf.6.pendingChangeRequest.body.oneOf.0.action.oneOf.0.approvalGroups.items.[INDEX]","typeLabel":"object"},"minItems":1,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.6.pendingChangeRequest.body.oneOf.0.action.oneOf.0.approvalGroups","typeLabel":"object[]"},"autoRejectTimeout":{"oneOf":[{"type":"integer","minimum":1,"uniqueKey":"\\items.items.[INDEX].oneOf.6.pendingChangeRequest.body.oneOf.0.action.oneOf.0.autoRejectTimeout.oneOf.0","typeLabel":"integer"},{"type":"null","minimum":1,"uniqueKey":"\\items.items.[INDEX].oneOf.6.pendingChangeRequest.body.oneOf.0.action.oneOf.0.autoRejectTimeout.oneOf.1","typeLabel":"null"}],"uniqueKey":"\\items.items.[INDEX].oneOf.6.pendingChangeRequest.body.oneOf.0.action.oneOf.0.autoRejectTimeout","typeLabel":"integer | null"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.6.pendingChangeRequest.body.oneOf.0.action.oneOf.0","typeLabel":"RequestApproval · object"},{"type":"object","title":"Block","description":"This action means that the activity will be blocked if the policy is triggered.\n\n```json\n{\n \"action\": {\n \"kind\": \"Block\"\n }\n}\n```\n","required":["kind"],"properties":{"kind":{"type":"string","enum":["Block"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.6.pendingChangeRequest.body.oneOf.0.action.oneOf.1.kind","typeLabel":"enum\u003cstring>"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.6.pendingChangeRequest.body.oneOf.0.action.oneOf.1","typeLabel":"Block · object"}],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.6.pendingChangeRequest.body.oneOf.0.action","typeLabel":"RequestApproval · object | Block · object"},"dateCreated":{"type":"string","uniqueKey":"\\items.items.[INDEX].oneOf.6.pendingChangeRequest.body.oneOf.0.dateCreated","typeLabel":"string"},"dateUpdated":{"type":"string","uniqueKey":"\\items.items.[INDEX].oneOf.6.pendingChangeRequest.body.oneOf.0.dateUpdated","typeLabel":"string"},"filters":{"type":"object","properties":{},"uniqueKey":"\\items.items.[INDEX].oneOf.6.pendingChangeRequest.body.oneOf.0.filters","typeLabel":"object"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.6.pendingChangeRequest.body.oneOf.0","typeLabel":"Registry:Addresses:Modify · object"},{"type":"object","title":"Permissions:Assign","required":["id","name","status","activityKind","rule","action"],"properties":{"id":{"type":"string","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.6.pendingChangeRequest.body.oneOf.1.id","typeLabel":"string"},"name":{"type":"string","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.6.pendingChangeRequest.body.oneOf.1.name","typeLabel":"string"},"status":{"type":"string","enum":["Active","Archived"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.6.pendingChangeRequest.body.oneOf.1.status","typeLabel":"enum\u003cstring>"},"activityKind":{"type":"string","enum":["Permissions:Assign"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.6.pendingChangeRequest.body.oneOf.1.activityKind","typeLabel":"enum\u003cstring>"},"rule":{"type":"object","properties":{"kind":{"type":"string","enum":["AlwaysTrigger"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.6.pendingChangeRequest.body.oneOf.1.rule.kind","typeLabel":"enum\u003cstring>"},"configuration":{"type":"object","properties":{},"additionalProperties":false,"uniqueKey":"\\items.items.[INDEX].oneOf.6.pendingChangeRequest.body.oneOf.1.rule.configuration","typeLabel":"object"}},"required":["kind"],"additionalProperties":false,"description":"This rule will always be triggered, meaning that if this rule is defined on a policy, the policy will always trigger the policy action, regardless of the activity details.","title":"AlwaysTrigger","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.6.pendingChangeRequest.body.oneOf.1.rule","typeLabel":"AlwaysTrigger · object"},"action":{"oneOf":[{"type":"object","title":"RequestApproval","description":"\nThis action means that activity will first require an Approval process to be completed before it can be executed (or be aborted if someone rejects it during the approval process).\n\nOne or several groups of approvers need to be specified. These groups define who is allowed to approve / reject an activity.\n\nThe activity will only be executed if all approver groups reach their \"quorum\" of approvals. Otherwise, if any one user within any approver group rejects, then the activity is aborted and the call is not executed.\n\nThe example below shows a `RequestApproval` action, configured with one approval group requiring 2 approvals amongst three specific users.\n\n```json\n{\n \"action\": {\n \"kind\": \"RequestApproval\",\n \"autoRejectTimeout\": 60, // minutes\n \"approvalGroups\": [\n {\n \"name\": \"Admins\",\n \"quorum\": 2, // only 2 approvers required in that group \n \"approvers\": {\n \"userId\": {\n \"in\": [\"us-...1\", \"us-...2\", \"us-...3\"],\n }\n }\n }\n ],\n\n }\n}\n```\n\n**Don't lock yourself up**\n\nBy default, users cannot approve an activity they initiated themselves, even if they are in an approval group. To allow this, you must set `initiatorCanApprove: true`.\n\n*Example 1:* For any wallet transfer, a policy is setup to require approval from **1 specific admin user** (eg. the CEO). `initiatorCanApprove` was not set to `true`. If the CEO himself initiates a transfer, no-one can approve his transfer and it's stuck.\n\n*Example 2:* Company has only 3 users. A policy is setup to require approval from **any 3 users** (`quorum: 3`) for any modification of a policy. `initiatorCanApprove` was not set to `true`. In this case, they are locked, and the policy cannot be modified: whoever requests a modification cannot approve, and the policy is therefore always missing one approver. To unlock, they would need to invite a new user and give him the rights to approve as well.\n ","required":["kind","approvalGroups"],"properties":{"kind":{"type":"string","enum":["RequestApproval"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.6.pendingChangeRequest.body.oneOf.1.action.oneOf.0.kind","typeLabel":"enum\u003cstring>"},"approvalGroups":{"type":"array","items":{"type":"object","properties":{"quorum":{"type":"integer","minimum":1,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.6.pendingChangeRequest.body.oneOf.1.action.oneOf.0.approvalGroups.items.[INDEX].quorum","typeLabel":"integer"},"approvers":{"type":"object","properties":{"userId":{"type":"object","properties":{"in":{"type":"array","items":{"type":"string","minLength":1,"uniqueKey":"\\items.items.[INDEX].oneOf.6.pendingChangeRequest.body.oneOf.1.action.oneOf.0.approvalGroups.items.[INDEX].approvers.userId.in.items.[INDEX]","typeLabel":"string"},"minItems":1,"maxItems":100,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.6.pendingChangeRequest.body.oneOf.1.action.oneOf.0.approvalGroups.items.[INDEX].approvers.userId.in","typeLabel":"string[]"}},"required":["in"],"additionalProperties":false,"description":"Users and service accounts who may approve.","uniqueKey":"\\items.items.[INDEX].oneOf.6.pendingChangeRequest.body.oneOf.1.action.oneOf.0.approvalGroups.items.[INDEX].approvers.userId","typeLabel":"object"},"userGroupId":{"type":"object","properties":{"in":{"type":"array","items":{"type":"string","minLength":1,"maxLength":64,"pattern":"^ug-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"User group id.","example":"ug-139tf-f58l8-lsbt6dp47lfsdvgh","uniqueKey":"\\items.items.[INDEX].oneOf.6.pendingChangeRequest.body.oneOf.1.action.oneOf.0.approvalGroups.items.[INDEX].approvers.userGroupId.in.items.[INDEX]","typeLabel":"string"},"minItems":1,"maxItems":100,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.6.pendingChangeRequest.body.oneOf.1.action.oneOf.0.approvalGroups.items.[INDEX].approvers.userGroupId.in","typeLabel":"string[]"}},"required":["in"],"additionalProperties":false,"description":"User groups whose members may approve.","uniqueKey":"\\items.items.[INDEX].oneOf.6.pendingChangeRequest.body.oneOf.1.action.oneOf.0.approvalGroups.items.[INDEX].approvers.userGroupId","typeLabel":"object"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.6.pendingChangeRequest.body.oneOf.1.action.oneOf.0.approvalGroups.items.[INDEX].approvers","typeLabel":"object"},"name":{"type":"string","uniqueKey":"\\items.items.[INDEX].oneOf.6.pendingChangeRequest.body.oneOf.1.action.oneOf.0.approvalGroups.items.[INDEX].name","typeLabel":"string"},"initiatorCanApprove":{"type":"boolean","description":"Whether the initiator of the activity can participate in the approval.","uniqueKey":"\\items.items.[INDEX].oneOf.6.pendingChangeRequest.body.oneOf.1.action.oneOf.0.approvalGroups.items.[INDEX].initiatorCanApprove","typeLabel":"boolean"},"serviceAccountsCanApprove":{"type":"boolean","description":"Whether service accounts can participate in the approval for this group.","uniqueKey":"\\items.items.[INDEX].oneOf.6.pendingChangeRequest.body.oneOf.1.action.oneOf.0.approvalGroups.items.[INDEX].serviceAccountsCanApprove","typeLabel":"boolean"}},"required":["quorum","approvers"],"additionalProperties":false,"uniqueKey":"\\items.items.[INDEX].oneOf.6.pendingChangeRequest.body.oneOf.1.action.oneOf.0.approvalGroups.items.[INDEX]","typeLabel":"object"},"minItems":1,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.6.pendingChangeRequest.body.oneOf.1.action.oneOf.0.approvalGroups","typeLabel":"object[]"},"autoRejectTimeout":{"oneOf":[{"type":"integer","minimum":1,"uniqueKey":"\\items.items.[INDEX].oneOf.6.pendingChangeRequest.body.oneOf.1.action.oneOf.0.autoRejectTimeout.oneOf.0","typeLabel":"integer"},{"type":"null","minimum":1,"uniqueKey":"\\items.items.[INDEX].oneOf.6.pendingChangeRequest.body.oneOf.1.action.oneOf.0.autoRejectTimeout.oneOf.1","typeLabel":"null"}],"uniqueKey":"\\items.items.[INDEX].oneOf.6.pendingChangeRequest.body.oneOf.1.action.oneOf.0.autoRejectTimeout","typeLabel":"integer | null"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.6.pendingChangeRequest.body.oneOf.1.action.oneOf.0","typeLabel":"RequestApproval · object"},{"type":"object","title":"Block","description":"This action means that the activity will be blocked if the policy is triggered.\n\n```json\n{\n \"action\": {\n \"kind\": \"Block\"\n }\n}\n```\n","required":["kind"],"properties":{"kind":{"type":"string","enum":["Block"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.6.pendingChangeRequest.body.oneOf.1.action.oneOf.1.kind","typeLabel":"enum\u003cstring>"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.6.pendingChangeRequest.body.oneOf.1.action.oneOf.1","typeLabel":"Block · object"}],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.6.pendingChangeRequest.body.oneOf.1.action","typeLabel":"RequestApproval · object | Block · object"},"dateCreated":{"type":"string","uniqueKey":"\\items.items.[INDEX].oneOf.6.pendingChangeRequest.body.oneOf.1.dateCreated","typeLabel":"string"},"dateUpdated":{"type":"string","uniqueKey":"\\items.items.[INDEX].oneOf.6.pendingChangeRequest.body.oneOf.1.dateUpdated","typeLabel":"string"},"filters":{"type":"object","properties":{"permissionId":{"type":"object","properties":{"in":{"type":"array","items":{"type":"string","minLength":1,"uniqueKey":"\\items.items.[INDEX].oneOf.6.pendingChangeRequest.body.oneOf.1.filters.permissionId.in.items.[INDEX]","typeLabel":"string"},"minItems":1,"maxItems":100,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.6.pendingChangeRequest.body.oneOf.1.filters.permissionId.in","typeLabel":"string[]"}},"required":["in"],"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.6.pendingChangeRequest.body.oneOf.1.filters.permissionId","typeLabel":"object"}},"required":["permissionId"],"additionalProperties":false,"uniqueKey":"\\items.items.[INDEX].oneOf.6.pendingChangeRequest.body.oneOf.1.filters","typeLabel":"object"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.6.pendingChangeRequest.body.oneOf.1","typeLabel":"Permissions:Assign · object"},{"type":"object","title":"Permissions:Modify","required":["id","name","status","activityKind","rule","action"],"properties":{"id":{"type":"string","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.6.pendingChangeRequest.body.oneOf.2.id","typeLabel":"string"},"name":{"type":"string","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.6.pendingChangeRequest.body.oneOf.2.name","typeLabel":"string"},"status":{"type":"string","enum":["Active","Archived"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.6.pendingChangeRequest.body.oneOf.2.status","typeLabel":"enum\u003cstring>"},"activityKind":{"type":"string","enum":["Permissions:Modify"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.6.pendingChangeRequest.body.oneOf.2.activityKind","typeLabel":"enum\u003cstring>"},"rule":{"type":"object","properties":{"kind":{"type":"string","enum":["AlwaysTrigger"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.6.pendingChangeRequest.body.oneOf.2.rule.kind","typeLabel":"enum\u003cstring>"},"configuration":{"type":"object","properties":{},"additionalProperties":false,"uniqueKey":"\\items.items.[INDEX].oneOf.6.pendingChangeRequest.body.oneOf.2.rule.configuration","typeLabel":"object"}},"required":["kind"],"additionalProperties":false,"description":"This rule will always be triggered, meaning that if this rule is defined on a policy, the policy will always trigger the policy action, regardless of the activity details.","title":"AlwaysTrigger","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.6.pendingChangeRequest.body.oneOf.2.rule","typeLabel":"AlwaysTrigger · object"},"action":{"oneOf":[{"type":"object","title":"RequestApproval","description":"\nThis action means that activity will first require an Approval process to be completed before it can be executed (or be aborted if someone rejects it during the approval process).\n\nOne or several groups of approvers need to be specified. These groups define who is allowed to approve / reject an activity.\n\nThe activity will only be executed if all approver groups reach their \"quorum\" of approvals. Otherwise, if any one user within any approver group rejects, then the activity is aborted and the call is not executed.\n\nThe example below shows a `RequestApproval` action, configured with one approval group requiring 2 approvals amongst three specific users.\n\n```json\n{\n \"action\": {\n \"kind\": \"RequestApproval\",\n \"autoRejectTimeout\": 60, // minutes\n \"approvalGroups\": [\n {\n \"name\": \"Admins\",\n \"quorum\": 2, // only 2 approvers required in that group \n \"approvers\": {\n \"userId\": {\n \"in\": [\"us-...1\", \"us-...2\", \"us-...3\"],\n }\n }\n }\n ],\n\n }\n}\n```\n\n**Don't lock yourself up**\n\nBy default, users cannot approve an activity they initiated themselves, even if they are in an approval group. To allow this, you must set `initiatorCanApprove: true`.\n\n*Example 1:* For any wallet transfer, a policy is setup to require approval from **1 specific admin user** (eg. the CEO). `initiatorCanApprove` was not set to `true`. If the CEO himself initiates a transfer, no-one can approve his transfer and it's stuck.\n\n*Example 2:* Company has only 3 users. A policy is setup to require approval from **any 3 users** (`quorum: 3`) for any modification of a policy. `initiatorCanApprove` was not set to `true`. In this case, they are locked, and the policy cannot be modified: whoever requests a modification cannot approve, and the policy is therefore always missing one approver. To unlock, they would need to invite a new user and give him the rights to approve as well.\n ","required":["kind","approvalGroups"],"properties":{"kind":{"type":"string","enum":["RequestApproval"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.6.pendingChangeRequest.body.oneOf.2.action.oneOf.0.kind","typeLabel":"enum\u003cstring>"},"approvalGroups":{"type":"array","items":{"type":"object","properties":{"quorum":{"type":"integer","minimum":1,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.6.pendingChangeRequest.body.oneOf.2.action.oneOf.0.approvalGroups.items.[INDEX].quorum","typeLabel":"integer"},"approvers":{"type":"object","properties":{"userId":{"type":"object","properties":{"in":{"type":"array","items":{"type":"string","minLength":1,"uniqueKey":"\\items.items.[INDEX].oneOf.6.pendingChangeRequest.body.oneOf.2.action.oneOf.0.approvalGroups.items.[INDEX].approvers.userId.in.items.[INDEX]","typeLabel":"string"},"minItems":1,"maxItems":100,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.6.pendingChangeRequest.body.oneOf.2.action.oneOf.0.approvalGroups.items.[INDEX].approvers.userId.in","typeLabel":"string[]"}},"required":["in"],"additionalProperties":false,"description":"Users and service accounts who may approve.","uniqueKey":"\\items.items.[INDEX].oneOf.6.pendingChangeRequest.body.oneOf.2.action.oneOf.0.approvalGroups.items.[INDEX].approvers.userId","typeLabel":"object"},"userGroupId":{"type":"object","properties":{"in":{"type":"array","items":{"type":"string","minLength":1,"maxLength":64,"pattern":"^ug-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"User group id.","example":"ug-139tf-f58l8-lsbt6dp47lfsdvgh","uniqueKey":"\\items.items.[INDEX].oneOf.6.pendingChangeRequest.body.oneOf.2.action.oneOf.0.approvalGroups.items.[INDEX].approvers.userGroupId.in.items.[INDEX]","typeLabel":"string"},"minItems":1,"maxItems":100,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.6.pendingChangeRequest.body.oneOf.2.action.oneOf.0.approvalGroups.items.[INDEX].approvers.userGroupId.in","typeLabel":"string[]"}},"required":["in"],"additionalProperties":false,"description":"User groups whose members may approve.","uniqueKey":"\\items.items.[INDEX].oneOf.6.pendingChangeRequest.body.oneOf.2.action.oneOf.0.approvalGroups.items.[INDEX].approvers.userGroupId","typeLabel":"object"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.6.pendingChangeRequest.body.oneOf.2.action.oneOf.0.approvalGroups.items.[INDEX].approvers","typeLabel":"object"},"name":{"type":"string","uniqueKey":"\\items.items.[INDEX].oneOf.6.pendingChangeRequest.body.oneOf.2.action.oneOf.0.approvalGroups.items.[INDEX].name","typeLabel":"string"},"initiatorCanApprove":{"type":"boolean","description":"Whether the initiator of the activity can participate in the approval.","uniqueKey":"\\items.items.[INDEX].oneOf.6.pendingChangeRequest.body.oneOf.2.action.oneOf.0.approvalGroups.items.[INDEX].initiatorCanApprove","typeLabel":"boolean"},"serviceAccountsCanApprove":{"type":"boolean","description":"Whether service accounts can participate in the approval for this group.","uniqueKey":"\\items.items.[INDEX].oneOf.6.pendingChangeRequest.body.oneOf.2.action.oneOf.0.approvalGroups.items.[INDEX].serviceAccountsCanApprove","typeLabel":"boolean"}},"required":["quorum","approvers"],"additionalProperties":false,"uniqueKey":"\\items.items.[INDEX].oneOf.6.pendingChangeRequest.body.oneOf.2.action.oneOf.0.approvalGroups.items.[INDEX]","typeLabel":"object"},"minItems":1,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.6.pendingChangeRequest.body.oneOf.2.action.oneOf.0.approvalGroups","typeLabel":"object[]"},"autoRejectTimeout":{"oneOf":[{"type":"integer","minimum":1,"uniqueKey":"\\items.items.[INDEX].oneOf.6.pendingChangeRequest.body.oneOf.2.action.oneOf.0.autoRejectTimeout.oneOf.0","typeLabel":"integer"},{"type":"null","minimum":1,"uniqueKey":"\\items.items.[INDEX].oneOf.6.pendingChangeRequest.body.oneOf.2.action.oneOf.0.autoRejectTimeout.oneOf.1","typeLabel":"null"}],"uniqueKey":"\\items.items.[INDEX].oneOf.6.pendingChangeRequest.body.oneOf.2.action.oneOf.0.autoRejectTimeout","typeLabel":"integer | null"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.6.pendingChangeRequest.body.oneOf.2.action.oneOf.0","typeLabel":"RequestApproval · object"},{"type":"object","title":"Block","description":"This action means that the activity will be blocked if the policy is triggered.\n\n```json\n{\n \"action\": {\n \"kind\": \"Block\"\n }\n}\n```\n","required":["kind"],"properties":{"kind":{"type":"string","enum":["Block"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.6.pendingChangeRequest.body.oneOf.2.action.oneOf.1.kind","typeLabel":"enum\u003cstring>"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.6.pendingChangeRequest.body.oneOf.2.action.oneOf.1","typeLabel":"Block · object"}],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.6.pendingChangeRequest.body.oneOf.2.action","typeLabel":"RequestApproval · object | Block · object"},"dateCreated":{"type":"string","uniqueKey":"\\items.items.[INDEX].oneOf.6.pendingChangeRequest.body.oneOf.2.dateCreated","typeLabel":"string"},"dateUpdated":{"type":"string","uniqueKey":"\\items.items.[INDEX].oneOf.6.pendingChangeRequest.body.oneOf.2.dateUpdated","typeLabel":"string"},"filters":{"type":"object","properties":{"permissionId":{"type":"object","properties":{"in":{"type":"array","items":{"type":"string","minLength":1,"uniqueKey":"\\items.items.[INDEX].oneOf.6.pendingChangeRequest.body.oneOf.2.filters.permissionId.in.items.[INDEX]","typeLabel":"string"},"minItems":1,"maxItems":100,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.6.pendingChangeRequest.body.oneOf.2.filters.permissionId.in","typeLabel":"string[]"}},"required":["in"],"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.6.pendingChangeRequest.body.oneOf.2.filters.permissionId","typeLabel":"object"}},"required":["permissionId"],"additionalProperties":false,"uniqueKey":"\\items.items.[INDEX].oneOf.6.pendingChangeRequest.body.oneOf.2.filters","typeLabel":"object"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.6.pendingChangeRequest.body.oneOf.2","typeLabel":"Permissions:Modify · object"},{"type":"object","title":"Policies:Modify","required":["id","name","status","activityKind","rule","action"],"properties":{"id":{"type":"string","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.6.pendingChangeRequest.body.oneOf.3.id","typeLabel":"string"},"name":{"type":"string","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.6.pendingChangeRequest.body.oneOf.3.name","typeLabel":"string"},"status":{"type":"string","enum":["Active","Archived"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.6.pendingChangeRequest.body.oneOf.3.status","typeLabel":"enum\u003cstring>"},"activityKind":{"type":"string","enum":["Policies:Modify"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.6.pendingChangeRequest.body.oneOf.3.activityKind","typeLabel":"enum\u003cstring>"},"rule":{"type":"object","properties":{"kind":{"type":"string","enum":["AlwaysTrigger"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.6.pendingChangeRequest.body.oneOf.3.rule.kind","typeLabel":"enum\u003cstring>"},"configuration":{"type":"object","properties":{},"additionalProperties":false,"uniqueKey":"\\items.items.[INDEX].oneOf.6.pendingChangeRequest.body.oneOf.3.rule.configuration","typeLabel":"object"}},"required":["kind"],"additionalProperties":false,"description":"This rule will always be triggered, meaning that if this rule is defined on a policy, the policy will always trigger the policy action, regardless of the activity details.","title":"AlwaysTrigger","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.6.pendingChangeRequest.body.oneOf.3.rule","typeLabel":"AlwaysTrigger · object"},"action":{"type":"object","properties":{"kind":{"type":"string","enum":["RequestApproval"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.6.pendingChangeRequest.body.oneOf.3.action.kind","typeLabel":"enum\u003cstring>"},"approvalGroups":{"type":"array","items":{"type":"object","properties":{"quorum":{"type":"integer","minimum":1,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.6.pendingChangeRequest.body.oneOf.3.action.approvalGroups.items.[INDEX].quorum","typeLabel":"integer"},"approvers":{"type":"object","properties":{"userId":{"type":"object","properties":{"in":{"type":"array","items":{"type":"string","minLength":1,"uniqueKey":"\\items.items.[INDEX].oneOf.6.pendingChangeRequest.body.oneOf.3.action.approvalGroups.items.[INDEX].approvers.userId.in.items.[INDEX]","typeLabel":"string"},"minItems":1,"maxItems":100,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.6.pendingChangeRequest.body.oneOf.3.action.approvalGroups.items.[INDEX].approvers.userId.in","typeLabel":"string[]"}},"required":["in"],"additionalProperties":false,"description":"Users and service accounts who may approve.","uniqueKey":"\\items.items.[INDEX].oneOf.6.pendingChangeRequest.body.oneOf.3.action.approvalGroups.items.[INDEX].approvers.userId","typeLabel":"object"},"userGroupId":{"type":"object","properties":{"in":{"type":"array","items":{"type":"string","minLength":1,"maxLength":64,"pattern":"^ug-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"User group id.","example":"ug-139tf-f58l8-lsbt6dp47lfsdvgh","uniqueKey":"\\items.items.[INDEX].oneOf.6.pendingChangeRequest.body.oneOf.3.action.approvalGroups.items.[INDEX].approvers.userGroupId.in.items.[INDEX]","typeLabel":"string"},"minItems":1,"maxItems":100,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.6.pendingChangeRequest.body.oneOf.3.action.approvalGroups.items.[INDEX].approvers.userGroupId.in","typeLabel":"string[]"}},"required":["in"],"additionalProperties":false,"description":"User groups whose members may approve.","uniqueKey":"\\items.items.[INDEX].oneOf.6.pendingChangeRequest.body.oneOf.3.action.approvalGroups.items.[INDEX].approvers.userGroupId","typeLabel":"object"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.6.pendingChangeRequest.body.oneOf.3.action.approvalGroups.items.[INDEX].approvers","typeLabel":"object"},"name":{"type":"string","uniqueKey":"\\items.items.[INDEX].oneOf.6.pendingChangeRequest.body.oneOf.3.action.approvalGroups.items.[INDEX].name","typeLabel":"string"},"initiatorCanApprove":{"type":"boolean","description":"Whether the initiator of the activity can participate in the approval.","uniqueKey":"\\items.items.[INDEX].oneOf.6.pendingChangeRequest.body.oneOf.3.action.approvalGroups.items.[INDEX].initiatorCanApprove","typeLabel":"boolean"},"serviceAccountsCanApprove":{"type":"boolean","description":"Whether service accounts can participate in the approval for this group.","uniqueKey":"\\items.items.[INDEX].oneOf.6.pendingChangeRequest.body.oneOf.3.action.approvalGroups.items.[INDEX].serviceAccountsCanApprove","typeLabel":"boolean"}},"required":["quorum","approvers"],"additionalProperties":false,"uniqueKey":"\\items.items.[INDEX].oneOf.6.pendingChangeRequest.body.oneOf.3.action.approvalGroups.items.[INDEX]","typeLabel":"object"},"minItems":1,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.6.pendingChangeRequest.body.oneOf.3.action.approvalGroups","typeLabel":"object[]"},"autoRejectTimeout":{"oneOf":[{"type":"integer","minimum":1,"uniqueKey":"\\items.items.[INDEX].oneOf.6.pendingChangeRequest.body.oneOf.3.action.autoRejectTimeout.oneOf.0","typeLabel":"integer"},{"type":"null","minimum":1,"uniqueKey":"\\items.items.[INDEX].oneOf.6.pendingChangeRequest.body.oneOf.3.action.autoRejectTimeout.oneOf.1","typeLabel":"null"}],"uniqueKey":"\\items.items.[INDEX].oneOf.6.pendingChangeRequest.body.oneOf.3.action.autoRejectTimeout","typeLabel":"integer | null"}},"required":["kind","approvalGroups"],"additionalProperties":false,"description":"\nThis action means that activity will first require an Approval process to be completed before it can be executed (or be aborted if someone rejects it during the approval process).\n\nOne or several groups of approvers need to be specified. These groups define who is allowed to approve / reject an activity.\n\nThe activity will only be executed if all approver groups reach their \"quorum\" of approvals. Otherwise, if any one user within any approver group rejects, then the activity is aborted and the call is not executed.\n\nThe example below shows a `RequestApproval` action, configured with one approval group requiring 2 approvals amongst three specific users.\n\n```json\n{\n \"action\": {\n \"kind\": \"RequestApproval\",\n \"autoRejectTimeout\": 60, // minutes\n \"approvalGroups\": [\n {\n \"name\": \"Admins\",\n \"quorum\": 2, // only 2 approvers required in that group \n \"approvers\": {\n \"userId\": {\n \"in\": [\"us-...1\", \"us-...2\", \"us-...3\"],\n }\n }\n }\n ],\n\n }\n}\n```\n\n**Don't lock yourself up**\n\nBy default, users cannot approve an activity they initiated themselves, even if they are in an approval group. To allow this, you must set `initiatorCanApprove: true`.\n\n*Example 1:* For any wallet transfer, a policy is setup to require approval from **1 specific admin user** (eg. the CEO). `initiatorCanApprove` was not set to `true`. If the CEO himself initiates a transfer, no-one can approve his transfer and it's stuck.\n\n*Example 2:* Company has only 3 users. A policy is setup to require approval from **any 3 users** (`quorum: 3`) for any modification of a policy. `initiatorCanApprove` was not set to `true`. In this case, they are locked, and the policy cannot be modified: whoever requests a modification cannot approve, and the policy is therefore always missing one approver. To unlock, they would need to invite a new user and give him the rights to approve as well.\n ","title":"RequestApproval","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.6.pendingChangeRequest.body.oneOf.3.action","typeLabel":"RequestApproval · object"},"dateCreated":{"type":"string","uniqueKey":"\\items.items.[INDEX].oneOf.6.pendingChangeRequest.body.oneOf.3.dateCreated","typeLabel":"string"},"dateUpdated":{"type":"string","uniqueKey":"\\items.items.[INDEX].oneOf.6.pendingChangeRequest.body.oneOf.3.dateUpdated","typeLabel":"string"},"filters":{"type":"object","properties":{"policyId":{"type":"object","properties":{"in":{"type":"array","items":{"type":"string","minLength":1,"uniqueKey":"\\items.items.[INDEX].oneOf.6.pendingChangeRequest.body.oneOf.3.filters.policyId.in.items.[INDEX]","typeLabel":"string"},"minItems":1,"maxItems":100,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.6.pendingChangeRequest.body.oneOf.3.filters.policyId.in","typeLabel":"string[]"}},"required":["in"],"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.6.pendingChangeRequest.body.oneOf.3.filters.policyId","typeLabel":"object"}},"required":["policyId"],"additionalProperties":false,"uniqueKey":"\\items.items.[INDEX].oneOf.6.pendingChangeRequest.body.oneOf.3.filters","typeLabel":"object"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.6.pendingChangeRequest.body.oneOf.3","typeLabel":"Policies:Modify · object"},{"type":"object","title":"Registry:ContractSchemas:Modify","required":["id","name","status","activityKind","rule","action"],"properties":{"id":{"type":"string","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.6.pendingChangeRequest.body.oneOf.4.id","typeLabel":"string"},"name":{"type":"string","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.6.pendingChangeRequest.body.oneOf.4.name","typeLabel":"string"},"status":{"type":"string","enum":["Active","Archived"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.6.pendingChangeRequest.body.oneOf.4.status","typeLabel":"enum\u003cstring>"},"activityKind":{"type":"string","enum":["Registry:ContractSchemas:Modify"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.6.pendingChangeRequest.body.oneOf.4.activityKind","typeLabel":"enum\u003cstring>"},"rule":{"type":"object","properties":{"kind":{"type":"string","enum":["AlwaysTrigger"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.6.pendingChangeRequest.body.oneOf.4.rule.kind","typeLabel":"enum\u003cstring>"},"configuration":{"type":"object","properties":{},"additionalProperties":false,"uniqueKey":"\\items.items.[INDEX].oneOf.6.pendingChangeRequest.body.oneOf.4.rule.configuration","typeLabel":"object"}},"required":["kind"],"additionalProperties":false,"description":"This rule will always be triggered, meaning that if this rule is defined on a policy, the policy will always trigger the policy action, regardless of the activity details.","title":"AlwaysTrigger","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.6.pendingChangeRequest.body.oneOf.4.rule","typeLabel":"AlwaysTrigger · object"},"action":{"oneOf":[{"type":"object","title":"RequestApproval","description":"\nThis action means that activity will first require an Approval process to be completed before it can be executed (or be aborted if someone rejects it during the approval process).\n\nOne or several groups of approvers need to be specified. These groups define who is allowed to approve / reject an activity.\n\nThe activity will only be executed if all approver groups reach their \"quorum\" of approvals. Otherwise, if any one user within any approver group rejects, then the activity is aborted and the call is not executed.\n\nThe example below shows a `RequestApproval` action, configured with one approval group requiring 2 approvals amongst three specific users.\n\n```json\n{\n \"action\": {\n \"kind\": \"RequestApproval\",\n \"autoRejectTimeout\": 60, // minutes\n \"approvalGroups\": [\n {\n \"name\": \"Admins\",\n \"quorum\": 2, // only 2 approvers required in that group \n \"approvers\": {\n \"userId\": {\n \"in\": [\"us-...1\", \"us-...2\", \"us-...3\"],\n }\n }\n }\n ],\n\n }\n}\n```\n\n**Don't lock yourself up**\n\nBy default, users cannot approve an activity they initiated themselves, even if they are in an approval group. To allow this, you must set `initiatorCanApprove: true`.\n\n*Example 1:* For any wallet transfer, a policy is setup to require approval from **1 specific admin user** (eg. the CEO). `initiatorCanApprove` was not set to `true`. If the CEO himself initiates a transfer, no-one can approve his transfer and it's stuck.\n\n*Example 2:* Company has only 3 users. A policy is setup to require approval from **any 3 users** (`quorum: 3`) for any modification of a policy. `initiatorCanApprove` was not set to `true`. In this case, they are locked, and the policy cannot be modified: whoever requests a modification cannot approve, and the policy is therefore always missing one approver. To unlock, they would need to invite a new user and give him the rights to approve as well.\n ","required":["kind","approvalGroups"],"properties":{"kind":{"type":"string","enum":["RequestApproval"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.6.pendingChangeRequest.body.oneOf.4.action.oneOf.0.kind","typeLabel":"enum\u003cstring>"},"approvalGroups":{"type":"array","items":{"type":"object","properties":{"quorum":{"type":"integer","minimum":1,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.6.pendingChangeRequest.body.oneOf.4.action.oneOf.0.approvalGroups.items.[INDEX].quorum","typeLabel":"integer"},"approvers":{"type":"object","properties":{"userId":{"type":"object","properties":{"in":{"type":"array","items":{"type":"string","minLength":1,"uniqueKey":"\\items.items.[INDEX].oneOf.6.pendingChangeRequest.body.oneOf.4.action.oneOf.0.approvalGroups.items.[INDEX].approvers.userId.in.items.[INDEX]","typeLabel":"string"},"minItems":1,"maxItems":100,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.6.pendingChangeRequest.body.oneOf.4.action.oneOf.0.approvalGroups.items.[INDEX].approvers.userId.in","typeLabel":"string[]"}},"required":["in"],"additionalProperties":false,"description":"Users and service accounts who may approve.","uniqueKey":"\\items.items.[INDEX].oneOf.6.pendingChangeRequest.body.oneOf.4.action.oneOf.0.approvalGroups.items.[INDEX].approvers.userId","typeLabel":"object"},"userGroupId":{"type":"object","properties":{"in":{"type":"array","items":{"type":"string","minLength":1,"maxLength":64,"pattern":"^ug-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"User group id.","example":"ug-139tf-f58l8-lsbt6dp47lfsdvgh","uniqueKey":"\\items.items.[INDEX].oneOf.6.pendingChangeRequest.body.oneOf.4.action.oneOf.0.approvalGroups.items.[INDEX].approvers.userGroupId.in.items.[INDEX]","typeLabel":"string"},"minItems":1,"maxItems":100,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.6.pendingChangeRequest.body.oneOf.4.action.oneOf.0.approvalGroups.items.[INDEX].approvers.userGroupId.in","typeLabel":"string[]"}},"required":["in"],"additionalProperties":false,"description":"User groups whose members may approve.","uniqueKey":"\\items.items.[INDEX].oneOf.6.pendingChangeRequest.body.oneOf.4.action.oneOf.0.approvalGroups.items.[INDEX].approvers.userGroupId","typeLabel":"object"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.6.pendingChangeRequest.body.oneOf.4.action.oneOf.0.approvalGroups.items.[INDEX].approvers","typeLabel":"object"},"name":{"type":"string","uniqueKey":"\\items.items.[INDEX].oneOf.6.pendingChangeRequest.body.oneOf.4.action.oneOf.0.approvalGroups.items.[INDEX].name","typeLabel":"string"},"initiatorCanApprove":{"type":"boolean","description":"Whether the initiator of the activity can participate in the approval.","uniqueKey":"\\items.items.[INDEX].oneOf.6.pendingChangeRequest.body.oneOf.4.action.oneOf.0.approvalGroups.items.[INDEX].initiatorCanApprove","typeLabel":"boolean"},"serviceAccountsCanApprove":{"type":"boolean","description":"Whether service accounts can participate in the approval for this group.","uniqueKey":"\\items.items.[INDEX].oneOf.6.pendingChangeRequest.body.oneOf.4.action.oneOf.0.approvalGroups.items.[INDEX].serviceAccountsCanApprove","typeLabel":"boolean"}},"required":["quorum","approvers"],"additionalProperties":false,"uniqueKey":"\\items.items.[INDEX].oneOf.6.pendingChangeRequest.body.oneOf.4.action.oneOf.0.approvalGroups.items.[INDEX]","typeLabel":"object"},"minItems":1,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.6.pendingChangeRequest.body.oneOf.4.action.oneOf.0.approvalGroups","typeLabel":"object[]"},"autoRejectTimeout":{"oneOf":[{"type":"integer","minimum":1,"uniqueKey":"\\items.items.[INDEX].oneOf.6.pendingChangeRequest.body.oneOf.4.action.oneOf.0.autoRejectTimeout.oneOf.0","typeLabel":"integer"},{"type":"null","minimum":1,"uniqueKey":"\\items.items.[INDEX].oneOf.6.pendingChangeRequest.body.oneOf.4.action.oneOf.0.autoRejectTimeout.oneOf.1","typeLabel":"null"}],"uniqueKey":"\\items.items.[INDEX].oneOf.6.pendingChangeRequest.body.oneOf.4.action.oneOf.0.autoRejectTimeout","typeLabel":"integer | null"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.6.pendingChangeRequest.body.oneOf.4.action.oneOf.0","typeLabel":"RequestApproval · object"},{"type":"object","title":"Block","description":"This action means that the activity will be blocked if the policy is triggered.\n\n```json\n{\n \"action\": {\n \"kind\": \"Block\"\n }\n}\n```\n","required":["kind"],"properties":{"kind":{"type":"string","enum":["Block"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.6.pendingChangeRequest.body.oneOf.4.action.oneOf.1.kind","typeLabel":"enum\u003cstring>"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.6.pendingChangeRequest.body.oneOf.4.action.oneOf.1","typeLabel":"Block · object"}],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.6.pendingChangeRequest.body.oneOf.4.action","typeLabel":"RequestApproval · object | Block · object"},"dateCreated":{"type":"string","uniqueKey":"\\items.items.[INDEX].oneOf.6.pendingChangeRequest.body.oneOf.4.dateCreated","typeLabel":"string"},"dateUpdated":{"type":"string","uniqueKey":"\\items.items.[INDEX].oneOf.6.pendingChangeRequest.body.oneOf.4.dateUpdated","typeLabel":"string"},"filters":{"type":"object","properties":{},"uniqueKey":"\\items.items.[INDEX].oneOf.6.pendingChangeRequest.body.oneOf.4.filters","typeLabel":"object"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.6.pendingChangeRequest.body.oneOf.4","typeLabel":"Registry:ContractSchemas:Modify · object"},{"type":"object","title":"Wallets:Sign","required":["id","name","status","activityKind","rule","action"],"properties":{"id":{"type":"string","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.6.pendingChangeRequest.body.oneOf.5.id","typeLabel":"string"},"name":{"type":"string","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.6.pendingChangeRequest.body.oneOf.5.name","typeLabel":"string"},"status":{"type":"string","enum":["Active","Archived"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.6.pendingChangeRequest.body.oneOf.5.status","typeLabel":"enum\u003cstring>"},"activityKind":{"type":"string","enum":["Wallets:Sign"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.6.pendingChangeRequest.body.oneOf.5.activityKind","typeLabel":"enum\u003cstring>"},"rule":{"oneOf":[{"type":"object","title":"AlwaysTrigger","description":"This rule will always be triggered, meaning that if this rule is defined on a policy, the policy will always trigger the policy action, regardless of the activity details.","required":["kind"],"properties":{"kind":{"type":"string","enum":["AlwaysTrigger"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.6.pendingChangeRequest.body.oneOf.5.rule.oneOf.0.kind","typeLabel":"enum\u003cstring>"},"configuration":{"type":"object","properties":{},"additionalProperties":false,"uniqueKey":"\\items.items.[INDEX].oneOf.6.pendingChangeRequest.body.oneOf.5.rule.oneOf.0.configuration","typeLabel":"object"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.6.pendingChangeRequest.body.oneOf.5.rule.oneOf.0","typeLabel":"AlwaysTrigger · object"},{"type":"object","title":"TransactionRecipientWhitelist","description":"This rule will trigger if the destination address *is NOT whitelisted*.","required":["kind","configuration"],"properties":{"kind":{"type":"string","enum":["TransactionRecipientWhitelist"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.6.pendingChangeRequest.body.oneOf.5.rule.oneOf.1.kind","typeLabel":"enum\u003cstring>"},"configuration":{"type":"object","properties":{"addresses":{"type":"array","items":{"type":"string","minLength":1,"uniqueKey":"\\items.items.[INDEX].oneOf.6.pendingChangeRequest.body.oneOf.5.rule.oneOf.1.configuration.addresses.items.[INDEX]","typeLabel":"string"},"description":"Whitelisted recipient addresses","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.6.pendingChangeRequest.body.oneOf.5.rule.oneOf.1.configuration.addresses","typeLabel":"string[]"}},"required":["addresses"],"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.6.pendingChangeRequest.body.oneOf.5.rule.oneOf.1.configuration","typeLabel":"object"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.6.pendingChangeRequest.body.oneOf.5.rule.oneOf.1","typeLabel":"TransactionRecipientWhitelist · object"},{"type":"object","title":"TransactionAmountLimit","description":"This rule will trigger if the wallet activity detected is transferring some value whose amount is equal to or greater than a given limit. The limit is inclusive: a transfer whose value exactly equals the limit also triggers.\n\nThe limit is expressed in a fiat `currency` and evaluated against the market value of the transfer. To set a threshold in the asset's own units instead, use `TransactionAmountLimitNominal`.\n\nNote: If the amount of the wallet activity cannot be evaluated for any reason (eg. market prices are not available, or eg. the amount cannot be inferred from a wallet signature request, etc.), by default the rule will trigger the policy (this is called \"failing closed\" and is generally considered a security best practice).","required":["kind","configuration"],"properties":{"kind":{"type":"string","enum":["TransactionAmountLimit"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.6.pendingChangeRequest.body.oneOf.5.rule.oneOf.2.kind","typeLabel":"enum\u003cstring>"},"configuration":{"type":"object","properties":{"limit":{"type":"number","description":"Amount limit in `currency`","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.6.pendingChangeRequest.body.oneOf.5.rule.oneOf.2.configuration.limit","typeLabel":"number"},"currency":{"type":"string","enum":["USD"],"description":"Fiat currency, currently only `USD`","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.6.pendingChangeRequest.body.oneOf.5.rule.oneOf.2.configuration.currency","typeLabel":"enum\u003cstring>"}},"required":["limit","currency"],"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.6.pendingChangeRequest.body.oneOf.5.rule.oneOf.2.configuration","typeLabel":"object"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.6.pendingChangeRequest.body.oneOf.5.rule.oneOf.2","typeLabel":"TransactionAmountLimit · object"},{"type":"object","title":"TransactionAmountLimitNominal","description":"This rule will trigger if the wallet activity detected is transferring more of a listed asset than that asset's limit.\n\nEach limit is expressed in the minimum denomination of its own asset and compared against the transferred amount directly, so the verdict needs no market data and does not move with a price. To set a threshold on the fiat value of a transfer instead, use `TransactionAmountLimit`.\n\nLimits are asset exact: an asset is identified by its network and its Dfns token identifier, so a wrapped or staked derivative is a different asset from the thing it tracks, and a transfer of an asset the rule does not list will not trigger it.\n\nNote: If the transferred amount or the asset cannot be determined for any reason, by default the rule will trigger the policy (this is called \"failing closed\" and is generally considered a security best practice).","required":["kind","configuration"],"properties":{"kind":{"type":"string","enum":["TransactionAmountLimitNominal"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.6.pendingChangeRequest.body.oneOf.5.rule.oneOf.3.kind","typeLabel":"enum\u003cstring>"},"configuration":{"type":"object","properties":{"assets":{"type":"array","items":{"type":"object","properties":{"network":{"type":"string","title":"Network","description":"The network the asset lives on.","enum":["Algorand","AlgorandTestnet","Aptos","AptosTestnet","ArbitrumOne","ArbitrumSepolia","Arc","ArcTestnet","Areum","AvalancheC","AvalancheCFuji","Base","BaseSepolia","Berachain","BerachainBepolia","Bitcoin","BitcoinSignet","BitcoinTestnet4","BitcoinCash","Bob","BobSepolia","Bsc","BscTestnet","Canton","CantonTestnet","Cardano","CardanoPreprod","Concordium","ConcordiumTestnet","Celo","CeloSepolia","Codex","CodexSepolia","CosmosHub4","CosmosIcsTestnet","Dogecoin","DogecoinTestnet","Ethereum","EthereumClassic","EthereumClassicMordor","EthereumSepolia","EthereumHoodi","FlareC","FlareCCoston2","FlowEvm","FlowEvmTestnet","Hedera","HederaTestnet","HyperEvm","HyperEvmTestnet","Ink","InkSepolia","InternetComputer","Ion","IonTestnet","Iota","IotaTestnet","Kusama","KusamaAssetHub","Litecoin","LitecoinTestnet","Monad","MonadTestnet","Movement","MovementTestnet","Near","NearTestnet","Optimism","OptimismSepolia","Origyn","Plasma","PlasmaTestnet","Plume","PlumeSepolia","Paseo","PaseoAssetHub","Polkadot","PolkadotAssetHub","Polygon","PolygonAmoy","Polymesh","PolymeshTestnet","Rayls","RaylsTestnet","Robinhood","RobinhoodSepolia","SeiAtlantic2","SeiPacific1","Solana","SolanaDevnet","Sonic","SonicTestnet","Starknet","StarknetSepolia","Stellar","StellarTestnet","Sui","SuiTestnet","Tezos","TezosShadownet","Tempo","TempoModerato","Tsc","TscTestnet1","Ton","TonTestnet","Tron","TronNile","Westend","WestendAssetHub","Xdc","XdcApothem","XLayer","XLayerSepolia","XrpLedger","XrpLedgerTestnet"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.6.pendingChangeRequest.body.oneOf.5.rule.oneOf.3.configuration.assets.items.[INDEX].network","typeLabel":"enum\u003cstring>"},"tid":{"type":"string","minLength":1,"maxLength":200,"pattern":"^[a-z0-9_]+:[^\\s](?:[ ]?[^\\s])*$","description":"The Dfns token identifier of the asset, for example `native:eth` or `erc20:0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48`. Must be canonical: token contract addresses on hex based networks are lower cased.","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.6.pendingChangeRequest.body.oneOf.5.rule.oneOf.3.configuration.assets.items.[INDEX].tid","typeLabel":"string"},"limit":{"type":"string","pattern":"^\\d+$","description":"Amount limit in the minimum denomination of the asset, as an integer string, matching how a transfer expresses its amount. For an 18 decimal token `\"5000000000000000000\"` is 5 whole tokens.","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.6.pendingChangeRequest.body.oneOf.5.rule.oneOf.3.configuration.assets.items.[INDEX].limit","typeLabel":"string"}},"required":["network","tid","limit"],"additionalProperties":false,"uniqueKey":"\\items.items.[INDEX].oneOf.6.pendingChangeRequest.body.oneOf.5.rule.oneOf.3.configuration.assets.items.[INDEX]","typeLabel":"object"},"minItems":1,"maxItems":100,"description":"The assets this rule applies to, each with its own limit. A transfer of an asset that is not listed does not trigger the rule. The limit applies to each matching transfer individually; nothing is accumulated across transfers.","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.6.pendingChangeRequest.body.oneOf.5.rule.oneOf.3.configuration.assets","typeLabel":"object[]"}},"required":["assets"],"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.6.pendingChangeRequest.body.oneOf.5.rule.oneOf.3.configuration","typeLabel":"object"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.6.pendingChangeRequest.body.oneOf.5.rule.oneOf.3","typeLabel":"TransactionAmountLimitNominal · object"},{"type":"object","title":"TransactionAmountVelocity","description":"This rule will trigger if the cumulative amount transferred from a given wallet within a given timeframe is greater than a specified limit. The aggregate amount evaluated is based only on the wallet that triggered the policy.","required":["kind","configuration"],"properties":{"kind":{"type":"string","enum":["TransactionAmountVelocity"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.6.pendingChangeRequest.body.oneOf.5.rule.oneOf.4.kind","typeLabel":"enum\u003cstring>"},"configuration":{"type":"object","properties":{"limit":{"type":"number","description":"Amount limit in `currency`","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.6.pendingChangeRequest.body.oneOf.5.rule.oneOf.4.configuration.limit","typeLabel":"number"},"currency":{"type":"string","enum":["USD"],"description":"Currency for the amount limit above","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.6.pendingChangeRequest.body.oneOf.5.rule.oneOf.4.configuration.currency","typeLabel":"enum\u003cstring>"},"timeframe":{"type":"integer","minimum":1,"maximum":43200,"description":"Time period in minutes. Minimum 1, Maximum 43,200.","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.6.pendingChangeRequest.body.oneOf.5.rule.oneOf.4.configuration.timeframe","typeLabel":"integer"}},"required":["limit","currency","timeframe"],"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.6.pendingChangeRequest.body.oneOf.5.rule.oneOf.4.configuration","typeLabel":"object"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.6.pendingChangeRequest.body.oneOf.5.rule.oneOf.4","typeLabel":"TransactionAmountVelocity · object"},{"type":"object","title":"TransactionCountVelocity","description":"This rule will trigger if the number of wallet activities for a given wallet within a given timeframe, is greater than a specified limit. The aggregate number of transactions evaluated is based only on the wallet that triggered the policy.","required":["kind","configuration"],"properties":{"kind":{"type":"string","enum":["TransactionCountVelocity"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.6.pendingChangeRequest.body.oneOf.5.rule.oneOf.5.kind","typeLabel":"enum\u003cstring>"},"configuration":{"type":"object","properties":{"limit":{"type":"number","description":"Count limit","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.6.pendingChangeRequest.body.oneOf.5.rule.oneOf.5.configuration.limit","typeLabel":"number"},"timeframe":{"type":"integer","minimum":1,"maximum":43200,"description":"Time period in minutes. Minimum 1, Maximum 43,200.","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.6.pendingChangeRequest.body.oneOf.5.rule.oneOf.5.configuration.timeframe","typeLabel":"integer"}},"required":["limit","timeframe"],"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.6.pendingChangeRequest.body.oneOf.5.rule.oneOf.5.configuration","typeLabel":"object"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.6.pendingChangeRequest.body.oneOf.5.rule.oneOf.5","typeLabel":"TransactionCountVelocity · object"},{"type":"object","title":"ChainalysisTransactionPrescreening","description":"\n\u003cInfo>\nThis rule can only be used once the Chainalysis integration is activated from the Dfns dashboard settings. (see more on [Chainalysis](https://docs.dfns.co/integrations/aml-kyt/chainalysis) integration page).\n\u003c/Info>\n\nIt's a rule based on [Chainalysis](https://docs.dfns.co/integrations/aml-kyt/chainalysis) KYT integration (Know-Your-Transaction). Upon transfer attempt, we will first register the transfer with Chainalysis (as a [\"withdrawal attempt\"](https://docs.chainalysis.com/api/kyt/#registration-register-a-withdrawal-attempt)), and fetch the screening results (alerts, exposures, addresses detected). Based on the results, and the configuration of this rule, the policy will be triggered.\n\nIt's called \"Pre\"-screening, because the scanned transaction is not on chain yet, it's still a transaction attempt (before the transaction actually make it on chain).\n\n```json\n{\n \"rule\": {\n \"kind\": \"ChainalysisTransactionPrescreening\",\n \"configuration\": {\n \"alerts\": {\n \"alertLevel\": \"LOW\",\n \"categoryIds\": []\n },\n \"exposures\": {\n \"direct\": {\n \"categoryIds\": []\n }\n },\n \"addresses\": {\n \"categoryIds\": []\n },\n \"fallbackBehaviours\": {\n \"skipUnscreenableTransaction\": false,\n \"skipUnsupportedNetwork\": false,\n \"skipUnsupportedAsset\": false,\n \"skipChainalysisFailure\": false\n }\n }\n }\n}\n```\n\n**Configuration**\n\n| Property | Type | Description |\n| --- | --- | --- |\n| `alerts`\u003cbr>\u003cbr>`.alertLevel`* | `string` | Minimum alert level above which the rule should trigger, if any [alert is returned in Chainalysis results](https://docs.chainalysis.com/api/kyt/#withdrawal-attempts-get-alerts). Can be `LOW`, `MEDIUM`, `HIGH`, or `SEVERE` |\n| `alerts`\u003cbr>\u003cbr>`.categoryIds`* | list of integers | List of Chainalysis category IDs (see [here](https://docs.chainalysis.com/api/kyt/#categories)). If you leave this list empty, alerts of any category will trigger the rule. Otherwise, if you only want the rule to trigger on specific categories, you can specify some in the list. |\n| `exposures`\u003cbr>\u003cbr>`.direct`\u003cbr>\u003cbr>`.categoryIds`* | list of integers | List of Chainalysis category IDs (see [here](https://docs.chainalysis.com/api/kyt/#categories)). If you leave this list empty, a [direct exposure](https://docs.chainalysis.com/api/kyt/#withdrawal-attempts-get-direct-exposure) of any category detected by chainalysis will trigger the rule. Otherwise, if you only want the rule to trigger on specific categories, you can specify some in the list. |\n| `addresses`\u003cbr>\u003cbr>`.categoryIds`* | list of integers | List of Chainalysis category IDs (see [here](https://docs.chainalysis.com/api/kyt/#categories)). If you leave this list empty, an [address](https://docs.chainalysis.com/api/kyt/#withdrawal-attempts-get-address-identifications) of any category identified by chainalysis will trigger the rule. Otherwise, if you only want the rule to trigger on specific categories, you can specify some in the list. |\n| `fallbackBehaviours`\u003cbr>\u003cbr>`.skipUnscreenableTransaction`* | boolean | Behaviour if the wallet activity is not screenable (eg. if it's a signature request of a hash). If true, a transaction which is \"unscreenable\" will just be skipped, and policy will not trigger |\n| `fallbackBehaviours.skipUnsupportedNetwork`* | boolean | Behaviour if the wallet activity is on a network not supported by chainalysis, or not yet supported in the dfns-chainalysis integration. If true, an unsupported network will just be skipped, and policy will not trigger |\n| `fallbackBehaviours.skipUnsupportedAsset`* | boolean | Behaviour if the wallet activity is with a asset not supported by chainalysis, or not yet supported in the dfns-chainalysis integration. If true, an unsupported asset will just be skipped, and policy will not trigger |\n| `fallbackBehaviours.skipChainalysisFailure`* | boolean | Behaviour if any issue with Chainalysis calls (timeout, results took too long, rate limiting errors, any error). If true, will skip if any error happens |\n\n","required":["kind","configuration"],"properties":{"kind":{"type":"string","enum":["ChainalysisTransactionPrescreening"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.6.pendingChangeRequest.body.oneOf.5.rule.oneOf.6.kind","typeLabel":"enum\u003cstring>"},"configuration":{"type":"object","properties":{"alerts":{"type":"object","properties":{"alertLevel":{"type":"string","enum":["LOW","MEDIUM","HIGH","SEVERE"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.6.pendingChangeRequest.body.oneOf.5.rule.oneOf.6.configuration.alerts.alertLevel","typeLabel":"enum\u003cstring>"},"categoryIds":{"type":"array","items":{"type":"integer","exclusiveMinimum":0,"uniqueKey":"\\items.items.[INDEX].oneOf.6.pendingChangeRequest.body.oneOf.5.rule.oneOf.6.configuration.alerts.categoryIds.items.[INDEX]","typeLabel":"integer"},"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.6.pendingChangeRequest.body.oneOf.5.rule.oneOf.6.configuration.alerts.categoryIds","typeLabel":"integer[]"}},"required":["alertLevel","categoryIds"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.6.pendingChangeRequest.body.oneOf.5.rule.oneOf.6.configuration.alerts","typeLabel":"object"},"exposures":{"type":"object","properties":{"direct":{"type":"object","properties":{"categoryIds":{"type":"array","items":{"type":"integer","exclusiveMinimum":0,"uniqueKey":"\\items.items.[INDEX].oneOf.6.pendingChangeRequest.body.oneOf.5.rule.oneOf.6.configuration.exposures.direct.categoryIds.items.[INDEX]","typeLabel":"integer"},"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.6.pendingChangeRequest.body.oneOf.5.rule.oneOf.6.configuration.exposures.direct.categoryIds","typeLabel":"integer[]"}},"required":["categoryIds"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.6.pendingChangeRequest.body.oneOf.5.rule.oneOf.6.configuration.exposures.direct","typeLabel":"object"}},"required":["direct"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.6.pendingChangeRequest.body.oneOf.5.rule.oneOf.6.configuration.exposures","typeLabel":"object"},"addresses":{"type":"object","properties":{"categoryIds":{"type":"array","items":{"type":"integer","exclusiveMinimum":0,"uniqueKey":"\\items.items.[INDEX].oneOf.6.pendingChangeRequest.body.oneOf.5.rule.oneOf.6.configuration.addresses.categoryIds.items.[INDEX]","typeLabel":"integer"},"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.6.pendingChangeRequest.body.oneOf.5.rule.oneOf.6.configuration.addresses.categoryIds","typeLabel":"integer[]"}},"required":["categoryIds"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.6.pendingChangeRequest.body.oneOf.5.rule.oneOf.6.configuration.addresses","typeLabel":"object"},"fallbackBehaviours":{"type":"object","properties":{"skipUnscreenableTransaction":{"type":"boolean","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.6.pendingChangeRequest.body.oneOf.5.rule.oneOf.6.configuration.fallbackBehaviours.skipUnscreenableTransaction","typeLabel":"boolean"},"skipUnsupportedNetwork":{"type":"boolean","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.6.pendingChangeRequest.body.oneOf.5.rule.oneOf.6.configuration.fallbackBehaviours.skipUnsupportedNetwork","typeLabel":"boolean"},"skipUnsupportedAsset":{"type":"boolean","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.6.pendingChangeRequest.body.oneOf.5.rule.oneOf.6.configuration.fallbackBehaviours.skipUnsupportedAsset","typeLabel":"boolean"},"skipChainalysisFailure":{"type":"boolean","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.6.pendingChangeRequest.body.oneOf.5.rule.oneOf.6.configuration.fallbackBehaviours.skipChainalysisFailure","typeLabel":"boolean"}},"required":["skipUnscreenableTransaction","skipUnsupportedNetwork","skipUnsupportedAsset","skipChainalysisFailure"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.6.pendingChangeRequest.body.oneOf.5.rule.oneOf.6.configuration.fallbackBehaviours","typeLabel":"object"},"userIdTemplate":{"type":"string","minLength":1,"maxLength":50,"pattern":"^([a-zA-Z0-9_:-]|{wallet\\.id}|{wallet\\.externalId})+$","default":"dfns","description":"**Deprecated** — set `userIdTemplate` on the Chainalysis integration setting instead; when set there, the integration-level template takes precedence over this one.\n\nValue sent to Chainalysis as the \"user ID\". Used by Chainalysis for grouping transaction screenings.\n \nThis template can include variables, included in brackets. The following variables are currently supported: `{wallet.id}` and `{wallet.externalId}`.\nAs an example, if you set `userIdTemplate: \"dfns:{wallet.id}_{wallet.externalId}\"`, when your wallet receives a transaction that gets screened by a Chainalysis policy, the \"user ID\" sent to Chainalysis will be `dfns:wa-xxx_yyy` (`wa-xxx` being the wallet ID, and `yyy` being the wallet external ID).","uniqueKey":"\\items.items.[INDEX].oneOf.6.pendingChangeRequest.body.oneOf.5.rule.oneOf.6.configuration.userIdTemplate","typeLabel":"string"}},"required":["alerts","exposures","addresses","fallbackBehaviours"],"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.6.pendingChangeRequest.body.oneOf.5.rule.oneOf.6.configuration","typeLabel":"object"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.6.pendingChangeRequest.body.oneOf.5.rule.oneOf.6","typeLabel":"ChainalysisTransactionPrescreening · object"},{"type":"object","title":"EllipticTransactionPrescreening","description":"\n\u003cInfo>\nThis rule can only be used once the Elliptic integration is activated from the Dfns dashboard settings.\n\u003c/Info>\n\nThis rule uses Elliptic KYT for pre-screening outgoing transfers. Upon transfer attempt, we run a synchronous Elliptic wallet analysis of the destination address, and check the returned risk score against the configured threshold, plus any configured risk rules / categories. If at or above the threshold, or if a configured rule / category matched, the policy is triggered.\n\nIt's called \"Pre\"-screening, because the scanned transaction is not on chain yet, it's still a transaction attempt.","required":["kind","configuration"],"properties":{"kind":{"type":"string","enum":["EllipticTransactionPrescreening"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.6.pendingChangeRequest.body.oneOf.5.rule.oneOf.7.kind","typeLabel":"enum\u003cstring>"},"configuration":{"type":"object","properties":{"riskScoreThreshold":{"type":"number","minimum":0,"maximum":10,"description":"Risk score threshold (0-10, decimals allowed). The policy triggers if the Elliptic risk score is at or above the threshold.","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.6.pendingChangeRequest.body.oneOf.5.rule.oneOf.7.configuration.riskScoreThreshold","typeLabel":"number"},"triggeredRules":{"type":"object","properties":{"ruleIds":{"type":"array","items":{"type":"string","format":"uuid","uniqueKey":"\\items.items.[INDEX].oneOf.6.pendingChangeRequest.body.oneOf.5.rule.oneOf.7.configuration.triggeredRules.ruleIds.items.[INDEX]","typeLabel":"string\u003cuuid>"},"description":"IDs of risk rules from your Elliptic risk model. If any of these rules matched the analysis, the policy triggers regardless of the risk score. Leave empty to trigger on the risk score threshold only.","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.6.pendingChangeRequest.body.oneOf.5.rule.oneOf.7.configuration.triggeredRules.ruleIds","typeLabel":"string\u003cuuid>[]"},"categories":{"type":"array","items":{"type":"string","minLength":1,"uniqueKey":"\\items.items.[INDEX].oneOf.6.pendingChangeRequest.body.oneOf.5.rule.oneOf.7.configuration.triggeredRules.categories.items.[INDEX]","typeLabel":"string"},"description":"Elliptic category names (eg. \"Dark Market\"), matched case-insensitively. If a matched risk rule involves any of these categories, the policy triggers regardless of the risk score. Leave empty to trigger on the risk score threshold only.","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.6.pendingChangeRequest.body.oneOf.5.rule.oneOf.7.configuration.triggeredRules.categories","typeLabel":"string[]"}},"required":["ruleIds","categories"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.6.pendingChangeRequest.body.oneOf.5.rule.oneOf.7.configuration.triggeredRules","typeLabel":"object"},"fallbackBehaviours":{"type":"object","properties":{"skipUnscreenableTransaction":{"type":"boolean","description":"skip all wallet requests that cannot be screened (eg. raw signatures)","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.6.pendingChangeRequest.body.oneOf.5.rule.oneOf.7.configuration.fallbackBehaviours.skipUnscreenableTransaction","typeLabel":"boolean"},"skipUnsupportedNetwork":{"type":"boolean","description":"skip requests on a network not supported yet in our Elliptic integration","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.6.pendingChangeRequest.body.oneOf.5.rule.oneOf.7.configuration.fallbackBehaviours.skipUnsupportedNetwork","typeLabel":"boolean"},"skipEllipticFailure":{"type":"boolean","description":"skip any failure of the Elliptic analysis (timeout, rate limiting, any error)","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.6.pendingChangeRequest.body.oneOf.5.rule.oneOf.7.configuration.fallbackBehaviours.skipEllipticFailure","typeLabel":"boolean"}},"required":["skipUnscreenableTransaction","skipUnsupportedNetwork","skipEllipticFailure"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.6.pendingChangeRequest.body.oneOf.5.rule.oneOf.7.configuration.fallbackBehaviours","typeLabel":"object"}},"required":["riskScoreThreshold","triggeredRules","fallbackBehaviours"],"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.6.pendingChangeRequest.body.oneOf.5.rule.oneOf.7.configuration","typeLabel":"object"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.6.pendingChangeRequest.body.oneOf.5.rule.oneOf.7","typeLabel":"EllipticTransactionPrescreening · object"},{"type":"object","title":"GlobalLedgerTransactionPrescreening","description":"This rule uses GlobalLedger KYT for pre-screening outgoing transfers by checking the destination address risk score.\n\nUpon transfer attempt, we will query GlobalLedger's address risk API, and check if the risk score (0-100) is at or above the configured threshold, or if any alerts show up. If so, the policy will be triggered.\n\nIt's called \"Pre\"-screening, because the scanned transaction is not on chain yet, it's still a transaction attempt.","required":["kind","configuration"],"properties":{"kind":{"type":"string","enum":["GlobalLedgerTransactionPrescreening"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.6.pendingChangeRequest.body.oneOf.5.rule.oneOf.8.kind","typeLabel":"enum\u003cstring>"},"configuration":{"type":"object","properties":{"riskScoreThreshold":{"type":"integer","minimum":0,"maximum":100,"description":"Risk score threshold (0-100). Policy triggers if address/transaction risk score >= threshold","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.6.pendingChangeRequest.body.oneOf.5.rule.oneOf.8.configuration.riskScoreThreshold","typeLabel":"integer"},"fallbackBehaviours":{"type":"object","properties":{"skipUnscreenableTransaction":{"type":"boolean","description":"skip all wallet requests that cannot be screened (eg. raw signatures)","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.6.pendingChangeRequest.body.oneOf.5.rule.oneOf.8.configuration.fallbackBehaviours.skipUnscreenableTransaction","typeLabel":"boolean"},"skipUnsupportedNetwork":{"type":"boolean","description":"skip transfer requests to a network not supported yet in our GlobalLedger integration","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.6.pendingChangeRequest.body.oneOf.5.rule.oneOf.8.configuration.fallbackBehaviours.skipUnsupportedNetwork","typeLabel":"boolean"},"skipUnsupportedAsset":{"type":"boolean","description":"skip transfer requests of an asset not supported by our GlobalLedger integration","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.6.pendingChangeRequest.body.oneOf.5.rule.oneOf.8.configuration.fallbackBehaviours.skipUnsupportedAsset","typeLabel":"boolean"},"skipGlobalLedgerFailure":{"type":"boolean","description":"skips any errors from GlobalLedger API request","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.6.pendingChangeRequest.body.oneOf.5.rule.oneOf.8.configuration.fallbackBehaviours.skipGlobalLedgerFailure","typeLabel":"boolean"}},"required":["skipUnscreenableTransaction","skipUnsupportedNetwork","skipUnsupportedAsset","skipGlobalLedgerFailure"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.6.pendingChangeRequest.body.oneOf.5.rule.oneOf.8.configuration.fallbackBehaviours","typeLabel":"object"}},"required":["riskScoreThreshold","fallbackBehaviours"],"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.6.pendingChangeRequest.body.oneOf.5.rule.oneOf.8.configuration","typeLabel":"object"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.6.pendingChangeRequest.body.oneOf.5.rule.oneOf.8","typeLabel":"GlobalLedgerTransactionPrescreening · object"},{"type":"object","title":"TravelRuleTransactionPrescreening","description":"This rule applies a Travel Rule check to outgoing transfers through the vendor selected in `configuration.vendor`: [Notabene](https://docs.dfns.co/integrations/travel-rule/notabene) or Sumsub. It can only be used once that vendor's integration is activated from the Dfns dashboard settings.\n\nIt ***ONLY*** applies to Dfns [Transfer Asset](https://docs.dfns.co/api-reference/wallets/transfer-asset) Api Calls. It is NOT supported for Transfers initiated via the dashboard. Upon transfer attempt with a [TravelRule](https://docs.dfns.co/api-reference/wallets/transfer-asset#body-travel-rule) payload, we call the vendor's APIs on your behalf to validate and submit the travel rule message, then wait for its outcome. With Notabene, Dfns waits for a response from the counterparty (for custodial transfers) or from Notabene (for non-custodial transfers). With Sumsub, Dfns submits a Travel Rule message and waits for Sumsub to report its outcome. In both cases the wait is bounded by `configuration.autoTriggerTimeoutSeconds`, after which the policy's configured action is applied.\n\nThe transfer's `travelRule` payload must be of the kind matching `configuration.vendor` — a mismatch triggers the policy and applies its configured action. A given wallet must be covered by at most one travel-rule policy (of any vendor): if several travel-rule policies apply to the same transfer carrying a `travelRule` payload, it is treated as a misconfiguration and blocked without contacting any vendor. Signatures and transfers without a payload are not affected, since the rule does not apply to them.\n\nIt's called \"Pre\"-screening, because the transaction is not on chain yet, it's still a transaction attempt (before the transaction actually make it on chain).","required":["kind","configuration"],"properties":{"kind":{"type":"string","enum":["TravelRuleTransactionPrescreening"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.6.pendingChangeRequest.body.oneOf.5.rule.oneOf.9.kind","typeLabel":"enum\u003cstring>"},"configuration":{"oneOf":[{"type":"object","title":"TravelRuleNotabeneConfiguration","required":["vendor"],"properties":{"vendor":{"type":"string","enum":["Notabene"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.6.pendingChangeRequest.body.oneOf.5.rule.oneOf.9.configuration.oneOf.0.vendor","typeLabel":"enum\u003cstring>"},"autoTriggerTimeoutSeconds":{"type":"integer","minimum":0,"maximum":2592000,"default":86400,"description":"Seconds to wait for the vendor's verdict before the policy action applies. Maximum 2592000 (30 days). Defaults to 86400 (24 hours).","uniqueKey":"\\items.items.[INDEX].oneOf.6.pendingChangeRequest.body.oneOf.5.rule.oneOf.9.configuration.oneOf.0.autoTriggerTimeoutSeconds","typeLabel":"integer"},"autoClearAfterDeliveredTimeoutSeconds":{"type":"integer","minimum":0,"maximum":2592000,"description":"Seconds after delivery before a still-pending evaluation clears. Maximum 2592000 (30 days).","uniqueKey":"\\items.items.[INDEX].oneOf.6.pendingChangeRequest.body.oneOf.5.rule.oneOf.9.configuration.oneOf.0.autoClearAfterDeliveredTimeoutSeconds","typeLabel":"integer"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.6.pendingChangeRequest.body.oneOf.5.rule.oneOf.9.configuration.oneOf.0","typeLabel":"TravelRuleNotabeneConfiguration · object"},{"type":"object","title":"TravelRuleSumsubConfiguration","required":["vendor"],"properties":{"vendor":{"type":"string","enum":["Sumsub"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.6.pendingChangeRequest.body.oneOf.5.rule.oneOf.9.configuration.oneOf.1.vendor","typeLabel":"enum\u003cstring>"},"autoTriggerTimeoutSeconds":{"type":"integer","minimum":0,"maximum":2592000,"default":86400,"description":"Seconds to wait for the vendor's verdict before the policy action applies. Maximum 2592000 (30 days). Defaults to 86400 (24 hours).","uniqueKey":"\\items.items.[INDEX].oneOf.6.pendingChangeRequest.body.oneOf.5.rule.oneOf.9.configuration.oneOf.1.autoTriggerTimeoutSeconds","typeLabel":"integer"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.6.pendingChangeRequest.body.oneOf.5.rule.oneOf.9.configuration.oneOf.1","typeLabel":"TravelRuleSumsubConfiguration · object"}],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.6.pendingChangeRequest.body.oneOf.5.rule.oneOf.9.configuration","typeLabel":"TravelRuleNotabeneConfiguration · object | TravelRuleSumsubConfiguration · object"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.6.pendingChangeRequest.body.oneOf.5.rule.oneOf.9","typeLabel":"TravelRuleTransactionPrescreening · object"}],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.6.pendingChangeRequest.body.oneOf.5.rule","typeLabel":"AlwaysTrigger · object | TransactionRecipientWhitelist · object | TransactionAmountLimit · object | TransactionAmountLimitNominal · object | TransactionAmountVelocity · object | TransactionCountVelocity · object | ChainalysisTransactionPrescreening · object | EllipticTransactionPrescreening · object | GlobalLedgerTransactionPrescreening · object | TravelRuleTransactionPrescreening · object"},"action":{"oneOf":[{"type":"object","title":"RequestApproval","description":"\nThis action means that activity will first require an Approval process to be completed before it can be executed (or be aborted if someone rejects it during the approval process).\n\nOne or several groups of approvers need to be specified. These groups define who is allowed to approve / reject an activity.\n\nThe activity will only be executed if all approver groups reach their \"quorum\" of approvals. Otherwise, if any one user within any approver group rejects, then the activity is aborted and the call is not executed.\n\nThe example below shows a `RequestApproval` action, configured with one approval group requiring 2 approvals amongst three specific users.\n\n```json\n{\n \"action\": {\n \"kind\": \"RequestApproval\",\n \"autoRejectTimeout\": 60, // minutes\n \"approvalGroups\": [\n {\n \"name\": \"Admins\",\n \"quorum\": 2, // only 2 approvers required in that group \n \"approvers\": {\n \"userId\": {\n \"in\": [\"us-...1\", \"us-...2\", \"us-...3\"],\n }\n }\n }\n ],\n\n }\n}\n```\n\n**Don't lock yourself up**\n\nBy default, users cannot approve an activity they initiated themselves, even if they are in an approval group. To allow this, you must set `initiatorCanApprove: true`.\n\n*Example 1:* For any wallet transfer, a policy is setup to require approval from **1 specific admin user** (eg. the CEO). `initiatorCanApprove` was not set to `true`. If the CEO himself initiates a transfer, no-one can approve his transfer and it's stuck.\n\n*Example 2:* Company has only 3 users. A policy is setup to require approval from **any 3 users** (`quorum: 3`) for any modification of a policy. `initiatorCanApprove` was not set to `true`. In this case, they are locked, and the policy cannot be modified: whoever requests a modification cannot approve, and the policy is therefore always missing one approver. To unlock, they would need to invite a new user and give him the rights to approve as well.\n ","required":["kind","approvalGroups"],"properties":{"kind":{"type":"string","enum":["RequestApproval"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.6.pendingChangeRequest.body.oneOf.5.action.oneOf.0.kind","typeLabel":"enum\u003cstring>"},"approvalGroups":{"type":"array","items":{"type":"object","properties":{"quorum":{"type":"integer","minimum":1,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.6.pendingChangeRequest.body.oneOf.5.action.oneOf.0.approvalGroups.items.[INDEX].quorum","typeLabel":"integer"},"approvers":{"type":"object","properties":{"userId":{"type":"object","properties":{"in":{"type":"array","items":{"type":"string","minLength":1,"uniqueKey":"\\items.items.[INDEX].oneOf.6.pendingChangeRequest.body.oneOf.5.action.oneOf.0.approvalGroups.items.[INDEX].approvers.userId.in.items.[INDEX]","typeLabel":"string"},"minItems":1,"maxItems":100,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.6.pendingChangeRequest.body.oneOf.5.action.oneOf.0.approvalGroups.items.[INDEX].approvers.userId.in","typeLabel":"string[]"}},"required":["in"],"additionalProperties":false,"description":"Users and service accounts who may approve.","uniqueKey":"\\items.items.[INDEX].oneOf.6.pendingChangeRequest.body.oneOf.5.action.oneOf.0.approvalGroups.items.[INDEX].approvers.userId","typeLabel":"object"},"userGroupId":{"type":"object","properties":{"in":{"type":"array","items":{"type":"string","minLength":1,"maxLength":64,"pattern":"^ug-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"User group id.","example":"ug-139tf-f58l8-lsbt6dp47lfsdvgh","uniqueKey":"\\items.items.[INDEX].oneOf.6.pendingChangeRequest.body.oneOf.5.action.oneOf.0.approvalGroups.items.[INDEX].approvers.userGroupId.in.items.[INDEX]","typeLabel":"string"},"minItems":1,"maxItems":100,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.6.pendingChangeRequest.body.oneOf.5.action.oneOf.0.approvalGroups.items.[INDEX].approvers.userGroupId.in","typeLabel":"string[]"}},"required":["in"],"additionalProperties":false,"description":"User groups whose members may approve.","uniqueKey":"\\items.items.[INDEX].oneOf.6.pendingChangeRequest.body.oneOf.5.action.oneOf.0.approvalGroups.items.[INDEX].approvers.userGroupId","typeLabel":"object"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.6.pendingChangeRequest.body.oneOf.5.action.oneOf.0.approvalGroups.items.[INDEX].approvers","typeLabel":"object"},"name":{"type":"string","uniqueKey":"\\items.items.[INDEX].oneOf.6.pendingChangeRequest.body.oneOf.5.action.oneOf.0.approvalGroups.items.[INDEX].name","typeLabel":"string"},"initiatorCanApprove":{"type":"boolean","description":"Whether the initiator of the activity can participate in the approval.","uniqueKey":"\\items.items.[INDEX].oneOf.6.pendingChangeRequest.body.oneOf.5.action.oneOf.0.approvalGroups.items.[INDEX].initiatorCanApprove","typeLabel":"boolean"},"serviceAccountsCanApprove":{"type":"boolean","description":"Whether service accounts can participate in the approval for this group.","uniqueKey":"\\items.items.[INDEX].oneOf.6.pendingChangeRequest.body.oneOf.5.action.oneOf.0.approvalGroups.items.[INDEX].serviceAccountsCanApprove","typeLabel":"boolean"}},"required":["quorum","approvers"],"additionalProperties":false,"uniqueKey":"\\items.items.[INDEX].oneOf.6.pendingChangeRequest.body.oneOf.5.action.oneOf.0.approvalGroups.items.[INDEX]","typeLabel":"object"},"minItems":1,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.6.pendingChangeRequest.body.oneOf.5.action.oneOf.0.approvalGroups","typeLabel":"object[]"},"autoRejectTimeout":{"oneOf":[{"type":"integer","minimum":1,"uniqueKey":"\\items.items.[INDEX].oneOf.6.pendingChangeRequest.body.oneOf.5.action.oneOf.0.autoRejectTimeout.oneOf.0","typeLabel":"integer"},{"type":"null","minimum":1,"uniqueKey":"\\items.items.[INDEX].oneOf.6.pendingChangeRequest.body.oneOf.5.action.oneOf.0.autoRejectTimeout.oneOf.1","typeLabel":"null"}],"uniqueKey":"\\items.items.[INDEX].oneOf.6.pendingChangeRequest.body.oneOf.5.action.oneOf.0.autoRejectTimeout","typeLabel":"integer | null"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.6.pendingChangeRequest.body.oneOf.5.action.oneOf.0","typeLabel":"RequestApproval · object"},{"type":"object","title":"Block","description":"This action means that the activity will be blocked if the policy is triggered.\n\n```json\n{\n \"action\": {\n \"kind\": \"Block\"\n }\n}\n```\n","required":["kind"],"properties":{"kind":{"type":"string","enum":["Block"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.6.pendingChangeRequest.body.oneOf.5.action.oneOf.1.kind","typeLabel":"enum\u003cstring>"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.6.pendingChangeRequest.body.oneOf.5.action.oneOf.1","typeLabel":"Block · object"},{"type":"object","title":"NoAction","description":"\n This action kind means that nothing will happen after policy rule evaluation. It's meant to be used with policy rules \"`ChainalysisTransactionPrescreening`\" or \"`ChainalysisTransactionScreening`\". This action is for when you just want the KYT analysis rule to be run, and then if triggered, those result returned in a `policy.triggered` [Webhook Event](https://docs.dfns.co/api-reference/webhook-events).\n\n```json\n{\n \"action\": {\n \"kind\": \"NoAction\"\n }\n}\n```\n ","required":["kind"],"properties":{"kind":{"type":"string","enum":["NoAction"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.6.pendingChangeRequest.body.oneOf.5.action.oneOf.2.kind","typeLabel":"enum\u003cstring>"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.6.pendingChangeRequest.body.oneOf.5.action.oneOf.2","typeLabel":"NoAction · object"}],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.6.pendingChangeRequest.body.oneOf.5.action","typeLabel":"RequestApproval · object | Block · object | NoAction · object"},"dateCreated":{"type":"string","uniqueKey":"\\items.items.[INDEX].oneOf.6.pendingChangeRequest.body.oneOf.5.dateCreated","typeLabel":"string"},"dateUpdated":{"type":"string","uniqueKey":"\\items.items.[INDEX].oneOf.6.pendingChangeRequest.body.oneOf.5.dateUpdated","typeLabel":"string"},"filters":{"type":"object","properties":{"walletId":{"type":"object","properties":{"in":{"type":"array","items":{"type":"string","minLength":1,"uniqueKey":"\\items.items.[INDEX].oneOf.6.pendingChangeRequest.body.oneOf.5.filters.walletId.in.items.[INDEX]","typeLabel":"string"},"minItems":1,"maxItems":100,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.6.pendingChangeRequest.body.oneOf.5.filters.walletId.in","typeLabel":"string[]"}},"required":["in"],"additionalProperties":false,"uniqueKey":"\\items.items.[INDEX].oneOf.6.pendingChangeRequest.body.oneOf.5.filters.walletId","typeLabel":"object"},"walletTags":{"type":"object","properties":{"hasAny":{"type":"array","items":{"type":"string","minLength":1,"uniqueKey":"\\items.items.[INDEX].oneOf.6.pendingChangeRequest.body.oneOf.5.filters.walletTags.hasAny.items.[INDEX]","typeLabel":"string"},"minItems":1,"maxItems":100,"uniqueKey":"\\items.items.[INDEX].oneOf.6.pendingChangeRequest.body.oneOf.5.filters.walletTags.hasAny","typeLabel":"string[]"},"hasAll":{"type":"array","items":{"type":"string","minLength":1,"uniqueKey":"\\items.items.[INDEX].oneOf.6.pendingChangeRequest.body.oneOf.5.filters.walletTags.hasAll.items.[INDEX]","typeLabel":"string"},"minItems":1,"maxItems":100,"uniqueKey":"\\items.items.[INDEX].oneOf.6.pendingChangeRequest.body.oneOf.5.filters.walletTags.hasAll","typeLabel":"string[]"}},"additionalProperties":false,"uniqueKey":"\\items.items.[INDEX].oneOf.6.pendingChangeRequest.body.oneOf.5.filters.walletTags","typeLabel":"object"},"keyId":{"type":"object","properties":{"in":{"type":"array","items":{"type":"string","minLength":1,"maxLength":64,"pattern":"^key-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"Key id.","example":"key-01snl-t56gb-j8tsok0vn802p80i","uniqueKey":"\\items.items.[INDEX].oneOf.6.pendingChangeRequest.body.oneOf.5.filters.keyId.in.items.[INDEX]","typeLabel":"string"},"minItems":1,"maxItems":100,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.6.pendingChangeRequest.body.oneOf.5.filters.keyId.in","typeLabel":"string[]"}},"required":["in"],"additionalProperties":false,"uniqueKey":"\\items.items.[INDEX].oneOf.6.pendingChangeRequest.body.oneOf.5.filters.keyId","typeLabel":"object"},"keyStoreId":{"type":"object","properties":{"in":{"type":"array","items":{"type":"string","minLength":1,"maxLength":64,"pattern":"^store-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"Key store id.","example":"store-425nf-ebf0a-qq22t6qra51tj8j0","uniqueKey":"\\items.items.[INDEX].oneOf.6.pendingChangeRequest.body.oneOf.5.filters.keyStoreId.in.items.[INDEX]","typeLabel":"string"},"minItems":1,"maxItems":100,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.6.pendingChangeRequest.body.oneOf.5.filters.keyStoreId.in","typeLabel":"string[]"}},"required":["in"],"additionalProperties":false,"uniqueKey":"\\items.items.[INDEX].oneOf.6.pendingChangeRequest.body.oneOf.5.filters.keyStoreId","typeLabel":"object"}},"additionalProperties":false,"uniqueKey":"\\items.items.[INDEX].oneOf.6.pendingChangeRequest.body.oneOf.5.filters","typeLabel":"object"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.6.pendingChangeRequest.body.oneOf.5","typeLabel":"Wallets:Sign · object"},{"type":"object","title":"Wallets:IncomingTransaction","required":["id","name","status","activityKind","rule","action"],"properties":{"id":{"type":"string","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.6.pendingChangeRequest.body.oneOf.6.id","typeLabel":"string"},"name":{"type":"string","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.6.pendingChangeRequest.body.oneOf.6.name","typeLabel":"string"},"status":{"type":"string","enum":["Active","Archived"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.6.pendingChangeRequest.body.oneOf.6.status","typeLabel":"enum\u003cstring>"},"activityKind":{"type":"string","enum":["Wallets:IncomingTransaction"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.6.pendingChangeRequest.body.oneOf.6.activityKind","typeLabel":"enum\u003cstring>"},"rule":{"type":"object","title":"ChainalysisTransactionScreening","description":"\n\u003cInfo>\nThis rule can only be used once the Chainalysis integration is activated from the Dfns dashboard settings. (see more on [Chainalysis](https://docs.dfns.co/integrations/aml-kyt/chainalysis) integration page).\n\u003c/Info>\n\nThis rule can be used on a policy of `activityKind` = `Wallets:IncomingTransaction`, and with the action kind `NoAction`. It's a rule based on Chainalysis KYT integration (Know-Your-Transaction). Upon an incoming transaction detectedby our indexers, we will [register the transfer with Chainalysis](https://docs.chainalysis.com/api/kyt/#registration-register-a-transfer), and fetch the results of the analysis (alerts \u0026 exposures detected). Based on the results, and the configuration of this rule, the policy will be triggered.\n\nThe shape of the rule is almost like the `ChainalysisTransactionPrescreening` rule, expect the the `address` property is not supported.\n\n```json\n{\n \"rule\": {\n \"kind\": \"ChainalysisTransactionPrescreening\",\n \"configuration\": {\n \"alerts\": {\n \"alertLevel\": \"LOW\",\n \"categoryIds\": []\n },\n \"exposures\": {\n \"direct\": {\n \"categoryIds\": []\n }\n },\n \"fallbackBehaviours\": {\n \"skipUnscreenableTransaction\": false,\n \"skipUnsupportedNetwork\": false,\n \"skipUnsupportedAsset\": false,\n \"skipChainalysisFailure\": false\n }\n }\n }\n}\n```\n\n**Configuration**\n\nPlease refer to the configuration for the `ChainalysisTransactionPrescreening` rule.\n","required":["kind","configuration"],"properties":{"kind":{"type":"string","enum":["ChainalysisTransactionScreening"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.6.pendingChangeRequest.body.oneOf.6.rule.kind","typeLabel":"enum\u003cstring>"},"configuration":{"type":"object","properties":{"alerts":{"type":"object","properties":{"alertLevel":{"type":"string","enum":["LOW","MEDIUM","HIGH","SEVERE"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.6.pendingChangeRequest.body.oneOf.6.rule.configuration.alerts.alertLevel","typeLabel":"enum\u003cstring>"},"categoryIds":{"type":"array","items":{"type":"integer","exclusiveMinimum":0,"uniqueKey":"\\items.items.[INDEX].oneOf.6.pendingChangeRequest.body.oneOf.6.rule.configuration.alerts.categoryIds.items.[INDEX]","typeLabel":"integer"},"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.6.pendingChangeRequest.body.oneOf.6.rule.configuration.alerts.categoryIds","typeLabel":"integer[]"}},"required":["alertLevel","categoryIds"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.6.pendingChangeRequest.body.oneOf.6.rule.configuration.alerts","typeLabel":"object"},"exposures":{"type":"object","properties":{"direct":{"type":"object","properties":{"categoryIds":{"type":"array","items":{"type":"integer","exclusiveMinimum":0,"uniqueKey":"\\items.items.[INDEX].oneOf.6.pendingChangeRequest.body.oneOf.6.rule.configuration.exposures.direct.categoryIds.items.[INDEX]","typeLabel":"integer"},"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.6.pendingChangeRequest.body.oneOf.6.rule.configuration.exposures.direct.categoryIds","typeLabel":"integer[]"}},"required":["categoryIds"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.6.pendingChangeRequest.body.oneOf.6.rule.configuration.exposures.direct","typeLabel":"object"}},"required":["direct"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.6.pendingChangeRequest.body.oneOf.6.rule.configuration.exposures","typeLabel":"object"},"fallbackBehaviours":{"type":"object","properties":{"skipUnscreenableTransaction":{"type":"boolean","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.6.pendingChangeRequest.body.oneOf.6.rule.configuration.fallbackBehaviours.skipUnscreenableTransaction","typeLabel":"boolean"},"skipUnsupportedNetwork":{"type":"boolean","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.6.pendingChangeRequest.body.oneOf.6.rule.configuration.fallbackBehaviours.skipUnsupportedNetwork","typeLabel":"boolean"},"skipUnsupportedAsset":{"type":"boolean","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.6.pendingChangeRequest.body.oneOf.6.rule.configuration.fallbackBehaviours.skipUnsupportedAsset","typeLabel":"boolean"},"skipChainalysisFailure":{"type":"boolean","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.6.pendingChangeRequest.body.oneOf.6.rule.configuration.fallbackBehaviours.skipChainalysisFailure","typeLabel":"boolean"}},"required":["skipUnscreenableTransaction","skipUnsupportedNetwork","skipUnsupportedAsset","skipChainalysisFailure"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.6.pendingChangeRequest.body.oneOf.6.rule.configuration.fallbackBehaviours","typeLabel":"object"},"userIdTemplate":{"type":"string","minLength":1,"maxLength":50,"pattern":"^([a-zA-Z0-9_:-]|{wallet\\.id}|{wallet\\.externalId})+$","default":"dfns","description":"**Deprecated** — set `userIdTemplate` on the Chainalysis integration setting instead; when set there, the integration-level template takes precedence over this one.\n\nValue sent to Chainalysis as the \"user ID\". Used by Chainalysis for grouping transaction screenings.\n \nThis template can include variables, included in brackets. The following variables are currently supported: `{wallet.id}` and `{wallet.externalId}`.\nAs an example, if you set `userIdTemplate: \"dfns:{wallet.id}_{wallet.externalId}\"`, when your wallet receives a transaction that gets screened by a Chainalysis policy, the \"user ID\" sent to Chainalysis will be `dfns:wa-xxx_yyy` (`wa-xxx` being the wallet ID, and `yyy` being the wallet external ID).","uniqueKey":"\\items.items.[INDEX].oneOf.6.pendingChangeRequest.body.oneOf.6.rule.configuration.userIdTemplate","typeLabel":"string"}},"required":["alerts","exposures","fallbackBehaviours"],"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.6.pendingChangeRequest.body.oneOf.6.rule.configuration","typeLabel":"object"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.6.pendingChangeRequest.body.oneOf.6.rule","typeLabel":"ChainalysisTransactionScreening · object"},"action":{"type":"object","title":"NoAction","description":"\n This action kind means that nothing will happen after policy rule evaluation. It's meant to be used with policy rules \"`ChainalysisTransactionPrescreening`\" or \"`ChainalysisTransactionScreening`\". This action is for when you just want the KYT analysis rule to be run, and then if triggered, those result returned in a `policy.triggered` [Webhook Event](https://docs.dfns.co/api-reference/webhook-events).\n\n```json\n{\n \"action\": {\n \"kind\": \"NoAction\"\n }\n}\n```\n ","required":["kind"],"properties":{"kind":{"type":"string","enum":["NoAction"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.6.pendingChangeRequest.body.oneOf.6.action.kind","typeLabel":"enum\u003cstring>"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.6.pendingChangeRequest.body.oneOf.6.action","typeLabel":"NoAction · object"},"dateCreated":{"type":"string","uniqueKey":"\\items.items.[INDEX].oneOf.6.pendingChangeRequest.body.oneOf.6.dateCreated","typeLabel":"string"},"dateUpdated":{"type":"string","uniqueKey":"\\items.items.[INDEX].oneOf.6.pendingChangeRequest.body.oneOf.6.dateUpdated","typeLabel":"string"},"filters":{"type":"object","properties":{"walletId":{"type":"object","properties":{"in":{"type":"array","items":{"type":"string","minLength":1,"uniqueKey":"\\items.items.[INDEX].oneOf.6.pendingChangeRequest.body.oneOf.6.filters.walletId.in.items.[INDEX]","typeLabel":"string"},"minItems":1,"maxItems":100,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.6.pendingChangeRequest.body.oneOf.6.filters.walletId.in","typeLabel":"string[]"}},"required":["in"],"additionalProperties":false,"uniqueKey":"\\items.items.[INDEX].oneOf.6.pendingChangeRequest.body.oneOf.6.filters.walletId","typeLabel":"object"},"walletTags":{"type":"object","properties":{"hasAny":{"type":"array","items":{"type":"string","minLength":1,"uniqueKey":"\\items.items.[INDEX].oneOf.6.pendingChangeRequest.body.oneOf.6.filters.walletTags.hasAny.items.[INDEX]","typeLabel":"string"},"minItems":1,"maxItems":100,"uniqueKey":"\\items.items.[INDEX].oneOf.6.pendingChangeRequest.body.oneOf.6.filters.walletTags.hasAny","typeLabel":"string[]"},"hasAll":{"type":"array","items":{"type":"string","minLength":1,"uniqueKey":"\\items.items.[INDEX].oneOf.6.pendingChangeRequest.body.oneOf.6.filters.walletTags.hasAll.items.[INDEX]","typeLabel":"string"},"minItems":1,"maxItems":100,"uniqueKey":"\\items.items.[INDEX].oneOf.6.pendingChangeRequest.body.oneOf.6.filters.walletTags.hasAll","typeLabel":"string[]"}},"additionalProperties":false,"uniqueKey":"\\items.items.[INDEX].oneOf.6.pendingChangeRequest.body.oneOf.6.filters.walletTags","typeLabel":"object"},"keyId":{"type":"object","properties":{"in":{"type":"array","items":{"type":"string","minLength":1,"maxLength":64,"pattern":"^key-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"Key id.","example":"key-01snl-t56gb-j8tsok0vn802p80i","uniqueKey":"\\items.items.[INDEX].oneOf.6.pendingChangeRequest.body.oneOf.6.filters.keyId.in.items.[INDEX]","typeLabel":"string"},"minItems":1,"maxItems":100,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.6.pendingChangeRequest.body.oneOf.6.filters.keyId.in","typeLabel":"string[]"}},"required":["in"],"additionalProperties":false,"uniqueKey":"\\items.items.[INDEX].oneOf.6.pendingChangeRequest.body.oneOf.6.filters.keyId","typeLabel":"object"},"keyStoreId":{"type":"object","properties":{"in":{"type":"array","items":{"type":"string","minLength":1,"maxLength":64,"pattern":"^store-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"Key store id.","example":"store-425nf-ebf0a-qq22t6qra51tj8j0","uniqueKey":"\\items.items.[INDEX].oneOf.6.pendingChangeRequest.body.oneOf.6.filters.keyStoreId.in.items.[INDEX]","typeLabel":"string"},"minItems":1,"maxItems":100,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.6.pendingChangeRequest.body.oneOf.6.filters.keyStoreId.in","typeLabel":"string[]"}},"required":["in"],"additionalProperties":false,"uniqueKey":"\\items.items.[INDEX].oneOf.6.pendingChangeRequest.body.oneOf.6.filters.keyStoreId","typeLabel":"object"}},"additionalProperties":false,"uniqueKey":"\\items.items.[INDEX].oneOf.6.pendingChangeRequest.body.oneOf.6.filters","typeLabel":"object"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.6.pendingChangeRequest.body.oneOf.6","typeLabel":"Wallets:IncomingTransaction · object"},{"type":"object","title":"Vaults:ReleaseQuarantine","required":["id","name","status","activityKind","rule","action"],"properties":{"id":{"type":"string","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.6.pendingChangeRequest.body.oneOf.7.id","typeLabel":"string"},"name":{"type":"string","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.6.pendingChangeRequest.body.oneOf.7.name","typeLabel":"string"},"status":{"type":"string","enum":["Active","Archived"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.6.pendingChangeRequest.body.oneOf.7.status","typeLabel":"enum\u003cstring>"},"activityKind":{"type":"string","enum":["Vaults:ReleaseQuarantine"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.6.pendingChangeRequest.body.oneOf.7.activityKind","typeLabel":"enum\u003cstring>"},"rule":{"oneOf":[{"type":"object","title":"AlwaysTrigger","description":"This rule will always be triggered, meaning that if this rule is defined on a policy, the policy will always trigger the policy action, regardless of the activity details.","required":["kind"],"properties":{"kind":{"type":"string","enum":["AlwaysTrigger"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.6.pendingChangeRequest.body.oneOf.7.rule.oneOf.0.kind","typeLabel":"enum\u003cstring>"},"configuration":{"type":"object","properties":{},"additionalProperties":false,"uniqueKey":"\\items.items.[INDEX].oneOf.6.pendingChangeRequest.body.oneOf.7.rule.oneOf.0.configuration","typeLabel":"object"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.6.pendingChangeRequest.body.oneOf.7.rule.oneOf.0","typeLabel":"AlwaysTrigger · object"},{"type":"object","title":"ChainalysisQuarantineScreening","description":"\n\u003cInfo>\nThis rule can only be used once the Chainalysis integration is activated from the Dfns dashboard settings. (see more on [Chainalysis](https://docs.dfns.co/integrations/aml-kyt/chainalysis) integration page).\n\u003c/Info>\n\nThis rule can be used on a policy of `activityKind` = `Vaults:ReleaseQuarantine`. When a quarantined vault deposit was screened by Chainalysis KYT, the screening result (alerts \u0026 direct exposure) is stored with the quarantine. When a release of the quarantined funds is requested, this rule evaluates that **stored** result — no new Chainalysis call is made. Based on the stored result and the configuration of this rule, the policy will be triggered.\n\nIf the quarantine has **no stored KYT result** (the result was not received yet, the network/asset is not supported by the Chainalysis integration, or screening failed), the rule **always triggers** (fail closed): the release then follows the policy action (approval or block).\n\n```json\n{\n \"rule\": {\n \"kind\": \"ChainalysisQuarantineScreening\",\n \"configuration\": {\n \"alerts\": {\n \"alertLevel\": \"LOW\",\n \"categoryIds\": []\n },\n \"exposures\": {\n \"direct\": {\n \"categoryIds\": []\n }\n }\n }\n }\n}\n```\n\n**Configuration**\n\n| Property | Type | Description |\n| --- | --- | --- |\n| `alerts`\u003cbr>\u003cbr>`.alertLevel`* | `string` | Minimum alert level above which the rule should trigger, if any alert was returned in the stored Chainalysis results. Can be `LOW`, `MEDIUM`, `HIGH`, or `SEVERE` |\n| `alerts`\u003cbr>\u003cbr>`.categoryIds`* | list of integers | List of Chainalysis category IDs (see [here](https://docs.chainalysis.com/api/kyt/#categories)). If you leave this list empty, alerts of any category will trigger the rule. Otherwise, if you only want the rule to trigger on specific categories, you can specify some in the list. |\n| `exposures`\u003cbr>\u003cbr>`.direct`\u003cbr>\u003cbr>`.categoryIds`* | list of integers | List of Chainalysis category IDs (see [here](https://docs.chainalysis.com/api/kyt/#categories)). If you leave this list empty, a direct exposure of any category in the stored results will trigger the rule. Otherwise, if you only want the rule to trigger on specific categories, you can specify some in the list. |\n","required":["kind","configuration"],"properties":{"kind":{"type":"string","enum":["ChainalysisQuarantineScreening"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.6.pendingChangeRequest.body.oneOf.7.rule.oneOf.1.kind","typeLabel":"enum\u003cstring>"},"configuration":{"type":"object","properties":{"alerts":{"type":"object","properties":{"alertLevel":{"type":"string","enum":["LOW","MEDIUM","HIGH","SEVERE"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.6.pendingChangeRequest.body.oneOf.7.rule.oneOf.1.configuration.alerts.alertLevel","typeLabel":"enum\u003cstring>"},"categoryIds":{"type":"array","items":{"type":"integer","exclusiveMinimum":0,"uniqueKey":"\\items.items.[INDEX].oneOf.6.pendingChangeRequest.body.oneOf.7.rule.oneOf.1.configuration.alerts.categoryIds.items.[INDEX]","typeLabel":"integer"},"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.6.pendingChangeRequest.body.oneOf.7.rule.oneOf.1.configuration.alerts.categoryIds","typeLabel":"integer[]"}},"required":["alertLevel","categoryIds"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.6.pendingChangeRequest.body.oneOf.7.rule.oneOf.1.configuration.alerts","typeLabel":"object"},"exposures":{"type":"object","properties":{"direct":{"type":"object","properties":{"categoryIds":{"type":"array","items":{"type":"integer","exclusiveMinimum":0,"uniqueKey":"\\items.items.[INDEX].oneOf.6.pendingChangeRequest.body.oneOf.7.rule.oneOf.1.configuration.exposures.direct.categoryIds.items.[INDEX]","typeLabel":"integer"},"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.6.pendingChangeRequest.body.oneOf.7.rule.oneOf.1.configuration.exposures.direct.categoryIds","typeLabel":"integer[]"}},"required":["categoryIds"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.6.pendingChangeRequest.body.oneOf.7.rule.oneOf.1.configuration.exposures.direct","typeLabel":"object"}},"required":["direct"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.6.pendingChangeRequest.body.oneOf.7.rule.oneOf.1.configuration.exposures","typeLabel":"object"}},"required":["alerts","exposures"],"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.6.pendingChangeRequest.body.oneOf.7.rule.oneOf.1.configuration","typeLabel":"object"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.6.pendingChangeRequest.body.oneOf.7.rule.oneOf.1","typeLabel":"ChainalysisQuarantineScreening · object"}],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.6.pendingChangeRequest.body.oneOf.7.rule","typeLabel":"AlwaysTrigger · object | ChainalysisQuarantineScreening · object"},"action":{"oneOf":[{"type":"object","title":"RequestApproval","description":"\nThis action means that activity will first require an Approval process to be completed before it can be executed (or be aborted if someone rejects it during the approval process).\n\nOne or several groups of approvers need to be specified. These groups define who is allowed to approve / reject an activity.\n\nThe activity will only be executed if all approver groups reach their \"quorum\" of approvals. Otherwise, if any one user within any approver group rejects, then the activity is aborted and the call is not executed.\n\nThe example below shows a `RequestApproval` action, configured with one approval group requiring 2 approvals amongst three specific users.\n\n```json\n{\n \"action\": {\n \"kind\": \"RequestApproval\",\n \"autoRejectTimeout\": 60, // minutes\n \"approvalGroups\": [\n {\n \"name\": \"Admins\",\n \"quorum\": 2, // only 2 approvers required in that group \n \"approvers\": {\n \"userId\": {\n \"in\": [\"us-...1\", \"us-...2\", \"us-...3\"],\n }\n }\n }\n ],\n\n }\n}\n```\n\n**Don't lock yourself up**\n\nBy default, users cannot approve an activity they initiated themselves, even if they are in an approval group. To allow this, you must set `initiatorCanApprove: true`.\n\n*Example 1:* For any wallet transfer, a policy is setup to require approval from **1 specific admin user** (eg. the CEO). `initiatorCanApprove` was not set to `true`. If the CEO himself initiates a transfer, no-one can approve his transfer and it's stuck.\n\n*Example 2:* Company has only 3 users. A policy is setup to require approval from **any 3 users** (`quorum: 3`) for any modification of a policy. `initiatorCanApprove` was not set to `true`. In this case, they are locked, and the policy cannot be modified: whoever requests a modification cannot approve, and the policy is therefore always missing one approver. To unlock, they would need to invite a new user and give him the rights to approve as well.\n ","required":["kind","approvalGroups"],"properties":{"kind":{"type":"string","enum":["RequestApproval"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.6.pendingChangeRequest.body.oneOf.7.action.oneOf.0.kind","typeLabel":"enum\u003cstring>"},"approvalGroups":{"type":"array","items":{"type":"object","properties":{"quorum":{"type":"integer","minimum":1,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.6.pendingChangeRequest.body.oneOf.7.action.oneOf.0.approvalGroups.items.[INDEX].quorum","typeLabel":"integer"},"approvers":{"type":"object","properties":{"userId":{"type":"object","properties":{"in":{"type":"array","items":{"type":"string","minLength":1,"uniqueKey":"\\items.items.[INDEX].oneOf.6.pendingChangeRequest.body.oneOf.7.action.oneOf.0.approvalGroups.items.[INDEX].approvers.userId.in.items.[INDEX]","typeLabel":"string"},"minItems":1,"maxItems":100,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.6.pendingChangeRequest.body.oneOf.7.action.oneOf.0.approvalGroups.items.[INDEX].approvers.userId.in","typeLabel":"string[]"}},"required":["in"],"additionalProperties":false,"description":"Users and service accounts who may approve.","uniqueKey":"\\items.items.[INDEX].oneOf.6.pendingChangeRequest.body.oneOf.7.action.oneOf.0.approvalGroups.items.[INDEX].approvers.userId","typeLabel":"object"},"userGroupId":{"type":"object","properties":{"in":{"type":"array","items":{"type":"string","minLength":1,"maxLength":64,"pattern":"^ug-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"User group id.","example":"ug-139tf-f58l8-lsbt6dp47lfsdvgh","uniqueKey":"\\items.items.[INDEX].oneOf.6.pendingChangeRequest.body.oneOf.7.action.oneOf.0.approvalGroups.items.[INDEX].approvers.userGroupId.in.items.[INDEX]","typeLabel":"string"},"minItems":1,"maxItems":100,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.6.pendingChangeRequest.body.oneOf.7.action.oneOf.0.approvalGroups.items.[INDEX].approvers.userGroupId.in","typeLabel":"string[]"}},"required":["in"],"additionalProperties":false,"description":"User groups whose members may approve.","uniqueKey":"\\items.items.[INDEX].oneOf.6.pendingChangeRequest.body.oneOf.7.action.oneOf.0.approvalGroups.items.[INDEX].approvers.userGroupId","typeLabel":"object"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.6.pendingChangeRequest.body.oneOf.7.action.oneOf.0.approvalGroups.items.[INDEX].approvers","typeLabel":"object"},"name":{"type":"string","uniqueKey":"\\items.items.[INDEX].oneOf.6.pendingChangeRequest.body.oneOf.7.action.oneOf.0.approvalGroups.items.[INDEX].name","typeLabel":"string"},"initiatorCanApprove":{"type":"boolean","description":"Whether the initiator of the activity can participate in the approval.","uniqueKey":"\\items.items.[INDEX].oneOf.6.pendingChangeRequest.body.oneOf.7.action.oneOf.0.approvalGroups.items.[INDEX].initiatorCanApprove","typeLabel":"boolean"},"serviceAccountsCanApprove":{"type":"boolean","description":"Whether service accounts can participate in the approval for this group.","uniqueKey":"\\items.items.[INDEX].oneOf.6.pendingChangeRequest.body.oneOf.7.action.oneOf.0.approvalGroups.items.[INDEX].serviceAccountsCanApprove","typeLabel":"boolean"}},"required":["quorum","approvers"],"additionalProperties":false,"uniqueKey":"\\items.items.[INDEX].oneOf.6.pendingChangeRequest.body.oneOf.7.action.oneOf.0.approvalGroups.items.[INDEX]","typeLabel":"object"},"minItems":1,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.6.pendingChangeRequest.body.oneOf.7.action.oneOf.0.approvalGroups","typeLabel":"object[]"},"autoRejectTimeout":{"oneOf":[{"type":"integer","minimum":1,"uniqueKey":"\\items.items.[INDEX].oneOf.6.pendingChangeRequest.body.oneOf.7.action.oneOf.0.autoRejectTimeout.oneOf.0","typeLabel":"integer"},{"type":"null","minimum":1,"uniqueKey":"\\items.items.[INDEX].oneOf.6.pendingChangeRequest.body.oneOf.7.action.oneOf.0.autoRejectTimeout.oneOf.1","typeLabel":"null"}],"uniqueKey":"\\items.items.[INDEX].oneOf.6.pendingChangeRequest.body.oneOf.7.action.oneOf.0.autoRejectTimeout","typeLabel":"integer | null"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.6.pendingChangeRequest.body.oneOf.7.action.oneOf.0","typeLabel":"RequestApproval · object"},{"type":"object","title":"Block","description":"This action means that the activity will be blocked if the policy is triggered.\n\n```json\n{\n \"action\": {\n \"kind\": \"Block\"\n }\n}\n```\n","required":["kind"],"properties":{"kind":{"type":"string","enum":["Block"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.6.pendingChangeRequest.body.oneOf.7.action.oneOf.1.kind","typeLabel":"enum\u003cstring>"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.6.pendingChangeRequest.body.oneOf.7.action.oneOf.1","typeLabel":"Block · object"}],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.6.pendingChangeRequest.body.oneOf.7.action","typeLabel":"RequestApproval · object | Block · object"},"dateCreated":{"type":"string","uniqueKey":"\\items.items.[INDEX].oneOf.6.pendingChangeRequest.body.oneOf.7.dateCreated","typeLabel":"string"},"dateUpdated":{"type":"string","uniqueKey":"\\items.items.[INDEX].oneOf.6.pendingChangeRequest.body.oneOf.7.dateUpdated","typeLabel":"string"},"filters":{"type":"object","properties":{"vaultId":{"type":"object","properties":{"in":{"type":"array","items":{"type":"string","minLength":1,"uniqueKey":"\\items.items.[INDEX].oneOf.6.pendingChangeRequest.body.oneOf.7.filters.vaultId.in.items.[INDEX]","typeLabel":"string"},"minItems":1,"maxItems":100,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.6.pendingChangeRequest.body.oneOf.7.filters.vaultId.in","typeLabel":"string[]"}},"required":["in"],"additionalProperties":false,"uniqueKey":"\\items.items.[INDEX].oneOf.6.pendingChangeRequest.body.oneOf.7.filters.vaultId","typeLabel":"object"},"vaultTags":{"type":"object","properties":{"hasAny":{"type":"array","items":{"type":"string","minLength":1,"uniqueKey":"\\items.items.[INDEX].oneOf.6.pendingChangeRequest.body.oneOf.7.filters.vaultTags.hasAny.items.[INDEX]","typeLabel":"string"},"minItems":1,"maxItems":100,"uniqueKey":"\\items.items.[INDEX].oneOf.6.pendingChangeRequest.body.oneOf.7.filters.vaultTags.hasAny","typeLabel":"string[]"},"hasAll":{"type":"array","items":{"type":"string","minLength":1,"uniqueKey":"\\items.items.[INDEX].oneOf.6.pendingChangeRequest.body.oneOf.7.filters.vaultTags.hasAll.items.[INDEX]","typeLabel":"string"},"minItems":1,"maxItems":100,"uniqueKey":"\\items.items.[INDEX].oneOf.6.pendingChangeRequest.body.oneOf.7.filters.vaultTags.hasAll","typeLabel":"string[]"}},"additionalProperties":false,"uniqueKey":"\\items.items.[INDEX].oneOf.6.pendingChangeRequest.body.oneOf.7.filters.vaultTags","typeLabel":"object"}},"additionalProperties":false,"uniqueKey":"\\items.items.[INDEX].oneOf.6.pendingChangeRequest.body.oneOf.7.filters","typeLabel":"object"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.6.pendingChangeRequest.body.oneOf.7","typeLabel":"Vaults:ReleaseQuarantine · object"},{"type":"object","title":"Vaults:CreateLock","required":["id","name","status","activityKind","rule","action"],"properties":{"id":{"type":"string","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.6.pendingChangeRequest.body.oneOf.8.id","typeLabel":"string"},"name":{"type":"string","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.6.pendingChangeRequest.body.oneOf.8.name","typeLabel":"string"},"status":{"type":"string","enum":["Active","Archived"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.6.pendingChangeRequest.body.oneOf.8.status","typeLabel":"enum\u003cstring>"},"activityKind":{"type":"string","enum":["Vaults:CreateLock"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.6.pendingChangeRequest.body.oneOf.8.activityKind","typeLabel":"enum\u003cstring>"},"rule":{"type":"object","title":"AlwaysTrigger","description":"This rule will always be triggered, meaning that if this rule is defined on a policy, the policy will always trigger the policy action, regardless of the activity details.","required":["kind"],"properties":{"kind":{"type":"string","enum":["AlwaysTrigger"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.6.pendingChangeRequest.body.oneOf.8.rule.kind","typeLabel":"enum\u003cstring>"},"configuration":{"type":"object","properties":{},"additionalProperties":false,"uniqueKey":"\\items.items.[INDEX].oneOf.6.pendingChangeRequest.body.oneOf.8.rule.configuration","typeLabel":"object"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.6.pendingChangeRequest.body.oneOf.8.rule","typeLabel":"AlwaysTrigger · object"},"action":{"oneOf":[{"type":"object","title":"RequestApproval","description":"\nThis action means that activity will first require an Approval process to be completed before it can be executed (or be aborted if someone rejects it during the approval process).\n\nOne or several groups of approvers need to be specified. These groups define who is allowed to approve / reject an activity.\n\nThe activity will only be executed if all approver groups reach their \"quorum\" of approvals. Otherwise, if any one user within any approver group rejects, then the activity is aborted and the call is not executed.\n\nThe example below shows a `RequestApproval` action, configured with one approval group requiring 2 approvals amongst three specific users.\n\n```json\n{\n \"action\": {\n \"kind\": \"RequestApproval\",\n \"autoRejectTimeout\": 60, // minutes\n \"approvalGroups\": [\n {\n \"name\": \"Admins\",\n \"quorum\": 2, // only 2 approvers required in that group \n \"approvers\": {\n \"userId\": {\n \"in\": [\"us-...1\", \"us-...2\", \"us-...3\"],\n }\n }\n }\n ],\n\n }\n}\n```\n\n**Don't lock yourself up**\n\nBy default, users cannot approve an activity they initiated themselves, even if they are in an approval group. To allow this, you must set `initiatorCanApprove: true`.\n\n*Example 1:* For any wallet transfer, a policy is setup to require approval from **1 specific admin user** (eg. the CEO). `initiatorCanApprove` was not set to `true`. If the CEO himself initiates a transfer, no-one can approve his transfer and it's stuck.\n\n*Example 2:* Company has only 3 users. A policy is setup to require approval from **any 3 users** (`quorum: 3`) for any modification of a policy. `initiatorCanApprove` was not set to `true`. In this case, they are locked, and the policy cannot be modified: whoever requests a modification cannot approve, and the policy is therefore always missing one approver. To unlock, they would need to invite a new user and give him the rights to approve as well.\n ","required":["kind","approvalGroups"],"properties":{"kind":{"type":"string","enum":["RequestApproval"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.6.pendingChangeRequest.body.oneOf.8.action.oneOf.0.kind","typeLabel":"enum\u003cstring>"},"approvalGroups":{"type":"array","items":{"type":"object","properties":{"quorum":{"type":"integer","minimum":1,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.6.pendingChangeRequest.body.oneOf.8.action.oneOf.0.approvalGroups.items.[INDEX].quorum","typeLabel":"integer"},"approvers":{"type":"object","properties":{"userId":{"type":"object","properties":{"in":{"type":"array","items":{"type":"string","minLength":1,"uniqueKey":"\\items.items.[INDEX].oneOf.6.pendingChangeRequest.body.oneOf.8.action.oneOf.0.approvalGroups.items.[INDEX].approvers.userId.in.items.[INDEX]","typeLabel":"string"},"minItems":1,"maxItems":100,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.6.pendingChangeRequest.body.oneOf.8.action.oneOf.0.approvalGroups.items.[INDEX].approvers.userId.in","typeLabel":"string[]"}},"required":["in"],"additionalProperties":false,"description":"Users and service accounts who may approve.","uniqueKey":"\\items.items.[INDEX].oneOf.6.pendingChangeRequest.body.oneOf.8.action.oneOf.0.approvalGroups.items.[INDEX].approvers.userId","typeLabel":"object"},"userGroupId":{"type":"object","properties":{"in":{"type":"array","items":{"type":"string","minLength":1,"maxLength":64,"pattern":"^ug-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"User group id.","example":"ug-139tf-f58l8-lsbt6dp47lfsdvgh","uniqueKey":"\\items.items.[INDEX].oneOf.6.pendingChangeRequest.body.oneOf.8.action.oneOf.0.approvalGroups.items.[INDEX].approvers.userGroupId.in.items.[INDEX]","typeLabel":"string"},"minItems":1,"maxItems":100,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.6.pendingChangeRequest.body.oneOf.8.action.oneOf.0.approvalGroups.items.[INDEX].approvers.userGroupId.in","typeLabel":"string[]"}},"required":["in"],"additionalProperties":false,"description":"User groups whose members may approve.","uniqueKey":"\\items.items.[INDEX].oneOf.6.pendingChangeRequest.body.oneOf.8.action.oneOf.0.approvalGroups.items.[INDEX].approvers.userGroupId","typeLabel":"object"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.6.pendingChangeRequest.body.oneOf.8.action.oneOf.0.approvalGroups.items.[INDEX].approvers","typeLabel":"object"},"name":{"type":"string","uniqueKey":"\\items.items.[INDEX].oneOf.6.pendingChangeRequest.body.oneOf.8.action.oneOf.0.approvalGroups.items.[INDEX].name","typeLabel":"string"},"initiatorCanApprove":{"type":"boolean","description":"Whether the initiator of the activity can participate in the approval.","uniqueKey":"\\items.items.[INDEX].oneOf.6.pendingChangeRequest.body.oneOf.8.action.oneOf.0.approvalGroups.items.[INDEX].initiatorCanApprove","typeLabel":"boolean"},"serviceAccountsCanApprove":{"type":"boolean","description":"Whether service accounts can participate in the approval for this group.","uniqueKey":"\\items.items.[INDEX].oneOf.6.pendingChangeRequest.body.oneOf.8.action.oneOf.0.approvalGroups.items.[INDEX].serviceAccountsCanApprove","typeLabel":"boolean"}},"required":["quorum","approvers"],"additionalProperties":false,"uniqueKey":"\\items.items.[INDEX].oneOf.6.pendingChangeRequest.body.oneOf.8.action.oneOf.0.approvalGroups.items.[INDEX]","typeLabel":"object"},"minItems":1,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.6.pendingChangeRequest.body.oneOf.8.action.oneOf.0.approvalGroups","typeLabel":"object[]"},"autoRejectTimeout":{"oneOf":[{"type":"integer","minimum":1,"uniqueKey":"\\items.items.[INDEX].oneOf.6.pendingChangeRequest.body.oneOf.8.action.oneOf.0.autoRejectTimeout.oneOf.0","typeLabel":"integer"},{"type":"null","minimum":1,"uniqueKey":"\\items.items.[INDEX].oneOf.6.pendingChangeRequest.body.oneOf.8.action.oneOf.0.autoRejectTimeout.oneOf.1","typeLabel":"null"}],"uniqueKey":"\\items.items.[INDEX].oneOf.6.pendingChangeRequest.body.oneOf.8.action.oneOf.0.autoRejectTimeout","typeLabel":"integer | null"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.6.pendingChangeRequest.body.oneOf.8.action.oneOf.0","typeLabel":"RequestApproval · object"},{"type":"object","title":"Block","description":"This action means that the activity will be blocked if the policy is triggered.\n\n```json\n{\n \"action\": {\n \"kind\": \"Block\"\n }\n}\n```\n","required":["kind"],"properties":{"kind":{"type":"string","enum":["Block"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.6.pendingChangeRequest.body.oneOf.8.action.oneOf.1.kind","typeLabel":"enum\u003cstring>"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.6.pendingChangeRequest.body.oneOf.8.action.oneOf.1","typeLabel":"Block · object"}],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.6.pendingChangeRequest.body.oneOf.8.action","typeLabel":"RequestApproval · object | Block · object"},"dateCreated":{"type":"string","uniqueKey":"\\items.items.[INDEX].oneOf.6.pendingChangeRequest.body.oneOf.8.dateCreated","typeLabel":"string"},"dateUpdated":{"type":"string","uniqueKey":"\\items.items.[INDEX].oneOf.6.pendingChangeRequest.body.oneOf.8.dateUpdated","typeLabel":"string"},"filters":{"type":"object","properties":{"vaultId":{"type":"object","properties":{"in":{"type":"array","items":{"type":"string","minLength":1,"uniqueKey":"\\items.items.[INDEX].oneOf.6.pendingChangeRequest.body.oneOf.8.filters.vaultId.in.items.[INDEX]","typeLabel":"string"},"minItems":1,"maxItems":100,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.6.pendingChangeRequest.body.oneOf.8.filters.vaultId.in","typeLabel":"string[]"}},"required":["in"],"additionalProperties":false,"uniqueKey":"\\items.items.[INDEX].oneOf.6.pendingChangeRequest.body.oneOf.8.filters.vaultId","typeLabel":"object"},"vaultTags":{"type":"object","properties":{"hasAny":{"type":"array","items":{"type":"string","minLength":1,"uniqueKey":"\\items.items.[INDEX].oneOf.6.pendingChangeRequest.body.oneOf.8.filters.vaultTags.hasAny.items.[INDEX]","typeLabel":"string"},"minItems":1,"maxItems":100,"uniqueKey":"\\items.items.[INDEX].oneOf.6.pendingChangeRequest.body.oneOf.8.filters.vaultTags.hasAny","typeLabel":"string[]"},"hasAll":{"type":"array","items":{"type":"string","minLength":1,"uniqueKey":"\\items.items.[INDEX].oneOf.6.pendingChangeRequest.body.oneOf.8.filters.vaultTags.hasAll.items.[INDEX]","typeLabel":"string"},"minItems":1,"maxItems":100,"uniqueKey":"\\items.items.[INDEX].oneOf.6.pendingChangeRequest.body.oneOf.8.filters.vaultTags.hasAll","typeLabel":"string[]"}},"additionalProperties":false,"uniqueKey":"\\items.items.[INDEX].oneOf.6.pendingChangeRequest.body.oneOf.8.filters.vaultTags","typeLabel":"object"}},"additionalProperties":false,"uniqueKey":"\\items.items.[INDEX].oneOf.6.pendingChangeRequest.body.oneOf.8.filters","typeLabel":"object"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.6.pendingChangeRequest.body.oneOf.8","typeLabel":"Vaults:CreateLock · object"},{"type":"object","title":"Vaults:ReplaceLock","required":["id","name","status","activityKind","rule","action"],"properties":{"id":{"type":"string","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.6.pendingChangeRequest.body.oneOf.9.id","typeLabel":"string"},"name":{"type":"string","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.6.pendingChangeRequest.body.oneOf.9.name","typeLabel":"string"},"status":{"type":"string","enum":["Active","Archived"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.6.pendingChangeRequest.body.oneOf.9.status","typeLabel":"enum\u003cstring>"},"activityKind":{"type":"string","enum":["Vaults:ReplaceLock"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.6.pendingChangeRequest.body.oneOf.9.activityKind","typeLabel":"enum\u003cstring>"},"rule":{"type":"object","title":"AlwaysTrigger","description":"This rule will always be triggered, meaning that if this rule is defined on a policy, the policy will always trigger the policy action, regardless of the activity details.","required":["kind"],"properties":{"kind":{"type":"string","enum":["AlwaysTrigger"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.6.pendingChangeRequest.body.oneOf.9.rule.kind","typeLabel":"enum\u003cstring>"},"configuration":{"type":"object","properties":{},"additionalProperties":false,"uniqueKey":"\\items.items.[INDEX].oneOf.6.pendingChangeRequest.body.oneOf.9.rule.configuration","typeLabel":"object"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.6.pendingChangeRequest.body.oneOf.9.rule","typeLabel":"AlwaysTrigger · object"},"action":{"oneOf":[{"type":"object","title":"RequestApproval","description":"\nThis action means that activity will first require an Approval process to be completed before it can be executed (or be aborted if someone rejects it during the approval process).\n\nOne or several groups of approvers need to be specified. These groups define who is allowed to approve / reject an activity.\n\nThe activity will only be executed if all approver groups reach their \"quorum\" of approvals. Otherwise, if any one user within any approver group rejects, then the activity is aborted and the call is not executed.\n\nThe example below shows a `RequestApproval` action, configured with one approval group requiring 2 approvals amongst three specific users.\n\n```json\n{\n \"action\": {\n \"kind\": \"RequestApproval\",\n \"autoRejectTimeout\": 60, // minutes\n \"approvalGroups\": [\n {\n \"name\": \"Admins\",\n \"quorum\": 2, // only 2 approvers required in that group \n \"approvers\": {\n \"userId\": {\n \"in\": [\"us-...1\", \"us-...2\", \"us-...3\"],\n }\n }\n }\n ],\n\n }\n}\n```\n\n**Don't lock yourself up**\n\nBy default, users cannot approve an activity they initiated themselves, even if they are in an approval group. To allow this, you must set `initiatorCanApprove: true`.\n\n*Example 1:* For any wallet transfer, a policy is setup to require approval from **1 specific admin user** (eg. the CEO). `initiatorCanApprove` was not set to `true`. If the CEO himself initiates a transfer, no-one can approve his transfer and it's stuck.\n\n*Example 2:* Company has only 3 users. A policy is setup to require approval from **any 3 users** (`quorum: 3`) for any modification of a policy. `initiatorCanApprove` was not set to `true`. In this case, they are locked, and the policy cannot be modified: whoever requests a modification cannot approve, and the policy is therefore always missing one approver. To unlock, they would need to invite a new user and give him the rights to approve as well.\n ","required":["kind","approvalGroups"],"properties":{"kind":{"type":"string","enum":["RequestApproval"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.6.pendingChangeRequest.body.oneOf.9.action.oneOf.0.kind","typeLabel":"enum\u003cstring>"},"approvalGroups":{"type":"array","items":{"type":"object","properties":{"quorum":{"type":"integer","minimum":1,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.6.pendingChangeRequest.body.oneOf.9.action.oneOf.0.approvalGroups.items.[INDEX].quorum","typeLabel":"integer"},"approvers":{"type":"object","properties":{"userId":{"type":"object","properties":{"in":{"type":"array","items":{"type":"string","minLength":1,"uniqueKey":"\\items.items.[INDEX].oneOf.6.pendingChangeRequest.body.oneOf.9.action.oneOf.0.approvalGroups.items.[INDEX].approvers.userId.in.items.[INDEX]","typeLabel":"string"},"minItems":1,"maxItems":100,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.6.pendingChangeRequest.body.oneOf.9.action.oneOf.0.approvalGroups.items.[INDEX].approvers.userId.in","typeLabel":"string[]"}},"required":["in"],"additionalProperties":false,"description":"Users and service accounts who may approve.","uniqueKey":"\\items.items.[INDEX].oneOf.6.pendingChangeRequest.body.oneOf.9.action.oneOf.0.approvalGroups.items.[INDEX].approvers.userId","typeLabel":"object"},"userGroupId":{"type":"object","properties":{"in":{"type":"array","items":{"type":"string","minLength":1,"maxLength":64,"pattern":"^ug-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"User group id.","example":"ug-139tf-f58l8-lsbt6dp47lfsdvgh","uniqueKey":"\\items.items.[INDEX].oneOf.6.pendingChangeRequest.body.oneOf.9.action.oneOf.0.approvalGroups.items.[INDEX].approvers.userGroupId.in.items.[INDEX]","typeLabel":"string"},"minItems":1,"maxItems":100,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.6.pendingChangeRequest.body.oneOf.9.action.oneOf.0.approvalGroups.items.[INDEX].approvers.userGroupId.in","typeLabel":"string[]"}},"required":["in"],"additionalProperties":false,"description":"User groups whose members may approve.","uniqueKey":"\\items.items.[INDEX].oneOf.6.pendingChangeRequest.body.oneOf.9.action.oneOf.0.approvalGroups.items.[INDEX].approvers.userGroupId","typeLabel":"object"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.6.pendingChangeRequest.body.oneOf.9.action.oneOf.0.approvalGroups.items.[INDEX].approvers","typeLabel":"object"},"name":{"type":"string","uniqueKey":"\\items.items.[INDEX].oneOf.6.pendingChangeRequest.body.oneOf.9.action.oneOf.0.approvalGroups.items.[INDEX].name","typeLabel":"string"},"initiatorCanApprove":{"type":"boolean","description":"Whether the initiator of the activity can participate in the approval.","uniqueKey":"\\items.items.[INDEX].oneOf.6.pendingChangeRequest.body.oneOf.9.action.oneOf.0.approvalGroups.items.[INDEX].initiatorCanApprove","typeLabel":"boolean"},"serviceAccountsCanApprove":{"type":"boolean","description":"Whether service accounts can participate in the approval for this group.","uniqueKey":"\\items.items.[INDEX].oneOf.6.pendingChangeRequest.body.oneOf.9.action.oneOf.0.approvalGroups.items.[INDEX].serviceAccountsCanApprove","typeLabel":"boolean"}},"required":["quorum","approvers"],"additionalProperties":false,"uniqueKey":"\\items.items.[INDEX].oneOf.6.pendingChangeRequest.body.oneOf.9.action.oneOf.0.approvalGroups.items.[INDEX]","typeLabel":"object"},"minItems":1,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.6.pendingChangeRequest.body.oneOf.9.action.oneOf.0.approvalGroups","typeLabel":"object[]"},"autoRejectTimeout":{"oneOf":[{"type":"integer","minimum":1,"uniqueKey":"\\items.items.[INDEX].oneOf.6.pendingChangeRequest.body.oneOf.9.action.oneOf.0.autoRejectTimeout.oneOf.0","typeLabel":"integer"},{"type":"null","minimum":1,"uniqueKey":"\\items.items.[INDEX].oneOf.6.pendingChangeRequest.body.oneOf.9.action.oneOf.0.autoRejectTimeout.oneOf.1","typeLabel":"null"}],"uniqueKey":"\\items.items.[INDEX].oneOf.6.pendingChangeRequest.body.oneOf.9.action.oneOf.0.autoRejectTimeout","typeLabel":"integer | null"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.6.pendingChangeRequest.body.oneOf.9.action.oneOf.0","typeLabel":"RequestApproval · object"},{"type":"object","title":"Block","description":"This action means that the activity will be blocked if the policy is triggered.\n\n```json\n{\n \"action\": {\n \"kind\": \"Block\"\n }\n}\n```\n","required":["kind"],"properties":{"kind":{"type":"string","enum":["Block"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.6.pendingChangeRequest.body.oneOf.9.action.oneOf.1.kind","typeLabel":"enum\u003cstring>"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.6.pendingChangeRequest.body.oneOf.9.action.oneOf.1","typeLabel":"Block · object"}],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.6.pendingChangeRequest.body.oneOf.9.action","typeLabel":"RequestApproval · object | Block · object"},"dateCreated":{"type":"string","uniqueKey":"\\items.items.[INDEX].oneOf.6.pendingChangeRequest.body.oneOf.9.dateCreated","typeLabel":"string"},"dateUpdated":{"type":"string","uniqueKey":"\\items.items.[INDEX].oneOf.6.pendingChangeRequest.body.oneOf.9.dateUpdated","typeLabel":"string"},"filters":{"type":"object","properties":{"vaultId":{"type":"object","properties":{"in":{"type":"array","items":{"type":"string","minLength":1,"uniqueKey":"\\items.items.[INDEX].oneOf.6.pendingChangeRequest.body.oneOf.9.filters.vaultId.in.items.[INDEX]","typeLabel":"string"},"minItems":1,"maxItems":100,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.6.pendingChangeRequest.body.oneOf.9.filters.vaultId.in","typeLabel":"string[]"}},"required":["in"],"additionalProperties":false,"uniqueKey":"\\items.items.[INDEX].oneOf.6.pendingChangeRequest.body.oneOf.9.filters.vaultId","typeLabel":"object"},"vaultTags":{"type":"object","properties":{"hasAny":{"type":"array","items":{"type":"string","minLength":1,"uniqueKey":"\\items.items.[INDEX].oneOf.6.pendingChangeRequest.body.oneOf.9.filters.vaultTags.hasAny.items.[INDEX]","typeLabel":"string"},"minItems":1,"maxItems":100,"uniqueKey":"\\items.items.[INDEX].oneOf.6.pendingChangeRequest.body.oneOf.9.filters.vaultTags.hasAny","typeLabel":"string[]"},"hasAll":{"type":"array","items":{"type":"string","minLength":1,"uniqueKey":"\\items.items.[INDEX].oneOf.6.pendingChangeRequest.body.oneOf.9.filters.vaultTags.hasAll.items.[INDEX]","typeLabel":"string"},"minItems":1,"maxItems":100,"uniqueKey":"\\items.items.[INDEX].oneOf.6.pendingChangeRequest.body.oneOf.9.filters.vaultTags.hasAll","typeLabel":"string[]"}},"additionalProperties":false,"uniqueKey":"\\items.items.[INDEX].oneOf.6.pendingChangeRequest.body.oneOf.9.filters.vaultTags","typeLabel":"object"}},"additionalProperties":false,"uniqueKey":"\\items.items.[INDEX].oneOf.6.pendingChangeRequest.body.oneOf.9.filters","typeLabel":"object"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.6.pendingChangeRequest.body.oneOf.9","typeLabel":"Vaults:ReplaceLock · object"},{"type":"object","title":"UserAction","required":["id","name","status","activityKind","rule","action"],"properties":{"id":{"type":"string","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.6.pendingChangeRequest.body.oneOf.10.id","typeLabel":"string"},"name":{"type":"string","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.6.pendingChangeRequest.body.oneOf.10.name","typeLabel":"string"},"status":{"type":"string","enum":["Active","Archived"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.6.pendingChangeRequest.body.oneOf.10.status","typeLabel":"enum\u003cstring>"},"activityKind":{"type":"string","enum":["UserAction"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.6.pendingChangeRequest.body.oneOf.10.activityKind","typeLabel":"enum\u003cstring>"},"rule":{"type":"object","properties":{"kind":{"type":"string","enum":["UserAction"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.6.pendingChangeRequest.body.oneOf.10.rule.kind","typeLabel":"enum\u003cstring>"},"configuration":{"type":"object","properties":{"userActionKinds":{"type":"array","items":{"type":"string","uniqueKey":"\\items.items.[INDEX].oneOf.6.pendingChangeRequest.body.oneOf.10.rule.configuration.userActionKinds.items.[INDEX]","typeLabel":"string"},"minItems":1,"description":"The user actions this rule applies to. The rule triggers on any of them.","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.6.pendingChangeRequest.body.oneOf.10.rule.configuration.userActionKinds","typeLabel":"string[]"}},"required":["userActionKinds"],"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.6.pendingChangeRequest.body.oneOf.10.rule.configuration","typeLabel":"object"}},"required":["kind","configuration"],"additionalProperties":false,"title":"UserAction","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.6.pendingChangeRequest.body.oneOf.10.rule","typeLabel":"UserAction · object"},"action":{"oneOf":[{"type":"object","title":"RequestApproval","description":"\nThis action means that activity will first require an Approval process to be completed before it can be executed (or be aborted if someone rejects it during the approval process).\n\nOne or several groups of approvers need to be specified. These groups define who is allowed to approve / reject an activity.\n\nThe activity will only be executed if all approver groups reach their \"quorum\" of approvals. Otherwise, if any one user within any approver group rejects, then the activity is aborted and the call is not executed.\n\nThe example below shows a `RequestApproval` action, configured with one approval group requiring 2 approvals amongst three specific users.\n\n```json\n{\n \"action\": {\n \"kind\": \"RequestApproval\",\n \"autoRejectTimeout\": 60, // minutes\n \"approvalGroups\": [\n {\n \"name\": \"Admins\",\n \"quorum\": 2, // only 2 approvers required in that group \n \"approvers\": {\n \"userId\": {\n \"in\": [\"us-...1\", \"us-...2\", \"us-...3\"],\n }\n }\n }\n ],\n\n }\n}\n```\n\n**Don't lock yourself up**\n\nBy default, users cannot approve an activity they initiated themselves, even if they are in an approval group. To allow this, you must set `initiatorCanApprove: true`.\n\n*Example 1:* For any wallet transfer, a policy is setup to require approval from **1 specific admin user** (eg. the CEO). `initiatorCanApprove` was not set to `true`. If the CEO himself initiates a transfer, no-one can approve his transfer and it's stuck.\n\n*Example 2:* Company has only 3 users. A policy is setup to require approval from **any 3 users** (`quorum: 3`) for any modification of a policy. `initiatorCanApprove` was not set to `true`. In this case, they are locked, and the policy cannot be modified: whoever requests a modification cannot approve, and the policy is therefore always missing one approver. To unlock, they would need to invite a new user and give him the rights to approve as well.\n ","required":["kind","approvalGroups"],"properties":{"kind":{"type":"string","enum":["RequestApproval"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.6.pendingChangeRequest.body.oneOf.10.action.oneOf.0.kind","typeLabel":"enum\u003cstring>"},"approvalGroups":{"type":"array","items":{"type":"object","properties":{"quorum":{"type":"integer","minimum":1,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.6.pendingChangeRequest.body.oneOf.10.action.oneOf.0.approvalGroups.items.[INDEX].quorum","typeLabel":"integer"},"approvers":{"type":"object","properties":{"userId":{"type":"object","properties":{"in":{"type":"array","items":{"type":"string","minLength":1,"uniqueKey":"\\items.items.[INDEX].oneOf.6.pendingChangeRequest.body.oneOf.10.action.oneOf.0.approvalGroups.items.[INDEX].approvers.userId.in.items.[INDEX]","typeLabel":"string"},"minItems":1,"maxItems":100,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.6.pendingChangeRequest.body.oneOf.10.action.oneOf.0.approvalGroups.items.[INDEX].approvers.userId.in","typeLabel":"string[]"}},"required":["in"],"additionalProperties":false,"description":"Users and service accounts who may approve.","uniqueKey":"\\items.items.[INDEX].oneOf.6.pendingChangeRequest.body.oneOf.10.action.oneOf.0.approvalGroups.items.[INDEX].approvers.userId","typeLabel":"object"},"userGroupId":{"type":"object","properties":{"in":{"type":"array","items":{"type":"string","minLength":1,"maxLength":64,"pattern":"^ug-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"User group id.","example":"ug-139tf-f58l8-lsbt6dp47lfsdvgh","uniqueKey":"\\items.items.[INDEX].oneOf.6.pendingChangeRequest.body.oneOf.10.action.oneOf.0.approvalGroups.items.[INDEX].approvers.userGroupId.in.items.[INDEX]","typeLabel":"string"},"minItems":1,"maxItems":100,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.6.pendingChangeRequest.body.oneOf.10.action.oneOf.0.approvalGroups.items.[INDEX].approvers.userGroupId.in","typeLabel":"string[]"}},"required":["in"],"additionalProperties":false,"description":"User groups whose members may approve.","uniqueKey":"\\items.items.[INDEX].oneOf.6.pendingChangeRequest.body.oneOf.10.action.oneOf.0.approvalGroups.items.[INDEX].approvers.userGroupId","typeLabel":"object"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.6.pendingChangeRequest.body.oneOf.10.action.oneOf.0.approvalGroups.items.[INDEX].approvers","typeLabel":"object"},"name":{"type":"string","uniqueKey":"\\items.items.[INDEX].oneOf.6.pendingChangeRequest.body.oneOf.10.action.oneOf.0.approvalGroups.items.[INDEX].name","typeLabel":"string"},"initiatorCanApprove":{"type":"boolean","description":"Whether the initiator of the activity can participate in the approval.","uniqueKey":"\\items.items.[INDEX].oneOf.6.pendingChangeRequest.body.oneOf.10.action.oneOf.0.approvalGroups.items.[INDEX].initiatorCanApprove","typeLabel":"boolean"},"serviceAccountsCanApprove":{"type":"boolean","description":"Whether service accounts can participate in the approval for this group.","uniqueKey":"\\items.items.[INDEX].oneOf.6.pendingChangeRequest.body.oneOf.10.action.oneOf.0.approvalGroups.items.[INDEX].serviceAccountsCanApprove","typeLabel":"boolean"}},"required":["quorum","approvers"],"additionalProperties":false,"uniqueKey":"\\items.items.[INDEX].oneOf.6.pendingChangeRequest.body.oneOf.10.action.oneOf.0.approvalGroups.items.[INDEX]","typeLabel":"object"},"minItems":1,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.6.pendingChangeRequest.body.oneOf.10.action.oneOf.0.approvalGroups","typeLabel":"object[]"},"autoRejectTimeout":{"oneOf":[{"type":"integer","minimum":1,"uniqueKey":"\\items.items.[INDEX].oneOf.6.pendingChangeRequest.body.oneOf.10.action.oneOf.0.autoRejectTimeout.oneOf.0","typeLabel":"integer"},{"type":"null","minimum":1,"uniqueKey":"\\items.items.[INDEX].oneOf.6.pendingChangeRequest.body.oneOf.10.action.oneOf.0.autoRejectTimeout.oneOf.1","typeLabel":"null"}],"uniqueKey":"\\items.items.[INDEX].oneOf.6.pendingChangeRequest.body.oneOf.10.action.oneOf.0.autoRejectTimeout","typeLabel":"integer | null"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.6.pendingChangeRequest.body.oneOf.10.action.oneOf.0","typeLabel":"RequestApproval · object"},{"type":"object","title":"Block","description":"This action means that the activity will be blocked if the policy is triggered.\n\n```json\n{\n \"action\": {\n \"kind\": \"Block\"\n }\n}\n```\n","required":["kind"],"properties":{"kind":{"type":"string","enum":["Block"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.6.pendingChangeRequest.body.oneOf.10.action.oneOf.1.kind","typeLabel":"enum\u003cstring>"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.6.pendingChangeRequest.body.oneOf.10.action.oneOf.1","typeLabel":"Block · object"}],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.6.pendingChangeRequest.body.oneOf.10.action","typeLabel":"RequestApproval · object | Block · object"},"dateCreated":{"type":"string","uniqueKey":"\\items.items.[INDEX].oneOf.6.pendingChangeRequest.body.oneOf.10.dateCreated","typeLabel":"string"},"dateUpdated":{"type":"string","uniqueKey":"\\items.items.[INDEX].oneOf.6.pendingChangeRequest.body.oneOf.10.dateUpdated","typeLabel":"string"},"filters":{"type":"object","properties":{},"uniqueKey":"\\items.items.[INDEX].oneOf.6.pendingChangeRequest.body.oneOf.10.filters","typeLabel":"object"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.6.pendingChangeRequest.body.oneOf.10","typeLabel":"UserAction · object"}],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.6.pendingChangeRequest.body","typeLabel":"Registry:Addresses:Modify · object | Permissions:Assign · object | Permissions:Modify · object | Policies:Modify · object | Registry:ContractSchemas:Modify · object | Wallets:Sign · object | Wallets:IncomingTransaction · object | Vaults:ReleaseQuarantine · object | Vaults:CreateLock · object | Vaults:ReplaceLock · object | UserAction · object"},"dateResolved":{"type":"string","format":"date-time","uniqueKey":"\\items.items.[INDEX].oneOf.6.pendingChangeRequest.dateResolved","typeLabel":"string\u003cdate-time>"},"approvalId":{"type":"string","uniqueKey":"\\items.items.[INDEX].oneOf.6.pendingChangeRequest.approvalId","typeLabel":"string"}},"required":["id","requester","kind","operationKind","status","entityId","dateCreated","body"],"additionalProperties":false,"uniqueKey":"\\items.items.[INDEX].oneOf.6.pendingChangeRequest","typeLabel":"object"}},"additionalProperties":false,"uniqueKey":"\\items.items.[INDEX].oneOf.6","typeLabel":"Wallets:IncomingTransaction · object"},{"type":"object","title":"Vaults:ReleaseQuarantine","required":["id","name","status","activityKind","rule","action"],"properties":{"id":{"type":"string","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.7.id","typeLabel":"string"},"name":{"type":"string","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.7.name","typeLabel":"string"},"status":{"type":"string","enum":["Active","Archived"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.7.status","typeLabel":"enum\u003cstring>"},"activityKind":{"type":"string","enum":["Vaults:ReleaseQuarantine"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.7.activityKind","typeLabel":"enum\u003cstring>"},"rule":{"oneOf":[{"type":"object","title":"AlwaysTrigger","description":"This rule will always be triggered, meaning that if this rule is defined on a policy, the policy will always trigger the policy action, regardless of the activity details.","required":["kind"],"properties":{"kind":{"type":"string","enum":["AlwaysTrigger"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.7.rule.oneOf.0.kind","typeLabel":"enum\u003cstring>"},"configuration":{"type":"object","properties":{},"additionalProperties":false,"uniqueKey":"\\items.items.[INDEX].oneOf.7.rule.oneOf.0.configuration","typeLabel":"object"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.7.rule.oneOf.0","typeLabel":"AlwaysTrigger · object"},{"type":"object","title":"ChainalysisQuarantineScreening","description":"\n\u003cInfo>\nThis rule can only be used once the Chainalysis integration is activated from the Dfns dashboard settings. (see more on [Chainalysis](https://docs.dfns.co/integrations/aml-kyt/chainalysis) integration page).\n\u003c/Info>\n\nThis rule can be used on a policy of `activityKind` = `Vaults:ReleaseQuarantine`. When a quarantined vault deposit was screened by Chainalysis KYT, the screening result (alerts \u0026 direct exposure) is stored with the quarantine. When a release of the quarantined funds is requested, this rule evaluates that **stored** result — no new Chainalysis call is made. Based on the stored result and the configuration of this rule, the policy will be triggered.\n\nIf the quarantine has **no stored KYT result** (the result was not received yet, the network/asset is not supported by the Chainalysis integration, or screening failed), the rule **always triggers** (fail closed): the release then follows the policy action (approval or block).\n\n```json\n{\n \"rule\": {\n \"kind\": \"ChainalysisQuarantineScreening\",\n \"configuration\": {\n \"alerts\": {\n \"alertLevel\": \"LOW\",\n \"categoryIds\": []\n },\n \"exposures\": {\n \"direct\": {\n \"categoryIds\": []\n }\n }\n }\n }\n}\n```\n\n**Configuration**\n\n| Property | Type | Description |\n| --- | --- | --- |\n| `alerts`\u003cbr>\u003cbr>`.alertLevel`* | `string` | Minimum alert level above which the rule should trigger, if any alert was returned in the stored Chainalysis results. Can be `LOW`, `MEDIUM`, `HIGH`, or `SEVERE` |\n| `alerts`\u003cbr>\u003cbr>`.categoryIds`* | list of integers | List of Chainalysis category IDs (see [here](https://docs.chainalysis.com/api/kyt/#categories)). If you leave this list empty, alerts of any category will trigger the rule. Otherwise, if you only want the rule to trigger on specific categories, you can specify some in the list. |\n| `exposures`\u003cbr>\u003cbr>`.direct`\u003cbr>\u003cbr>`.categoryIds`* | list of integers | List of Chainalysis category IDs (see [here](https://docs.chainalysis.com/api/kyt/#categories)). If you leave this list empty, a direct exposure of any category in the stored results will trigger the rule. Otherwise, if you only want the rule to trigger on specific categories, you can specify some in the list. |\n","required":["kind","configuration"],"properties":{"kind":{"type":"string","enum":["ChainalysisQuarantineScreening"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.7.rule.oneOf.1.kind","typeLabel":"enum\u003cstring>"},"configuration":{"type":"object","properties":{"alerts":{"type":"object","properties":{"alertLevel":{"type":"string","enum":["LOW","MEDIUM","HIGH","SEVERE"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.7.rule.oneOf.1.configuration.alerts.alertLevel","typeLabel":"enum\u003cstring>"},"categoryIds":{"type":"array","items":{"type":"integer","exclusiveMinimum":0,"uniqueKey":"\\items.items.[INDEX].oneOf.7.rule.oneOf.1.configuration.alerts.categoryIds.items.[INDEX]","typeLabel":"integer"},"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.7.rule.oneOf.1.configuration.alerts.categoryIds","typeLabel":"integer[]"}},"required":["alertLevel","categoryIds"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.7.rule.oneOf.1.configuration.alerts","typeLabel":"object"},"exposures":{"type":"object","properties":{"direct":{"type":"object","properties":{"categoryIds":{"type":"array","items":{"type":"integer","exclusiveMinimum":0,"uniqueKey":"\\items.items.[INDEX].oneOf.7.rule.oneOf.1.configuration.exposures.direct.categoryIds.items.[INDEX]","typeLabel":"integer"},"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.7.rule.oneOf.1.configuration.exposures.direct.categoryIds","typeLabel":"integer[]"}},"required":["categoryIds"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.7.rule.oneOf.1.configuration.exposures.direct","typeLabel":"object"}},"required":["direct"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.7.rule.oneOf.1.configuration.exposures","typeLabel":"object"}},"required":["alerts","exposures"],"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.7.rule.oneOf.1.configuration","typeLabel":"object"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.7.rule.oneOf.1","typeLabel":"ChainalysisQuarantineScreening · object"}],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.7.rule","typeLabel":"AlwaysTrigger · object | ChainalysisQuarantineScreening · object"},"action":{"oneOf":[{"type":"object","title":"RequestApproval","description":"\nThis action means that activity will first require an Approval process to be completed before it can be executed (or be aborted if someone rejects it during the approval process).\n\nOne or several groups of approvers need to be specified. These groups define who is allowed to approve / reject an activity.\n\nThe activity will only be executed if all approver groups reach their \"quorum\" of approvals. Otherwise, if any one user within any approver group rejects, then the activity is aborted and the call is not executed.\n\nThe example below shows a `RequestApproval` action, configured with one approval group requiring 2 approvals amongst three specific users.\n\n```json\n{\n \"action\": {\n \"kind\": \"RequestApproval\",\n \"autoRejectTimeout\": 60, // minutes\n \"approvalGroups\": [\n {\n \"name\": \"Admins\",\n \"quorum\": 2, // only 2 approvers required in that group \n \"approvers\": {\n \"userId\": {\n \"in\": [\"us-...1\", \"us-...2\", \"us-...3\"],\n }\n }\n }\n ],\n\n }\n}\n```\n\n**Don't lock yourself up**\n\nBy default, users cannot approve an activity they initiated themselves, even if they are in an approval group. To allow this, you must set `initiatorCanApprove: true`.\n\n*Example 1:* For any wallet transfer, a policy is setup to require approval from **1 specific admin user** (eg. the CEO). `initiatorCanApprove` was not set to `true`. If the CEO himself initiates a transfer, no-one can approve his transfer and it's stuck.\n\n*Example 2:* Company has only 3 users. A policy is setup to require approval from **any 3 users** (`quorum: 3`) for any modification of a policy. `initiatorCanApprove` was not set to `true`. In this case, they are locked, and the policy cannot be modified: whoever requests a modification cannot approve, and the policy is therefore always missing one approver. To unlock, they would need to invite a new user and give him the rights to approve as well.\n ","required":["kind","approvalGroups"],"properties":{"kind":{"type":"string","enum":["RequestApproval"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.7.action.oneOf.0.kind","typeLabel":"enum\u003cstring>"},"approvalGroups":{"type":"array","items":{"type":"object","properties":{"quorum":{"type":"integer","minimum":1,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.7.action.oneOf.0.approvalGroups.items.[INDEX].quorum","typeLabel":"integer"},"approvers":{"type":"object","properties":{"userId":{"type":"object","properties":{"in":{"type":"array","items":{"type":"string","minLength":1,"uniqueKey":"\\items.items.[INDEX].oneOf.7.action.oneOf.0.approvalGroups.items.[INDEX].approvers.userId.in.items.[INDEX]","typeLabel":"string"},"minItems":1,"maxItems":100,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.7.action.oneOf.0.approvalGroups.items.[INDEX].approvers.userId.in","typeLabel":"string[]"}},"required":["in"],"additionalProperties":false,"description":"Users and service accounts who may approve.","uniqueKey":"\\items.items.[INDEX].oneOf.7.action.oneOf.0.approvalGroups.items.[INDEX].approvers.userId","typeLabel":"object"},"userGroupId":{"type":"object","properties":{"in":{"type":"array","items":{"type":"string","minLength":1,"maxLength":64,"pattern":"^ug-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"User group id.","example":"ug-139tf-f58l8-lsbt6dp47lfsdvgh","uniqueKey":"\\items.items.[INDEX].oneOf.7.action.oneOf.0.approvalGroups.items.[INDEX].approvers.userGroupId.in.items.[INDEX]","typeLabel":"string"},"minItems":1,"maxItems":100,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.7.action.oneOf.0.approvalGroups.items.[INDEX].approvers.userGroupId.in","typeLabel":"string[]"}},"required":["in"],"additionalProperties":false,"description":"User groups whose members may approve.","uniqueKey":"\\items.items.[INDEX].oneOf.7.action.oneOf.0.approvalGroups.items.[INDEX].approvers.userGroupId","typeLabel":"object"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.7.action.oneOf.0.approvalGroups.items.[INDEX].approvers","typeLabel":"object"},"name":{"type":"string","uniqueKey":"\\items.items.[INDEX].oneOf.7.action.oneOf.0.approvalGroups.items.[INDEX].name","typeLabel":"string"},"initiatorCanApprove":{"type":"boolean","description":"Whether the initiator of the activity can participate in the approval.","uniqueKey":"\\items.items.[INDEX].oneOf.7.action.oneOf.0.approvalGroups.items.[INDEX].initiatorCanApprove","typeLabel":"boolean"},"serviceAccountsCanApprove":{"type":"boolean","description":"Whether service accounts can participate in the approval for this group.","uniqueKey":"\\items.items.[INDEX].oneOf.7.action.oneOf.0.approvalGroups.items.[INDEX].serviceAccountsCanApprove","typeLabel":"boolean"}},"required":["quorum","approvers"],"additionalProperties":false,"uniqueKey":"\\items.items.[INDEX].oneOf.7.action.oneOf.0.approvalGroups.items.[INDEX]","typeLabel":"object"},"minItems":1,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.7.action.oneOf.0.approvalGroups","typeLabel":"object[]"},"autoRejectTimeout":{"oneOf":[{"type":"integer","minimum":1,"uniqueKey":"\\items.items.[INDEX].oneOf.7.action.oneOf.0.autoRejectTimeout.oneOf.0","typeLabel":"integer"},{"type":"null","minimum":1,"uniqueKey":"\\items.items.[INDEX].oneOf.7.action.oneOf.0.autoRejectTimeout.oneOf.1","typeLabel":"null"}],"uniqueKey":"\\items.items.[INDEX].oneOf.7.action.oneOf.0.autoRejectTimeout","typeLabel":"integer | null"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.7.action.oneOf.0","typeLabel":"RequestApproval · object"},{"type":"object","title":"Block","description":"This action means that the activity will be blocked if the policy is triggered.\n\n```json\n{\n \"action\": {\n \"kind\": \"Block\"\n }\n}\n```\n","required":["kind"],"properties":{"kind":{"type":"string","enum":["Block"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.7.action.oneOf.1.kind","typeLabel":"enum\u003cstring>"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.7.action.oneOf.1","typeLabel":"Block · object"}],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.7.action","typeLabel":"RequestApproval · object | Block · object"},"dateCreated":{"type":"string","uniqueKey":"\\items.items.[INDEX].oneOf.7.dateCreated","typeLabel":"string"},"dateUpdated":{"type":"string","uniqueKey":"\\items.items.[INDEX].oneOf.7.dateUpdated","typeLabel":"string"},"filters":{"type":"object","properties":{"vaultId":{"type":"object","properties":{"in":{"type":"array","items":{"type":"string","minLength":1,"uniqueKey":"\\items.items.[INDEX].oneOf.7.filters.vaultId.in.items.[INDEX]","typeLabel":"string"},"minItems":1,"maxItems":100,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.7.filters.vaultId.in","typeLabel":"string[]"}},"required":["in"],"additionalProperties":false,"uniqueKey":"\\items.items.[INDEX].oneOf.7.filters.vaultId","typeLabel":"object"},"vaultTags":{"type":"object","properties":{"hasAny":{"type":"array","items":{"type":"string","minLength":1,"uniqueKey":"\\items.items.[INDEX].oneOf.7.filters.vaultTags.hasAny.items.[INDEX]","typeLabel":"string"},"minItems":1,"maxItems":100,"uniqueKey":"\\items.items.[INDEX].oneOf.7.filters.vaultTags.hasAny","typeLabel":"string[]"},"hasAll":{"type":"array","items":{"type":"string","minLength":1,"uniqueKey":"\\items.items.[INDEX].oneOf.7.filters.vaultTags.hasAll.items.[INDEX]","typeLabel":"string"},"minItems":1,"maxItems":100,"uniqueKey":"\\items.items.[INDEX].oneOf.7.filters.vaultTags.hasAll","typeLabel":"string[]"}},"additionalProperties":false,"uniqueKey":"\\items.items.[INDEX].oneOf.7.filters.vaultTags","typeLabel":"object"}},"additionalProperties":false,"uniqueKey":"\\items.items.[INDEX].oneOf.7.filters","typeLabel":"object"},"pendingChangeRequest":{"type":"object","properties":{"id":{"type":"string","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.7.pendingChangeRequest.id","typeLabel":"string"},"requester":{"type":"object","properties":{"userId":{"type":"string","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.7.pendingChangeRequest.requester.userId","typeLabel":"string"},"tokenId":{"type":"string","uniqueKey":"\\items.items.[INDEX].oneOf.7.pendingChangeRequest.requester.tokenId","typeLabel":"string"},"appId":{"type":"string","uniqueKey":"\\items.items.[INDEX].oneOf.7.pendingChangeRequest.requester.appId","typeLabel":"string"}},"required":["userId"],"description":"The user who initiated the change request.","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.7.pendingChangeRequest.requester","typeLabel":"object"},"kind":{"type":"string","enum":["Policy"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.7.pendingChangeRequest.kind","typeLabel":"enum\u003cstring>"},"operationKind":{"type":"string","enum":["Update"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.7.pendingChangeRequest.operationKind","typeLabel":"enum\u003cstring>"},"status":{"type":"string","enum":["Applied","Failed","Pending","Rejected"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.7.pendingChangeRequest.status","typeLabel":"enum\u003cstring>"},"entityId":{"type":"string","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.7.pendingChangeRequest.entityId","typeLabel":"string"},"dateCreated":{"type":"string","format":"date-time","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.7.pendingChangeRequest.dateCreated","typeLabel":"string\u003cdate-time>"},"body":{"oneOf":[{"type":"object","title":"Registry:Addresses:Modify","required":["id","name","status","activityKind","rule","action"],"properties":{"id":{"type":"string","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.7.pendingChangeRequest.body.oneOf.0.id","typeLabel":"string"},"name":{"type":"string","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.7.pendingChangeRequest.body.oneOf.0.name","typeLabel":"string"},"status":{"type":"string","enum":["Active","Archived"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.7.pendingChangeRequest.body.oneOf.0.status","typeLabel":"enum\u003cstring>"},"activityKind":{"type":"string","enum":["Registry:Addresses:Modify"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.7.pendingChangeRequest.body.oneOf.0.activityKind","typeLabel":"enum\u003cstring>"},"rule":{"type":"object","properties":{"kind":{"type":"string","enum":["AlwaysTrigger"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.7.pendingChangeRequest.body.oneOf.0.rule.kind","typeLabel":"enum\u003cstring>"},"configuration":{"type":"object","properties":{},"additionalProperties":false,"uniqueKey":"\\items.items.[INDEX].oneOf.7.pendingChangeRequest.body.oneOf.0.rule.configuration","typeLabel":"object"}},"required":["kind"],"additionalProperties":false,"description":"This rule will always be triggered, meaning that if this rule is defined on a policy, the policy will always trigger the policy action, regardless of the activity details.","title":"AlwaysTrigger","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.7.pendingChangeRequest.body.oneOf.0.rule","typeLabel":"AlwaysTrigger · object"},"action":{"oneOf":[{"type":"object","title":"RequestApproval","description":"\nThis action means that activity will first require an Approval process to be completed before it can be executed (or be aborted if someone rejects it during the approval process).\n\nOne or several groups of approvers need to be specified. These groups define who is allowed to approve / reject an activity.\n\nThe activity will only be executed if all approver groups reach their \"quorum\" of approvals. Otherwise, if any one user within any approver group rejects, then the activity is aborted and the call is not executed.\n\nThe example below shows a `RequestApproval` action, configured with one approval group requiring 2 approvals amongst three specific users.\n\n```json\n{\n \"action\": {\n \"kind\": \"RequestApproval\",\n \"autoRejectTimeout\": 60, // minutes\n \"approvalGroups\": [\n {\n \"name\": \"Admins\",\n \"quorum\": 2, // only 2 approvers required in that group \n \"approvers\": {\n \"userId\": {\n \"in\": [\"us-...1\", \"us-...2\", \"us-...3\"],\n }\n }\n }\n ],\n\n }\n}\n```\n\n**Don't lock yourself up**\n\nBy default, users cannot approve an activity they initiated themselves, even if they are in an approval group. To allow this, you must set `initiatorCanApprove: true`.\n\n*Example 1:* For any wallet transfer, a policy is setup to require approval from **1 specific admin user** (eg. the CEO). `initiatorCanApprove` was not set to `true`. If the CEO himself initiates a transfer, no-one can approve his transfer and it's stuck.\n\n*Example 2:* Company has only 3 users. A policy is setup to require approval from **any 3 users** (`quorum: 3`) for any modification of a policy. `initiatorCanApprove` was not set to `true`. In this case, they are locked, and the policy cannot be modified: whoever requests a modification cannot approve, and the policy is therefore always missing one approver. To unlock, they would need to invite a new user and give him the rights to approve as well.\n ","required":["kind","approvalGroups"],"properties":{"kind":{"type":"string","enum":["RequestApproval"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.7.pendingChangeRequest.body.oneOf.0.action.oneOf.0.kind","typeLabel":"enum\u003cstring>"},"approvalGroups":{"type":"array","items":{"type":"object","properties":{"quorum":{"type":"integer","minimum":1,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.7.pendingChangeRequest.body.oneOf.0.action.oneOf.0.approvalGroups.items.[INDEX].quorum","typeLabel":"integer"},"approvers":{"type":"object","properties":{"userId":{"type":"object","properties":{"in":{"type":"array","items":{"type":"string","minLength":1,"uniqueKey":"\\items.items.[INDEX].oneOf.7.pendingChangeRequest.body.oneOf.0.action.oneOf.0.approvalGroups.items.[INDEX].approvers.userId.in.items.[INDEX]","typeLabel":"string"},"minItems":1,"maxItems":100,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.7.pendingChangeRequest.body.oneOf.0.action.oneOf.0.approvalGroups.items.[INDEX].approvers.userId.in","typeLabel":"string[]"}},"required":["in"],"additionalProperties":false,"description":"Users and service accounts who may approve.","uniqueKey":"\\items.items.[INDEX].oneOf.7.pendingChangeRequest.body.oneOf.0.action.oneOf.0.approvalGroups.items.[INDEX].approvers.userId","typeLabel":"object"},"userGroupId":{"type":"object","properties":{"in":{"type":"array","items":{"type":"string","minLength":1,"maxLength":64,"pattern":"^ug-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"User group id.","example":"ug-139tf-f58l8-lsbt6dp47lfsdvgh","uniqueKey":"\\items.items.[INDEX].oneOf.7.pendingChangeRequest.body.oneOf.0.action.oneOf.0.approvalGroups.items.[INDEX].approvers.userGroupId.in.items.[INDEX]","typeLabel":"string"},"minItems":1,"maxItems":100,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.7.pendingChangeRequest.body.oneOf.0.action.oneOf.0.approvalGroups.items.[INDEX].approvers.userGroupId.in","typeLabel":"string[]"}},"required":["in"],"additionalProperties":false,"description":"User groups whose members may approve.","uniqueKey":"\\items.items.[INDEX].oneOf.7.pendingChangeRequest.body.oneOf.0.action.oneOf.0.approvalGroups.items.[INDEX].approvers.userGroupId","typeLabel":"object"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.7.pendingChangeRequest.body.oneOf.0.action.oneOf.0.approvalGroups.items.[INDEX].approvers","typeLabel":"object"},"name":{"type":"string","uniqueKey":"\\items.items.[INDEX].oneOf.7.pendingChangeRequest.body.oneOf.0.action.oneOf.0.approvalGroups.items.[INDEX].name","typeLabel":"string"},"initiatorCanApprove":{"type":"boolean","description":"Whether the initiator of the activity can participate in the approval.","uniqueKey":"\\items.items.[INDEX].oneOf.7.pendingChangeRequest.body.oneOf.0.action.oneOf.0.approvalGroups.items.[INDEX].initiatorCanApprove","typeLabel":"boolean"},"serviceAccountsCanApprove":{"type":"boolean","description":"Whether service accounts can participate in the approval for this group.","uniqueKey":"\\items.items.[INDEX].oneOf.7.pendingChangeRequest.body.oneOf.0.action.oneOf.0.approvalGroups.items.[INDEX].serviceAccountsCanApprove","typeLabel":"boolean"}},"required":["quorum","approvers"],"additionalProperties":false,"uniqueKey":"\\items.items.[INDEX].oneOf.7.pendingChangeRequest.body.oneOf.0.action.oneOf.0.approvalGroups.items.[INDEX]","typeLabel":"object"},"minItems":1,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.7.pendingChangeRequest.body.oneOf.0.action.oneOf.0.approvalGroups","typeLabel":"object[]"},"autoRejectTimeout":{"oneOf":[{"type":"integer","minimum":1,"uniqueKey":"\\items.items.[INDEX].oneOf.7.pendingChangeRequest.body.oneOf.0.action.oneOf.0.autoRejectTimeout.oneOf.0","typeLabel":"integer"},{"type":"null","minimum":1,"uniqueKey":"\\items.items.[INDEX].oneOf.7.pendingChangeRequest.body.oneOf.0.action.oneOf.0.autoRejectTimeout.oneOf.1","typeLabel":"null"}],"uniqueKey":"\\items.items.[INDEX].oneOf.7.pendingChangeRequest.body.oneOf.0.action.oneOf.0.autoRejectTimeout","typeLabel":"integer | null"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.7.pendingChangeRequest.body.oneOf.0.action.oneOf.0","typeLabel":"RequestApproval · object"},{"type":"object","title":"Block","description":"This action means that the activity will be blocked if the policy is triggered.\n\n```json\n{\n \"action\": {\n \"kind\": \"Block\"\n }\n}\n```\n","required":["kind"],"properties":{"kind":{"type":"string","enum":["Block"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.7.pendingChangeRequest.body.oneOf.0.action.oneOf.1.kind","typeLabel":"enum\u003cstring>"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.7.pendingChangeRequest.body.oneOf.0.action.oneOf.1","typeLabel":"Block · object"}],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.7.pendingChangeRequest.body.oneOf.0.action","typeLabel":"RequestApproval · object | Block · object"},"dateCreated":{"type":"string","uniqueKey":"\\items.items.[INDEX].oneOf.7.pendingChangeRequest.body.oneOf.0.dateCreated","typeLabel":"string"},"dateUpdated":{"type":"string","uniqueKey":"\\items.items.[INDEX].oneOf.7.pendingChangeRequest.body.oneOf.0.dateUpdated","typeLabel":"string"},"filters":{"type":"object","properties":{},"uniqueKey":"\\items.items.[INDEX].oneOf.7.pendingChangeRequest.body.oneOf.0.filters","typeLabel":"object"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.7.pendingChangeRequest.body.oneOf.0","typeLabel":"Registry:Addresses:Modify · object"},{"type":"object","title":"Permissions:Assign","required":["id","name","status","activityKind","rule","action"],"properties":{"id":{"type":"string","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.7.pendingChangeRequest.body.oneOf.1.id","typeLabel":"string"},"name":{"type":"string","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.7.pendingChangeRequest.body.oneOf.1.name","typeLabel":"string"},"status":{"type":"string","enum":["Active","Archived"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.7.pendingChangeRequest.body.oneOf.1.status","typeLabel":"enum\u003cstring>"},"activityKind":{"type":"string","enum":["Permissions:Assign"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.7.pendingChangeRequest.body.oneOf.1.activityKind","typeLabel":"enum\u003cstring>"},"rule":{"type":"object","properties":{"kind":{"type":"string","enum":["AlwaysTrigger"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.7.pendingChangeRequest.body.oneOf.1.rule.kind","typeLabel":"enum\u003cstring>"},"configuration":{"type":"object","properties":{},"additionalProperties":false,"uniqueKey":"\\items.items.[INDEX].oneOf.7.pendingChangeRequest.body.oneOf.1.rule.configuration","typeLabel":"object"}},"required":["kind"],"additionalProperties":false,"description":"This rule will always be triggered, meaning that if this rule is defined on a policy, the policy will always trigger the policy action, regardless of the activity details.","title":"AlwaysTrigger","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.7.pendingChangeRequest.body.oneOf.1.rule","typeLabel":"AlwaysTrigger · object"},"action":{"oneOf":[{"type":"object","title":"RequestApproval","description":"\nThis action means that activity will first require an Approval process to be completed before it can be executed (or be aborted if someone rejects it during the approval process).\n\nOne or several groups of approvers need to be specified. These groups define who is allowed to approve / reject an activity.\n\nThe activity will only be executed if all approver groups reach their \"quorum\" of approvals. Otherwise, if any one user within any approver group rejects, then the activity is aborted and the call is not executed.\n\nThe example below shows a `RequestApproval` action, configured with one approval group requiring 2 approvals amongst three specific users.\n\n```json\n{\n \"action\": {\n \"kind\": \"RequestApproval\",\n \"autoRejectTimeout\": 60, // minutes\n \"approvalGroups\": [\n {\n \"name\": \"Admins\",\n \"quorum\": 2, // only 2 approvers required in that group \n \"approvers\": {\n \"userId\": {\n \"in\": [\"us-...1\", \"us-...2\", \"us-...3\"],\n }\n }\n }\n ],\n\n }\n}\n```\n\n**Don't lock yourself up**\n\nBy default, users cannot approve an activity they initiated themselves, even if they are in an approval group. To allow this, you must set `initiatorCanApprove: true`.\n\n*Example 1:* For any wallet transfer, a policy is setup to require approval from **1 specific admin user** (eg. the CEO). `initiatorCanApprove` was not set to `true`. If the CEO himself initiates a transfer, no-one can approve his transfer and it's stuck.\n\n*Example 2:* Company has only 3 users. A policy is setup to require approval from **any 3 users** (`quorum: 3`) for any modification of a policy. `initiatorCanApprove` was not set to `true`. In this case, they are locked, and the policy cannot be modified: whoever requests a modification cannot approve, and the policy is therefore always missing one approver. To unlock, they would need to invite a new user and give him the rights to approve as well.\n ","required":["kind","approvalGroups"],"properties":{"kind":{"type":"string","enum":["RequestApproval"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.7.pendingChangeRequest.body.oneOf.1.action.oneOf.0.kind","typeLabel":"enum\u003cstring>"},"approvalGroups":{"type":"array","items":{"type":"object","properties":{"quorum":{"type":"integer","minimum":1,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.7.pendingChangeRequest.body.oneOf.1.action.oneOf.0.approvalGroups.items.[INDEX].quorum","typeLabel":"integer"},"approvers":{"type":"object","properties":{"userId":{"type":"object","properties":{"in":{"type":"array","items":{"type":"string","minLength":1,"uniqueKey":"\\items.items.[INDEX].oneOf.7.pendingChangeRequest.body.oneOf.1.action.oneOf.0.approvalGroups.items.[INDEX].approvers.userId.in.items.[INDEX]","typeLabel":"string"},"minItems":1,"maxItems":100,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.7.pendingChangeRequest.body.oneOf.1.action.oneOf.0.approvalGroups.items.[INDEX].approvers.userId.in","typeLabel":"string[]"}},"required":["in"],"additionalProperties":false,"description":"Users and service accounts who may approve.","uniqueKey":"\\items.items.[INDEX].oneOf.7.pendingChangeRequest.body.oneOf.1.action.oneOf.0.approvalGroups.items.[INDEX].approvers.userId","typeLabel":"object"},"userGroupId":{"type":"object","properties":{"in":{"type":"array","items":{"type":"string","minLength":1,"maxLength":64,"pattern":"^ug-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"User group id.","example":"ug-139tf-f58l8-lsbt6dp47lfsdvgh","uniqueKey":"\\items.items.[INDEX].oneOf.7.pendingChangeRequest.body.oneOf.1.action.oneOf.0.approvalGroups.items.[INDEX].approvers.userGroupId.in.items.[INDEX]","typeLabel":"string"},"minItems":1,"maxItems":100,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.7.pendingChangeRequest.body.oneOf.1.action.oneOf.0.approvalGroups.items.[INDEX].approvers.userGroupId.in","typeLabel":"string[]"}},"required":["in"],"additionalProperties":false,"description":"User groups whose members may approve.","uniqueKey":"\\items.items.[INDEX].oneOf.7.pendingChangeRequest.body.oneOf.1.action.oneOf.0.approvalGroups.items.[INDEX].approvers.userGroupId","typeLabel":"object"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.7.pendingChangeRequest.body.oneOf.1.action.oneOf.0.approvalGroups.items.[INDEX].approvers","typeLabel":"object"},"name":{"type":"string","uniqueKey":"\\items.items.[INDEX].oneOf.7.pendingChangeRequest.body.oneOf.1.action.oneOf.0.approvalGroups.items.[INDEX].name","typeLabel":"string"},"initiatorCanApprove":{"type":"boolean","description":"Whether the initiator of the activity can participate in the approval.","uniqueKey":"\\items.items.[INDEX].oneOf.7.pendingChangeRequest.body.oneOf.1.action.oneOf.0.approvalGroups.items.[INDEX].initiatorCanApprove","typeLabel":"boolean"},"serviceAccountsCanApprove":{"type":"boolean","description":"Whether service accounts can participate in the approval for this group.","uniqueKey":"\\items.items.[INDEX].oneOf.7.pendingChangeRequest.body.oneOf.1.action.oneOf.0.approvalGroups.items.[INDEX].serviceAccountsCanApprove","typeLabel":"boolean"}},"required":["quorum","approvers"],"additionalProperties":false,"uniqueKey":"\\items.items.[INDEX].oneOf.7.pendingChangeRequest.body.oneOf.1.action.oneOf.0.approvalGroups.items.[INDEX]","typeLabel":"object"},"minItems":1,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.7.pendingChangeRequest.body.oneOf.1.action.oneOf.0.approvalGroups","typeLabel":"object[]"},"autoRejectTimeout":{"oneOf":[{"type":"integer","minimum":1,"uniqueKey":"\\items.items.[INDEX].oneOf.7.pendingChangeRequest.body.oneOf.1.action.oneOf.0.autoRejectTimeout.oneOf.0","typeLabel":"integer"},{"type":"null","minimum":1,"uniqueKey":"\\items.items.[INDEX].oneOf.7.pendingChangeRequest.body.oneOf.1.action.oneOf.0.autoRejectTimeout.oneOf.1","typeLabel":"null"}],"uniqueKey":"\\items.items.[INDEX].oneOf.7.pendingChangeRequest.body.oneOf.1.action.oneOf.0.autoRejectTimeout","typeLabel":"integer | null"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.7.pendingChangeRequest.body.oneOf.1.action.oneOf.0","typeLabel":"RequestApproval · object"},{"type":"object","title":"Block","description":"This action means that the activity will be blocked if the policy is triggered.\n\n```json\n{\n \"action\": {\n \"kind\": \"Block\"\n }\n}\n```\n","required":["kind"],"properties":{"kind":{"type":"string","enum":["Block"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.7.pendingChangeRequest.body.oneOf.1.action.oneOf.1.kind","typeLabel":"enum\u003cstring>"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.7.pendingChangeRequest.body.oneOf.1.action.oneOf.1","typeLabel":"Block · object"}],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.7.pendingChangeRequest.body.oneOf.1.action","typeLabel":"RequestApproval · object | Block · object"},"dateCreated":{"type":"string","uniqueKey":"\\items.items.[INDEX].oneOf.7.pendingChangeRequest.body.oneOf.1.dateCreated","typeLabel":"string"},"dateUpdated":{"type":"string","uniqueKey":"\\items.items.[INDEX].oneOf.7.pendingChangeRequest.body.oneOf.1.dateUpdated","typeLabel":"string"},"filters":{"type":"object","properties":{"permissionId":{"type":"object","properties":{"in":{"type":"array","items":{"type":"string","minLength":1,"uniqueKey":"\\items.items.[INDEX].oneOf.7.pendingChangeRequest.body.oneOf.1.filters.permissionId.in.items.[INDEX]","typeLabel":"string"},"minItems":1,"maxItems":100,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.7.pendingChangeRequest.body.oneOf.1.filters.permissionId.in","typeLabel":"string[]"}},"required":["in"],"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.7.pendingChangeRequest.body.oneOf.1.filters.permissionId","typeLabel":"object"}},"required":["permissionId"],"additionalProperties":false,"uniqueKey":"\\items.items.[INDEX].oneOf.7.pendingChangeRequest.body.oneOf.1.filters","typeLabel":"object"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.7.pendingChangeRequest.body.oneOf.1","typeLabel":"Permissions:Assign · object"},{"type":"object","title":"Permissions:Modify","required":["id","name","status","activityKind","rule","action"],"properties":{"id":{"type":"string","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.7.pendingChangeRequest.body.oneOf.2.id","typeLabel":"string"},"name":{"type":"string","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.7.pendingChangeRequest.body.oneOf.2.name","typeLabel":"string"},"status":{"type":"string","enum":["Active","Archived"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.7.pendingChangeRequest.body.oneOf.2.status","typeLabel":"enum\u003cstring>"},"activityKind":{"type":"string","enum":["Permissions:Modify"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.7.pendingChangeRequest.body.oneOf.2.activityKind","typeLabel":"enum\u003cstring>"},"rule":{"type":"object","properties":{"kind":{"type":"string","enum":["AlwaysTrigger"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.7.pendingChangeRequest.body.oneOf.2.rule.kind","typeLabel":"enum\u003cstring>"},"configuration":{"type":"object","properties":{},"additionalProperties":false,"uniqueKey":"\\items.items.[INDEX].oneOf.7.pendingChangeRequest.body.oneOf.2.rule.configuration","typeLabel":"object"}},"required":["kind"],"additionalProperties":false,"description":"This rule will always be triggered, meaning that if this rule is defined on a policy, the policy will always trigger the policy action, regardless of the activity details.","title":"AlwaysTrigger","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.7.pendingChangeRequest.body.oneOf.2.rule","typeLabel":"AlwaysTrigger · object"},"action":{"oneOf":[{"type":"object","title":"RequestApproval","description":"\nThis action means that activity will first require an Approval process to be completed before it can be executed (or be aborted if someone rejects it during the approval process).\n\nOne or several groups of approvers need to be specified. These groups define who is allowed to approve / reject an activity.\n\nThe activity will only be executed if all approver groups reach their \"quorum\" of approvals. Otherwise, if any one user within any approver group rejects, then the activity is aborted and the call is not executed.\n\nThe example below shows a `RequestApproval` action, configured with one approval group requiring 2 approvals amongst three specific users.\n\n```json\n{\n \"action\": {\n \"kind\": \"RequestApproval\",\n \"autoRejectTimeout\": 60, // minutes\n \"approvalGroups\": [\n {\n \"name\": \"Admins\",\n \"quorum\": 2, // only 2 approvers required in that group \n \"approvers\": {\n \"userId\": {\n \"in\": [\"us-...1\", \"us-...2\", \"us-...3\"],\n }\n }\n }\n ],\n\n }\n}\n```\n\n**Don't lock yourself up**\n\nBy default, users cannot approve an activity they initiated themselves, even if they are in an approval group. To allow this, you must set `initiatorCanApprove: true`.\n\n*Example 1:* For any wallet transfer, a policy is setup to require approval from **1 specific admin user** (eg. the CEO). `initiatorCanApprove` was not set to `true`. If the CEO himself initiates a transfer, no-one can approve his transfer and it's stuck.\n\n*Example 2:* Company has only 3 users. A policy is setup to require approval from **any 3 users** (`quorum: 3`) for any modification of a policy. `initiatorCanApprove` was not set to `true`. In this case, they are locked, and the policy cannot be modified: whoever requests a modification cannot approve, and the policy is therefore always missing one approver. To unlock, they would need to invite a new user and give him the rights to approve as well.\n ","required":["kind","approvalGroups"],"properties":{"kind":{"type":"string","enum":["RequestApproval"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.7.pendingChangeRequest.body.oneOf.2.action.oneOf.0.kind","typeLabel":"enum\u003cstring>"},"approvalGroups":{"type":"array","items":{"type":"object","properties":{"quorum":{"type":"integer","minimum":1,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.7.pendingChangeRequest.body.oneOf.2.action.oneOf.0.approvalGroups.items.[INDEX].quorum","typeLabel":"integer"},"approvers":{"type":"object","properties":{"userId":{"type":"object","properties":{"in":{"type":"array","items":{"type":"string","minLength":1,"uniqueKey":"\\items.items.[INDEX].oneOf.7.pendingChangeRequest.body.oneOf.2.action.oneOf.0.approvalGroups.items.[INDEX].approvers.userId.in.items.[INDEX]","typeLabel":"string"},"minItems":1,"maxItems":100,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.7.pendingChangeRequest.body.oneOf.2.action.oneOf.0.approvalGroups.items.[INDEX].approvers.userId.in","typeLabel":"string[]"}},"required":["in"],"additionalProperties":false,"description":"Users and service accounts who may approve.","uniqueKey":"\\items.items.[INDEX].oneOf.7.pendingChangeRequest.body.oneOf.2.action.oneOf.0.approvalGroups.items.[INDEX].approvers.userId","typeLabel":"object"},"userGroupId":{"type":"object","properties":{"in":{"type":"array","items":{"type":"string","minLength":1,"maxLength":64,"pattern":"^ug-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"User group id.","example":"ug-139tf-f58l8-lsbt6dp47lfsdvgh","uniqueKey":"\\items.items.[INDEX].oneOf.7.pendingChangeRequest.body.oneOf.2.action.oneOf.0.approvalGroups.items.[INDEX].approvers.userGroupId.in.items.[INDEX]","typeLabel":"string"},"minItems":1,"maxItems":100,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.7.pendingChangeRequest.body.oneOf.2.action.oneOf.0.approvalGroups.items.[INDEX].approvers.userGroupId.in","typeLabel":"string[]"}},"required":["in"],"additionalProperties":false,"description":"User groups whose members may approve.","uniqueKey":"\\items.items.[INDEX].oneOf.7.pendingChangeRequest.body.oneOf.2.action.oneOf.0.approvalGroups.items.[INDEX].approvers.userGroupId","typeLabel":"object"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.7.pendingChangeRequest.body.oneOf.2.action.oneOf.0.approvalGroups.items.[INDEX].approvers","typeLabel":"object"},"name":{"type":"string","uniqueKey":"\\items.items.[INDEX].oneOf.7.pendingChangeRequest.body.oneOf.2.action.oneOf.0.approvalGroups.items.[INDEX].name","typeLabel":"string"},"initiatorCanApprove":{"type":"boolean","description":"Whether the initiator of the activity can participate in the approval.","uniqueKey":"\\items.items.[INDEX].oneOf.7.pendingChangeRequest.body.oneOf.2.action.oneOf.0.approvalGroups.items.[INDEX].initiatorCanApprove","typeLabel":"boolean"},"serviceAccountsCanApprove":{"type":"boolean","description":"Whether service accounts can participate in the approval for this group.","uniqueKey":"\\items.items.[INDEX].oneOf.7.pendingChangeRequest.body.oneOf.2.action.oneOf.0.approvalGroups.items.[INDEX].serviceAccountsCanApprove","typeLabel":"boolean"}},"required":["quorum","approvers"],"additionalProperties":false,"uniqueKey":"\\items.items.[INDEX].oneOf.7.pendingChangeRequest.body.oneOf.2.action.oneOf.0.approvalGroups.items.[INDEX]","typeLabel":"object"},"minItems":1,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.7.pendingChangeRequest.body.oneOf.2.action.oneOf.0.approvalGroups","typeLabel":"object[]"},"autoRejectTimeout":{"oneOf":[{"type":"integer","minimum":1,"uniqueKey":"\\items.items.[INDEX].oneOf.7.pendingChangeRequest.body.oneOf.2.action.oneOf.0.autoRejectTimeout.oneOf.0","typeLabel":"integer"},{"type":"null","minimum":1,"uniqueKey":"\\items.items.[INDEX].oneOf.7.pendingChangeRequest.body.oneOf.2.action.oneOf.0.autoRejectTimeout.oneOf.1","typeLabel":"null"}],"uniqueKey":"\\items.items.[INDEX].oneOf.7.pendingChangeRequest.body.oneOf.2.action.oneOf.0.autoRejectTimeout","typeLabel":"integer | null"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.7.pendingChangeRequest.body.oneOf.2.action.oneOf.0","typeLabel":"RequestApproval · object"},{"type":"object","title":"Block","description":"This action means that the activity will be blocked if the policy is triggered.\n\n```json\n{\n \"action\": {\n \"kind\": \"Block\"\n }\n}\n```\n","required":["kind"],"properties":{"kind":{"type":"string","enum":["Block"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.7.pendingChangeRequest.body.oneOf.2.action.oneOf.1.kind","typeLabel":"enum\u003cstring>"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.7.pendingChangeRequest.body.oneOf.2.action.oneOf.1","typeLabel":"Block · object"}],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.7.pendingChangeRequest.body.oneOf.2.action","typeLabel":"RequestApproval · object | Block · object"},"dateCreated":{"type":"string","uniqueKey":"\\items.items.[INDEX].oneOf.7.pendingChangeRequest.body.oneOf.2.dateCreated","typeLabel":"string"},"dateUpdated":{"type":"string","uniqueKey":"\\items.items.[INDEX].oneOf.7.pendingChangeRequest.body.oneOf.2.dateUpdated","typeLabel":"string"},"filters":{"type":"object","properties":{"permissionId":{"type":"object","properties":{"in":{"type":"array","items":{"type":"string","minLength":1,"uniqueKey":"\\items.items.[INDEX].oneOf.7.pendingChangeRequest.body.oneOf.2.filters.permissionId.in.items.[INDEX]","typeLabel":"string"},"minItems":1,"maxItems":100,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.7.pendingChangeRequest.body.oneOf.2.filters.permissionId.in","typeLabel":"string[]"}},"required":["in"],"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.7.pendingChangeRequest.body.oneOf.2.filters.permissionId","typeLabel":"object"}},"required":["permissionId"],"additionalProperties":false,"uniqueKey":"\\items.items.[INDEX].oneOf.7.pendingChangeRequest.body.oneOf.2.filters","typeLabel":"object"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.7.pendingChangeRequest.body.oneOf.2","typeLabel":"Permissions:Modify · object"},{"type":"object","title":"Policies:Modify","required":["id","name","status","activityKind","rule","action"],"properties":{"id":{"type":"string","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.7.pendingChangeRequest.body.oneOf.3.id","typeLabel":"string"},"name":{"type":"string","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.7.pendingChangeRequest.body.oneOf.3.name","typeLabel":"string"},"status":{"type":"string","enum":["Active","Archived"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.7.pendingChangeRequest.body.oneOf.3.status","typeLabel":"enum\u003cstring>"},"activityKind":{"type":"string","enum":["Policies:Modify"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.7.pendingChangeRequest.body.oneOf.3.activityKind","typeLabel":"enum\u003cstring>"},"rule":{"type":"object","properties":{"kind":{"type":"string","enum":["AlwaysTrigger"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.7.pendingChangeRequest.body.oneOf.3.rule.kind","typeLabel":"enum\u003cstring>"},"configuration":{"type":"object","properties":{},"additionalProperties":false,"uniqueKey":"\\items.items.[INDEX].oneOf.7.pendingChangeRequest.body.oneOf.3.rule.configuration","typeLabel":"object"}},"required":["kind"],"additionalProperties":false,"description":"This rule will always be triggered, meaning that if this rule is defined on a policy, the policy will always trigger the policy action, regardless of the activity details.","title":"AlwaysTrigger","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.7.pendingChangeRequest.body.oneOf.3.rule","typeLabel":"AlwaysTrigger · object"},"action":{"type":"object","properties":{"kind":{"type":"string","enum":["RequestApproval"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.7.pendingChangeRequest.body.oneOf.3.action.kind","typeLabel":"enum\u003cstring>"},"approvalGroups":{"type":"array","items":{"type":"object","properties":{"quorum":{"type":"integer","minimum":1,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.7.pendingChangeRequest.body.oneOf.3.action.approvalGroups.items.[INDEX].quorum","typeLabel":"integer"},"approvers":{"type":"object","properties":{"userId":{"type":"object","properties":{"in":{"type":"array","items":{"type":"string","minLength":1,"uniqueKey":"\\items.items.[INDEX].oneOf.7.pendingChangeRequest.body.oneOf.3.action.approvalGroups.items.[INDEX].approvers.userId.in.items.[INDEX]","typeLabel":"string"},"minItems":1,"maxItems":100,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.7.pendingChangeRequest.body.oneOf.3.action.approvalGroups.items.[INDEX].approvers.userId.in","typeLabel":"string[]"}},"required":["in"],"additionalProperties":false,"description":"Users and service accounts who may approve.","uniqueKey":"\\items.items.[INDEX].oneOf.7.pendingChangeRequest.body.oneOf.3.action.approvalGroups.items.[INDEX].approvers.userId","typeLabel":"object"},"userGroupId":{"type":"object","properties":{"in":{"type":"array","items":{"type":"string","minLength":1,"maxLength":64,"pattern":"^ug-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"User group id.","example":"ug-139tf-f58l8-lsbt6dp47lfsdvgh","uniqueKey":"\\items.items.[INDEX].oneOf.7.pendingChangeRequest.body.oneOf.3.action.approvalGroups.items.[INDEX].approvers.userGroupId.in.items.[INDEX]","typeLabel":"string"},"minItems":1,"maxItems":100,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.7.pendingChangeRequest.body.oneOf.3.action.approvalGroups.items.[INDEX].approvers.userGroupId.in","typeLabel":"string[]"}},"required":["in"],"additionalProperties":false,"description":"User groups whose members may approve.","uniqueKey":"\\items.items.[INDEX].oneOf.7.pendingChangeRequest.body.oneOf.3.action.approvalGroups.items.[INDEX].approvers.userGroupId","typeLabel":"object"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.7.pendingChangeRequest.body.oneOf.3.action.approvalGroups.items.[INDEX].approvers","typeLabel":"object"},"name":{"type":"string","uniqueKey":"\\items.items.[INDEX].oneOf.7.pendingChangeRequest.body.oneOf.3.action.approvalGroups.items.[INDEX].name","typeLabel":"string"},"initiatorCanApprove":{"type":"boolean","description":"Whether the initiator of the activity can participate in the approval.","uniqueKey":"\\items.items.[INDEX].oneOf.7.pendingChangeRequest.body.oneOf.3.action.approvalGroups.items.[INDEX].initiatorCanApprove","typeLabel":"boolean"},"serviceAccountsCanApprove":{"type":"boolean","description":"Whether service accounts can participate in the approval for this group.","uniqueKey":"\\items.items.[INDEX].oneOf.7.pendingChangeRequest.body.oneOf.3.action.approvalGroups.items.[INDEX].serviceAccountsCanApprove","typeLabel":"boolean"}},"required":["quorum","approvers"],"additionalProperties":false,"uniqueKey":"\\items.items.[INDEX].oneOf.7.pendingChangeRequest.body.oneOf.3.action.approvalGroups.items.[INDEX]","typeLabel":"object"},"minItems":1,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.7.pendingChangeRequest.body.oneOf.3.action.approvalGroups","typeLabel":"object[]"},"autoRejectTimeout":{"oneOf":[{"type":"integer","minimum":1,"uniqueKey":"\\items.items.[INDEX].oneOf.7.pendingChangeRequest.body.oneOf.3.action.autoRejectTimeout.oneOf.0","typeLabel":"integer"},{"type":"null","minimum":1,"uniqueKey":"\\items.items.[INDEX].oneOf.7.pendingChangeRequest.body.oneOf.3.action.autoRejectTimeout.oneOf.1","typeLabel":"null"}],"uniqueKey":"\\items.items.[INDEX].oneOf.7.pendingChangeRequest.body.oneOf.3.action.autoRejectTimeout","typeLabel":"integer | null"}},"required":["kind","approvalGroups"],"additionalProperties":false,"description":"\nThis action means that activity will first require an Approval process to be completed before it can be executed (or be aborted if someone rejects it during the approval process).\n\nOne or several groups of approvers need to be specified. These groups define who is allowed to approve / reject an activity.\n\nThe activity will only be executed if all approver groups reach their \"quorum\" of approvals. Otherwise, if any one user within any approver group rejects, then the activity is aborted and the call is not executed.\n\nThe example below shows a `RequestApproval` action, configured with one approval group requiring 2 approvals amongst three specific users.\n\n```json\n{\n \"action\": {\n \"kind\": \"RequestApproval\",\n \"autoRejectTimeout\": 60, // minutes\n \"approvalGroups\": [\n {\n \"name\": \"Admins\",\n \"quorum\": 2, // only 2 approvers required in that group \n \"approvers\": {\n \"userId\": {\n \"in\": [\"us-...1\", \"us-...2\", \"us-...3\"],\n }\n }\n }\n ],\n\n }\n}\n```\n\n**Don't lock yourself up**\n\nBy default, users cannot approve an activity they initiated themselves, even if they are in an approval group. To allow this, you must set `initiatorCanApprove: true`.\n\n*Example 1:* For any wallet transfer, a policy is setup to require approval from **1 specific admin user** (eg. the CEO). `initiatorCanApprove` was not set to `true`. If the CEO himself initiates a transfer, no-one can approve his transfer and it's stuck.\n\n*Example 2:* Company has only 3 users. A policy is setup to require approval from **any 3 users** (`quorum: 3`) for any modification of a policy. `initiatorCanApprove` was not set to `true`. In this case, they are locked, and the policy cannot be modified: whoever requests a modification cannot approve, and the policy is therefore always missing one approver. To unlock, they would need to invite a new user and give him the rights to approve as well.\n ","title":"RequestApproval","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.7.pendingChangeRequest.body.oneOf.3.action","typeLabel":"RequestApproval · object"},"dateCreated":{"type":"string","uniqueKey":"\\items.items.[INDEX].oneOf.7.pendingChangeRequest.body.oneOf.3.dateCreated","typeLabel":"string"},"dateUpdated":{"type":"string","uniqueKey":"\\items.items.[INDEX].oneOf.7.pendingChangeRequest.body.oneOf.3.dateUpdated","typeLabel":"string"},"filters":{"type":"object","properties":{"policyId":{"type":"object","properties":{"in":{"type":"array","items":{"type":"string","minLength":1,"uniqueKey":"\\items.items.[INDEX].oneOf.7.pendingChangeRequest.body.oneOf.3.filters.policyId.in.items.[INDEX]","typeLabel":"string"},"minItems":1,"maxItems":100,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.7.pendingChangeRequest.body.oneOf.3.filters.policyId.in","typeLabel":"string[]"}},"required":["in"],"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.7.pendingChangeRequest.body.oneOf.3.filters.policyId","typeLabel":"object"}},"required":["policyId"],"additionalProperties":false,"uniqueKey":"\\items.items.[INDEX].oneOf.7.pendingChangeRequest.body.oneOf.3.filters","typeLabel":"object"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.7.pendingChangeRequest.body.oneOf.3","typeLabel":"Policies:Modify · object"},{"type":"object","title":"Registry:ContractSchemas:Modify","required":["id","name","status","activityKind","rule","action"],"properties":{"id":{"type":"string","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.7.pendingChangeRequest.body.oneOf.4.id","typeLabel":"string"},"name":{"type":"string","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.7.pendingChangeRequest.body.oneOf.4.name","typeLabel":"string"},"status":{"type":"string","enum":["Active","Archived"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.7.pendingChangeRequest.body.oneOf.4.status","typeLabel":"enum\u003cstring>"},"activityKind":{"type":"string","enum":["Registry:ContractSchemas:Modify"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.7.pendingChangeRequest.body.oneOf.4.activityKind","typeLabel":"enum\u003cstring>"},"rule":{"type":"object","properties":{"kind":{"type":"string","enum":["AlwaysTrigger"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.7.pendingChangeRequest.body.oneOf.4.rule.kind","typeLabel":"enum\u003cstring>"},"configuration":{"type":"object","properties":{},"additionalProperties":false,"uniqueKey":"\\items.items.[INDEX].oneOf.7.pendingChangeRequest.body.oneOf.4.rule.configuration","typeLabel":"object"}},"required":["kind"],"additionalProperties":false,"description":"This rule will always be triggered, meaning that if this rule is defined on a policy, the policy will always trigger the policy action, regardless of the activity details.","title":"AlwaysTrigger","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.7.pendingChangeRequest.body.oneOf.4.rule","typeLabel":"AlwaysTrigger · object"},"action":{"oneOf":[{"type":"object","title":"RequestApproval","description":"\nThis action means that activity will first require an Approval process to be completed before it can be executed (or be aborted if someone rejects it during the approval process).\n\nOne or several groups of approvers need to be specified. These groups define who is allowed to approve / reject an activity.\n\nThe activity will only be executed if all approver groups reach their \"quorum\" of approvals. Otherwise, if any one user within any approver group rejects, then the activity is aborted and the call is not executed.\n\nThe example below shows a `RequestApproval` action, configured with one approval group requiring 2 approvals amongst three specific users.\n\n```json\n{\n \"action\": {\n \"kind\": \"RequestApproval\",\n \"autoRejectTimeout\": 60, // minutes\n \"approvalGroups\": [\n {\n \"name\": \"Admins\",\n \"quorum\": 2, // only 2 approvers required in that group \n \"approvers\": {\n \"userId\": {\n \"in\": [\"us-...1\", \"us-...2\", \"us-...3\"],\n }\n }\n }\n ],\n\n }\n}\n```\n\n**Don't lock yourself up**\n\nBy default, users cannot approve an activity they initiated themselves, even if they are in an approval group. To allow this, you must set `initiatorCanApprove: true`.\n\n*Example 1:* For any wallet transfer, a policy is setup to require approval from **1 specific admin user** (eg. the CEO). `initiatorCanApprove` was not set to `true`. If the CEO himself initiates a transfer, no-one can approve his transfer and it's stuck.\n\n*Example 2:* Company has only 3 users. A policy is setup to require approval from **any 3 users** (`quorum: 3`) for any modification of a policy. `initiatorCanApprove` was not set to `true`. In this case, they are locked, and the policy cannot be modified: whoever requests a modification cannot approve, and the policy is therefore always missing one approver. To unlock, they would need to invite a new user and give him the rights to approve as well.\n ","required":["kind","approvalGroups"],"properties":{"kind":{"type":"string","enum":["RequestApproval"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.7.pendingChangeRequest.body.oneOf.4.action.oneOf.0.kind","typeLabel":"enum\u003cstring>"},"approvalGroups":{"type":"array","items":{"type":"object","properties":{"quorum":{"type":"integer","minimum":1,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.7.pendingChangeRequest.body.oneOf.4.action.oneOf.0.approvalGroups.items.[INDEX].quorum","typeLabel":"integer"},"approvers":{"type":"object","properties":{"userId":{"type":"object","properties":{"in":{"type":"array","items":{"type":"string","minLength":1,"uniqueKey":"\\items.items.[INDEX].oneOf.7.pendingChangeRequest.body.oneOf.4.action.oneOf.0.approvalGroups.items.[INDEX].approvers.userId.in.items.[INDEX]","typeLabel":"string"},"minItems":1,"maxItems":100,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.7.pendingChangeRequest.body.oneOf.4.action.oneOf.0.approvalGroups.items.[INDEX].approvers.userId.in","typeLabel":"string[]"}},"required":["in"],"additionalProperties":false,"description":"Users and service accounts who may approve.","uniqueKey":"\\items.items.[INDEX].oneOf.7.pendingChangeRequest.body.oneOf.4.action.oneOf.0.approvalGroups.items.[INDEX].approvers.userId","typeLabel":"object"},"userGroupId":{"type":"object","properties":{"in":{"type":"array","items":{"type":"string","minLength":1,"maxLength":64,"pattern":"^ug-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"User group id.","example":"ug-139tf-f58l8-lsbt6dp47lfsdvgh","uniqueKey":"\\items.items.[INDEX].oneOf.7.pendingChangeRequest.body.oneOf.4.action.oneOf.0.approvalGroups.items.[INDEX].approvers.userGroupId.in.items.[INDEX]","typeLabel":"string"},"minItems":1,"maxItems":100,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.7.pendingChangeRequest.body.oneOf.4.action.oneOf.0.approvalGroups.items.[INDEX].approvers.userGroupId.in","typeLabel":"string[]"}},"required":["in"],"additionalProperties":false,"description":"User groups whose members may approve.","uniqueKey":"\\items.items.[INDEX].oneOf.7.pendingChangeRequest.body.oneOf.4.action.oneOf.0.approvalGroups.items.[INDEX].approvers.userGroupId","typeLabel":"object"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.7.pendingChangeRequest.body.oneOf.4.action.oneOf.0.approvalGroups.items.[INDEX].approvers","typeLabel":"object"},"name":{"type":"string","uniqueKey":"\\items.items.[INDEX].oneOf.7.pendingChangeRequest.body.oneOf.4.action.oneOf.0.approvalGroups.items.[INDEX].name","typeLabel":"string"},"initiatorCanApprove":{"type":"boolean","description":"Whether the initiator of the activity can participate in the approval.","uniqueKey":"\\items.items.[INDEX].oneOf.7.pendingChangeRequest.body.oneOf.4.action.oneOf.0.approvalGroups.items.[INDEX].initiatorCanApprove","typeLabel":"boolean"},"serviceAccountsCanApprove":{"type":"boolean","description":"Whether service accounts can participate in the approval for this group.","uniqueKey":"\\items.items.[INDEX].oneOf.7.pendingChangeRequest.body.oneOf.4.action.oneOf.0.approvalGroups.items.[INDEX].serviceAccountsCanApprove","typeLabel":"boolean"}},"required":["quorum","approvers"],"additionalProperties":false,"uniqueKey":"\\items.items.[INDEX].oneOf.7.pendingChangeRequest.body.oneOf.4.action.oneOf.0.approvalGroups.items.[INDEX]","typeLabel":"object"},"minItems":1,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.7.pendingChangeRequest.body.oneOf.4.action.oneOf.0.approvalGroups","typeLabel":"object[]"},"autoRejectTimeout":{"oneOf":[{"type":"integer","minimum":1,"uniqueKey":"\\items.items.[INDEX].oneOf.7.pendingChangeRequest.body.oneOf.4.action.oneOf.0.autoRejectTimeout.oneOf.0","typeLabel":"integer"},{"type":"null","minimum":1,"uniqueKey":"\\items.items.[INDEX].oneOf.7.pendingChangeRequest.body.oneOf.4.action.oneOf.0.autoRejectTimeout.oneOf.1","typeLabel":"null"}],"uniqueKey":"\\items.items.[INDEX].oneOf.7.pendingChangeRequest.body.oneOf.4.action.oneOf.0.autoRejectTimeout","typeLabel":"integer | null"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.7.pendingChangeRequest.body.oneOf.4.action.oneOf.0","typeLabel":"RequestApproval · object"},{"type":"object","title":"Block","description":"This action means that the activity will be blocked if the policy is triggered.\n\n```json\n{\n \"action\": {\n \"kind\": \"Block\"\n }\n}\n```\n","required":["kind"],"properties":{"kind":{"type":"string","enum":["Block"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.7.pendingChangeRequest.body.oneOf.4.action.oneOf.1.kind","typeLabel":"enum\u003cstring>"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.7.pendingChangeRequest.body.oneOf.4.action.oneOf.1","typeLabel":"Block · object"}],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.7.pendingChangeRequest.body.oneOf.4.action","typeLabel":"RequestApproval · object | Block · object"},"dateCreated":{"type":"string","uniqueKey":"\\items.items.[INDEX].oneOf.7.pendingChangeRequest.body.oneOf.4.dateCreated","typeLabel":"string"},"dateUpdated":{"type":"string","uniqueKey":"\\items.items.[INDEX].oneOf.7.pendingChangeRequest.body.oneOf.4.dateUpdated","typeLabel":"string"},"filters":{"type":"object","properties":{},"uniqueKey":"\\items.items.[INDEX].oneOf.7.pendingChangeRequest.body.oneOf.4.filters","typeLabel":"object"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.7.pendingChangeRequest.body.oneOf.4","typeLabel":"Registry:ContractSchemas:Modify · object"},{"type":"object","title":"Wallets:Sign","required":["id","name","status","activityKind","rule","action"],"properties":{"id":{"type":"string","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.7.pendingChangeRequest.body.oneOf.5.id","typeLabel":"string"},"name":{"type":"string","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.7.pendingChangeRequest.body.oneOf.5.name","typeLabel":"string"},"status":{"type":"string","enum":["Active","Archived"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.7.pendingChangeRequest.body.oneOf.5.status","typeLabel":"enum\u003cstring>"},"activityKind":{"type":"string","enum":["Wallets:Sign"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.7.pendingChangeRequest.body.oneOf.5.activityKind","typeLabel":"enum\u003cstring>"},"rule":{"oneOf":[{"type":"object","title":"AlwaysTrigger","description":"This rule will always be triggered, meaning that if this rule is defined on a policy, the policy will always trigger the policy action, regardless of the activity details.","required":["kind"],"properties":{"kind":{"type":"string","enum":["AlwaysTrigger"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.7.pendingChangeRequest.body.oneOf.5.rule.oneOf.0.kind","typeLabel":"enum\u003cstring>"},"configuration":{"type":"object","properties":{},"additionalProperties":false,"uniqueKey":"\\items.items.[INDEX].oneOf.7.pendingChangeRequest.body.oneOf.5.rule.oneOf.0.configuration","typeLabel":"object"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.7.pendingChangeRequest.body.oneOf.5.rule.oneOf.0","typeLabel":"AlwaysTrigger · object"},{"type":"object","title":"TransactionRecipientWhitelist","description":"This rule will trigger if the destination address *is NOT whitelisted*.","required":["kind","configuration"],"properties":{"kind":{"type":"string","enum":["TransactionRecipientWhitelist"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.7.pendingChangeRequest.body.oneOf.5.rule.oneOf.1.kind","typeLabel":"enum\u003cstring>"},"configuration":{"type":"object","properties":{"addresses":{"type":"array","items":{"type":"string","minLength":1,"uniqueKey":"\\items.items.[INDEX].oneOf.7.pendingChangeRequest.body.oneOf.5.rule.oneOf.1.configuration.addresses.items.[INDEX]","typeLabel":"string"},"description":"Whitelisted recipient addresses","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.7.pendingChangeRequest.body.oneOf.5.rule.oneOf.1.configuration.addresses","typeLabel":"string[]"}},"required":["addresses"],"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.7.pendingChangeRequest.body.oneOf.5.rule.oneOf.1.configuration","typeLabel":"object"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.7.pendingChangeRequest.body.oneOf.5.rule.oneOf.1","typeLabel":"TransactionRecipientWhitelist · object"},{"type":"object","title":"TransactionAmountLimit","description":"This rule will trigger if the wallet activity detected is transferring some value whose amount is equal to or greater than a given limit. The limit is inclusive: a transfer whose value exactly equals the limit also triggers.\n\nThe limit is expressed in a fiat `currency` and evaluated against the market value of the transfer. To set a threshold in the asset's own units instead, use `TransactionAmountLimitNominal`.\n\nNote: If the amount of the wallet activity cannot be evaluated for any reason (eg. market prices are not available, or eg. the amount cannot be inferred from a wallet signature request, etc.), by default the rule will trigger the policy (this is called \"failing closed\" and is generally considered a security best practice).","required":["kind","configuration"],"properties":{"kind":{"type":"string","enum":["TransactionAmountLimit"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.7.pendingChangeRequest.body.oneOf.5.rule.oneOf.2.kind","typeLabel":"enum\u003cstring>"},"configuration":{"type":"object","properties":{"limit":{"type":"number","description":"Amount limit in `currency`","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.7.pendingChangeRequest.body.oneOf.5.rule.oneOf.2.configuration.limit","typeLabel":"number"},"currency":{"type":"string","enum":["USD"],"description":"Fiat currency, currently only `USD`","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.7.pendingChangeRequest.body.oneOf.5.rule.oneOf.2.configuration.currency","typeLabel":"enum\u003cstring>"}},"required":["limit","currency"],"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.7.pendingChangeRequest.body.oneOf.5.rule.oneOf.2.configuration","typeLabel":"object"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.7.pendingChangeRequest.body.oneOf.5.rule.oneOf.2","typeLabel":"TransactionAmountLimit · object"},{"type":"object","title":"TransactionAmountLimitNominal","description":"This rule will trigger if the wallet activity detected is transferring more of a listed asset than that asset's limit.\n\nEach limit is expressed in the minimum denomination of its own asset and compared against the transferred amount directly, so the verdict needs no market data and does not move with a price. To set a threshold on the fiat value of a transfer instead, use `TransactionAmountLimit`.\n\nLimits are asset exact: an asset is identified by its network and its Dfns token identifier, so a wrapped or staked derivative is a different asset from the thing it tracks, and a transfer of an asset the rule does not list will not trigger it.\n\nNote: If the transferred amount or the asset cannot be determined for any reason, by default the rule will trigger the policy (this is called \"failing closed\" and is generally considered a security best practice).","required":["kind","configuration"],"properties":{"kind":{"type":"string","enum":["TransactionAmountLimitNominal"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.7.pendingChangeRequest.body.oneOf.5.rule.oneOf.3.kind","typeLabel":"enum\u003cstring>"},"configuration":{"type":"object","properties":{"assets":{"type":"array","items":{"type":"object","properties":{"network":{"type":"string","title":"Network","description":"The network the asset lives on.","enum":["Algorand","AlgorandTestnet","Aptos","AptosTestnet","ArbitrumOne","ArbitrumSepolia","Arc","ArcTestnet","Areum","AvalancheC","AvalancheCFuji","Base","BaseSepolia","Berachain","BerachainBepolia","Bitcoin","BitcoinSignet","BitcoinTestnet4","BitcoinCash","Bob","BobSepolia","Bsc","BscTestnet","Canton","CantonTestnet","Cardano","CardanoPreprod","Concordium","ConcordiumTestnet","Celo","CeloSepolia","Codex","CodexSepolia","CosmosHub4","CosmosIcsTestnet","Dogecoin","DogecoinTestnet","Ethereum","EthereumClassic","EthereumClassicMordor","EthereumSepolia","EthereumHoodi","FlareC","FlareCCoston2","FlowEvm","FlowEvmTestnet","Hedera","HederaTestnet","HyperEvm","HyperEvmTestnet","Ink","InkSepolia","InternetComputer","Ion","IonTestnet","Iota","IotaTestnet","Kusama","KusamaAssetHub","Litecoin","LitecoinTestnet","Monad","MonadTestnet","Movement","MovementTestnet","Near","NearTestnet","Optimism","OptimismSepolia","Origyn","Plasma","PlasmaTestnet","Plume","PlumeSepolia","Paseo","PaseoAssetHub","Polkadot","PolkadotAssetHub","Polygon","PolygonAmoy","Polymesh","PolymeshTestnet","Rayls","RaylsTestnet","Robinhood","RobinhoodSepolia","SeiAtlantic2","SeiPacific1","Solana","SolanaDevnet","Sonic","SonicTestnet","Starknet","StarknetSepolia","Stellar","StellarTestnet","Sui","SuiTestnet","Tezos","TezosShadownet","Tempo","TempoModerato","Tsc","TscTestnet1","Ton","TonTestnet","Tron","TronNile","Westend","WestendAssetHub","Xdc","XdcApothem","XLayer","XLayerSepolia","XrpLedger","XrpLedgerTestnet"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.7.pendingChangeRequest.body.oneOf.5.rule.oneOf.3.configuration.assets.items.[INDEX].network","typeLabel":"enum\u003cstring>"},"tid":{"type":"string","minLength":1,"maxLength":200,"pattern":"^[a-z0-9_]+:[^\\s](?:[ ]?[^\\s])*$","description":"The Dfns token identifier of the asset, for example `native:eth` or `erc20:0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48`. Must be canonical: token contract addresses on hex based networks are lower cased.","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.7.pendingChangeRequest.body.oneOf.5.rule.oneOf.3.configuration.assets.items.[INDEX].tid","typeLabel":"string"},"limit":{"type":"string","pattern":"^\\d+$","description":"Amount limit in the minimum denomination of the asset, as an integer string, matching how a transfer expresses its amount. For an 18 decimal token `\"5000000000000000000\"` is 5 whole tokens.","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.7.pendingChangeRequest.body.oneOf.5.rule.oneOf.3.configuration.assets.items.[INDEX].limit","typeLabel":"string"}},"required":["network","tid","limit"],"additionalProperties":false,"uniqueKey":"\\items.items.[INDEX].oneOf.7.pendingChangeRequest.body.oneOf.5.rule.oneOf.3.configuration.assets.items.[INDEX]","typeLabel":"object"},"minItems":1,"maxItems":100,"description":"The assets this rule applies to, each with its own limit. A transfer of an asset that is not listed does not trigger the rule. The limit applies to each matching transfer individually; nothing is accumulated across transfers.","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.7.pendingChangeRequest.body.oneOf.5.rule.oneOf.3.configuration.assets","typeLabel":"object[]"}},"required":["assets"],"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.7.pendingChangeRequest.body.oneOf.5.rule.oneOf.3.configuration","typeLabel":"object"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.7.pendingChangeRequest.body.oneOf.5.rule.oneOf.3","typeLabel":"TransactionAmountLimitNominal · object"},{"type":"object","title":"TransactionAmountVelocity","description":"This rule will trigger if the cumulative amount transferred from a given wallet within a given timeframe is greater than a specified limit. The aggregate amount evaluated is based only on the wallet that triggered the policy.","required":["kind","configuration"],"properties":{"kind":{"type":"string","enum":["TransactionAmountVelocity"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.7.pendingChangeRequest.body.oneOf.5.rule.oneOf.4.kind","typeLabel":"enum\u003cstring>"},"configuration":{"type":"object","properties":{"limit":{"type":"number","description":"Amount limit in `currency`","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.7.pendingChangeRequest.body.oneOf.5.rule.oneOf.4.configuration.limit","typeLabel":"number"},"currency":{"type":"string","enum":["USD"],"description":"Currency for the amount limit above","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.7.pendingChangeRequest.body.oneOf.5.rule.oneOf.4.configuration.currency","typeLabel":"enum\u003cstring>"},"timeframe":{"type":"integer","minimum":1,"maximum":43200,"description":"Time period in minutes. Minimum 1, Maximum 43,200.","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.7.pendingChangeRequest.body.oneOf.5.rule.oneOf.4.configuration.timeframe","typeLabel":"integer"}},"required":["limit","currency","timeframe"],"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.7.pendingChangeRequest.body.oneOf.5.rule.oneOf.4.configuration","typeLabel":"object"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.7.pendingChangeRequest.body.oneOf.5.rule.oneOf.4","typeLabel":"TransactionAmountVelocity · object"},{"type":"object","title":"TransactionCountVelocity","description":"This rule will trigger if the number of wallet activities for a given wallet within a given timeframe, is greater than a specified limit. The aggregate number of transactions evaluated is based only on the wallet that triggered the policy.","required":["kind","configuration"],"properties":{"kind":{"type":"string","enum":["TransactionCountVelocity"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.7.pendingChangeRequest.body.oneOf.5.rule.oneOf.5.kind","typeLabel":"enum\u003cstring>"},"configuration":{"type":"object","properties":{"limit":{"type":"number","description":"Count limit","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.7.pendingChangeRequest.body.oneOf.5.rule.oneOf.5.configuration.limit","typeLabel":"number"},"timeframe":{"type":"integer","minimum":1,"maximum":43200,"description":"Time period in minutes. Minimum 1, Maximum 43,200.","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.7.pendingChangeRequest.body.oneOf.5.rule.oneOf.5.configuration.timeframe","typeLabel":"integer"}},"required":["limit","timeframe"],"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.7.pendingChangeRequest.body.oneOf.5.rule.oneOf.5.configuration","typeLabel":"object"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.7.pendingChangeRequest.body.oneOf.5.rule.oneOf.5","typeLabel":"TransactionCountVelocity · object"},{"type":"object","title":"ChainalysisTransactionPrescreening","description":"\n\u003cInfo>\nThis rule can only be used once the Chainalysis integration is activated from the Dfns dashboard settings. (see more on [Chainalysis](https://docs.dfns.co/integrations/aml-kyt/chainalysis) integration page).\n\u003c/Info>\n\nIt's a rule based on [Chainalysis](https://docs.dfns.co/integrations/aml-kyt/chainalysis) KYT integration (Know-Your-Transaction). Upon transfer attempt, we will first register the transfer with Chainalysis (as a [\"withdrawal attempt\"](https://docs.chainalysis.com/api/kyt/#registration-register-a-withdrawal-attempt)), and fetch the screening results (alerts, exposures, addresses detected). Based on the results, and the configuration of this rule, the policy will be triggered.\n\nIt's called \"Pre\"-screening, because the scanned transaction is not on chain yet, it's still a transaction attempt (before the transaction actually make it on chain).\n\n```json\n{\n \"rule\": {\n \"kind\": \"ChainalysisTransactionPrescreening\",\n \"configuration\": {\n \"alerts\": {\n \"alertLevel\": \"LOW\",\n \"categoryIds\": []\n },\n \"exposures\": {\n \"direct\": {\n \"categoryIds\": []\n }\n },\n \"addresses\": {\n \"categoryIds\": []\n },\n \"fallbackBehaviours\": {\n \"skipUnscreenableTransaction\": false,\n \"skipUnsupportedNetwork\": false,\n \"skipUnsupportedAsset\": false,\n \"skipChainalysisFailure\": false\n }\n }\n }\n}\n```\n\n**Configuration**\n\n| Property | Type | Description |\n| --- | --- | --- |\n| `alerts`\u003cbr>\u003cbr>`.alertLevel`* | `string` | Minimum alert level above which the rule should trigger, if any [alert is returned in Chainalysis results](https://docs.chainalysis.com/api/kyt/#withdrawal-attempts-get-alerts). Can be `LOW`, `MEDIUM`, `HIGH`, or `SEVERE` |\n| `alerts`\u003cbr>\u003cbr>`.categoryIds`* | list of integers | List of Chainalysis category IDs (see [here](https://docs.chainalysis.com/api/kyt/#categories)). If you leave this list empty, alerts of any category will trigger the rule. Otherwise, if you only want the rule to trigger on specific categories, you can specify some in the list. |\n| `exposures`\u003cbr>\u003cbr>`.direct`\u003cbr>\u003cbr>`.categoryIds`* | list of integers | List of Chainalysis category IDs (see [here](https://docs.chainalysis.com/api/kyt/#categories)). If you leave this list empty, a [direct exposure](https://docs.chainalysis.com/api/kyt/#withdrawal-attempts-get-direct-exposure) of any category detected by chainalysis will trigger the rule. Otherwise, if you only want the rule to trigger on specific categories, you can specify some in the list. |\n| `addresses`\u003cbr>\u003cbr>`.categoryIds`* | list of integers | List of Chainalysis category IDs (see [here](https://docs.chainalysis.com/api/kyt/#categories)). If you leave this list empty, an [address](https://docs.chainalysis.com/api/kyt/#withdrawal-attempts-get-address-identifications) of any category identified by chainalysis will trigger the rule. Otherwise, if you only want the rule to trigger on specific categories, you can specify some in the list. |\n| `fallbackBehaviours`\u003cbr>\u003cbr>`.skipUnscreenableTransaction`* | boolean | Behaviour if the wallet activity is not screenable (eg. if it's a signature request of a hash). If true, a transaction which is \"unscreenable\" will just be skipped, and policy will not trigger |\n| `fallbackBehaviours.skipUnsupportedNetwork`* | boolean | Behaviour if the wallet activity is on a network not supported by chainalysis, or not yet supported in the dfns-chainalysis integration. If true, an unsupported network will just be skipped, and policy will not trigger |\n| `fallbackBehaviours.skipUnsupportedAsset`* | boolean | Behaviour if the wallet activity is with a asset not supported by chainalysis, or not yet supported in the dfns-chainalysis integration. If true, an unsupported asset will just be skipped, and policy will not trigger |\n| `fallbackBehaviours.skipChainalysisFailure`* | boolean | Behaviour if any issue with Chainalysis calls (timeout, results took too long, rate limiting errors, any error). If true, will skip if any error happens |\n\n","required":["kind","configuration"],"properties":{"kind":{"type":"string","enum":["ChainalysisTransactionPrescreening"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.7.pendingChangeRequest.body.oneOf.5.rule.oneOf.6.kind","typeLabel":"enum\u003cstring>"},"configuration":{"type":"object","properties":{"alerts":{"type":"object","properties":{"alertLevel":{"type":"string","enum":["LOW","MEDIUM","HIGH","SEVERE"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.7.pendingChangeRequest.body.oneOf.5.rule.oneOf.6.configuration.alerts.alertLevel","typeLabel":"enum\u003cstring>"},"categoryIds":{"type":"array","items":{"type":"integer","exclusiveMinimum":0,"uniqueKey":"\\items.items.[INDEX].oneOf.7.pendingChangeRequest.body.oneOf.5.rule.oneOf.6.configuration.alerts.categoryIds.items.[INDEX]","typeLabel":"integer"},"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.7.pendingChangeRequest.body.oneOf.5.rule.oneOf.6.configuration.alerts.categoryIds","typeLabel":"integer[]"}},"required":["alertLevel","categoryIds"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.7.pendingChangeRequest.body.oneOf.5.rule.oneOf.6.configuration.alerts","typeLabel":"object"},"exposures":{"type":"object","properties":{"direct":{"type":"object","properties":{"categoryIds":{"type":"array","items":{"type":"integer","exclusiveMinimum":0,"uniqueKey":"\\items.items.[INDEX].oneOf.7.pendingChangeRequest.body.oneOf.5.rule.oneOf.6.configuration.exposures.direct.categoryIds.items.[INDEX]","typeLabel":"integer"},"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.7.pendingChangeRequest.body.oneOf.5.rule.oneOf.6.configuration.exposures.direct.categoryIds","typeLabel":"integer[]"}},"required":["categoryIds"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.7.pendingChangeRequest.body.oneOf.5.rule.oneOf.6.configuration.exposures.direct","typeLabel":"object"}},"required":["direct"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.7.pendingChangeRequest.body.oneOf.5.rule.oneOf.6.configuration.exposures","typeLabel":"object"},"addresses":{"type":"object","properties":{"categoryIds":{"type":"array","items":{"type":"integer","exclusiveMinimum":0,"uniqueKey":"\\items.items.[INDEX].oneOf.7.pendingChangeRequest.body.oneOf.5.rule.oneOf.6.configuration.addresses.categoryIds.items.[INDEX]","typeLabel":"integer"},"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.7.pendingChangeRequest.body.oneOf.5.rule.oneOf.6.configuration.addresses.categoryIds","typeLabel":"integer[]"}},"required":["categoryIds"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.7.pendingChangeRequest.body.oneOf.5.rule.oneOf.6.configuration.addresses","typeLabel":"object"},"fallbackBehaviours":{"type":"object","properties":{"skipUnscreenableTransaction":{"type":"boolean","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.7.pendingChangeRequest.body.oneOf.5.rule.oneOf.6.configuration.fallbackBehaviours.skipUnscreenableTransaction","typeLabel":"boolean"},"skipUnsupportedNetwork":{"type":"boolean","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.7.pendingChangeRequest.body.oneOf.5.rule.oneOf.6.configuration.fallbackBehaviours.skipUnsupportedNetwork","typeLabel":"boolean"},"skipUnsupportedAsset":{"type":"boolean","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.7.pendingChangeRequest.body.oneOf.5.rule.oneOf.6.configuration.fallbackBehaviours.skipUnsupportedAsset","typeLabel":"boolean"},"skipChainalysisFailure":{"type":"boolean","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.7.pendingChangeRequest.body.oneOf.5.rule.oneOf.6.configuration.fallbackBehaviours.skipChainalysisFailure","typeLabel":"boolean"}},"required":["skipUnscreenableTransaction","skipUnsupportedNetwork","skipUnsupportedAsset","skipChainalysisFailure"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.7.pendingChangeRequest.body.oneOf.5.rule.oneOf.6.configuration.fallbackBehaviours","typeLabel":"object"},"userIdTemplate":{"type":"string","minLength":1,"maxLength":50,"pattern":"^([a-zA-Z0-9_:-]|{wallet\\.id}|{wallet\\.externalId})+$","default":"dfns","description":"**Deprecated** — set `userIdTemplate` on the Chainalysis integration setting instead; when set there, the integration-level template takes precedence over this one.\n\nValue sent to Chainalysis as the \"user ID\". Used by Chainalysis for grouping transaction screenings.\n \nThis template can include variables, included in brackets. The following variables are currently supported: `{wallet.id}` and `{wallet.externalId}`.\nAs an example, if you set `userIdTemplate: \"dfns:{wallet.id}_{wallet.externalId}\"`, when your wallet receives a transaction that gets screened by a Chainalysis policy, the \"user ID\" sent to Chainalysis will be `dfns:wa-xxx_yyy` (`wa-xxx` being the wallet ID, and `yyy` being the wallet external ID).","uniqueKey":"\\items.items.[INDEX].oneOf.7.pendingChangeRequest.body.oneOf.5.rule.oneOf.6.configuration.userIdTemplate","typeLabel":"string"}},"required":["alerts","exposures","addresses","fallbackBehaviours"],"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.7.pendingChangeRequest.body.oneOf.5.rule.oneOf.6.configuration","typeLabel":"object"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.7.pendingChangeRequest.body.oneOf.5.rule.oneOf.6","typeLabel":"ChainalysisTransactionPrescreening · object"},{"type":"object","title":"EllipticTransactionPrescreening","description":"\n\u003cInfo>\nThis rule can only be used once the Elliptic integration is activated from the Dfns dashboard settings.\n\u003c/Info>\n\nThis rule uses Elliptic KYT for pre-screening outgoing transfers. Upon transfer attempt, we run a synchronous Elliptic wallet analysis of the destination address, and check the returned risk score against the configured threshold, plus any configured risk rules / categories. If at or above the threshold, or if a configured rule / category matched, the policy is triggered.\n\nIt's called \"Pre\"-screening, because the scanned transaction is not on chain yet, it's still a transaction attempt.","required":["kind","configuration"],"properties":{"kind":{"type":"string","enum":["EllipticTransactionPrescreening"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.7.pendingChangeRequest.body.oneOf.5.rule.oneOf.7.kind","typeLabel":"enum\u003cstring>"},"configuration":{"type":"object","properties":{"riskScoreThreshold":{"type":"number","minimum":0,"maximum":10,"description":"Risk score threshold (0-10, decimals allowed). The policy triggers if the Elliptic risk score is at or above the threshold.","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.7.pendingChangeRequest.body.oneOf.5.rule.oneOf.7.configuration.riskScoreThreshold","typeLabel":"number"},"triggeredRules":{"type":"object","properties":{"ruleIds":{"type":"array","items":{"type":"string","format":"uuid","uniqueKey":"\\items.items.[INDEX].oneOf.7.pendingChangeRequest.body.oneOf.5.rule.oneOf.7.configuration.triggeredRules.ruleIds.items.[INDEX]","typeLabel":"string\u003cuuid>"},"description":"IDs of risk rules from your Elliptic risk model. If any of these rules matched the analysis, the policy triggers regardless of the risk score. Leave empty to trigger on the risk score threshold only.","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.7.pendingChangeRequest.body.oneOf.5.rule.oneOf.7.configuration.triggeredRules.ruleIds","typeLabel":"string\u003cuuid>[]"},"categories":{"type":"array","items":{"type":"string","minLength":1,"uniqueKey":"\\items.items.[INDEX].oneOf.7.pendingChangeRequest.body.oneOf.5.rule.oneOf.7.configuration.triggeredRules.categories.items.[INDEX]","typeLabel":"string"},"description":"Elliptic category names (eg. \"Dark Market\"), matched case-insensitively. If a matched risk rule involves any of these categories, the policy triggers regardless of the risk score. Leave empty to trigger on the risk score threshold only.","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.7.pendingChangeRequest.body.oneOf.5.rule.oneOf.7.configuration.triggeredRules.categories","typeLabel":"string[]"}},"required":["ruleIds","categories"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.7.pendingChangeRequest.body.oneOf.5.rule.oneOf.7.configuration.triggeredRules","typeLabel":"object"},"fallbackBehaviours":{"type":"object","properties":{"skipUnscreenableTransaction":{"type":"boolean","description":"skip all wallet requests that cannot be screened (eg. raw signatures)","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.7.pendingChangeRequest.body.oneOf.5.rule.oneOf.7.configuration.fallbackBehaviours.skipUnscreenableTransaction","typeLabel":"boolean"},"skipUnsupportedNetwork":{"type":"boolean","description":"skip requests on a network not supported yet in our Elliptic integration","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.7.pendingChangeRequest.body.oneOf.5.rule.oneOf.7.configuration.fallbackBehaviours.skipUnsupportedNetwork","typeLabel":"boolean"},"skipEllipticFailure":{"type":"boolean","description":"skip any failure of the Elliptic analysis (timeout, rate limiting, any error)","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.7.pendingChangeRequest.body.oneOf.5.rule.oneOf.7.configuration.fallbackBehaviours.skipEllipticFailure","typeLabel":"boolean"}},"required":["skipUnscreenableTransaction","skipUnsupportedNetwork","skipEllipticFailure"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.7.pendingChangeRequest.body.oneOf.5.rule.oneOf.7.configuration.fallbackBehaviours","typeLabel":"object"}},"required":["riskScoreThreshold","triggeredRules","fallbackBehaviours"],"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.7.pendingChangeRequest.body.oneOf.5.rule.oneOf.7.configuration","typeLabel":"object"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.7.pendingChangeRequest.body.oneOf.5.rule.oneOf.7","typeLabel":"EllipticTransactionPrescreening · object"},{"type":"object","title":"GlobalLedgerTransactionPrescreening","description":"This rule uses GlobalLedger KYT for pre-screening outgoing transfers by checking the destination address risk score.\n\nUpon transfer attempt, we will query GlobalLedger's address risk API, and check if the risk score (0-100) is at or above the configured threshold, or if any alerts show up. If so, the policy will be triggered.\n\nIt's called \"Pre\"-screening, because the scanned transaction is not on chain yet, it's still a transaction attempt.","required":["kind","configuration"],"properties":{"kind":{"type":"string","enum":["GlobalLedgerTransactionPrescreening"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.7.pendingChangeRequest.body.oneOf.5.rule.oneOf.8.kind","typeLabel":"enum\u003cstring>"},"configuration":{"type":"object","properties":{"riskScoreThreshold":{"type":"integer","minimum":0,"maximum":100,"description":"Risk score threshold (0-100). Policy triggers if address/transaction risk score >= threshold","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.7.pendingChangeRequest.body.oneOf.5.rule.oneOf.8.configuration.riskScoreThreshold","typeLabel":"integer"},"fallbackBehaviours":{"type":"object","properties":{"skipUnscreenableTransaction":{"type":"boolean","description":"skip all wallet requests that cannot be screened (eg. raw signatures)","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.7.pendingChangeRequest.body.oneOf.5.rule.oneOf.8.configuration.fallbackBehaviours.skipUnscreenableTransaction","typeLabel":"boolean"},"skipUnsupportedNetwork":{"type":"boolean","description":"skip transfer requests to a network not supported yet in our GlobalLedger integration","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.7.pendingChangeRequest.body.oneOf.5.rule.oneOf.8.configuration.fallbackBehaviours.skipUnsupportedNetwork","typeLabel":"boolean"},"skipUnsupportedAsset":{"type":"boolean","description":"skip transfer requests of an asset not supported by our GlobalLedger integration","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.7.pendingChangeRequest.body.oneOf.5.rule.oneOf.8.configuration.fallbackBehaviours.skipUnsupportedAsset","typeLabel":"boolean"},"skipGlobalLedgerFailure":{"type":"boolean","description":"skips any errors from GlobalLedger API request","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.7.pendingChangeRequest.body.oneOf.5.rule.oneOf.8.configuration.fallbackBehaviours.skipGlobalLedgerFailure","typeLabel":"boolean"}},"required":["skipUnscreenableTransaction","skipUnsupportedNetwork","skipUnsupportedAsset","skipGlobalLedgerFailure"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.7.pendingChangeRequest.body.oneOf.5.rule.oneOf.8.configuration.fallbackBehaviours","typeLabel":"object"}},"required":["riskScoreThreshold","fallbackBehaviours"],"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.7.pendingChangeRequest.body.oneOf.5.rule.oneOf.8.configuration","typeLabel":"object"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.7.pendingChangeRequest.body.oneOf.5.rule.oneOf.8","typeLabel":"GlobalLedgerTransactionPrescreening · object"},{"type":"object","title":"TravelRuleTransactionPrescreening","description":"This rule applies a Travel Rule check to outgoing transfers through the vendor selected in `configuration.vendor`: [Notabene](https://docs.dfns.co/integrations/travel-rule/notabene) or Sumsub. It can only be used once that vendor's integration is activated from the Dfns dashboard settings.\n\nIt ***ONLY*** applies to Dfns [Transfer Asset](https://docs.dfns.co/api-reference/wallets/transfer-asset) Api Calls. It is NOT supported for Transfers initiated via the dashboard. Upon transfer attempt with a [TravelRule](https://docs.dfns.co/api-reference/wallets/transfer-asset#body-travel-rule) payload, we call the vendor's APIs on your behalf to validate and submit the travel rule message, then wait for its outcome. With Notabene, Dfns waits for a response from the counterparty (for custodial transfers) or from Notabene (for non-custodial transfers). With Sumsub, Dfns submits a Travel Rule message and waits for Sumsub to report its outcome. In both cases the wait is bounded by `configuration.autoTriggerTimeoutSeconds`, after which the policy's configured action is applied.\n\nThe transfer's `travelRule` payload must be of the kind matching `configuration.vendor` — a mismatch triggers the policy and applies its configured action. A given wallet must be covered by at most one travel-rule policy (of any vendor): if several travel-rule policies apply to the same transfer carrying a `travelRule` payload, it is treated as a misconfiguration and blocked without contacting any vendor. Signatures and transfers without a payload are not affected, since the rule does not apply to them.\n\nIt's called \"Pre\"-screening, because the transaction is not on chain yet, it's still a transaction attempt (before the transaction actually make it on chain).","required":["kind","configuration"],"properties":{"kind":{"type":"string","enum":["TravelRuleTransactionPrescreening"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.7.pendingChangeRequest.body.oneOf.5.rule.oneOf.9.kind","typeLabel":"enum\u003cstring>"},"configuration":{"oneOf":[{"type":"object","title":"TravelRuleNotabeneConfiguration","required":["vendor"],"properties":{"vendor":{"type":"string","enum":["Notabene"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.7.pendingChangeRequest.body.oneOf.5.rule.oneOf.9.configuration.oneOf.0.vendor","typeLabel":"enum\u003cstring>"},"autoTriggerTimeoutSeconds":{"type":"integer","minimum":0,"maximum":2592000,"default":86400,"description":"Seconds to wait for the vendor's verdict before the policy action applies. Maximum 2592000 (30 days). Defaults to 86400 (24 hours).","uniqueKey":"\\items.items.[INDEX].oneOf.7.pendingChangeRequest.body.oneOf.5.rule.oneOf.9.configuration.oneOf.0.autoTriggerTimeoutSeconds","typeLabel":"integer"},"autoClearAfterDeliveredTimeoutSeconds":{"type":"integer","minimum":0,"maximum":2592000,"description":"Seconds after delivery before a still-pending evaluation clears. Maximum 2592000 (30 days).","uniqueKey":"\\items.items.[INDEX].oneOf.7.pendingChangeRequest.body.oneOf.5.rule.oneOf.9.configuration.oneOf.0.autoClearAfterDeliveredTimeoutSeconds","typeLabel":"integer"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.7.pendingChangeRequest.body.oneOf.5.rule.oneOf.9.configuration.oneOf.0","typeLabel":"TravelRuleNotabeneConfiguration · object"},{"type":"object","title":"TravelRuleSumsubConfiguration","required":["vendor"],"properties":{"vendor":{"type":"string","enum":["Sumsub"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.7.pendingChangeRequest.body.oneOf.5.rule.oneOf.9.configuration.oneOf.1.vendor","typeLabel":"enum\u003cstring>"},"autoTriggerTimeoutSeconds":{"type":"integer","minimum":0,"maximum":2592000,"default":86400,"description":"Seconds to wait for the vendor's verdict before the policy action applies. Maximum 2592000 (30 days). Defaults to 86400 (24 hours).","uniqueKey":"\\items.items.[INDEX].oneOf.7.pendingChangeRequest.body.oneOf.5.rule.oneOf.9.configuration.oneOf.1.autoTriggerTimeoutSeconds","typeLabel":"integer"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.7.pendingChangeRequest.body.oneOf.5.rule.oneOf.9.configuration.oneOf.1","typeLabel":"TravelRuleSumsubConfiguration · object"}],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.7.pendingChangeRequest.body.oneOf.5.rule.oneOf.9.configuration","typeLabel":"TravelRuleNotabeneConfiguration · object | TravelRuleSumsubConfiguration · object"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.7.pendingChangeRequest.body.oneOf.5.rule.oneOf.9","typeLabel":"TravelRuleTransactionPrescreening · object"}],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.7.pendingChangeRequest.body.oneOf.5.rule","typeLabel":"AlwaysTrigger · object | TransactionRecipientWhitelist · object | TransactionAmountLimit · object | TransactionAmountLimitNominal · object | TransactionAmountVelocity · object | TransactionCountVelocity · object | ChainalysisTransactionPrescreening · object | EllipticTransactionPrescreening · object | GlobalLedgerTransactionPrescreening · object | TravelRuleTransactionPrescreening · object"},"action":{"oneOf":[{"type":"object","title":"RequestApproval","description":"\nThis action means that activity will first require an Approval process to be completed before it can be executed (or be aborted if someone rejects it during the approval process).\n\nOne or several groups of approvers need to be specified. These groups define who is allowed to approve / reject an activity.\n\nThe activity will only be executed if all approver groups reach their \"quorum\" of approvals. Otherwise, if any one user within any approver group rejects, then the activity is aborted and the call is not executed.\n\nThe example below shows a `RequestApproval` action, configured with one approval group requiring 2 approvals amongst three specific users.\n\n```json\n{\n \"action\": {\n \"kind\": \"RequestApproval\",\n \"autoRejectTimeout\": 60, // minutes\n \"approvalGroups\": [\n {\n \"name\": \"Admins\",\n \"quorum\": 2, // only 2 approvers required in that group \n \"approvers\": {\n \"userId\": {\n \"in\": [\"us-...1\", \"us-...2\", \"us-...3\"],\n }\n }\n }\n ],\n\n }\n}\n```\n\n**Don't lock yourself up**\n\nBy default, users cannot approve an activity they initiated themselves, even if they are in an approval group. To allow this, you must set `initiatorCanApprove: true`.\n\n*Example 1:* For any wallet transfer, a policy is setup to require approval from **1 specific admin user** (eg. the CEO). `initiatorCanApprove` was not set to `true`. If the CEO himself initiates a transfer, no-one can approve his transfer and it's stuck.\n\n*Example 2:* Company has only 3 users. A policy is setup to require approval from **any 3 users** (`quorum: 3`) for any modification of a policy. `initiatorCanApprove` was not set to `true`. In this case, they are locked, and the policy cannot be modified: whoever requests a modification cannot approve, and the policy is therefore always missing one approver. To unlock, they would need to invite a new user and give him the rights to approve as well.\n ","required":["kind","approvalGroups"],"properties":{"kind":{"type":"string","enum":["RequestApproval"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.7.pendingChangeRequest.body.oneOf.5.action.oneOf.0.kind","typeLabel":"enum\u003cstring>"},"approvalGroups":{"type":"array","items":{"type":"object","properties":{"quorum":{"type":"integer","minimum":1,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.7.pendingChangeRequest.body.oneOf.5.action.oneOf.0.approvalGroups.items.[INDEX].quorum","typeLabel":"integer"},"approvers":{"type":"object","properties":{"userId":{"type":"object","properties":{"in":{"type":"array","items":{"type":"string","minLength":1,"uniqueKey":"\\items.items.[INDEX].oneOf.7.pendingChangeRequest.body.oneOf.5.action.oneOf.0.approvalGroups.items.[INDEX].approvers.userId.in.items.[INDEX]","typeLabel":"string"},"minItems":1,"maxItems":100,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.7.pendingChangeRequest.body.oneOf.5.action.oneOf.0.approvalGroups.items.[INDEX].approvers.userId.in","typeLabel":"string[]"}},"required":["in"],"additionalProperties":false,"description":"Users and service accounts who may approve.","uniqueKey":"\\items.items.[INDEX].oneOf.7.pendingChangeRequest.body.oneOf.5.action.oneOf.0.approvalGroups.items.[INDEX].approvers.userId","typeLabel":"object"},"userGroupId":{"type":"object","properties":{"in":{"type":"array","items":{"type":"string","minLength":1,"maxLength":64,"pattern":"^ug-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"User group id.","example":"ug-139tf-f58l8-lsbt6dp47lfsdvgh","uniqueKey":"\\items.items.[INDEX].oneOf.7.pendingChangeRequest.body.oneOf.5.action.oneOf.0.approvalGroups.items.[INDEX].approvers.userGroupId.in.items.[INDEX]","typeLabel":"string"},"minItems":1,"maxItems":100,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.7.pendingChangeRequest.body.oneOf.5.action.oneOf.0.approvalGroups.items.[INDEX].approvers.userGroupId.in","typeLabel":"string[]"}},"required":["in"],"additionalProperties":false,"description":"User groups whose members may approve.","uniqueKey":"\\items.items.[INDEX].oneOf.7.pendingChangeRequest.body.oneOf.5.action.oneOf.0.approvalGroups.items.[INDEX].approvers.userGroupId","typeLabel":"object"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.7.pendingChangeRequest.body.oneOf.5.action.oneOf.0.approvalGroups.items.[INDEX].approvers","typeLabel":"object"},"name":{"type":"string","uniqueKey":"\\items.items.[INDEX].oneOf.7.pendingChangeRequest.body.oneOf.5.action.oneOf.0.approvalGroups.items.[INDEX].name","typeLabel":"string"},"initiatorCanApprove":{"type":"boolean","description":"Whether the initiator of the activity can participate in the approval.","uniqueKey":"\\items.items.[INDEX].oneOf.7.pendingChangeRequest.body.oneOf.5.action.oneOf.0.approvalGroups.items.[INDEX].initiatorCanApprove","typeLabel":"boolean"},"serviceAccountsCanApprove":{"type":"boolean","description":"Whether service accounts can participate in the approval for this group.","uniqueKey":"\\items.items.[INDEX].oneOf.7.pendingChangeRequest.body.oneOf.5.action.oneOf.0.approvalGroups.items.[INDEX].serviceAccountsCanApprove","typeLabel":"boolean"}},"required":["quorum","approvers"],"additionalProperties":false,"uniqueKey":"\\items.items.[INDEX].oneOf.7.pendingChangeRequest.body.oneOf.5.action.oneOf.0.approvalGroups.items.[INDEX]","typeLabel":"object"},"minItems":1,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.7.pendingChangeRequest.body.oneOf.5.action.oneOf.0.approvalGroups","typeLabel":"object[]"},"autoRejectTimeout":{"oneOf":[{"type":"integer","minimum":1,"uniqueKey":"\\items.items.[INDEX].oneOf.7.pendingChangeRequest.body.oneOf.5.action.oneOf.0.autoRejectTimeout.oneOf.0","typeLabel":"integer"},{"type":"null","minimum":1,"uniqueKey":"\\items.items.[INDEX].oneOf.7.pendingChangeRequest.body.oneOf.5.action.oneOf.0.autoRejectTimeout.oneOf.1","typeLabel":"null"}],"uniqueKey":"\\items.items.[INDEX].oneOf.7.pendingChangeRequest.body.oneOf.5.action.oneOf.0.autoRejectTimeout","typeLabel":"integer | null"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.7.pendingChangeRequest.body.oneOf.5.action.oneOf.0","typeLabel":"RequestApproval · object"},{"type":"object","title":"Block","description":"This action means that the activity will be blocked if the policy is triggered.\n\n```json\n{\n \"action\": {\n \"kind\": \"Block\"\n }\n}\n```\n","required":["kind"],"properties":{"kind":{"type":"string","enum":["Block"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.7.pendingChangeRequest.body.oneOf.5.action.oneOf.1.kind","typeLabel":"enum\u003cstring>"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.7.pendingChangeRequest.body.oneOf.5.action.oneOf.1","typeLabel":"Block · object"},{"type":"object","title":"NoAction","description":"\n This action kind means that nothing will happen after policy rule evaluation. It's meant to be used with policy rules \"`ChainalysisTransactionPrescreening`\" or \"`ChainalysisTransactionScreening`\". This action is for when you just want the KYT analysis rule to be run, and then if triggered, those result returned in a `policy.triggered` [Webhook Event](https://docs.dfns.co/api-reference/webhook-events).\n\n```json\n{\n \"action\": {\n \"kind\": \"NoAction\"\n }\n}\n```\n ","required":["kind"],"properties":{"kind":{"type":"string","enum":["NoAction"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.7.pendingChangeRequest.body.oneOf.5.action.oneOf.2.kind","typeLabel":"enum\u003cstring>"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.7.pendingChangeRequest.body.oneOf.5.action.oneOf.2","typeLabel":"NoAction · object"}],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.7.pendingChangeRequest.body.oneOf.5.action","typeLabel":"RequestApproval · object | Block · object | NoAction · object"},"dateCreated":{"type":"string","uniqueKey":"\\items.items.[INDEX].oneOf.7.pendingChangeRequest.body.oneOf.5.dateCreated","typeLabel":"string"},"dateUpdated":{"type":"string","uniqueKey":"\\items.items.[INDEX].oneOf.7.pendingChangeRequest.body.oneOf.5.dateUpdated","typeLabel":"string"},"filters":{"type":"object","properties":{"walletId":{"type":"object","properties":{"in":{"type":"array","items":{"type":"string","minLength":1,"uniqueKey":"\\items.items.[INDEX].oneOf.7.pendingChangeRequest.body.oneOf.5.filters.walletId.in.items.[INDEX]","typeLabel":"string"},"minItems":1,"maxItems":100,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.7.pendingChangeRequest.body.oneOf.5.filters.walletId.in","typeLabel":"string[]"}},"required":["in"],"additionalProperties":false,"uniqueKey":"\\items.items.[INDEX].oneOf.7.pendingChangeRequest.body.oneOf.5.filters.walletId","typeLabel":"object"},"walletTags":{"type":"object","properties":{"hasAny":{"type":"array","items":{"type":"string","minLength":1,"uniqueKey":"\\items.items.[INDEX].oneOf.7.pendingChangeRequest.body.oneOf.5.filters.walletTags.hasAny.items.[INDEX]","typeLabel":"string"},"minItems":1,"maxItems":100,"uniqueKey":"\\items.items.[INDEX].oneOf.7.pendingChangeRequest.body.oneOf.5.filters.walletTags.hasAny","typeLabel":"string[]"},"hasAll":{"type":"array","items":{"type":"string","minLength":1,"uniqueKey":"\\items.items.[INDEX].oneOf.7.pendingChangeRequest.body.oneOf.5.filters.walletTags.hasAll.items.[INDEX]","typeLabel":"string"},"minItems":1,"maxItems":100,"uniqueKey":"\\items.items.[INDEX].oneOf.7.pendingChangeRequest.body.oneOf.5.filters.walletTags.hasAll","typeLabel":"string[]"}},"additionalProperties":false,"uniqueKey":"\\items.items.[INDEX].oneOf.7.pendingChangeRequest.body.oneOf.5.filters.walletTags","typeLabel":"object"},"keyId":{"type":"object","properties":{"in":{"type":"array","items":{"type":"string","minLength":1,"maxLength":64,"pattern":"^key-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"Key id.","example":"key-01snl-t56gb-j8tsok0vn802p80i","uniqueKey":"\\items.items.[INDEX].oneOf.7.pendingChangeRequest.body.oneOf.5.filters.keyId.in.items.[INDEX]","typeLabel":"string"},"minItems":1,"maxItems":100,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.7.pendingChangeRequest.body.oneOf.5.filters.keyId.in","typeLabel":"string[]"}},"required":["in"],"additionalProperties":false,"uniqueKey":"\\items.items.[INDEX].oneOf.7.pendingChangeRequest.body.oneOf.5.filters.keyId","typeLabel":"object"},"keyStoreId":{"type":"object","properties":{"in":{"type":"array","items":{"type":"string","minLength":1,"maxLength":64,"pattern":"^store-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"Key store id.","example":"store-425nf-ebf0a-qq22t6qra51tj8j0","uniqueKey":"\\items.items.[INDEX].oneOf.7.pendingChangeRequest.body.oneOf.5.filters.keyStoreId.in.items.[INDEX]","typeLabel":"string"},"minItems":1,"maxItems":100,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.7.pendingChangeRequest.body.oneOf.5.filters.keyStoreId.in","typeLabel":"string[]"}},"required":["in"],"additionalProperties":false,"uniqueKey":"\\items.items.[INDEX].oneOf.7.pendingChangeRequest.body.oneOf.5.filters.keyStoreId","typeLabel":"object"}},"additionalProperties":false,"uniqueKey":"\\items.items.[INDEX].oneOf.7.pendingChangeRequest.body.oneOf.5.filters","typeLabel":"object"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.7.pendingChangeRequest.body.oneOf.5","typeLabel":"Wallets:Sign · object"},{"type":"object","title":"Wallets:IncomingTransaction","required":["id","name","status","activityKind","rule","action"],"properties":{"id":{"type":"string","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.7.pendingChangeRequest.body.oneOf.6.id","typeLabel":"string"},"name":{"type":"string","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.7.pendingChangeRequest.body.oneOf.6.name","typeLabel":"string"},"status":{"type":"string","enum":["Active","Archived"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.7.pendingChangeRequest.body.oneOf.6.status","typeLabel":"enum\u003cstring>"},"activityKind":{"type":"string","enum":["Wallets:IncomingTransaction"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.7.pendingChangeRequest.body.oneOf.6.activityKind","typeLabel":"enum\u003cstring>"},"rule":{"type":"object","title":"ChainalysisTransactionScreening","description":"\n\u003cInfo>\nThis rule can only be used once the Chainalysis integration is activated from the Dfns dashboard settings. (see more on [Chainalysis](https://docs.dfns.co/integrations/aml-kyt/chainalysis) integration page).\n\u003c/Info>\n\nThis rule can be used on a policy of `activityKind` = `Wallets:IncomingTransaction`, and with the action kind `NoAction`. It's a rule based on Chainalysis KYT integration (Know-Your-Transaction). Upon an incoming transaction detectedby our indexers, we will [register the transfer with Chainalysis](https://docs.chainalysis.com/api/kyt/#registration-register-a-transfer), and fetch the results of the analysis (alerts \u0026 exposures detected). Based on the results, and the configuration of this rule, the policy will be triggered.\n\nThe shape of the rule is almost like the `ChainalysisTransactionPrescreening` rule, expect the the `address` property is not supported.\n\n```json\n{\n \"rule\": {\n \"kind\": \"ChainalysisTransactionPrescreening\",\n \"configuration\": {\n \"alerts\": {\n \"alertLevel\": \"LOW\",\n \"categoryIds\": []\n },\n \"exposures\": {\n \"direct\": {\n \"categoryIds\": []\n }\n },\n \"fallbackBehaviours\": {\n \"skipUnscreenableTransaction\": false,\n \"skipUnsupportedNetwork\": false,\n \"skipUnsupportedAsset\": false,\n \"skipChainalysisFailure\": false\n }\n }\n }\n}\n```\n\n**Configuration**\n\nPlease refer to the configuration for the `ChainalysisTransactionPrescreening` rule.\n","required":["kind","configuration"],"properties":{"kind":{"type":"string","enum":["ChainalysisTransactionScreening"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.7.pendingChangeRequest.body.oneOf.6.rule.kind","typeLabel":"enum\u003cstring>"},"configuration":{"type":"object","properties":{"alerts":{"type":"object","properties":{"alertLevel":{"type":"string","enum":["LOW","MEDIUM","HIGH","SEVERE"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.7.pendingChangeRequest.body.oneOf.6.rule.configuration.alerts.alertLevel","typeLabel":"enum\u003cstring>"},"categoryIds":{"type":"array","items":{"type":"integer","exclusiveMinimum":0,"uniqueKey":"\\items.items.[INDEX].oneOf.7.pendingChangeRequest.body.oneOf.6.rule.configuration.alerts.categoryIds.items.[INDEX]","typeLabel":"integer"},"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.7.pendingChangeRequest.body.oneOf.6.rule.configuration.alerts.categoryIds","typeLabel":"integer[]"}},"required":["alertLevel","categoryIds"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.7.pendingChangeRequest.body.oneOf.6.rule.configuration.alerts","typeLabel":"object"},"exposures":{"type":"object","properties":{"direct":{"type":"object","properties":{"categoryIds":{"type":"array","items":{"type":"integer","exclusiveMinimum":0,"uniqueKey":"\\items.items.[INDEX].oneOf.7.pendingChangeRequest.body.oneOf.6.rule.configuration.exposures.direct.categoryIds.items.[INDEX]","typeLabel":"integer"},"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.7.pendingChangeRequest.body.oneOf.6.rule.configuration.exposures.direct.categoryIds","typeLabel":"integer[]"}},"required":["categoryIds"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.7.pendingChangeRequest.body.oneOf.6.rule.configuration.exposures.direct","typeLabel":"object"}},"required":["direct"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.7.pendingChangeRequest.body.oneOf.6.rule.configuration.exposures","typeLabel":"object"},"fallbackBehaviours":{"type":"object","properties":{"skipUnscreenableTransaction":{"type":"boolean","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.7.pendingChangeRequest.body.oneOf.6.rule.configuration.fallbackBehaviours.skipUnscreenableTransaction","typeLabel":"boolean"},"skipUnsupportedNetwork":{"type":"boolean","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.7.pendingChangeRequest.body.oneOf.6.rule.configuration.fallbackBehaviours.skipUnsupportedNetwork","typeLabel":"boolean"},"skipUnsupportedAsset":{"type":"boolean","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.7.pendingChangeRequest.body.oneOf.6.rule.configuration.fallbackBehaviours.skipUnsupportedAsset","typeLabel":"boolean"},"skipChainalysisFailure":{"type":"boolean","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.7.pendingChangeRequest.body.oneOf.6.rule.configuration.fallbackBehaviours.skipChainalysisFailure","typeLabel":"boolean"}},"required":["skipUnscreenableTransaction","skipUnsupportedNetwork","skipUnsupportedAsset","skipChainalysisFailure"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.7.pendingChangeRequest.body.oneOf.6.rule.configuration.fallbackBehaviours","typeLabel":"object"},"userIdTemplate":{"type":"string","minLength":1,"maxLength":50,"pattern":"^([a-zA-Z0-9_:-]|{wallet\\.id}|{wallet\\.externalId})+$","default":"dfns","description":"**Deprecated** — set `userIdTemplate` on the Chainalysis integration setting instead; when set there, the integration-level template takes precedence over this one.\n\nValue sent to Chainalysis as the \"user ID\". Used by Chainalysis for grouping transaction screenings.\n \nThis template can include variables, included in brackets. The following variables are currently supported: `{wallet.id}` and `{wallet.externalId}`.\nAs an example, if you set `userIdTemplate: \"dfns:{wallet.id}_{wallet.externalId}\"`, when your wallet receives a transaction that gets screened by a Chainalysis policy, the \"user ID\" sent to Chainalysis will be `dfns:wa-xxx_yyy` (`wa-xxx` being the wallet ID, and `yyy` being the wallet external ID).","uniqueKey":"\\items.items.[INDEX].oneOf.7.pendingChangeRequest.body.oneOf.6.rule.configuration.userIdTemplate","typeLabel":"string"}},"required":["alerts","exposures","fallbackBehaviours"],"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.7.pendingChangeRequest.body.oneOf.6.rule.configuration","typeLabel":"object"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.7.pendingChangeRequest.body.oneOf.6.rule","typeLabel":"ChainalysisTransactionScreening · object"},"action":{"type":"object","title":"NoAction","description":"\n This action kind means that nothing will happen after policy rule evaluation. It's meant to be used with policy rules \"`ChainalysisTransactionPrescreening`\" or \"`ChainalysisTransactionScreening`\". This action is for when you just want the KYT analysis rule to be run, and then if triggered, those result returned in a `policy.triggered` [Webhook Event](https://docs.dfns.co/api-reference/webhook-events).\n\n```json\n{\n \"action\": {\n \"kind\": \"NoAction\"\n }\n}\n```\n ","required":["kind"],"properties":{"kind":{"type":"string","enum":["NoAction"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.7.pendingChangeRequest.body.oneOf.6.action.kind","typeLabel":"enum\u003cstring>"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.7.pendingChangeRequest.body.oneOf.6.action","typeLabel":"NoAction · object"},"dateCreated":{"type":"string","uniqueKey":"\\items.items.[INDEX].oneOf.7.pendingChangeRequest.body.oneOf.6.dateCreated","typeLabel":"string"},"dateUpdated":{"type":"string","uniqueKey":"\\items.items.[INDEX].oneOf.7.pendingChangeRequest.body.oneOf.6.dateUpdated","typeLabel":"string"},"filters":{"type":"object","properties":{"walletId":{"type":"object","properties":{"in":{"type":"array","items":{"type":"string","minLength":1,"uniqueKey":"\\items.items.[INDEX].oneOf.7.pendingChangeRequest.body.oneOf.6.filters.walletId.in.items.[INDEX]","typeLabel":"string"},"minItems":1,"maxItems":100,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.7.pendingChangeRequest.body.oneOf.6.filters.walletId.in","typeLabel":"string[]"}},"required":["in"],"additionalProperties":false,"uniqueKey":"\\items.items.[INDEX].oneOf.7.pendingChangeRequest.body.oneOf.6.filters.walletId","typeLabel":"object"},"walletTags":{"type":"object","properties":{"hasAny":{"type":"array","items":{"type":"string","minLength":1,"uniqueKey":"\\items.items.[INDEX].oneOf.7.pendingChangeRequest.body.oneOf.6.filters.walletTags.hasAny.items.[INDEX]","typeLabel":"string"},"minItems":1,"maxItems":100,"uniqueKey":"\\items.items.[INDEX].oneOf.7.pendingChangeRequest.body.oneOf.6.filters.walletTags.hasAny","typeLabel":"string[]"},"hasAll":{"type":"array","items":{"type":"string","minLength":1,"uniqueKey":"\\items.items.[INDEX].oneOf.7.pendingChangeRequest.body.oneOf.6.filters.walletTags.hasAll.items.[INDEX]","typeLabel":"string"},"minItems":1,"maxItems":100,"uniqueKey":"\\items.items.[INDEX].oneOf.7.pendingChangeRequest.body.oneOf.6.filters.walletTags.hasAll","typeLabel":"string[]"}},"additionalProperties":false,"uniqueKey":"\\items.items.[INDEX].oneOf.7.pendingChangeRequest.body.oneOf.6.filters.walletTags","typeLabel":"object"},"keyId":{"type":"object","properties":{"in":{"type":"array","items":{"type":"string","minLength":1,"maxLength":64,"pattern":"^key-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"Key id.","example":"key-01snl-t56gb-j8tsok0vn802p80i","uniqueKey":"\\items.items.[INDEX].oneOf.7.pendingChangeRequest.body.oneOf.6.filters.keyId.in.items.[INDEX]","typeLabel":"string"},"minItems":1,"maxItems":100,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.7.pendingChangeRequest.body.oneOf.6.filters.keyId.in","typeLabel":"string[]"}},"required":["in"],"additionalProperties":false,"uniqueKey":"\\items.items.[INDEX].oneOf.7.pendingChangeRequest.body.oneOf.6.filters.keyId","typeLabel":"object"},"keyStoreId":{"type":"object","properties":{"in":{"type":"array","items":{"type":"string","minLength":1,"maxLength":64,"pattern":"^store-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"Key store id.","example":"store-425nf-ebf0a-qq22t6qra51tj8j0","uniqueKey":"\\items.items.[INDEX].oneOf.7.pendingChangeRequest.body.oneOf.6.filters.keyStoreId.in.items.[INDEX]","typeLabel":"string"},"minItems":1,"maxItems":100,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.7.pendingChangeRequest.body.oneOf.6.filters.keyStoreId.in","typeLabel":"string[]"}},"required":["in"],"additionalProperties":false,"uniqueKey":"\\items.items.[INDEX].oneOf.7.pendingChangeRequest.body.oneOf.6.filters.keyStoreId","typeLabel":"object"}},"additionalProperties":false,"uniqueKey":"\\items.items.[INDEX].oneOf.7.pendingChangeRequest.body.oneOf.6.filters","typeLabel":"object"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.7.pendingChangeRequest.body.oneOf.6","typeLabel":"Wallets:IncomingTransaction · object"},{"type":"object","title":"Vaults:ReleaseQuarantine","required":["id","name","status","activityKind","rule","action"],"properties":{"id":{"type":"string","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.7.pendingChangeRequest.body.oneOf.7.id","typeLabel":"string"},"name":{"type":"string","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.7.pendingChangeRequest.body.oneOf.7.name","typeLabel":"string"},"status":{"type":"string","enum":["Active","Archived"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.7.pendingChangeRequest.body.oneOf.7.status","typeLabel":"enum\u003cstring>"},"activityKind":{"type":"string","enum":["Vaults:ReleaseQuarantine"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.7.pendingChangeRequest.body.oneOf.7.activityKind","typeLabel":"enum\u003cstring>"},"rule":{"oneOf":[{"type":"object","title":"AlwaysTrigger","description":"This rule will always be triggered, meaning that if this rule is defined on a policy, the policy will always trigger the policy action, regardless of the activity details.","required":["kind"],"properties":{"kind":{"type":"string","enum":["AlwaysTrigger"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.7.pendingChangeRequest.body.oneOf.7.rule.oneOf.0.kind","typeLabel":"enum\u003cstring>"},"configuration":{"type":"object","properties":{},"additionalProperties":false,"uniqueKey":"\\items.items.[INDEX].oneOf.7.pendingChangeRequest.body.oneOf.7.rule.oneOf.0.configuration","typeLabel":"object"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.7.pendingChangeRequest.body.oneOf.7.rule.oneOf.0","typeLabel":"AlwaysTrigger · object"},{"type":"object","title":"ChainalysisQuarantineScreening","description":"\n\u003cInfo>\nThis rule can only be used once the Chainalysis integration is activated from the Dfns dashboard settings. (see more on [Chainalysis](https://docs.dfns.co/integrations/aml-kyt/chainalysis) integration page).\n\u003c/Info>\n\nThis rule can be used on a policy of `activityKind` = `Vaults:ReleaseQuarantine`. When a quarantined vault deposit was screened by Chainalysis KYT, the screening result (alerts \u0026 direct exposure) is stored with the quarantine. When a release of the quarantined funds is requested, this rule evaluates that **stored** result — no new Chainalysis call is made. Based on the stored result and the configuration of this rule, the policy will be triggered.\n\nIf the quarantine has **no stored KYT result** (the result was not received yet, the network/asset is not supported by the Chainalysis integration, or screening failed), the rule **always triggers** (fail closed): the release then follows the policy action (approval or block).\n\n```json\n{\n \"rule\": {\n \"kind\": \"ChainalysisQuarantineScreening\",\n \"configuration\": {\n \"alerts\": {\n \"alertLevel\": \"LOW\",\n \"categoryIds\": []\n },\n \"exposures\": {\n \"direct\": {\n \"categoryIds\": []\n }\n }\n }\n }\n}\n```\n\n**Configuration**\n\n| Property | Type | Description |\n| --- | --- | --- |\n| `alerts`\u003cbr>\u003cbr>`.alertLevel`* | `string` | Minimum alert level above which the rule should trigger, if any alert was returned in the stored Chainalysis results. Can be `LOW`, `MEDIUM`, `HIGH`, or `SEVERE` |\n| `alerts`\u003cbr>\u003cbr>`.categoryIds`* | list of integers | List of Chainalysis category IDs (see [here](https://docs.chainalysis.com/api/kyt/#categories)). If you leave this list empty, alerts of any category will trigger the rule. Otherwise, if you only want the rule to trigger on specific categories, you can specify some in the list. |\n| `exposures`\u003cbr>\u003cbr>`.direct`\u003cbr>\u003cbr>`.categoryIds`* | list of integers | List of Chainalysis category IDs (see [here](https://docs.chainalysis.com/api/kyt/#categories)). If you leave this list empty, a direct exposure of any category in the stored results will trigger the rule. Otherwise, if you only want the rule to trigger on specific categories, you can specify some in the list. |\n","required":["kind","configuration"],"properties":{"kind":{"type":"string","enum":["ChainalysisQuarantineScreening"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.7.pendingChangeRequest.body.oneOf.7.rule.oneOf.1.kind","typeLabel":"enum\u003cstring>"},"configuration":{"type":"object","properties":{"alerts":{"type":"object","properties":{"alertLevel":{"type":"string","enum":["LOW","MEDIUM","HIGH","SEVERE"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.7.pendingChangeRequest.body.oneOf.7.rule.oneOf.1.configuration.alerts.alertLevel","typeLabel":"enum\u003cstring>"},"categoryIds":{"type":"array","items":{"type":"integer","exclusiveMinimum":0,"uniqueKey":"\\items.items.[INDEX].oneOf.7.pendingChangeRequest.body.oneOf.7.rule.oneOf.1.configuration.alerts.categoryIds.items.[INDEX]","typeLabel":"integer"},"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.7.pendingChangeRequest.body.oneOf.7.rule.oneOf.1.configuration.alerts.categoryIds","typeLabel":"integer[]"}},"required":["alertLevel","categoryIds"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.7.pendingChangeRequest.body.oneOf.7.rule.oneOf.1.configuration.alerts","typeLabel":"object"},"exposures":{"type":"object","properties":{"direct":{"type":"object","properties":{"categoryIds":{"type":"array","items":{"type":"integer","exclusiveMinimum":0,"uniqueKey":"\\items.items.[INDEX].oneOf.7.pendingChangeRequest.body.oneOf.7.rule.oneOf.1.configuration.exposures.direct.categoryIds.items.[INDEX]","typeLabel":"integer"},"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.7.pendingChangeRequest.body.oneOf.7.rule.oneOf.1.configuration.exposures.direct.categoryIds","typeLabel":"integer[]"}},"required":["categoryIds"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.7.pendingChangeRequest.body.oneOf.7.rule.oneOf.1.configuration.exposures.direct","typeLabel":"object"}},"required":["direct"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.7.pendingChangeRequest.body.oneOf.7.rule.oneOf.1.configuration.exposures","typeLabel":"object"}},"required":["alerts","exposures"],"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.7.pendingChangeRequest.body.oneOf.7.rule.oneOf.1.configuration","typeLabel":"object"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.7.pendingChangeRequest.body.oneOf.7.rule.oneOf.1","typeLabel":"ChainalysisQuarantineScreening · object"}],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.7.pendingChangeRequest.body.oneOf.7.rule","typeLabel":"AlwaysTrigger · object | ChainalysisQuarantineScreening · object"},"action":{"oneOf":[{"type":"object","title":"RequestApproval","description":"\nThis action means that activity will first require an Approval process to be completed before it can be executed (or be aborted if someone rejects it during the approval process).\n\nOne or several groups of approvers need to be specified. These groups define who is allowed to approve / reject an activity.\n\nThe activity will only be executed if all approver groups reach their \"quorum\" of approvals. Otherwise, if any one user within any approver group rejects, then the activity is aborted and the call is not executed.\n\nThe example below shows a `RequestApproval` action, configured with one approval group requiring 2 approvals amongst three specific users.\n\n```json\n{\n \"action\": {\n \"kind\": \"RequestApproval\",\n \"autoRejectTimeout\": 60, // minutes\n \"approvalGroups\": [\n {\n \"name\": \"Admins\",\n \"quorum\": 2, // only 2 approvers required in that group \n \"approvers\": {\n \"userId\": {\n \"in\": [\"us-...1\", \"us-...2\", \"us-...3\"],\n }\n }\n }\n ],\n\n }\n}\n```\n\n**Don't lock yourself up**\n\nBy default, users cannot approve an activity they initiated themselves, even if they are in an approval group. To allow this, you must set `initiatorCanApprove: true`.\n\n*Example 1:* For any wallet transfer, a policy is setup to require approval from **1 specific admin user** (eg. the CEO). `initiatorCanApprove` was not set to `true`. If the CEO himself initiates a transfer, no-one can approve his transfer and it's stuck.\n\n*Example 2:* Company has only 3 users. A policy is setup to require approval from **any 3 users** (`quorum: 3`) for any modification of a policy. `initiatorCanApprove` was not set to `true`. In this case, they are locked, and the policy cannot be modified: whoever requests a modification cannot approve, and the policy is therefore always missing one approver. To unlock, they would need to invite a new user and give him the rights to approve as well.\n ","required":["kind","approvalGroups"],"properties":{"kind":{"type":"string","enum":["RequestApproval"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.7.pendingChangeRequest.body.oneOf.7.action.oneOf.0.kind","typeLabel":"enum\u003cstring>"},"approvalGroups":{"type":"array","items":{"type":"object","properties":{"quorum":{"type":"integer","minimum":1,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.7.pendingChangeRequest.body.oneOf.7.action.oneOf.0.approvalGroups.items.[INDEX].quorum","typeLabel":"integer"},"approvers":{"type":"object","properties":{"userId":{"type":"object","properties":{"in":{"type":"array","items":{"type":"string","minLength":1,"uniqueKey":"\\items.items.[INDEX].oneOf.7.pendingChangeRequest.body.oneOf.7.action.oneOf.0.approvalGroups.items.[INDEX].approvers.userId.in.items.[INDEX]","typeLabel":"string"},"minItems":1,"maxItems":100,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.7.pendingChangeRequest.body.oneOf.7.action.oneOf.0.approvalGroups.items.[INDEX].approvers.userId.in","typeLabel":"string[]"}},"required":["in"],"additionalProperties":false,"description":"Users and service accounts who may approve.","uniqueKey":"\\items.items.[INDEX].oneOf.7.pendingChangeRequest.body.oneOf.7.action.oneOf.0.approvalGroups.items.[INDEX].approvers.userId","typeLabel":"object"},"userGroupId":{"type":"object","properties":{"in":{"type":"array","items":{"type":"string","minLength":1,"maxLength":64,"pattern":"^ug-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"User group id.","example":"ug-139tf-f58l8-lsbt6dp47lfsdvgh","uniqueKey":"\\items.items.[INDEX].oneOf.7.pendingChangeRequest.body.oneOf.7.action.oneOf.0.approvalGroups.items.[INDEX].approvers.userGroupId.in.items.[INDEX]","typeLabel":"string"},"minItems":1,"maxItems":100,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.7.pendingChangeRequest.body.oneOf.7.action.oneOf.0.approvalGroups.items.[INDEX].approvers.userGroupId.in","typeLabel":"string[]"}},"required":["in"],"additionalProperties":false,"description":"User groups whose members may approve.","uniqueKey":"\\items.items.[INDEX].oneOf.7.pendingChangeRequest.body.oneOf.7.action.oneOf.0.approvalGroups.items.[INDEX].approvers.userGroupId","typeLabel":"object"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.7.pendingChangeRequest.body.oneOf.7.action.oneOf.0.approvalGroups.items.[INDEX].approvers","typeLabel":"object"},"name":{"type":"string","uniqueKey":"\\items.items.[INDEX].oneOf.7.pendingChangeRequest.body.oneOf.7.action.oneOf.0.approvalGroups.items.[INDEX].name","typeLabel":"string"},"initiatorCanApprove":{"type":"boolean","description":"Whether the initiator of the activity can participate in the approval.","uniqueKey":"\\items.items.[INDEX].oneOf.7.pendingChangeRequest.body.oneOf.7.action.oneOf.0.approvalGroups.items.[INDEX].initiatorCanApprove","typeLabel":"boolean"},"serviceAccountsCanApprove":{"type":"boolean","description":"Whether service accounts can participate in the approval for this group.","uniqueKey":"\\items.items.[INDEX].oneOf.7.pendingChangeRequest.body.oneOf.7.action.oneOf.0.approvalGroups.items.[INDEX].serviceAccountsCanApprove","typeLabel":"boolean"}},"required":["quorum","approvers"],"additionalProperties":false,"uniqueKey":"\\items.items.[INDEX].oneOf.7.pendingChangeRequest.body.oneOf.7.action.oneOf.0.approvalGroups.items.[INDEX]","typeLabel":"object"},"minItems":1,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.7.pendingChangeRequest.body.oneOf.7.action.oneOf.0.approvalGroups","typeLabel":"object[]"},"autoRejectTimeout":{"oneOf":[{"type":"integer","minimum":1,"uniqueKey":"\\items.items.[INDEX].oneOf.7.pendingChangeRequest.body.oneOf.7.action.oneOf.0.autoRejectTimeout.oneOf.0","typeLabel":"integer"},{"type":"null","minimum":1,"uniqueKey":"\\items.items.[INDEX].oneOf.7.pendingChangeRequest.body.oneOf.7.action.oneOf.0.autoRejectTimeout.oneOf.1","typeLabel":"null"}],"uniqueKey":"\\items.items.[INDEX].oneOf.7.pendingChangeRequest.body.oneOf.7.action.oneOf.0.autoRejectTimeout","typeLabel":"integer | null"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.7.pendingChangeRequest.body.oneOf.7.action.oneOf.0","typeLabel":"RequestApproval · object"},{"type":"object","title":"Block","description":"This action means that the activity will be blocked if the policy is triggered.\n\n```json\n{\n \"action\": {\n \"kind\": \"Block\"\n }\n}\n```\n","required":["kind"],"properties":{"kind":{"type":"string","enum":["Block"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.7.pendingChangeRequest.body.oneOf.7.action.oneOf.1.kind","typeLabel":"enum\u003cstring>"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.7.pendingChangeRequest.body.oneOf.7.action.oneOf.1","typeLabel":"Block · object"}],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.7.pendingChangeRequest.body.oneOf.7.action","typeLabel":"RequestApproval · object | Block · object"},"dateCreated":{"type":"string","uniqueKey":"\\items.items.[INDEX].oneOf.7.pendingChangeRequest.body.oneOf.7.dateCreated","typeLabel":"string"},"dateUpdated":{"type":"string","uniqueKey":"\\items.items.[INDEX].oneOf.7.pendingChangeRequest.body.oneOf.7.dateUpdated","typeLabel":"string"},"filters":{"type":"object","properties":{"vaultId":{"type":"object","properties":{"in":{"type":"array","items":{"type":"string","minLength":1,"uniqueKey":"\\items.items.[INDEX].oneOf.7.pendingChangeRequest.body.oneOf.7.filters.vaultId.in.items.[INDEX]","typeLabel":"string"},"minItems":1,"maxItems":100,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.7.pendingChangeRequest.body.oneOf.7.filters.vaultId.in","typeLabel":"string[]"}},"required":["in"],"additionalProperties":false,"uniqueKey":"\\items.items.[INDEX].oneOf.7.pendingChangeRequest.body.oneOf.7.filters.vaultId","typeLabel":"object"},"vaultTags":{"type":"object","properties":{"hasAny":{"type":"array","items":{"type":"string","minLength":1,"uniqueKey":"\\items.items.[INDEX].oneOf.7.pendingChangeRequest.body.oneOf.7.filters.vaultTags.hasAny.items.[INDEX]","typeLabel":"string"},"minItems":1,"maxItems":100,"uniqueKey":"\\items.items.[INDEX].oneOf.7.pendingChangeRequest.body.oneOf.7.filters.vaultTags.hasAny","typeLabel":"string[]"},"hasAll":{"type":"array","items":{"type":"string","minLength":1,"uniqueKey":"\\items.items.[INDEX].oneOf.7.pendingChangeRequest.body.oneOf.7.filters.vaultTags.hasAll.items.[INDEX]","typeLabel":"string"},"minItems":1,"maxItems":100,"uniqueKey":"\\items.items.[INDEX].oneOf.7.pendingChangeRequest.body.oneOf.7.filters.vaultTags.hasAll","typeLabel":"string[]"}},"additionalProperties":false,"uniqueKey":"\\items.items.[INDEX].oneOf.7.pendingChangeRequest.body.oneOf.7.filters.vaultTags","typeLabel":"object"}},"additionalProperties":false,"uniqueKey":"\\items.items.[INDEX].oneOf.7.pendingChangeRequest.body.oneOf.7.filters","typeLabel":"object"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.7.pendingChangeRequest.body.oneOf.7","typeLabel":"Vaults:ReleaseQuarantine · object"},{"type":"object","title":"Vaults:CreateLock","required":["id","name","status","activityKind","rule","action"],"properties":{"id":{"type":"string","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.7.pendingChangeRequest.body.oneOf.8.id","typeLabel":"string"},"name":{"type":"string","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.7.pendingChangeRequest.body.oneOf.8.name","typeLabel":"string"},"status":{"type":"string","enum":["Active","Archived"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.7.pendingChangeRequest.body.oneOf.8.status","typeLabel":"enum\u003cstring>"},"activityKind":{"type":"string","enum":["Vaults:CreateLock"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.7.pendingChangeRequest.body.oneOf.8.activityKind","typeLabel":"enum\u003cstring>"},"rule":{"type":"object","title":"AlwaysTrigger","description":"This rule will always be triggered, meaning that if this rule is defined on a policy, the policy will always trigger the policy action, regardless of the activity details.","required":["kind"],"properties":{"kind":{"type":"string","enum":["AlwaysTrigger"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.7.pendingChangeRequest.body.oneOf.8.rule.kind","typeLabel":"enum\u003cstring>"},"configuration":{"type":"object","properties":{},"additionalProperties":false,"uniqueKey":"\\items.items.[INDEX].oneOf.7.pendingChangeRequest.body.oneOf.8.rule.configuration","typeLabel":"object"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.7.pendingChangeRequest.body.oneOf.8.rule","typeLabel":"AlwaysTrigger · object"},"action":{"oneOf":[{"type":"object","title":"RequestApproval","description":"\nThis action means that activity will first require an Approval process to be completed before it can be executed (or be aborted if someone rejects it during the approval process).\n\nOne or several groups of approvers need to be specified. These groups define who is allowed to approve / reject an activity.\n\nThe activity will only be executed if all approver groups reach their \"quorum\" of approvals. Otherwise, if any one user within any approver group rejects, then the activity is aborted and the call is not executed.\n\nThe example below shows a `RequestApproval` action, configured with one approval group requiring 2 approvals amongst three specific users.\n\n```json\n{\n \"action\": {\n \"kind\": \"RequestApproval\",\n \"autoRejectTimeout\": 60, // minutes\n \"approvalGroups\": [\n {\n \"name\": \"Admins\",\n \"quorum\": 2, // only 2 approvers required in that group \n \"approvers\": {\n \"userId\": {\n \"in\": [\"us-...1\", \"us-...2\", \"us-...3\"],\n }\n }\n }\n ],\n\n }\n}\n```\n\n**Don't lock yourself up**\n\nBy default, users cannot approve an activity they initiated themselves, even if they are in an approval group. To allow this, you must set `initiatorCanApprove: true`.\n\n*Example 1:* For any wallet transfer, a policy is setup to require approval from **1 specific admin user** (eg. the CEO). `initiatorCanApprove` was not set to `true`. If the CEO himself initiates a transfer, no-one can approve his transfer and it's stuck.\n\n*Example 2:* Company has only 3 users. A policy is setup to require approval from **any 3 users** (`quorum: 3`) for any modification of a policy. `initiatorCanApprove` was not set to `true`. In this case, they are locked, and the policy cannot be modified: whoever requests a modification cannot approve, and the policy is therefore always missing one approver. To unlock, they would need to invite a new user and give him the rights to approve as well.\n ","required":["kind","approvalGroups"],"properties":{"kind":{"type":"string","enum":["RequestApproval"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.7.pendingChangeRequest.body.oneOf.8.action.oneOf.0.kind","typeLabel":"enum\u003cstring>"},"approvalGroups":{"type":"array","items":{"type":"object","properties":{"quorum":{"type":"integer","minimum":1,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.7.pendingChangeRequest.body.oneOf.8.action.oneOf.0.approvalGroups.items.[INDEX].quorum","typeLabel":"integer"},"approvers":{"type":"object","properties":{"userId":{"type":"object","properties":{"in":{"type":"array","items":{"type":"string","minLength":1,"uniqueKey":"\\items.items.[INDEX].oneOf.7.pendingChangeRequest.body.oneOf.8.action.oneOf.0.approvalGroups.items.[INDEX].approvers.userId.in.items.[INDEX]","typeLabel":"string"},"minItems":1,"maxItems":100,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.7.pendingChangeRequest.body.oneOf.8.action.oneOf.0.approvalGroups.items.[INDEX].approvers.userId.in","typeLabel":"string[]"}},"required":["in"],"additionalProperties":false,"description":"Users and service accounts who may approve.","uniqueKey":"\\items.items.[INDEX].oneOf.7.pendingChangeRequest.body.oneOf.8.action.oneOf.0.approvalGroups.items.[INDEX].approvers.userId","typeLabel":"object"},"userGroupId":{"type":"object","properties":{"in":{"type":"array","items":{"type":"string","minLength":1,"maxLength":64,"pattern":"^ug-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"User group id.","example":"ug-139tf-f58l8-lsbt6dp47lfsdvgh","uniqueKey":"\\items.items.[INDEX].oneOf.7.pendingChangeRequest.body.oneOf.8.action.oneOf.0.approvalGroups.items.[INDEX].approvers.userGroupId.in.items.[INDEX]","typeLabel":"string"},"minItems":1,"maxItems":100,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.7.pendingChangeRequest.body.oneOf.8.action.oneOf.0.approvalGroups.items.[INDEX].approvers.userGroupId.in","typeLabel":"string[]"}},"required":["in"],"additionalProperties":false,"description":"User groups whose members may approve.","uniqueKey":"\\items.items.[INDEX].oneOf.7.pendingChangeRequest.body.oneOf.8.action.oneOf.0.approvalGroups.items.[INDEX].approvers.userGroupId","typeLabel":"object"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.7.pendingChangeRequest.body.oneOf.8.action.oneOf.0.approvalGroups.items.[INDEX].approvers","typeLabel":"object"},"name":{"type":"string","uniqueKey":"\\items.items.[INDEX].oneOf.7.pendingChangeRequest.body.oneOf.8.action.oneOf.0.approvalGroups.items.[INDEX].name","typeLabel":"string"},"initiatorCanApprove":{"type":"boolean","description":"Whether the initiator of the activity can participate in the approval.","uniqueKey":"\\items.items.[INDEX].oneOf.7.pendingChangeRequest.body.oneOf.8.action.oneOf.0.approvalGroups.items.[INDEX].initiatorCanApprove","typeLabel":"boolean"},"serviceAccountsCanApprove":{"type":"boolean","description":"Whether service accounts can participate in the approval for this group.","uniqueKey":"\\items.items.[INDEX].oneOf.7.pendingChangeRequest.body.oneOf.8.action.oneOf.0.approvalGroups.items.[INDEX].serviceAccountsCanApprove","typeLabel":"boolean"}},"required":["quorum","approvers"],"additionalProperties":false,"uniqueKey":"\\items.items.[INDEX].oneOf.7.pendingChangeRequest.body.oneOf.8.action.oneOf.0.approvalGroups.items.[INDEX]","typeLabel":"object"},"minItems":1,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.7.pendingChangeRequest.body.oneOf.8.action.oneOf.0.approvalGroups","typeLabel":"object[]"},"autoRejectTimeout":{"oneOf":[{"type":"integer","minimum":1,"uniqueKey":"\\items.items.[INDEX].oneOf.7.pendingChangeRequest.body.oneOf.8.action.oneOf.0.autoRejectTimeout.oneOf.0","typeLabel":"integer"},{"type":"null","minimum":1,"uniqueKey":"\\items.items.[INDEX].oneOf.7.pendingChangeRequest.body.oneOf.8.action.oneOf.0.autoRejectTimeout.oneOf.1","typeLabel":"null"}],"uniqueKey":"\\items.items.[INDEX].oneOf.7.pendingChangeRequest.body.oneOf.8.action.oneOf.0.autoRejectTimeout","typeLabel":"integer | null"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.7.pendingChangeRequest.body.oneOf.8.action.oneOf.0","typeLabel":"RequestApproval · object"},{"type":"object","title":"Block","description":"This action means that the activity will be blocked if the policy is triggered.\n\n```json\n{\n \"action\": {\n \"kind\": \"Block\"\n }\n}\n```\n","required":["kind"],"properties":{"kind":{"type":"string","enum":["Block"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.7.pendingChangeRequest.body.oneOf.8.action.oneOf.1.kind","typeLabel":"enum\u003cstring>"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.7.pendingChangeRequest.body.oneOf.8.action.oneOf.1","typeLabel":"Block · object"}],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.7.pendingChangeRequest.body.oneOf.8.action","typeLabel":"RequestApproval · object | Block · object"},"dateCreated":{"type":"string","uniqueKey":"\\items.items.[INDEX].oneOf.7.pendingChangeRequest.body.oneOf.8.dateCreated","typeLabel":"string"},"dateUpdated":{"type":"string","uniqueKey":"\\items.items.[INDEX].oneOf.7.pendingChangeRequest.body.oneOf.8.dateUpdated","typeLabel":"string"},"filters":{"type":"object","properties":{"vaultId":{"type":"object","properties":{"in":{"type":"array","items":{"type":"string","minLength":1,"uniqueKey":"\\items.items.[INDEX].oneOf.7.pendingChangeRequest.body.oneOf.8.filters.vaultId.in.items.[INDEX]","typeLabel":"string"},"minItems":1,"maxItems":100,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.7.pendingChangeRequest.body.oneOf.8.filters.vaultId.in","typeLabel":"string[]"}},"required":["in"],"additionalProperties":false,"uniqueKey":"\\items.items.[INDEX].oneOf.7.pendingChangeRequest.body.oneOf.8.filters.vaultId","typeLabel":"object"},"vaultTags":{"type":"object","properties":{"hasAny":{"type":"array","items":{"type":"string","minLength":1,"uniqueKey":"\\items.items.[INDEX].oneOf.7.pendingChangeRequest.body.oneOf.8.filters.vaultTags.hasAny.items.[INDEX]","typeLabel":"string"},"minItems":1,"maxItems":100,"uniqueKey":"\\items.items.[INDEX].oneOf.7.pendingChangeRequest.body.oneOf.8.filters.vaultTags.hasAny","typeLabel":"string[]"},"hasAll":{"type":"array","items":{"type":"string","minLength":1,"uniqueKey":"\\items.items.[INDEX].oneOf.7.pendingChangeRequest.body.oneOf.8.filters.vaultTags.hasAll.items.[INDEX]","typeLabel":"string"},"minItems":1,"maxItems":100,"uniqueKey":"\\items.items.[INDEX].oneOf.7.pendingChangeRequest.body.oneOf.8.filters.vaultTags.hasAll","typeLabel":"string[]"}},"additionalProperties":false,"uniqueKey":"\\items.items.[INDEX].oneOf.7.pendingChangeRequest.body.oneOf.8.filters.vaultTags","typeLabel":"object"}},"additionalProperties":false,"uniqueKey":"\\items.items.[INDEX].oneOf.7.pendingChangeRequest.body.oneOf.8.filters","typeLabel":"object"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.7.pendingChangeRequest.body.oneOf.8","typeLabel":"Vaults:CreateLock · object"},{"type":"object","title":"Vaults:ReplaceLock","required":["id","name","status","activityKind","rule","action"],"properties":{"id":{"type":"string","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.7.pendingChangeRequest.body.oneOf.9.id","typeLabel":"string"},"name":{"type":"string","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.7.pendingChangeRequest.body.oneOf.9.name","typeLabel":"string"},"status":{"type":"string","enum":["Active","Archived"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.7.pendingChangeRequest.body.oneOf.9.status","typeLabel":"enum\u003cstring>"},"activityKind":{"type":"string","enum":["Vaults:ReplaceLock"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.7.pendingChangeRequest.body.oneOf.9.activityKind","typeLabel":"enum\u003cstring>"},"rule":{"type":"object","title":"AlwaysTrigger","description":"This rule will always be triggered, meaning that if this rule is defined on a policy, the policy will always trigger the policy action, regardless of the activity details.","required":["kind"],"properties":{"kind":{"type":"string","enum":["AlwaysTrigger"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.7.pendingChangeRequest.body.oneOf.9.rule.kind","typeLabel":"enum\u003cstring>"},"configuration":{"type":"object","properties":{},"additionalProperties":false,"uniqueKey":"\\items.items.[INDEX].oneOf.7.pendingChangeRequest.body.oneOf.9.rule.configuration","typeLabel":"object"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.7.pendingChangeRequest.body.oneOf.9.rule","typeLabel":"AlwaysTrigger · object"},"action":{"oneOf":[{"type":"object","title":"RequestApproval","description":"\nThis action means that activity will first require an Approval process to be completed before it can be executed (or be aborted if someone rejects it during the approval process).\n\nOne or several groups of approvers need to be specified. These groups define who is allowed to approve / reject an activity.\n\nThe activity will only be executed if all approver groups reach their \"quorum\" of approvals. Otherwise, if any one user within any approver group rejects, then the activity is aborted and the call is not executed.\n\nThe example below shows a `RequestApproval` action, configured with one approval group requiring 2 approvals amongst three specific users.\n\n```json\n{\n \"action\": {\n \"kind\": \"RequestApproval\",\n \"autoRejectTimeout\": 60, // minutes\n \"approvalGroups\": [\n {\n \"name\": \"Admins\",\n \"quorum\": 2, // only 2 approvers required in that group \n \"approvers\": {\n \"userId\": {\n \"in\": [\"us-...1\", \"us-...2\", \"us-...3\"],\n }\n }\n }\n ],\n\n }\n}\n```\n\n**Don't lock yourself up**\n\nBy default, users cannot approve an activity they initiated themselves, even if they are in an approval group. To allow this, you must set `initiatorCanApprove: true`.\n\n*Example 1:* For any wallet transfer, a policy is setup to require approval from **1 specific admin user** (eg. the CEO). `initiatorCanApprove` was not set to `true`. If the CEO himself initiates a transfer, no-one can approve his transfer and it's stuck.\n\n*Example 2:* Company has only 3 users. A policy is setup to require approval from **any 3 users** (`quorum: 3`) for any modification of a policy. `initiatorCanApprove` was not set to `true`. In this case, they are locked, and the policy cannot be modified: whoever requests a modification cannot approve, and the policy is therefore always missing one approver. To unlock, they would need to invite a new user and give him the rights to approve as well.\n ","required":["kind","approvalGroups"],"properties":{"kind":{"type":"string","enum":["RequestApproval"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.7.pendingChangeRequest.body.oneOf.9.action.oneOf.0.kind","typeLabel":"enum\u003cstring>"},"approvalGroups":{"type":"array","items":{"type":"object","properties":{"quorum":{"type":"integer","minimum":1,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.7.pendingChangeRequest.body.oneOf.9.action.oneOf.0.approvalGroups.items.[INDEX].quorum","typeLabel":"integer"},"approvers":{"type":"object","properties":{"userId":{"type":"object","properties":{"in":{"type":"array","items":{"type":"string","minLength":1,"uniqueKey":"\\items.items.[INDEX].oneOf.7.pendingChangeRequest.body.oneOf.9.action.oneOf.0.approvalGroups.items.[INDEX].approvers.userId.in.items.[INDEX]","typeLabel":"string"},"minItems":1,"maxItems":100,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.7.pendingChangeRequest.body.oneOf.9.action.oneOf.0.approvalGroups.items.[INDEX].approvers.userId.in","typeLabel":"string[]"}},"required":["in"],"additionalProperties":false,"description":"Users and service accounts who may approve.","uniqueKey":"\\items.items.[INDEX].oneOf.7.pendingChangeRequest.body.oneOf.9.action.oneOf.0.approvalGroups.items.[INDEX].approvers.userId","typeLabel":"object"},"userGroupId":{"type":"object","properties":{"in":{"type":"array","items":{"type":"string","minLength":1,"maxLength":64,"pattern":"^ug-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"User group id.","example":"ug-139tf-f58l8-lsbt6dp47lfsdvgh","uniqueKey":"\\items.items.[INDEX].oneOf.7.pendingChangeRequest.body.oneOf.9.action.oneOf.0.approvalGroups.items.[INDEX].approvers.userGroupId.in.items.[INDEX]","typeLabel":"string"},"minItems":1,"maxItems":100,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.7.pendingChangeRequest.body.oneOf.9.action.oneOf.0.approvalGroups.items.[INDEX].approvers.userGroupId.in","typeLabel":"string[]"}},"required":["in"],"additionalProperties":false,"description":"User groups whose members may approve.","uniqueKey":"\\items.items.[INDEX].oneOf.7.pendingChangeRequest.body.oneOf.9.action.oneOf.0.approvalGroups.items.[INDEX].approvers.userGroupId","typeLabel":"object"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.7.pendingChangeRequest.body.oneOf.9.action.oneOf.0.approvalGroups.items.[INDEX].approvers","typeLabel":"object"},"name":{"type":"string","uniqueKey":"\\items.items.[INDEX].oneOf.7.pendingChangeRequest.body.oneOf.9.action.oneOf.0.approvalGroups.items.[INDEX].name","typeLabel":"string"},"initiatorCanApprove":{"type":"boolean","description":"Whether the initiator of the activity can participate in the approval.","uniqueKey":"\\items.items.[INDEX].oneOf.7.pendingChangeRequest.body.oneOf.9.action.oneOf.0.approvalGroups.items.[INDEX].initiatorCanApprove","typeLabel":"boolean"},"serviceAccountsCanApprove":{"type":"boolean","description":"Whether service accounts can participate in the approval for this group.","uniqueKey":"\\items.items.[INDEX].oneOf.7.pendingChangeRequest.body.oneOf.9.action.oneOf.0.approvalGroups.items.[INDEX].serviceAccountsCanApprove","typeLabel":"boolean"}},"required":["quorum","approvers"],"additionalProperties":false,"uniqueKey":"\\items.items.[INDEX].oneOf.7.pendingChangeRequest.body.oneOf.9.action.oneOf.0.approvalGroups.items.[INDEX]","typeLabel":"object"},"minItems":1,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.7.pendingChangeRequest.body.oneOf.9.action.oneOf.0.approvalGroups","typeLabel":"object[]"},"autoRejectTimeout":{"oneOf":[{"type":"integer","minimum":1,"uniqueKey":"\\items.items.[INDEX].oneOf.7.pendingChangeRequest.body.oneOf.9.action.oneOf.0.autoRejectTimeout.oneOf.0","typeLabel":"integer"},{"type":"null","minimum":1,"uniqueKey":"\\items.items.[INDEX].oneOf.7.pendingChangeRequest.body.oneOf.9.action.oneOf.0.autoRejectTimeout.oneOf.1","typeLabel":"null"}],"uniqueKey":"\\items.items.[INDEX].oneOf.7.pendingChangeRequest.body.oneOf.9.action.oneOf.0.autoRejectTimeout","typeLabel":"integer | null"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.7.pendingChangeRequest.body.oneOf.9.action.oneOf.0","typeLabel":"RequestApproval · object"},{"type":"object","title":"Block","description":"This action means that the activity will be blocked if the policy is triggered.\n\n```json\n{\n \"action\": {\n \"kind\": \"Block\"\n }\n}\n```\n","required":["kind"],"properties":{"kind":{"type":"string","enum":["Block"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.7.pendingChangeRequest.body.oneOf.9.action.oneOf.1.kind","typeLabel":"enum\u003cstring>"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.7.pendingChangeRequest.body.oneOf.9.action.oneOf.1","typeLabel":"Block · object"}],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.7.pendingChangeRequest.body.oneOf.9.action","typeLabel":"RequestApproval · object | Block · object"},"dateCreated":{"type":"string","uniqueKey":"\\items.items.[INDEX].oneOf.7.pendingChangeRequest.body.oneOf.9.dateCreated","typeLabel":"string"},"dateUpdated":{"type":"string","uniqueKey":"\\items.items.[INDEX].oneOf.7.pendingChangeRequest.body.oneOf.9.dateUpdated","typeLabel":"string"},"filters":{"type":"object","properties":{"vaultId":{"type":"object","properties":{"in":{"type":"array","items":{"type":"string","minLength":1,"uniqueKey":"\\items.items.[INDEX].oneOf.7.pendingChangeRequest.body.oneOf.9.filters.vaultId.in.items.[INDEX]","typeLabel":"string"},"minItems":1,"maxItems":100,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.7.pendingChangeRequest.body.oneOf.9.filters.vaultId.in","typeLabel":"string[]"}},"required":["in"],"additionalProperties":false,"uniqueKey":"\\items.items.[INDEX].oneOf.7.pendingChangeRequest.body.oneOf.9.filters.vaultId","typeLabel":"object"},"vaultTags":{"type":"object","properties":{"hasAny":{"type":"array","items":{"type":"string","minLength":1,"uniqueKey":"\\items.items.[INDEX].oneOf.7.pendingChangeRequest.body.oneOf.9.filters.vaultTags.hasAny.items.[INDEX]","typeLabel":"string"},"minItems":1,"maxItems":100,"uniqueKey":"\\items.items.[INDEX].oneOf.7.pendingChangeRequest.body.oneOf.9.filters.vaultTags.hasAny","typeLabel":"string[]"},"hasAll":{"type":"array","items":{"type":"string","minLength":1,"uniqueKey":"\\items.items.[INDEX].oneOf.7.pendingChangeRequest.body.oneOf.9.filters.vaultTags.hasAll.items.[INDEX]","typeLabel":"string"},"minItems":1,"maxItems":100,"uniqueKey":"\\items.items.[INDEX].oneOf.7.pendingChangeRequest.body.oneOf.9.filters.vaultTags.hasAll","typeLabel":"string[]"}},"additionalProperties":false,"uniqueKey":"\\items.items.[INDEX].oneOf.7.pendingChangeRequest.body.oneOf.9.filters.vaultTags","typeLabel":"object"}},"additionalProperties":false,"uniqueKey":"\\items.items.[INDEX].oneOf.7.pendingChangeRequest.body.oneOf.9.filters","typeLabel":"object"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.7.pendingChangeRequest.body.oneOf.9","typeLabel":"Vaults:ReplaceLock · object"},{"type":"object","title":"UserAction","required":["id","name","status","activityKind","rule","action"],"properties":{"id":{"type":"string","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.7.pendingChangeRequest.body.oneOf.10.id","typeLabel":"string"},"name":{"type":"string","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.7.pendingChangeRequest.body.oneOf.10.name","typeLabel":"string"},"status":{"type":"string","enum":["Active","Archived"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.7.pendingChangeRequest.body.oneOf.10.status","typeLabel":"enum\u003cstring>"},"activityKind":{"type":"string","enum":["UserAction"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.7.pendingChangeRequest.body.oneOf.10.activityKind","typeLabel":"enum\u003cstring>"},"rule":{"type":"object","properties":{"kind":{"type":"string","enum":["UserAction"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.7.pendingChangeRequest.body.oneOf.10.rule.kind","typeLabel":"enum\u003cstring>"},"configuration":{"type":"object","properties":{"userActionKinds":{"type":"array","items":{"type":"string","uniqueKey":"\\items.items.[INDEX].oneOf.7.pendingChangeRequest.body.oneOf.10.rule.configuration.userActionKinds.items.[INDEX]","typeLabel":"string"},"minItems":1,"description":"The user actions this rule applies to. The rule triggers on any of them.","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.7.pendingChangeRequest.body.oneOf.10.rule.configuration.userActionKinds","typeLabel":"string[]"}},"required":["userActionKinds"],"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.7.pendingChangeRequest.body.oneOf.10.rule.configuration","typeLabel":"object"}},"required":["kind","configuration"],"additionalProperties":false,"title":"UserAction","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.7.pendingChangeRequest.body.oneOf.10.rule","typeLabel":"UserAction · object"},"action":{"oneOf":[{"type":"object","title":"RequestApproval","description":"\nThis action means that activity will first require an Approval process to be completed before it can be executed (or be aborted if someone rejects it during the approval process).\n\nOne or several groups of approvers need to be specified. These groups define who is allowed to approve / reject an activity.\n\nThe activity will only be executed if all approver groups reach their \"quorum\" of approvals. Otherwise, if any one user within any approver group rejects, then the activity is aborted and the call is not executed.\n\nThe example below shows a `RequestApproval` action, configured with one approval group requiring 2 approvals amongst three specific users.\n\n```json\n{\n \"action\": {\n \"kind\": \"RequestApproval\",\n \"autoRejectTimeout\": 60, // minutes\n \"approvalGroups\": [\n {\n \"name\": \"Admins\",\n \"quorum\": 2, // only 2 approvers required in that group \n \"approvers\": {\n \"userId\": {\n \"in\": [\"us-...1\", \"us-...2\", \"us-...3\"],\n }\n }\n }\n ],\n\n }\n}\n```\n\n**Don't lock yourself up**\n\nBy default, users cannot approve an activity they initiated themselves, even if they are in an approval group. To allow this, you must set `initiatorCanApprove: true`.\n\n*Example 1:* For any wallet transfer, a policy is setup to require approval from **1 specific admin user** (eg. the CEO). `initiatorCanApprove` was not set to `true`. If the CEO himself initiates a transfer, no-one can approve his transfer and it's stuck.\n\n*Example 2:* Company has only 3 users. A policy is setup to require approval from **any 3 users** (`quorum: 3`) for any modification of a policy. `initiatorCanApprove` was not set to `true`. In this case, they are locked, and the policy cannot be modified: whoever requests a modification cannot approve, and the policy is therefore always missing one approver. To unlock, they would need to invite a new user and give him the rights to approve as well.\n ","required":["kind","approvalGroups"],"properties":{"kind":{"type":"string","enum":["RequestApproval"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.7.pendingChangeRequest.body.oneOf.10.action.oneOf.0.kind","typeLabel":"enum\u003cstring>"},"approvalGroups":{"type":"array","items":{"type":"object","properties":{"quorum":{"type":"integer","minimum":1,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.7.pendingChangeRequest.body.oneOf.10.action.oneOf.0.approvalGroups.items.[INDEX].quorum","typeLabel":"integer"},"approvers":{"type":"object","properties":{"userId":{"type":"object","properties":{"in":{"type":"array","items":{"type":"string","minLength":1,"uniqueKey":"\\items.items.[INDEX].oneOf.7.pendingChangeRequest.body.oneOf.10.action.oneOf.0.approvalGroups.items.[INDEX].approvers.userId.in.items.[INDEX]","typeLabel":"string"},"minItems":1,"maxItems":100,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.7.pendingChangeRequest.body.oneOf.10.action.oneOf.0.approvalGroups.items.[INDEX].approvers.userId.in","typeLabel":"string[]"}},"required":["in"],"additionalProperties":false,"description":"Users and service accounts who may approve.","uniqueKey":"\\items.items.[INDEX].oneOf.7.pendingChangeRequest.body.oneOf.10.action.oneOf.0.approvalGroups.items.[INDEX].approvers.userId","typeLabel":"object"},"userGroupId":{"type":"object","properties":{"in":{"type":"array","items":{"type":"string","minLength":1,"maxLength":64,"pattern":"^ug-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"User group id.","example":"ug-139tf-f58l8-lsbt6dp47lfsdvgh","uniqueKey":"\\items.items.[INDEX].oneOf.7.pendingChangeRequest.body.oneOf.10.action.oneOf.0.approvalGroups.items.[INDEX].approvers.userGroupId.in.items.[INDEX]","typeLabel":"string"},"minItems":1,"maxItems":100,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.7.pendingChangeRequest.body.oneOf.10.action.oneOf.0.approvalGroups.items.[INDEX].approvers.userGroupId.in","typeLabel":"string[]"}},"required":["in"],"additionalProperties":false,"description":"User groups whose members may approve.","uniqueKey":"\\items.items.[INDEX].oneOf.7.pendingChangeRequest.body.oneOf.10.action.oneOf.0.approvalGroups.items.[INDEX].approvers.userGroupId","typeLabel":"object"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.7.pendingChangeRequest.body.oneOf.10.action.oneOf.0.approvalGroups.items.[INDEX].approvers","typeLabel":"object"},"name":{"type":"string","uniqueKey":"\\items.items.[INDEX].oneOf.7.pendingChangeRequest.body.oneOf.10.action.oneOf.0.approvalGroups.items.[INDEX].name","typeLabel":"string"},"initiatorCanApprove":{"type":"boolean","description":"Whether the initiator of the activity can participate in the approval.","uniqueKey":"\\items.items.[INDEX].oneOf.7.pendingChangeRequest.body.oneOf.10.action.oneOf.0.approvalGroups.items.[INDEX].initiatorCanApprove","typeLabel":"boolean"},"serviceAccountsCanApprove":{"type":"boolean","description":"Whether service accounts can participate in the approval for this group.","uniqueKey":"\\items.items.[INDEX].oneOf.7.pendingChangeRequest.body.oneOf.10.action.oneOf.0.approvalGroups.items.[INDEX].serviceAccountsCanApprove","typeLabel":"boolean"}},"required":["quorum","approvers"],"additionalProperties":false,"uniqueKey":"\\items.items.[INDEX].oneOf.7.pendingChangeRequest.body.oneOf.10.action.oneOf.0.approvalGroups.items.[INDEX]","typeLabel":"object"},"minItems":1,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.7.pendingChangeRequest.body.oneOf.10.action.oneOf.0.approvalGroups","typeLabel":"object[]"},"autoRejectTimeout":{"oneOf":[{"type":"integer","minimum":1,"uniqueKey":"\\items.items.[INDEX].oneOf.7.pendingChangeRequest.body.oneOf.10.action.oneOf.0.autoRejectTimeout.oneOf.0","typeLabel":"integer"},{"type":"null","minimum":1,"uniqueKey":"\\items.items.[INDEX].oneOf.7.pendingChangeRequest.body.oneOf.10.action.oneOf.0.autoRejectTimeout.oneOf.1","typeLabel":"null"}],"uniqueKey":"\\items.items.[INDEX].oneOf.7.pendingChangeRequest.body.oneOf.10.action.oneOf.0.autoRejectTimeout","typeLabel":"integer | null"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.7.pendingChangeRequest.body.oneOf.10.action.oneOf.0","typeLabel":"RequestApproval · object"},{"type":"object","title":"Block","description":"This action means that the activity will be blocked if the policy is triggered.\n\n```json\n{\n \"action\": {\n \"kind\": \"Block\"\n }\n}\n```\n","required":["kind"],"properties":{"kind":{"type":"string","enum":["Block"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.7.pendingChangeRequest.body.oneOf.10.action.oneOf.1.kind","typeLabel":"enum\u003cstring>"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.7.pendingChangeRequest.body.oneOf.10.action.oneOf.1","typeLabel":"Block · object"}],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.7.pendingChangeRequest.body.oneOf.10.action","typeLabel":"RequestApproval · object | Block · object"},"dateCreated":{"type":"string","uniqueKey":"\\items.items.[INDEX].oneOf.7.pendingChangeRequest.body.oneOf.10.dateCreated","typeLabel":"string"},"dateUpdated":{"type":"string","uniqueKey":"\\items.items.[INDEX].oneOf.7.pendingChangeRequest.body.oneOf.10.dateUpdated","typeLabel":"string"},"filters":{"type":"object","properties":{},"uniqueKey":"\\items.items.[INDEX].oneOf.7.pendingChangeRequest.body.oneOf.10.filters","typeLabel":"object"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.7.pendingChangeRequest.body.oneOf.10","typeLabel":"UserAction · object"}],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.7.pendingChangeRequest.body","typeLabel":"Registry:Addresses:Modify · object | Permissions:Assign · object | Permissions:Modify · object | Policies:Modify · object | Registry:ContractSchemas:Modify · object | Wallets:Sign · object | Wallets:IncomingTransaction · object | Vaults:ReleaseQuarantine · object | Vaults:CreateLock · object | Vaults:ReplaceLock · object | UserAction · object"},"dateResolved":{"type":"string","format":"date-time","uniqueKey":"\\items.items.[INDEX].oneOf.7.pendingChangeRequest.dateResolved","typeLabel":"string\u003cdate-time>"},"approvalId":{"type":"string","uniqueKey":"\\items.items.[INDEX].oneOf.7.pendingChangeRequest.approvalId","typeLabel":"string"}},"required":["id","requester","kind","operationKind","status","entityId","dateCreated","body"],"additionalProperties":false,"uniqueKey":"\\items.items.[INDEX].oneOf.7.pendingChangeRequest","typeLabel":"object"}},"additionalProperties":false,"uniqueKey":"\\items.items.[INDEX].oneOf.7","typeLabel":"Vaults:ReleaseQuarantine · object"},{"type":"object","title":"Vaults:CreateLock","required":["id","name","status","activityKind","rule","action"],"properties":{"id":{"type":"string","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.8.id","typeLabel":"string"},"name":{"type":"string","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.8.name","typeLabel":"string"},"status":{"type":"string","enum":["Active","Archived"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.8.status","typeLabel":"enum\u003cstring>"},"activityKind":{"type":"string","enum":["Vaults:CreateLock"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.8.activityKind","typeLabel":"enum\u003cstring>"},"rule":{"type":"object","title":"AlwaysTrigger","description":"This rule will always be triggered, meaning that if this rule is defined on a policy, the policy will always trigger the policy action, regardless of the activity details.","required":["kind"],"properties":{"kind":{"type":"string","enum":["AlwaysTrigger"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.8.rule.kind","typeLabel":"enum\u003cstring>"},"configuration":{"type":"object","properties":{},"additionalProperties":false,"uniqueKey":"\\items.items.[INDEX].oneOf.8.rule.configuration","typeLabel":"object"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.8.rule","typeLabel":"AlwaysTrigger · object"},"action":{"oneOf":[{"type":"object","title":"RequestApproval","description":"\nThis action means that activity will first require an Approval process to be completed before it can be executed (or be aborted if someone rejects it during the approval process).\n\nOne or several groups of approvers need to be specified. These groups define who is allowed to approve / reject an activity.\n\nThe activity will only be executed if all approver groups reach their \"quorum\" of approvals. Otherwise, if any one user within any approver group rejects, then the activity is aborted and the call is not executed.\n\nThe example below shows a `RequestApproval` action, configured with one approval group requiring 2 approvals amongst three specific users.\n\n```json\n{\n \"action\": {\n \"kind\": \"RequestApproval\",\n \"autoRejectTimeout\": 60, // minutes\n \"approvalGroups\": [\n {\n \"name\": \"Admins\",\n \"quorum\": 2, // only 2 approvers required in that group \n \"approvers\": {\n \"userId\": {\n \"in\": [\"us-...1\", \"us-...2\", \"us-...3\"],\n }\n }\n }\n ],\n\n }\n}\n```\n\n**Don't lock yourself up**\n\nBy default, users cannot approve an activity they initiated themselves, even if they are in an approval group. To allow this, you must set `initiatorCanApprove: true`.\n\n*Example 1:* For any wallet transfer, a policy is setup to require approval from **1 specific admin user** (eg. the CEO). `initiatorCanApprove` was not set to `true`. If the CEO himself initiates a transfer, no-one can approve his transfer and it's stuck.\n\n*Example 2:* Company has only 3 users. A policy is setup to require approval from **any 3 users** (`quorum: 3`) for any modification of a policy. `initiatorCanApprove` was not set to `true`. In this case, they are locked, and the policy cannot be modified: whoever requests a modification cannot approve, and the policy is therefore always missing one approver. To unlock, they would need to invite a new user and give him the rights to approve as well.\n ","required":["kind","approvalGroups"],"properties":{"kind":{"type":"string","enum":["RequestApproval"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.8.action.oneOf.0.kind","typeLabel":"enum\u003cstring>"},"approvalGroups":{"type":"array","items":{"type":"object","properties":{"quorum":{"type":"integer","minimum":1,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.8.action.oneOf.0.approvalGroups.items.[INDEX].quorum","typeLabel":"integer"},"approvers":{"type":"object","properties":{"userId":{"type":"object","properties":{"in":{"type":"array","items":{"type":"string","minLength":1,"uniqueKey":"\\items.items.[INDEX].oneOf.8.action.oneOf.0.approvalGroups.items.[INDEX].approvers.userId.in.items.[INDEX]","typeLabel":"string"},"minItems":1,"maxItems":100,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.8.action.oneOf.0.approvalGroups.items.[INDEX].approvers.userId.in","typeLabel":"string[]"}},"required":["in"],"additionalProperties":false,"description":"Users and service accounts who may approve.","uniqueKey":"\\items.items.[INDEX].oneOf.8.action.oneOf.0.approvalGroups.items.[INDEX].approvers.userId","typeLabel":"object"},"userGroupId":{"type":"object","properties":{"in":{"type":"array","items":{"type":"string","minLength":1,"maxLength":64,"pattern":"^ug-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"User group id.","example":"ug-139tf-f58l8-lsbt6dp47lfsdvgh","uniqueKey":"\\items.items.[INDEX].oneOf.8.action.oneOf.0.approvalGroups.items.[INDEX].approvers.userGroupId.in.items.[INDEX]","typeLabel":"string"},"minItems":1,"maxItems":100,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.8.action.oneOf.0.approvalGroups.items.[INDEX].approvers.userGroupId.in","typeLabel":"string[]"}},"required":["in"],"additionalProperties":false,"description":"User groups whose members may approve.","uniqueKey":"\\items.items.[INDEX].oneOf.8.action.oneOf.0.approvalGroups.items.[INDEX].approvers.userGroupId","typeLabel":"object"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.8.action.oneOf.0.approvalGroups.items.[INDEX].approvers","typeLabel":"object"},"name":{"type":"string","uniqueKey":"\\items.items.[INDEX].oneOf.8.action.oneOf.0.approvalGroups.items.[INDEX].name","typeLabel":"string"},"initiatorCanApprove":{"type":"boolean","description":"Whether the initiator of the activity can participate in the approval.","uniqueKey":"\\items.items.[INDEX].oneOf.8.action.oneOf.0.approvalGroups.items.[INDEX].initiatorCanApprove","typeLabel":"boolean"},"serviceAccountsCanApprove":{"type":"boolean","description":"Whether service accounts can participate in the approval for this group.","uniqueKey":"\\items.items.[INDEX].oneOf.8.action.oneOf.0.approvalGroups.items.[INDEX].serviceAccountsCanApprove","typeLabel":"boolean"}},"required":["quorum","approvers"],"additionalProperties":false,"uniqueKey":"\\items.items.[INDEX].oneOf.8.action.oneOf.0.approvalGroups.items.[INDEX]","typeLabel":"object"},"minItems":1,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.8.action.oneOf.0.approvalGroups","typeLabel":"object[]"},"autoRejectTimeout":{"oneOf":[{"type":"integer","minimum":1,"uniqueKey":"\\items.items.[INDEX].oneOf.8.action.oneOf.0.autoRejectTimeout.oneOf.0","typeLabel":"integer"},{"type":"null","minimum":1,"uniqueKey":"\\items.items.[INDEX].oneOf.8.action.oneOf.0.autoRejectTimeout.oneOf.1","typeLabel":"null"}],"uniqueKey":"\\items.items.[INDEX].oneOf.8.action.oneOf.0.autoRejectTimeout","typeLabel":"integer | null"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.8.action.oneOf.0","typeLabel":"RequestApproval · object"},{"type":"object","title":"Block","description":"This action means that the activity will be blocked if the policy is triggered.\n\n```json\n{\n \"action\": {\n \"kind\": \"Block\"\n }\n}\n```\n","required":["kind"],"properties":{"kind":{"type":"string","enum":["Block"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.8.action.oneOf.1.kind","typeLabel":"enum\u003cstring>"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.8.action.oneOf.1","typeLabel":"Block · object"}],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.8.action","typeLabel":"RequestApproval · object | Block · object"},"dateCreated":{"type":"string","uniqueKey":"\\items.items.[INDEX].oneOf.8.dateCreated","typeLabel":"string"},"dateUpdated":{"type":"string","uniqueKey":"\\items.items.[INDEX].oneOf.8.dateUpdated","typeLabel":"string"},"filters":{"type":"object","properties":{"vaultId":{"type":"object","properties":{"in":{"type":"array","items":{"type":"string","minLength":1,"uniqueKey":"\\items.items.[INDEX].oneOf.8.filters.vaultId.in.items.[INDEX]","typeLabel":"string"},"minItems":1,"maxItems":100,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.8.filters.vaultId.in","typeLabel":"string[]"}},"required":["in"],"additionalProperties":false,"uniqueKey":"\\items.items.[INDEX].oneOf.8.filters.vaultId","typeLabel":"object"},"vaultTags":{"type":"object","properties":{"hasAny":{"type":"array","items":{"type":"string","minLength":1,"uniqueKey":"\\items.items.[INDEX].oneOf.8.filters.vaultTags.hasAny.items.[INDEX]","typeLabel":"string"},"minItems":1,"maxItems":100,"uniqueKey":"\\items.items.[INDEX].oneOf.8.filters.vaultTags.hasAny","typeLabel":"string[]"},"hasAll":{"type":"array","items":{"type":"string","minLength":1,"uniqueKey":"\\items.items.[INDEX].oneOf.8.filters.vaultTags.hasAll.items.[INDEX]","typeLabel":"string"},"minItems":1,"maxItems":100,"uniqueKey":"\\items.items.[INDEX].oneOf.8.filters.vaultTags.hasAll","typeLabel":"string[]"}},"additionalProperties":false,"uniqueKey":"\\items.items.[INDEX].oneOf.8.filters.vaultTags","typeLabel":"object"}},"additionalProperties":false,"uniqueKey":"\\items.items.[INDEX].oneOf.8.filters","typeLabel":"object"},"pendingChangeRequest":{"type":"object","properties":{"id":{"type":"string","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.8.pendingChangeRequest.id","typeLabel":"string"},"requester":{"type":"object","properties":{"userId":{"type":"string","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.8.pendingChangeRequest.requester.userId","typeLabel":"string"},"tokenId":{"type":"string","uniqueKey":"\\items.items.[INDEX].oneOf.8.pendingChangeRequest.requester.tokenId","typeLabel":"string"},"appId":{"type":"string","uniqueKey":"\\items.items.[INDEX].oneOf.8.pendingChangeRequest.requester.appId","typeLabel":"string"}},"required":["userId"],"description":"The user who initiated the change request.","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.8.pendingChangeRequest.requester","typeLabel":"object"},"kind":{"type":"string","enum":["Policy"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.8.pendingChangeRequest.kind","typeLabel":"enum\u003cstring>"},"operationKind":{"type":"string","enum":["Update"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.8.pendingChangeRequest.operationKind","typeLabel":"enum\u003cstring>"},"status":{"type":"string","enum":["Applied","Failed","Pending","Rejected"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.8.pendingChangeRequest.status","typeLabel":"enum\u003cstring>"},"entityId":{"type":"string","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.8.pendingChangeRequest.entityId","typeLabel":"string"},"dateCreated":{"type":"string","format":"date-time","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.8.pendingChangeRequest.dateCreated","typeLabel":"string\u003cdate-time>"},"body":{"oneOf":[{"type":"object","title":"Registry:Addresses:Modify","required":["id","name","status","activityKind","rule","action"],"properties":{"id":{"type":"string","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.8.pendingChangeRequest.body.oneOf.0.id","typeLabel":"string"},"name":{"type":"string","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.8.pendingChangeRequest.body.oneOf.0.name","typeLabel":"string"},"status":{"type":"string","enum":["Active","Archived"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.8.pendingChangeRequest.body.oneOf.0.status","typeLabel":"enum\u003cstring>"},"activityKind":{"type":"string","enum":["Registry:Addresses:Modify"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.8.pendingChangeRequest.body.oneOf.0.activityKind","typeLabel":"enum\u003cstring>"},"rule":{"type":"object","properties":{"kind":{"type":"string","enum":["AlwaysTrigger"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.8.pendingChangeRequest.body.oneOf.0.rule.kind","typeLabel":"enum\u003cstring>"},"configuration":{"type":"object","properties":{},"additionalProperties":false,"uniqueKey":"\\items.items.[INDEX].oneOf.8.pendingChangeRequest.body.oneOf.0.rule.configuration","typeLabel":"object"}},"required":["kind"],"additionalProperties":false,"description":"This rule will always be triggered, meaning that if this rule is defined on a policy, the policy will always trigger the policy action, regardless of the activity details.","title":"AlwaysTrigger","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.8.pendingChangeRequest.body.oneOf.0.rule","typeLabel":"AlwaysTrigger · object"},"action":{"oneOf":[{"type":"object","title":"RequestApproval","description":"\nThis action means that activity will first require an Approval process to be completed before it can be executed (or be aborted if someone rejects it during the approval process).\n\nOne or several groups of approvers need to be specified. These groups define who is allowed to approve / reject an activity.\n\nThe activity will only be executed if all approver groups reach their \"quorum\" of approvals. Otherwise, if any one user within any approver group rejects, then the activity is aborted and the call is not executed.\n\nThe example below shows a `RequestApproval` action, configured with one approval group requiring 2 approvals amongst three specific users.\n\n```json\n{\n \"action\": {\n \"kind\": \"RequestApproval\",\n \"autoRejectTimeout\": 60, // minutes\n \"approvalGroups\": [\n {\n \"name\": \"Admins\",\n \"quorum\": 2, // only 2 approvers required in that group \n \"approvers\": {\n \"userId\": {\n \"in\": [\"us-...1\", \"us-...2\", \"us-...3\"],\n }\n }\n }\n ],\n\n }\n}\n```\n\n**Don't lock yourself up**\n\nBy default, users cannot approve an activity they initiated themselves, even if they are in an approval group. To allow this, you must set `initiatorCanApprove: true`.\n\n*Example 1:* For any wallet transfer, a policy is setup to require approval from **1 specific admin user** (eg. the CEO). `initiatorCanApprove` was not set to `true`. If the CEO himself initiates a transfer, no-one can approve his transfer and it's stuck.\n\n*Example 2:* Company has only 3 users. A policy is setup to require approval from **any 3 users** (`quorum: 3`) for any modification of a policy. `initiatorCanApprove` was not set to `true`. In this case, they are locked, and the policy cannot be modified: whoever requests a modification cannot approve, and the policy is therefore always missing one approver. To unlock, they would need to invite a new user and give him the rights to approve as well.\n ","required":["kind","approvalGroups"],"properties":{"kind":{"type":"string","enum":["RequestApproval"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.8.pendingChangeRequest.body.oneOf.0.action.oneOf.0.kind","typeLabel":"enum\u003cstring>"},"approvalGroups":{"type":"array","items":{"type":"object","properties":{"quorum":{"type":"integer","minimum":1,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.8.pendingChangeRequest.body.oneOf.0.action.oneOf.0.approvalGroups.items.[INDEX].quorum","typeLabel":"integer"},"approvers":{"type":"object","properties":{"userId":{"type":"object","properties":{"in":{"type":"array","items":{"type":"string","minLength":1,"uniqueKey":"\\items.items.[INDEX].oneOf.8.pendingChangeRequest.body.oneOf.0.action.oneOf.0.approvalGroups.items.[INDEX].approvers.userId.in.items.[INDEX]","typeLabel":"string"},"minItems":1,"maxItems":100,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.8.pendingChangeRequest.body.oneOf.0.action.oneOf.0.approvalGroups.items.[INDEX].approvers.userId.in","typeLabel":"string[]"}},"required":["in"],"additionalProperties":false,"description":"Users and service accounts who may approve.","uniqueKey":"\\items.items.[INDEX].oneOf.8.pendingChangeRequest.body.oneOf.0.action.oneOf.0.approvalGroups.items.[INDEX].approvers.userId","typeLabel":"object"},"userGroupId":{"type":"object","properties":{"in":{"type":"array","items":{"type":"string","minLength":1,"maxLength":64,"pattern":"^ug-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"User group id.","example":"ug-139tf-f58l8-lsbt6dp47lfsdvgh","uniqueKey":"\\items.items.[INDEX].oneOf.8.pendingChangeRequest.body.oneOf.0.action.oneOf.0.approvalGroups.items.[INDEX].approvers.userGroupId.in.items.[INDEX]","typeLabel":"string"},"minItems":1,"maxItems":100,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.8.pendingChangeRequest.body.oneOf.0.action.oneOf.0.approvalGroups.items.[INDEX].approvers.userGroupId.in","typeLabel":"string[]"}},"required":["in"],"additionalProperties":false,"description":"User groups whose members may approve.","uniqueKey":"\\items.items.[INDEX].oneOf.8.pendingChangeRequest.body.oneOf.0.action.oneOf.0.approvalGroups.items.[INDEX].approvers.userGroupId","typeLabel":"object"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.8.pendingChangeRequest.body.oneOf.0.action.oneOf.0.approvalGroups.items.[INDEX].approvers","typeLabel":"object"},"name":{"type":"string","uniqueKey":"\\items.items.[INDEX].oneOf.8.pendingChangeRequest.body.oneOf.0.action.oneOf.0.approvalGroups.items.[INDEX].name","typeLabel":"string"},"initiatorCanApprove":{"type":"boolean","description":"Whether the initiator of the activity can participate in the approval.","uniqueKey":"\\items.items.[INDEX].oneOf.8.pendingChangeRequest.body.oneOf.0.action.oneOf.0.approvalGroups.items.[INDEX].initiatorCanApprove","typeLabel":"boolean"},"serviceAccountsCanApprove":{"type":"boolean","description":"Whether service accounts can participate in the approval for this group.","uniqueKey":"\\items.items.[INDEX].oneOf.8.pendingChangeRequest.body.oneOf.0.action.oneOf.0.approvalGroups.items.[INDEX].serviceAccountsCanApprove","typeLabel":"boolean"}},"required":["quorum","approvers"],"additionalProperties":false,"uniqueKey":"\\items.items.[INDEX].oneOf.8.pendingChangeRequest.body.oneOf.0.action.oneOf.0.approvalGroups.items.[INDEX]","typeLabel":"object"},"minItems":1,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.8.pendingChangeRequest.body.oneOf.0.action.oneOf.0.approvalGroups","typeLabel":"object[]"},"autoRejectTimeout":{"oneOf":[{"type":"integer","minimum":1,"uniqueKey":"\\items.items.[INDEX].oneOf.8.pendingChangeRequest.body.oneOf.0.action.oneOf.0.autoRejectTimeout.oneOf.0","typeLabel":"integer"},{"type":"null","minimum":1,"uniqueKey":"\\items.items.[INDEX].oneOf.8.pendingChangeRequest.body.oneOf.0.action.oneOf.0.autoRejectTimeout.oneOf.1","typeLabel":"null"}],"uniqueKey":"\\items.items.[INDEX].oneOf.8.pendingChangeRequest.body.oneOf.0.action.oneOf.0.autoRejectTimeout","typeLabel":"integer | null"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.8.pendingChangeRequest.body.oneOf.0.action.oneOf.0","typeLabel":"RequestApproval · object"},{"type":"object","title":"Block","description":"This action means that the activity will be blocked if the policy is triggered.\n\n```json\n{\n \"action\": {\n \"kind\": \"Block\"\n }\n}\n```\n","required":["kind"],"properties":{"kind":{"type":"string","enum":["Block"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.8.pendingChangeRequest.body.oneOf.0.action.oneOf.1.kind","typeLabel":"enum\u003cstring>"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.8.pendingChangeRequest.body.oneOf.0.action.oneOf.1","typeLabel":"Block · object"}],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.8.pendingChangeRequest.body.oneOf.0.action","typeLabel":"RequestApproval · object | Block · object"},"dateCreated":{"type":"string","uniqueKey":"\\items.items.[INDEX].oneOf.8.pendingChangeRequest.body.oneOf.0.dateCreated","typeLabel":"string"},"dateUpdated":{"type":"string","uniqueKey":"\\items.items.[INDEX].oneOf.8.pendingChangeRequest.body.oneOf.0.dateUpdated","typeLabel":"string"},"filters":{"type":"object","properties":{},"uniqueKey":"\\items.items.[INDEX].oneOf.8.pendingChangeRequest.body.oneOf.0.filters","typeLabel":"object"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.8.pendingChangeRequest.body.oneOf.0","typeLabel":"Registry:Addresses:Modify · object"},{"type":"object","title":"Permissions:Assign","required":["id","name","status","activityKind","rule","action"],"properties":{"id":{"type":"string","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.8.pendingChangeRequest.body.oneOf.1.id","typeLabel":"string"},"name":{"type":"string","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.8.pendingChangeRequest.body.oneOf.1.name","typeLabel":"string"},"status":{"type":"string","enum":["Active","Archived"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.8.pendingChangeRequest.body.oneOf.1.status","typeLabel":"enum\u003cstring>"},"activityKind":{"type":"string","enum":["Permissions:Assign"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.8.pendingChangeRequest.body.oneOf.1.activityKind","typeLabel":"enum\u003cstring>"},"rule":{"type":"object","properties":{"kind":{"type":"string","enum":["AlwaysTrigger"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.8.pendingChangeRequest.body.oneOf.1.rule.kind","typeLabel":"enum\u003cstring>"},"configuration":{"type":"object","properties":{},"additionalProperties":false,"uniqueKey":"\\items.items.[INDEX].oneOf.8.pendingChangeRequest.body.oneOf.1.rule.configuration","typeLabel":"object"}},"required":["kind"],"additionalProperties":false,"description":"This rule will always be triggered, meaning that if this rule is defined on a policy, the policy will always trigger the policy action, regardless of the activity details.","title":"AlwaysTrigger","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.8.pendingChangeRequest.body.oneOf.1.rule","typeLabel":"AlwaysTrigger · object"},"action":{"oneOf":[{"type":"object","title":"RequestApproval","description":"\nThis action means that activity will first require an Approval process to be completed before it can be executed (or be aborted if someone rejects it during the approval process).\n\nOne or several groups of approvers need to be specified. These groups define who is allowed to approve / reject an activity.\n\nThe activity will only be executed if all approver groups reach their \"quorum\" of approvals. Otherwise, if any one user within any approver group rejects, then the activity is aborted and the call is not executed.\n\nThe example below shows a `RequestApproval` action, configured with one approval group requiring 2 approvals amongst three specific users.\n\n```json\n{\n \"action\": {\n \"kind\": \"RequestApproval\",\n \"autoRejectTimeout\": 60, // minutes\n \"approvalGroups\": [\n {\n \"name\": \"Admins\",\n \"quorum\": 2, // only 2 approvers required in that group \n \"approvers\": {\n \"userId\": {\n \"in\": [\"us-...1\", \"us-...2\", \"us-...3\"],\n }\n }\n }\n ],\n\n }\n}\n```\n\n**Don't lock yourself up**\n\nBy default, users cannot approve an activity they initiated themselves, even if they are in an approval group. To allow this, you must set `initiatorCanApprove: true`.\n\n*Example 1:* For any wallet transfer, a policy is setup to require approval from **1 specific admin user** (eg. the CEO). `initiatorCanApprove` was not set to `true`. If the CEO himself initiates a transfer, no-one can approve his transfer and it's stuck.\n\n*Example 2:* Company has only 3 users. A policy is setup to require approval from **any 3 users** (`quorum: 3`) for any modification of a policy. `initiatorCanApprove` was not set to `true`. In this case, they are locked, and the policy cannot be modified: whoever requests a modification cannot approve, and the policy is therefore always missing one approver. To unlock, they would need to invite a new user and give him the rights to approve as well.\n ","required":["kind","approvalGroups"],"properties":{"kind":{"type":"string","enum":["RequestApproval"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.8.pendingChangeRequest.body.oneOf.1.action.oneOf.0.kind","typeLabel":"enum\u003cstring>"},"approvalGroups":{"type":"array","items":{"type":"object","properties":{"quorum":{"type":"integer","minimum":1,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.8.pendingChangeRequest.body.oneOf.1.action.oneOf.0.approvalGroups.items.[INDEX].quorum","typeLabel":"integer"},"approvers":{"type":"object","properties":{"userId":{"type":"object","properties":{"in":{"type":"array","items":{"type":"string","minLength":1,"uniqueKey":"\\items.items.[INDEX].oneOf.8.pendingChangeRequest.body.oneOf.1.action.oneOf.0.approvalGroups.items.[INDEX].approvers.userId.in.items.[INDEX]","typeLabel":"string"},"minItems":1,"maxItems":100,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.8.pendingChangeRequest.body.oneOf.1.action.oneOf.0.approvalGroups.items.[INDEX].approvers.userId.in","typeLabel":"string[]"}},"required":["in"],"additionalProperties":false,"description":"Users and service accounts who may approve.","uniqueKey":"\\items.items.[INDEX].oneOf.8.pendingChangeRequest.body.oneOf.1.action.oneOf.0.approvalGroups.items.[INDEX].approvers.userId","typeLabel":"object"},"userGroupId":{"type":"object","properties":{"in":{"type":"array","items":{"type":"string","minLength":1,"maxLength":64,"pattern":"^ug-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"User group id.","example":"ug-139tf-f58l8-lsbt6dp47lfsdvgh","uniqueKey":"\\items.items.[INDEX].oneOf.8.pendingChangeRequest.body.oneOf.1.action.oneOf.0.approvalGroups.items.[INDEX].approvers.userGroupId.in.items.[INDEX]","typeLabel":"string"},"minItems":1,"maxItems":100,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.8.pendingChangeRequest.body.oneOf.1.action.oneOf.0.approvalGroups.items.[INDEX].approvers.userGroupId.in","typeLabel":"string[]"}},"required":["in"],"additionalProperties":false,"description":"User groups whose members may approve.","uniqueKey":"\\items.items.[INDEX].oneOf.8.pendingChangeRequest.body.oneOf.1.action.oneOf.0.approvalGroups.items.[INDEX].approvers.userGroupId","typeLabel":"object"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.8.pendingChangeRequest.body.oneOf.1.action.oneOf.0.approvalGroups.items.[INDEX].approvers","typeLabel":"object"},"name":{"type":"string","uniqueKey":"\\items.items.[INDEX].oneOf.8.pendingChangeRequest.body.oneOf.1.action.oneOf.0.approvalGroups.items.[INDEX].name","typeLabel":"string"},"initiatorCanApprove":{"type":"boolean","description":"Whether the initiator of the activity can participate in the approval.","uniqueKey":"\\items.items.[INDEX].oneOf.8.pendingChangeRequest.body.oneOf.1.action.oneOf.0.approvalGroups.items.[INDEX].initiatorCanApprove","typeLabel":"boolean"},"serviceAccountsCanApprove":{"type":"boolean","description":"Whether service accounts can participate in the approval for this group.","uniqueKey":"\\items.items.[INDEX].oneOf.8.pendingChangeRequest.body.oneOf.1.action.oneOf.0.approvalGroups.items.[INDEX].serviceAccountsCanApprove","typeLabel":"boolean"}},"required":["quorum","approvers"],"additionalProperties":false,"uniqueKey":"\\items.items.[INDEX].oneOf.8.pendingChangeRequest.body.oneOf.1.action.oneOf.0.approvalGroups.items.[INDEX]","typeLabel":"object"},"minItems":1,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.8.pendingChangeRequest.body.oneOf.1.action.oneOf.0.approvalGroups","typeLabel":"object[]"},"autoRejectTimeout":{"oneOf":[{"type":"integer","minimum":1,"uniqueKey":"\\items.items.[INDEX].oneOf.8.pendingChangeRequest.body.oneOf.1.action.oneOf.0.autoRejectTimeout.oneOf.0","typeLabel":"integer"},{"type":"null","minimum":1,"uniqueKey":"\\items.items.[INDEX].oneOf.8.pendingChangeRequest.body.oneOf.1.action.oneOf.0.autoRejectTimeout.oneOf.1","typeLabel":"null"}],"uniqueKey":"\\items.items.[INDEX].oneOf.8.pendingChangeRequest.body.oneOf.1.action.oneOf.0.autoRejectTimeout","typeLabel":"integer | null"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.8.pendingChangeRequest.body.oneOf.1.action.oneOf.0","typeLabel":"RequestApproval · object"},{"type":"object","title":"Block","description":"This action means that the activity will be blocked if the policy is triggered.\n\n```json\n{\n \"action\": {\n \"kind\": \"Block\"\n }\n}\n```\n","required":["kind"],"properties":{"kind":{"type":"string","enum":["Block"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.8.pendingChangeRequest.body.oneOf.1.action.oneOf.1.kind","typeLabel":"enum\u003cstring>"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.8.pendingChangeRequest.body.oneOf.1.action.oneOf.1","typeLabel":"Block · object"}],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.8.pendingChangeRequest.body.oneOf.1.action","typeLabel":"RequestApproval · object | Block · object"},"dateCreated":{"type":"string","uniqueKey":"\\items.items.[INDEX].oneOf.8.pendingChangeRequest.body.oneOf.1.dateCreated","typeLabel":"string"},"dateUpdated":{"type":"string","uniqueKey":"\\items.items.[INDEX].oneOf.8.pendingChangeRequest.body.oneOf.1.dateUpdated","typeLabel":"string"},"filters":{"type":"object","properties":{"permissionId":{"type":"object","properties":{"in":{"type":"array","items":{"type":"string","minLength":1,"uniqueKey":"\\items.items.[INDEX].oneOf.8.pendingChangeRequest.body.oneOf.1.filters.permissionId.in.items.[INDEX]","typeLabel":"string"},"minItems":1,"maxItems":100,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.8.pendingChangeRequest.body.oneOf.1.filters.permissionId.in","typeLabel":"string[]"}},"required":["in"],"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.8.pendingChangeRequest.body.oneOf.1.filters.permissionId","typeLabel":"object"}},"required":["permissionId"],"additionalProperties":false,"uniqueKey":"\\items.items.[INDEX].oneOf.8.pendingChangeRequest.body.oneOf.1.filters","typeLabel":"object"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.8.pendingChangeRequest.body.oneOf.1","typeLabel":"Permissions:Assign · object"},{"type":"object","title":"Permissions:Modify","required":["id","name","status","activityKind","rule","action"],"properties":{"id":{"type":"string","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.8.pendingChangeRequest.body.oneOf.2.id","typeLabel":"string"},"name":{"type":"string","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.8.pendingChangeRequest.body.oneOf.2.name","typeLabel":"string"},"status":{"type":"string","enum":["Active","Archived"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.8.pendingChangeRequest.body.oneOf.2.status","typeLabel":"enum\u003cstring>"},"activityKind":{"type":"string","enum":["Permissions:Modify"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.8.pendingChangeRequest.body.oneOf.2.activityKind","typeLabel":"enum\u003cstring>"},"rule":{"type":"object","properties":{"kind":{"type":"string","enum":["AlwaysTrigger"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.8.pendingChangeRequest.body.oneOf.2.rule.kind","typeLabel":"enum\u003cstring>"},"configuration":{"type":"object","properties":{},"additionalProperties":false,"uniqueKey":"\\items.items.[INDEX].oneOf.8.pendingChangeRequest.body.oneOf.2.rule.configuration","typeLabel":"object"}},"required":["kind"],"additionalProperties":false,"description":"This rule will always be triggered, meaning that if this rule is defined on a policy, the policy will always trigger the policy action, regardless of the activity details.","title":"AlwaysTrigger","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.8.pendingChangeRequest.body.oneOf.2.rule","typeLabel":"AlwaysTrigger · object"},"action":{"oneOf":[{"type":"object","title":"RequestApproval","description":"\nThis action means that activity will first require an Approval process to be completed before it can be executed (or be aborted if someone rejects it during the approval process).\n\nOne or several groups of approvers need to be specified. These groups define who is allowed to approve / reject an activity.\n\nThe activity will only be executed if all approver groups reach their \"quorum\" of approvals. Otherwise, if any one user within any approver group rejects, then the activity is aborted and the call is not executed.\n\nThe example below shows a `RequestApproval` action, configured with one approval group requiring 2 approvals amongst three specific users.\n\n```json\n{\n \"action\": {\n \"kind\": \"RequestApproval\",\n \"autoRejectTimeout\": 60, // minutes\n \"approvalGroups\": [\n {\n \"name\": \"Admins\",\n \"quorum\": 2, // only 2 approvers required in that group \n \"approvers\": {\n \"userId\": {\n \"in\": [\"us-...1\", \"us-...2\", \"us-...3\"],\n }\n }\n }\n ],\n\n }\n}\n```\n\n**Don't lock yourself up**\n\nBy default, users cannot approve an activity they initiated themselves, even if they are in an approval group. To allow this, you must set `initiatorCanApprove: true`.\n\n*Example 1:* For any wallet transfer, a policy is setup to require approval from **1 specific admin user** (eg. the CEO). `initiatorCanApprove` was not set to `true`. If the CEO himself initiates a transfer, no-one can approve his transfer and it's stuck.\n\n*Example 2:* Company has only 3 users. A policy is setup to require approval from **any 3 users** (`quorum: 3`) for any modification of a policy. `initiatorCanApprove` was not set to `true`. In this case, they are locked, and the policy cannot be modified: whoever requests a modification cannot approve, and the policy is therefore always missing one approver. To unlock, they would need to invite a new user and give him the rights to approve as well.\n ","required":["kind","approvalGroups"],"properties":{"kind":{"type":"string","enum":["RequestApproval"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.8.pendingChangeRequest.body.oneOf.2.action.oneOf.0.kind","typeLabel":"enum\u003cstring>"},"approvalGroups":{"type":"array","items":{"type":"object","properties":{"quorum":{"type":"integer","minimum":1,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.8.pendingChangeRequest.body.oneOf.2.action.oneOf.0.approvalGroups.items.[INDEX].quorum","typeLabel":"integer"},"approvers":{"type":"object","properties":{"userId":{"type":"object","properties":{"in":{"type":"array","items":{"type":"string","minLength":1,"uniqueKey":"\\items.items.[INDEX].oneOf.8.pendingChangeRequest.body.oneOf.2.action.oneOf.0.approvalGroups.items.[INDEX].approvers.userId.in.items.[INDEX]","typeLabel":"string"},"minItems":1,"maxItems":100,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.8.pendingChangeRequest.body.oneOf.2.action.oneOf.0.approvalGroups.items.[INDEX].approvers.userId.in","typeLabel":"string[]"}},"required":["in"],"additionalProperties":false,"description":"Users and service accounts who may approve.","uniqueKey":"\\items.items.[INDEX].oneOf.8.pendingChangeRequest.body.oneOf.2.action.oneOf.0.approvalGroups.items.[INDEX].approvers.userId","typeLabel":"object"},"userGroupId":{"type":"object","properties":{"in":{"type":"array","items":{"type":"string","minLength":1,"maxLength":64,"pattern":"^ug-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"User group id.","example":"ug-139tf-f58l8-lsbt6dp47lfsdvgh","uniqueKey":"\\items.items.[INDEX].oneOf.8.pendingChangeRequest.body.oneOf.2.action.oneOf.0.approvalGroups.items.[INDEX].approvers.userGroupId.in.items.[INDEX]","typeLabel":"string"},"minItems":1,"maxItems":100,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.8.pendingChangeRequest.body.oneOf.2.action.oneOf.0.approvalGroups.items.[INDEX].approvers.userGroupId.in","typeLabel":"string[]"}},"required":["in"],"additionalProperties":false,"description":"User groups whose members may approve.","uniqueKey":"\\items.items.[INDEX].oneOf.8.pendingChangeRequest.body.oneOf.2.action.oneOf.0.approvalGroups.items.[INDEX].approvers.userGroupId","typeLabel":"object"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.8.pendingChangeRequest.body.oneOf.2.action.oneOf.0.approvalGroups.items.[INDEX].approvers","typeLabel":"object"},"name":{"type":"string","uniqueKey":"\\items.items.[INDEX].oneOf.8.pendingChangeRequest.body.oneOf.2.action.oneOf.0.approvalGroups.items.[INDEX].name","typeLabel":"string"},"initiatorCanApprove":{"type":"boolean","description":"Whether the initiator of the activity can participate in the approval.","uniqueKey":"\\items.items.[INDEX].oneOf.8.pendingChangeRequest.body.oneOf.2.action.oneOf.0.approvalGroups.items.[INDEX].initiatorCanApprove","typeLabel":"boolean"},"serviceAccountsCanApprove":{"type":"boolean","description":"Whether service accounts can participate in the approval for this group.","uniqueKey":"\\items.items.[INDEX].oneOf.8.pendingChangeRequest.body.oneOf.2.action.oneOf.0.approvalGroups.items.[INDEX].serviceAccountsCanApprove","typeLabel":"boolean"}},"required":["quorum","approvers"],"additionalProperties":false,"uniqueKey":"\\items.items.[INDEX].oneOf.8.pendingChangeRequest.body.oneOf.2.action.oneOf.0.approvalGroups.items.[INDEX]","typeLabel":"object"},"minItems":1,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.8.pendingChangeRequest.body.oneOf.2.action.oneOf.0.approvalGroups","typeLabel":"object[]"},"autoRejectTimeout":{"oneOf":[{"type":"integer","minimum":1,"uniqueKey":"\\items.items.[INDEX].oneOf.8.pendingChangeRequest.body.oneOf.2.action.oneOf.0.autoRejectTimeout.oneOf.0","typeLabel":"integer"},{"type":"null","minimum":1,"uniqueKey":"\\items.items.[INDEX].oneOf.8.pendingChangeRequest.body.oneOf.2.action.oneOf.0.autoRejectTimeout.oneOf.1","typeLabel":"null"}],"uniqueKey":"\\items.items.[INDEX].oneOf.8.pendingChangeRequest.body.oneOf.2.action.oneOf.0.autoRejectTimeout","typeLabel":"integer | null"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.8.pendingChangeRequest.body.oneOf.2.action.oneOf.0","typeLabel":"RequestApproval · object"},{"type":"object","title":"Block","description":"This action means that the activity will be blocked if the policy is triggered.\n\n```json\n{\n \"action\": {\n \"kind\": \"Block\"\n }\n}\n```\n","required":["kind"],"properties":{"kind":{"type":"string","enum":["Block"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.8.pendingChangeRequest.body.oneOf.2.action.oneOf.1.kind","typeLabel":"enum\u003cstring>"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.8.pendingChangeRequest.body.oneOf.2.action.oneOf.1","typeLabel":"Block · object"}],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.8.pendingChangeRequest.body.oneOf.2.action","typeLabel":"RequestApproval · object | Block · object"},"dateCreated":{"type":"string","uniqueKey":"\\items.items.[INDEX].oneOf.8.pendingChangeRequest.body.oneOf.2.dateCreated","typeLabel":"string"},"dateUpdated":{"type":"string","uniqueKey":"\\items.items.[INDEX].oneOf.8.pendingChangeRequest.body.oneOf.2.dateUpdated","typeLabel":"string"},"filters":{"type":"object","properties":{"permissionId":{"type":"object","properties":{"in":{"type":"array","items":{"type":"string","minLength":1,"uniqueKey":"\\items.items.[INDEX].oneOf.8.pendingChangeRequest.body.oneOf.2.filters.permissionId.in.items.[INDEX]","typeLabel":"string"},"minItems":1,"maxItems":100,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.8.pendingChangeRequest.body.oneOf.2.filters.permissionId.in","typeLabel":"string[]"}},"required":["in"],"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.8.pendingChangeRequest.body.oneOf.2.filters.permissionId","typeLabel":"object"}},"required":["permissionId"],"additionalProperties":false,"uniqueKey":"\\items.items.[INDEX].oneOf.8.pendingChangeRequest.body.oneOf.2.filters","typeLabel":"object"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.8.pendingChangeRequest.body.oneOf.2","typeLabel":"Permissions:Modify · object"},{"type":"object","title":"Policies:Modify","required":["id","name","status","activityKind","rule","action"],"properties":{"id":{"type":"string","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.8.pendingChangeRequest.body.oneOf.3.id","typeLabel":"string"},"name":{"type":"string","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.8.pendingChangeRequest.body.oneOf.3.name","typeLabel":"string"},"status":{"type":"string","enum":["Active","Archived"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.8.pendingChangeRequest.body.oneOf.3.status","typeLabel":"enum\u003cstring>"},"activityKind":{"type":"string","enum":["Policies:Modify"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.8.pendingChangeRequest.body.oneOf.3.activityKind","typeLabel":"enum\u003cstring>"},"rule":{"type":"object","properties":{"kind":{"type":"string","enum":["AlwaysTrigger"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.8.pendingChangeRequest.body.oneOf.3.rule.kind","typeLabel":"enum\u003cstring>"},"configuration":{"type":"object","properties":{},"additionalProperties":false,"uniqueKey":"\\items.items.[INDEX].oneOf.8.pendingChangeRequest.body.oneOf.3.rule.configuration","typeLabel":"object"}},"required":["kind"],"additionalProperties":false,"description":"This rule will always be triggered, meaning that if this rule is defined on a policy, the policy will always trigger the policy action, regardless of the activity details.","title":"AlwaysTrigger","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.8.pendingChangeRequest.body.oneOf.3.rule","typeLabel":"AlwaysTrigger · object"},"action":{"type":"object","properties":{"kind":{"type":"string","enum":["RequestApproval"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.8.pendingChangeRequest.body.oneOf.3.action.kind","typeLabel":"enum\u003cstring>"},"approvalGroups":{"type":"array","items":{"type":"object","properties":{"quorum":{"type":"integer","minimum":1,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.8.pendingChangeRequest.body.oneOf.3.action.approvalGroups.items.[INDEX].quorum","typeLabel":"integer"},"approvers":{"type":"object","properties":{"userId":{"type":"object","properties":{"in":{"type":"array","items":{"type":"string","minLength":1,"uniqueKey":"\\items.items.[INDEX].oneOf.8.pendingChangeRequest.body.oneOf.3.action.approvalGroups.items.[INDEX].approvers.userId.in.items.[INDEX]","typeLabel":"string"},"minItems":1,"maxItems":100,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.8.pendingChangeRequest.body.oneOf.3.action.approvalGroups.items.[INDEX].approvers.userId.in","typeLabel":"string[]"}},"required":["in"],"additionalProperties":false,"description":"Users and service accounts who may approve.","uniqueKey":"\\items.items.[INDEX].oneOf.8.pendingChangeRequest.body.oneOf.3.action.approvalGroups.items.[INDEX].approvers.userId","typeLabel":"object"},"userGroupId":{"type":"object","properties":{"in":{"type":"array","items":{"type":"string","minLength":1,"maxLength":64,"pattern":"^ug-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"User group id.","example":"ug-139tf-f58l8-lsbt6dp47lfsdvgh","uniqueKey":"\\items.items.[INDEX].oneOf.8.pendingChangeRequest.body.oneOf.3.action.approvalGroups.items.[INDEX].approvers.userGroupId.in.items.[INDEX]","typeLabel":"string"},"minItems":1,"maxItems":100,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.8.pendingChangeRequest.body.oneOf.3.action.approvalGroups.items.[INDEX].approvers.userGroupId.in","typeLabel":"string[]"}},"required":["in"],"additionalProperties":false,"description":"User groups whose members may approve.","uniqueKey":"\\items.items.[INDEX].oneOf.8.pendingChangeRequest.body.oneOf.3.action.approvalGroups.items.[INDEX].approvers.userGroupId","typeLabel":"object"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.8.pendingChangeRequest.body.oneOf.3.action.approvalGroups.items.[INDEX].approvers","typeLabel":"object"},"name":{"type":"string","uniqueKey":"\\items.items.[INDEX].oneOf.8.pendingChangeRequest.body.oneOf.3.action.approvalGroups.items.[INDEX].name","typeLabel":"string"},"initiatorCanApprove":{"type":"boolean","description":"Whether the initiator of the activity can participate in the approval.","uniqueKey":"\\items.items.[INDEX].oneOf.8.pendingChangeRequest.body.oneOf.3.action.approvalGroups.items.[INDEX].initiatorCanApprove","typeLabel":"boolean"},"serviceAccountsCanApprove":{"type":"boolean","description":"Whether service accounts can participate in the approval for this group.","uniqueKey":"\\items.items.[INDEX].oneOf.8.pendingChangeRequest.body.oneOf.3.action.approvalGroups.items.[INDEX].serviceAccountsCanApprove","typeLabel":"boolean"}},"required":["quorum","approvers"],"additionalProperties":false,"uniqueKey":"\\items.items.[INDEX].oneOf.8.pendingChangeRequest.body.oneOf.3.action.approvalGroups.items.[INDEX]","typeLabel":"object"},"minItems":1,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.8.pendingChangeRequest.body.oneOf.3.action.approvalGroups","typeLabel":"object[]"},"autoRejectTimeout":{"oneOf":[{"type":"integer","minimum":1,"uniqueKey":"\\items.items.[INDEX].oneOf.8.pendingChangeRequest.body.oneOf.3.action.autoRejectTimeout.oneOf.0","typeLabel":"integer"},{"type":"null","minimum":1,"uniqueKey":"\\items.items.[INDEX].oneOf.8.pendingChangeRequest.body.oneOf.3.action.autoRejectTimeout.oneOf.1","typeLabel":"null"}],"uniqueKey":"\\items.items.[INDEX].oneOf.8.pendingChangeRequest.body.oneOf.3.action.autoRejectTimeout","typeLabel":"integer | null"}},"required":["kind","approvalGroups"],"additionalProperties":false,"description":"\nThis action means that activity will first require an Approval process to be completed before it can be executed (or be aborted if someone rejects it during the approval process).\n\nOne or several groups of approvers need to be specified. These groups define who is allowed to approve / reject an activity.\n\nThe activity will only be executed if all approver groups reach their \"quorum\" of approvals. Otherwise, if any one user within any approver group rejects, then the activity is aborted and the call is not executed.\n\nThe example below shows a `RequestApproval` action, configured with one approval group requiring 2 approvals amongst three specific users.\n\n```json\n{\n \"action\": {\n \"kind\": \"RequestApproval\",\n \"autoRejectTimeout\": 60, // minutes\n \"approvalGroups\": [\n {\n \"name\": \"Admins\",\n \"quorum\": 2, // only 2 approvers required in that group \n \"approvers\": {\n \"userId\": {\n \"in\": [\"us-...1\", \"us-...2\", \"us-...3\"],\n }\n }\n }\n ],\n\n }\n}\n```\n\n**Don't lock yourself up**\n\nBy default, users cannot approve an activity they initiated themselves, even if they are in an approval group. To allow this, you must set `initiatorCanApprove: true`.\n\n*Example 1:* For any wallet transfer, a policy is setup to require approval from **1 specific admin user** (eg. the CEO). `initiatorCanApprove` was not set to `true`. If the CEO himself initiates a transfer, no-one can approve his transfer and it's stuck.\n\n*Example 2:* Company has only 3 users. A policy is setup to require approval from **any 3 users** (`quorum: 3`) for any modification of a policy. `initiatorCanApprove` was not set to `true`. In this case, they are locked, and the policy cannot be modified: whoever requests a modification cannot approve, and the policy is therefore always missing one approver. To unlock, they would need to invite a new user and give him the rights to approve as well.\n ","title":"RequestApproval","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.8.pendingChangeRequest.body.oneOf.3.action","typeLabel":"RequestApproval · object"},"dateCreated":{"type":"string","uniqueKey":"\\items.items.[INDEX].oneOf.8.pendingChangeRequest.body.oneOf.3.dateCreated","typeLabel":"string"},"dateUpdated":{"type":"string","uniqueKey":"\\items.items.[INDEX].oneOf.8.pendingChangeRequest.body.oneOf.3.dateUpdated","typeLabel":"string"},"filters":{"type":"object","properties":{"policyId":{"type":"object","properties":{"in":{"type":"array","items":{"type":"string","minLength":1,"uniqueKey":"\\items.items.[INDEX].oneOf.8.pendingChangeRequest.body.oneOf.3.filters.policyId.in.items.[INDEX]","typeLabel":"string"},"minItems":1,"maxItems":100,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.8.pendingChangeRequest.body.oneOf.3.filters.policyId.in","typeLabel":"string[]"}},"required":["in"],"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.8.pendingChangeRequest.body.oneOf.3.filters.policyId","typeLabel":"object"}},"required":["policyId"],"additionalProperties":false,"uniqueKey":"\\items.items.[INDEX].oneOf.8.pendingChangeRequest.body.oneOf.3.filters","typeLabel":"object"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.8.pendingChangeRequest.body.oneOf.3","typeLabel":"Policies:Modify · object"},{"type":"object","title":"Registry:ContractSchemas:Modify","required":["id","name","status","activityKind","rule","action"],"properties":{"id":{"type":"string","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.8.pendingChangeRequest.body.oneOf.4.id","typeLabel":"string"},"name":{"type":"string","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.8.pendingChangeRequest.body.oneOf.4.name","typeLabel":"string"},"status":{"type":"string","enum":["Active","Archived"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.8.pendingChangeRequest.body.oneOf.4.status","typeLabel":"enum\u003cstring>"},"activityKind":{"type":"string","enum":["Registry:ContractSchemas:Modify"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.8.pendingChangeRequest.body.oneOf.4.activityKind","typeLabel":"enum\u003cstring>"},"rule":{"type":"object","properties":{"kind":{"type":"string","enum":["AlwaysTrigger"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.8.pendingChangeRequest.body.oneOf.4.rule.kind","typeLabel":"enum\u003cstring>"},"configuration":{"type":"object","properties":{},"additionalProperties":false,"uniqueKey":"\\items.items.[INDEX].oneOf.8.pendingChangeRequest.body.oneOf.4.rule.configuration","typeLabel":"object"}},"required":["kind"],"additionalProperties":false,"description":"This rule will always be triggered, meaning that if this rule is defined on a policy, the policy will always trigger the policy action, regardless of the activity details.","title":"AlwaysTrigger","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.8.pendingChangeRequest.body.oneOf.4.rule","typeLabel":"AlwaysTrigger · object"},"action":{"oneOf":[{"type":"object","title":"RequestApproval","description":"\nThis action means that activity will first require an Approval process to be completed before it can be executed (or be aborted if someone rejects it during the approval process).\n\nOne or several groups of approvers need to be specified. These groups define who is allowed to approve / reject an activity.\n\nThe activity will only be executed if all approver groups reach their \"quorum\" of approvals. Otherwise, if any one user within any approver group rejects, then the activity is aborted and the call is not executed.\n\nThe example below shows a `RequestApproval` action, configured with one approval group requiring 2 approvals amongst three specific users.\n\n```json\n{\n \"action\": {\n \"kind\": \"RequestApproval\",\n \"autoRejectTimeout\": 60, // minutes\n \"approvalGroups\": [\n {\n \"name\": \"Admins\",\n \"quorum\": 2, // only 2 approvers required in that group \n \"approvers\": {\n \"userId\": {\n \"in\": [\"us-...1\", \"us-...2\", \"us-...3\"],\n }\n }\n }\n ],\n\n }\n}\n```\n\n**Don't lock yourself up**\n\nBy default, users cannot approve an activity they initiated themselves, even if they are in an approval group. To allow this, you must set `initiatorCanApprove: true`.\n\n*Example 1:* For any wallet transfer, a policy is setup to require approval from **1 specific admin user** (eg. the CEO). `initiatorCanApprove` was not set to `true`. If the CEO himself initiates a transfer, no-one can approve his transfer and it's stuck.\n\n*Example 2:* Company has only 3 users. A policy is setup to require approval from **any 3 users** (`quorum: 3`) for any modification of a policy. `initiatorCanApprove` was not set to `true`. In this case, they are locked, and the policy cannot be modified: whoever requests a modification cannot approve, and the policy is therefore always missing one approver. To unlock, they would need to invite a new user and give him the rights to approve as well.\n ","required":["kind","approvalGroups"],"properties":{"kind":{"type":"string","enum":["RequestApproval"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.8.pendingChangeRequest.body.oneOf.4.action.oneOf.0.kind","typeLabel":"enum\u003cstring>"},"approvalGroups":{"type":"array","items":{"type":"object","properties":{"quorum":{"type":"integer","minimum":1,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.8.pendingChangeRequest.body.oneOf.4.action.oneOf.0.approvalGroups.items.[INDEX].quorum","typeLabel":"integer"},"approvers":{"type":"object","properties":{"userId":{"type":"object","properties":{"in":{"type":"array","items":{"type":"string","minLength":1,"uniqueKey":"\\items.items.[INDEX].oneOf.8.pendingChangeRequest.body.oneOf.4.action.oneOf.0.approvalGroups.items.[INDEX].approvers.userId.in.items.[INDEX]","typeLabel":"string"},"minItems":1,"maxItems":100,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.8.pendingChangeRequest.body.oneOf.4.action.oneOf.0.approvalGroups.items.[INDEX].approvers.userId.in","typeLabel":"string[]"}},"required":["in"],"additionalProperties":false,"description":"Users and service accounts who may approve.","uniqueKey":"\\items.items.[INDEX].oneOf.8.pendingChangeRequest.body.oneOf.4.action.oneOf.0.approvalGroups.items.[INDEX].approvers.userId","typeLabel":"object"},"userGroupId":{"type":"object","properties":{"in":{"type":"array","items":{"type":"string","minLength":1,"maxLength":64,"pattern":"^ug-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"User group id.","example":"ug-139tf-f58l8-lsbt6dp47lfsdvgh","uniqueKey":"\\items.items.[INDEX].oneOf.8.pendingChangeRequest.body.oneOf.4.action.oneOf.0.approvalGroups.items.[INDEX].approvers.userGroupId.in.items.[INDEX]","typeLabel":"string"},"minItems":1,"maxItems":100,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.8.pendingChangeRequest.body.oneOf.4.action.oneOf.0.approvalGroups.items.[INDEX].approvers.userGroupId.in","typeLabel":"string[]"}},"required":["in"],"additionalProperties":false,"description":"User groups whose members may approve.","uniqueKey":"\\items.items.[INDEX].oneOf.8.pendingChangeRequest.body.oneOf.4.action.oneOf.0.approvalGroups.items.[INDEX].approvers.userGroupId","typeLabel":"object"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.8.pendingChangeRequest.body.oneOf.4.action.oneOf.0.approvalGroups.items.[INDEX].approvers","typeLabel":"object"},"name":{"type":"string","uniqueKey":"\\items.items.[INDEX].oneOf.8.pendingChangeRequest.body.oneOf.4.action.oneOf.0.approvalGroups.items.[INDEX].name","typeLabel":"string"},"initiatorCanApprove":{"type":"boolean","description":"Whether the initiator of the activity can participate in the approval.","uniqueKey":"\\items.items.[INDEX].oneOf.8.pendingChangeRequest.body.oneOf.4.action.oneOf.0.approvalGroups.items.[INDEX].initiatorCanApprove","typeLabel":"boolean"},"serviceAccountsCanApprove":{"type":"boolean","description":"Whether service accounts can participate in the approval for this group.","uniqueKey":"\\items.items.[INDEX].oneOf.8.pendingChangeRequest.body.oneOf.4.action.oneOf.0.approvalGroups.items.[INDEX].serviceAccountsCanApprove","typeLabel":"boolean"}},"required":["quorum","approvers"],"additionalProperties":false,"uniqueKey":"\\items.items.[INDEX].oneOf.8.pendingChangeRequest.body.oneOf.4.action.oneOf.0.approvalGroups.items.[INDEX]","typeLabel":"object"},"minItems":1,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.8.pendingChangeRequest.body.oneOf.4.action.oneOf.0.approvalGroups","typeLabel":"object[]"},"autoRejectTimeout":{"oneOf":[{"type":"integer","minimum":1,"uniqueKey":"\\items.items.[INDEX].oneOf.8.pendingChangeRequest.body.oneOf.4.action.oneOf.0.autoRejectTimeout.oneOf.0","typeLabel":"integer"},{"type":"null","minimum":1,"uniqueKey":"\\items.items.[INDEX].oneOf.8.pendingChangeRequest.body.oneOf.4.action.oneOf.0.autoRejectTimeout.oneOf.1","typeLabel":"null"}],"uniqueKey":"\\items.items.[INDEX].oneOf.8.pendingChangeRequest.body.oneOf.4.action.oneOf.0.autoRejectTimeout","typeLabel":"integer | null"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.8.pendingChangeRequest.body.oneOf.4.action.oneOf.0","typeLabel":"RequestApproval · object"},{"type":"object","title":"Block","description":"This action means that the activity will be blocked if the policy is triggered.\n\n```json\n{\n \"action\": {\n \"kind\": \"Block\"\n }\n}\n```\n","required":["kind"],"properties":{"kind":{"type":"string","enum":["Block"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.8.pendingChangeRequest.body.oneOf.4.action.oneOf.1.kind","typeLabel":"enum\u003cstring>"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.8.pendingChangeRequest.body.oneOf.4.action.oneOf.1","typeLabel":"Block · object"}],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.8.pendingChangeRequest.body.oneOf.4.action","typeLabel":"RequestApproval · object | Block · object"},"dateCreated":{"type":"string","uniqueKey":"\\items.items.[INDEX].oneOf.8.pendingChangeRequest.body.oneOf.4.dateCreated","typeLabel":"string"},"dateUpdated":{"type":"string","uniqueKey":"\\items.items.[INDEX].oneOf.8.pendingChangeRequest.body.oneOf.4.dateUpdated","typeLabel":"string"},"filters":{"type":"object","properties":{},"uniqueKey":"\\items.items.[INDEX].oneOf.8.pendingChangeRequest.body.oneOf.4.filters","typeLabel":"object"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.8.pendingChangeRequest.body.oneOf.4","typeLabel":"Registry:ContractSchemas:Modify · object"},{"type":"object","title":"Wallets:Sign","required":["id","name","status","activityKind","rule","action"],"properties":{"id":{"type":"string","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.8.pendingChangeRequest.body.oneOf.5.id","typeLabel":"string"},"name":{"type":"string","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.8.pendingChangeRequest.body.oneOf.5.name","typeLabel":"string"},"status":{"type":"string","enum":["Active","Archived"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.8.pendingChangeRequest.body.oneOf.5.status","typeLabel":"enum\u003cstring>"},"activityKind":{"type":"string","enum":["Wallets:Sign"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.8.pendingChangeRequest.body.oneOf.5.activityKind","typeLabel":"enum\u003cstring>"},"rule":{"oneOf":[{"type":"object","title":"AlwaysTrigger","description":"This rule will always be triggered, meaning that if this rule is defined on a policy, the policy will always trigger the policy action, regardless of the activity details.","required":["kind"],"properties":{"kind":{"type":"string","enum":["AlwaysTrigger"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.8.pendingChangeRequest.body.oneOf.5.rule.oneOf.0.kind","typeLabel":"enum\u003cstring>"},"configuration":{"type":"object","properties":{},"additionalProperties":false,"uniqueKey":"\\items.items.[INDEX].oneOf.8.pendingChangeRequest.body.oneOf.5.rule.oneOf.0.configuration","typeLabel":"object"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.8.pendingChangeRequest.body.oneOf.5.rule.oneOf.0","typeLabel":"AlwaysTrigger · object"},{"type":"object","title":"TransactionRecipientWhitelist","description":"This rule will trigger if the destination address *is NOT whitelisted*.","required":["kind","configuration"],"properties":{"kind":{"type":"string","enum":["TransactionRecipientWhitelist"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.8.pendingChangeRequest.body.oneOf.5.rule.oneOf.1.kind","typeLabel":"enum\u003cstring>"},"configuration":{"type":"object","properties":{"addresses":{"type":"array","items":{"type":"string","minLength":1,"uniqueKey":"\\items.items.[INDEX].oneOf.8.pendingChangeRequest.body.oneOf.5.rule.oneOf.1.configuration.addresses.items.[INDEX]","typeLabel":"string"},"description":"Whitelisted recipient addresses","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.8.pendingChangeRequest.body.oneOf.5.rule.oneOf.1.configuration.addresses","typeLabel":"string[]"}},"required":["addresses"],"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.8.pendingChangeRequest.body.oneOf.5.rule.oneOf.1.configuration","typeLabel":"object"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.8.pendingChangeRequest.body.oneOf.5.rule.oneOf.1","typeLabel":"TransactionRecipientWhitelist · object"},{"type":"object","title":"TransactionAmountLimit","description":"This rule will trigger if the wallet activity detected is transferring some value whose amount is equal to or greater than a given limit. The limit is inclusive: a transfer whose value exactly equals the limit also triggers.\n\nThe limit is expressed in a fiat `currency` and evaluated against the market value of the transfer. To set a threshold in the asset's own units instead, use `TransactionAmountLimitNominal`.\n\nNote: If the amount of the wallet activity cannot be evaluated for any reason (eg. market prices are not available, or eg. the amount cannot be inferred from a wallet signature request, etc.), by default the rule will trigger the policy (this is called \"failing closed\" and is generally considered a security best practice).","required":["kind","configuration"],"properties":{"kind":{"type":"string","enum":["TransactionAmountLimit"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.8.pendingChangeRequest.body.oneOf.5.rule.oneOf.2.kind","typeLabel":"enum\u003cstring>"},"configuration":{"type":"object","properties":{"limit":{"type":"number","description":"Amount limit in `currency`","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.8.pendingChangeRequest.body.oneOf.5.rule.oneOf.2.configuration.limit","typeLabel":"number"},"currency":{"type":"string","enum":["USD"],"description":"Fiat currency, currently only `USD`","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.8.pendingChangeRequest.body.oneOf.5.rule.oneOf.2.configuration.currency","typeLabel":"enum\u003cstring>"}},"required":["limit","currency"],"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.8.pendingChangeRequest.body.oneOf.5.rule.oneOf.2.configuration","typeLabel":"object"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.8.pendingChangeRequest.body.oneOf.5.rule.oneOf.2","typeLabel":"TransactionAmountLimit · object"},{"type":"object","title":"TransactionAmountLimitNominal","description":"This rule will trigger if the wallet activity detected is transferring more of a listed asset than that asset's limit.\n\nEach limit is expressed in the minimum denomination of its own asset and compared against the transferred amount directly, so the verdict needs no market data and does not move with a price. To set a threshold on the fiat value of a transfer instead, use `TransactionAmountLimit`.\n\nLimits are asset exact: an asset is identified by its network and its Dfns token identifier, so a wrapped or staked derivative is a different asset from the thing it tracks, and a transfer of an asset the rule does not list will not trigger it.\n\nNote: If the transferred amount or the asset cannot be determined for any reason, by default the rule will trigger the policy (this is called \"failing closed\" and is generally considered a security best practice).","required":["kind","configuration"],"properties":{"kind":{"type":"string","enum":["TransactionAmountLimitNominal"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.8.pendingChangeRequest.body.oneOf.5.rule.oneOf.3.kind","typeLabel":"enum\u003cstring>"},"configuration":{"type":"object","properties":{"assets":{"type":"array","items":{"type":"object","properties":{"network":{"type":"string","title":"Network","description":"The network the asset lives on.","enum":["Algorand","AlgorandTestnet","Aptos","AptosTestnet","ArbitrumOne","ArbitrumSepolia","Arc","ArcTestnet","Areum","AvalancheC","AvalancheCFuji","Base","BaseSepolia","Berachain","BerachainBepolia","Bitcoin","BitcoinSignet","BitcoinTestnet4","BitcoinCash","Bob","BobSepolia","Bsc","BscTestnet","Canton","CantonTestnet","Cardano","CardanoPreprod","Concordium","ConcordiumTestnet","Celo","CeloSepolia","Codex","CodexSepolia","CosmosHub4","CosmosIcsTestnet","Dogecoin","DogecoinTestnet","Ethereum","EthereumClassic","EthereumClassicMordor","EthereumSepolia","EthereumHoodi","FlareC","FlareCCoston2","FlowEvm","FlowEvmTestnet","Hedera","HederaTestnet","HyperEvm","HyperEvmTestnet","Ink","InkSepolia","InternetComputer","Ion","IonTestnet","Iota","IotaTestnet","Kusama","KusamaAssetHub","Litecoin","LitecoinTestnet","Monad","MonadTestnet","Movement","MovementTestnet","Near","NearTestnet","Optimism","OptimismSepolia","Origyn","Plasma","PlasmaTestnet","Plume","PlumeSepolia","Paseo","PaseoAssetHub","Polkadot","PolkadotAssetHub","Polygon","PolygonAmoy","Polymesh","PolymeshTestnet","Rayls","RaylsTestnet","Robinhood","RobinhoodSepolia","SeiAtlantic2","SeiPacific1","Solana","SolanaDevnet","Sonic","SonicTestnet","Starknet","StarknetSepolia","Stellar","StellarTestnet","Sui","SuiTestnet","Tezos","TezosShadownet","Tempo","TempoModerato","Tsc","TscTestnet1","Ton","TonTestnet","Tron","TronNile","Westend","WestendAssetHub","Xdc","XdcApothem","XLayer","XLayerSepolia","XrpLedger","XrpLedgerTestnet"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.8.pendingChangeRequest.body.oneOf.5.rule.oneOf.3.configuration.assets.items.[INDEX].network","typeLabel":"enum\u003cstring>"},"tid":{"type":"string","minLength":1,"maxLength":200,"pattern":"^[a-z0-9_]+:[^\\s](?:[ ]?[^\\s])*$","description":"The Dfns token identifier of the asset, for example `native:eth` or `erc20:0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48`. Must be canonical: token contract addresses on hex based networks are lower cased.","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.8.pendingChangeRequest.body.oneOf.5.rule.oneOf.3.configuration.assets.items.[INDEX].tid","typeLabel":"string"},"limit":{"type":"string","pattern":"^\\d+$","description":"Amount limit in the minimum denomination of the asset, as an integer string, matching how a transfer expresses its amount. For an 18 decimal token `\"5000000000000000000\"` is 5 whole tokens.","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.8.pendingChangeRequest.body.oneOf.5.rule.oneOf.3.configuration.assets.items.[INDEX].limit","typeLabel":"string"}},"required":["network","tid","limit"],"additionalProperties":false,"uniqueKey":"\\items.items.[INDEX].oneOf.8.pendingChangeRequest.body.oneOf.5.rule.oneOf.3.configuration.assets.items.[INDEX]","typeLabel":"object"},"minItems":1,"maxItems":100,"description":"The assets this rule applies to, each with its own limit. A transfer of an asset that is not listed does not trigger the rule. The limit applies to each matching transfer individually; nothing is accumulated across transfers.","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.8.pendingChangeRequest.body.oneOf.5.rule.oneOf.3.configuration.assets","typeLabel":"object[]"}},"required":["assets"],"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.8.pendingChangeRequest.body.oneOf.5.rule.oneOf.3.configuration","typeLabel":"object"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.8.pendingChangeRequest.body.oneOf.5.rule.oneOf.3","typeLabel":"TransactionAmountLimitNominal · object"},{"type":"object","title":"TransactionAmountVelocity","description":"This rule will trigger if the cumulative amount transferred from a given wallet within a given timeframe is greater than a specified limit. The aggregate amount evaluated is based only on the wallet that triggered the policy.","required":["kind","configuration"],"properties":{"kind":{"type":"string","enum":["TransactionAmountVelocity"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.8.pendingChangeRequest.body.oneOf.5.rule.oneOf.4.kind","typeLabel":"enum\u003cstring>"},"configuration":{"type":"object","properties":{"limit":{"type":"number","description":"Amount limit in `currency`","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.8.pendingChangeRequest.body.oneOf.5.rule.oneOf.4.configuration.limit","typeLabel":"number"},"currency":{"type":"string","enum":["USD"],"description":"Currency for the amount limit above","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.8.pendingChangeRequest.body.oneOf.5.rule.oneOf.4.configuration.currency","typeLabel":"enum\u003cstring>"},"timeframe":{"type":"integer","minimum":1,"maximum":43200,"description":"Time period in minutes. Minimum 1, Maximum 43,200.","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.8.pendingChangeRequest.body.oneOf.5.rule.oneOf.4.configuration.timeframe","typeLabel":"integer"}},"required":["limit","currency","timeframe"],"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.8.pendingChangeRequest.body.oneOf.5.rule.oneOf.4.configuration","typeLabel":"object"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.8.pendingChangeRequest.body.oneOf.5.rule.oneOf.4","typeLabel":"TransactionAmountVelocity · object"},{"type":"object","title":"TransactionCountVelocity","description":"This rule will trigger if the number of wallet activities for a given wallet within a given timeframe, is greater than a specified limit. The aggregate number of transactions evaluated is based only on the wallet that triggered the policy.","required":["kind","configuration"],"properties":{"kind":{"type":"string","enum":["TransactionCountVelocity"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.8.pendingChangeRequest.body.oneOf.5.rule.oneOf.5.kind","typeLabel":"enum\u003cstring>"},"configuration":{"type":"object","properties":{"limit":{"type":"number","description":"Count limit","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.8.pendingChangeRequest.body.oneOf.5.rule.oneOf.5.configuration.limit","typeLabel":"number"},"timeframe":{"type":"integer","minimum":1,"maximum":43200,"description":"Time period in minutes. Minimum 1, Maximum 43,200.","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.8.pendingChangeRequest.body.oneOf.5.rule.oneOf.5.configuration.timeframe","typeLabel":"integer"}},"required":["limit","timeframe"],"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.8.pendingChangeRequest.body.oneOf.5.rule.oneOf.5.configuration","typeLabel":"object"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.8.pendingChangeRequest.body.oneOf.5.rule.oneOf.5","typeLabel":"TransactionCountVelocity · object"},{"type":"object","title":"ChainalysisTransactionPrescreening","description":"\n\u003cInfo>\nThis rule can only be used once the Chainalysis integration is activated from the Dfns dashboard settings. (see more on [Chainalysis](https://docs.dfns.co/integrations/aml-kyt/chainalysis) integration page).\n\u003c/Info>\n\nIt's a rule based on [Chainalysis](https://docs.dfns.co/integrations/aml-kyt/chainalysis) KYT integration (Know-Your-Transaction). Upon transfer attempt, we will first register the transfer with Chainalysis (as a [\"withdrawal attempt\"](https://docs.chainalysis.com/api/kyt/#registration-register-a-withdrawal-attempt)), and fetch the screening results (alerts, exposures, addresses detected). Based on the results, and the configuration of this rule, the policy will be triggered.\n\nIt's called \"Pre\"-screening, because the scanned transaction is not on chain yet, it's still a transaction attempt (before the transaction actually make it on chain).\n\n```json\n{\n \"rule\": {\n \"kind\": \"ChainalysisTransactionPrescreening\",\n \"configuration\": {\n \"alerts\": {\n \"alertLevel\": \"LOW\",\n \"categoryIds\": []\n },\n \"exposures\": {\n \"direct\": {\n \"categoryIds\": []\n }\n },\n \"addresses\": {\n \"categoryIds\": []\n },\n \"fallbackBehaviours\": {\n \"skipUnscreenableTransaction\": false,\n \"skipUnsupportedNetwork\": false,\n \"skipUnsupportedAsset\": false,\n \"skipChainalysisFailure\": false\n }\n }\n }\n}\n```\n\n**Configuration**\n\n| Property | Type | Description |\n| --- | --- | --- |\n| `alerts`\u003cbr>\u003cbr>`.alertLevel`* | `string` | Minimum alert level above which the rule should trigger, if any [alert is returned in Chainalysis results](https://docs.chainalysis.com/api/kyt/#withdrawal-attempts-get-alerts). Can be `LOW`, `MEDIUM`, `HIGH`, or `SEVERE` |\n| `alerts`\u003cbr>\u003cbr>`.categoryIds`* | list of integers | List of Chainalysis category IDs (see [here](https://docs.chainalysis.com/api/kyt/#categories)). If you leave this list empty, alerts of any category will trigger the rule. Otherwise, if you only want the rule to trigger on specific categories, you can specify some in the list. |\n| `exposures`\u003cbr>\u003cbr>`.direct`\u003cbr>\u003cbr>`.categoryIds`* | list of integers | List of Chainalysis category IDs (see [here](https://docs.chainalysis.com/api/kyt/#categories)). If you leave this list empty, a [direct exposure](https://docs.chainalysis.com/api/kyt/#withdrawal-attempts-get-direct-exposure) of any category detected by chainalysis will trigger the rule. Otherwise, if you only want the rule to trigger on specific categories, you can specify some in the list. |\n| `addresses`\u003cbr>\u003cbr>`.categoryIds`* | list of integers | List of Chainalysis category IDs (see [here](https://docs.chainalysis.com/api/kyt/#categories)). If you leave this list empty, an [address](https://docs.chainalysis.com/api/kyt/#withdrawal-attempts-get-address-identifications) of any category identified by chainalysis will trigger the rule. Otherwise, if you only want the rule to trigger on specific categories, you can specify some in the list. |\n| `fallbackBehaviours`\u003cbr>\u003cbr>`.skipUnscreenableTransaction`* | boolean | Behaviour if the wallet activity is not screenable (eg. if it's a signature request of a hash). If true, a transaction which is \"unscreenable\" will just be skipped, and policy will not trigger |\n| `fallbackBehaviours.skipUnsupportedNetwork`* | boolean | Behaviour if the wallet activity is on a network not supported by chainalysis, or not yet supported in the dfns-chainalysis integration. If true, an unsupported network will just be skipped, and policy will not trigger |\n| `fallbackBehaviours.skipUnsupportedAsset`* | boolean | Behaviour if the wallet activity is with a asset not supported by chainalysis, or not yet supported in the dfns-chainalysis integration. If true, an unsupported asset will just be skipped, and policy will not trigger |\n| `fallbackBehaviours.skipChainalysisFailure`* | boolean | Behaviour if any issue with Chainalysis calls (timeout, results took too long, rate limiting errors, any error). If true, will skip if any error happens |\n\n","required":["kind","configuration"],"properties":{"kind":{"type":"string","enum":["ChainalysisTransactionPrescreening"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.8.pendingChangeRequest.body.oneOf.5.rule.oneOf.6.kind","typeLabel":"enum\u003cstring>"},"configuration":{"type":"object","properties":{"alerts":{"type":"object","properties":{"alertLevel":{"type":"string","enum":["LOW","MEDIUM","HIGH","SEVERE"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.8.pendingChangeRequest.body.oneOf.5.rule.oneOf.6.configuration.alerts.alertLevel","typeLabel":"enum\u003cstring>"},"categoryIds":{"type":"array","items":{"type":"integer","exclusiveMinimum":0,"uniqueKey":"\\items.items.[INDEX].oneOf.8.pendingChangeRequest.body.oneOf.5.rule.oneOf.6.configuration.alerts.categoryIds.items.[INDEX]","typeLabel":"integer"},"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.8.pendingChangeRequest.body.oneOf.5.rule.oneOf.6.configuration.alerts.categoryIds","typeLabel":"integer[]"}},"required":["alertLevel","categoryIds"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.8.pendingChangeRequest.body.oneOf.5.rule.oneOf.6.configuration.alerts","typeLabel":"object"},"exposures":{"type":"object","properties":{"direct":{"type":"object","properties":{"categoryIds":{"type":"array","items":{"type":"integer","exclusiveMinimum":0,"uniqueKey":"\\items.items.[INDEX].oneOf.8.pendingChangeRequest.body.oneOf.5.rule.oneOf.6.configuration.exposures.direct.categoryIds.items.[INDEX]","typeLabel":"integer"},"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.8.pendingChangeRequest.body.oneOf.5.rule.oneOf.6.configuration.exposures.direct.categoryIds","typeLabel":"integer[]"}},"required":["categoryIds"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.8.pendingChangeRequest.body.oneOf.5.rule.oneOf.6.configuration.exposures.direct","typeLabel":"object"}},"required":["direct"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.8.pendingChangeRequest.body.oneOf.5.rule.oneOf.6.configuration.exposures","typeLabel":"object"},"addresses":{"type":"object","properties":{"categoryIds":{"type":"array","items":{"type":"integer","exclusiveMinimum":0,"uniqueKey":"\\items.items.[INDEX].oneOf.8.pendingChangeRequest.body.oneOf.5.rule.oneOf.6.configuration.addresses.categoryIds.items.[INDEX]","typeLabel":"integer"},"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.8.pendingChangeRequest.body.oneOf.5.rule.oneOf.6.configuration.addresses.categoryIds","typeLabel":"integer[]"}},"required":["categoryIds"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.8.pendingChangeRequest.body.oneOf.5.rule.oneOf.6.configuration.addresses","typeLabel":"object"},"fallbackBehaviours":{"type":"object","properties":{"skipUnscreenableTransaction":{"type":"boolean","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.8.pendingChangeRequest.body.oneOf.5.rule.oneOf.6.configuration.fallbackBehaviours.skipUnscreenableTransaction","typeLabel":"boolean"},"skipUnsupportedNetwork":{"type":"boolean","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.8.pendingChangeRequest.body.oneOf.5.rule.oneOf.6.configuration.fallbackBehaviours.skipUnsupportedNetwork","typeLabel":"boolean"},"skipUnsupportedAsset":{"type":"boolean","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.8.pendingChangeRequest.body.oneOf.5.rule.oneOf.6.configuration.fallbackBehaviours.skipUnsupportedAsset","typeLabel":"boolean"},"skipChainalysisFailure":{"type":"boolean","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.8.pendingChangeRequest.body.oneOf.5.rule.oneOf.6.configuration.fallbackBehaviours.skipChainalysisFailure","typeLabel":"boolean"}},"required":["skipUnscreenableTransaction","skipUnsupportedNetwork","skipUnsupportedAsset","skipChainalysisFailure"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.8.pendingChangeRequest.body.oneOf.5.rule.oneOf.6.configuration.fallbackBehaviours","typeLabel":"object"},"userIdTemplate":{"type":"string","minLength":1,"maxLength":50,"pattern":"^([a-zA-Z0-9_:-]|{wallet\\.id}|{wallet\\.externalId})+$","default":"dfns","description":"**Deprecated** — set `userIdTemplate` on the Chainalysis integration setting instead; when set there, the integration-level template takes precedence over this one.\n\nValue sent to Chainalysis as the \"user ID\". Used by Chainalysis for grouping transaction screenings.\n \nThis template can include variables, included in brackets. The following variables are currently supported: `{wallet.id}` and `{wallet.externalId}`.\nAs an example, if you set `userIdTemplate: \"dfns:{wallet.id}_{wallet.externalId}\"`, when your wallet receives a transaction that gets screened by a Chainalysis policy, the \"user ID\" sent to Chainalysis will be `dfns:wa-xxx_yyy` (`wa-xxx` being the wallet ID, and `yyy` being the wallet external ID).","uniqueKey":"\\items.items.[INDEX].oneOf.8.pendingChangeRequest.body.oneOf.5.rule.oneOf.6.configuration.userIdTemplate","typeLabel":"string"}},"required":["alerts","exposures","addresses","fallbackBehaviours"],"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.8.pendingChangeRequest.body.oneOf.5.rule.oneOf.6.configuration","typeLabel":"object"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.8.pendingChangeRequest.body.oneOf.5.rule.oneOf.6","typeLabel":"ChainalysisTransactionPrescreening · object"},{"type":"object","title":"EllipticTransactionPrescreening","description":"\n\u003cInfo>\nThis rule can only be used once the Elliptic integration is activated from the Dfns dashboard settings.\n\u003c/Info>\n\nThis rule uses Elliptic KYT for pre-screening outgoing transfers. Upon transfer attempt, we run a synchronous Elliptic wallet analysis of the destination address, and check the returned risk score against the configured threshold, plus any configured risk rules / categories. If at or above the threshold, or if a configured rule / category matched, the policy is triggered.\n\nIt's called \"Pre\"-screening, because the scanned transaction is not on chain yet, it's still a transaction attempt.","required":["kind","configuration"],"properties":{"kind":{"type":"string","enum":["EllipticTransactionPrescreening"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.8.pendingChangeRequest.body.oneOf.5.rule.oneOf.7.kind","typeLabel":"enum\u003cstring>"},"configuration":{"type":"object","properties":{"riskScoreThreshold":{"type":"number","minimum":0,"maximum":10,"description":"Risk score threshold (0-10, decimals allowed). The policy triggers if the Elliptic risk score is at or above the threshold.","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.8.pendingChangeRequest.body.oneOf.5.rule.oneOf.7.configuration.riskScoreThreshold","typeLabel":"number"},"triggeredRules":{"type":"object","properties":{"ruleIds":{"type":"array","items":{"type":"string","format":"uuid","uniqueKey":"\\items.items.[INDEX].oneOf.8.pendingChangeRequest.body.oneOf.5.rule.oneOf.7.configuration.triggeredRules.ruleIds.items.[INDEX]","typeLabel":"string\u003cuuid>"},"description":"IDs of risk rules from your Elliptic risk model. If any of these rules matched the analysis, the policy triggers regardless of the risk score. Leave empty to trigger on the risk score threshold only.","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.8.pendingChangeRequest.body.oneOf.5.rule.oneOf.7.configuration.triggeredRules.ruleIds","typeLabel":"string\u003cuuid>[]"},"categories":{"type":"array","items":{"type":"string","minLength":1,"uniqueKey":"\\items.items.[INDEX].oneOf.8.pendingChangeRequest.body.oneOf.5.rule.oneOf.7.configuration.triggeredRules.categories.items.[INDEX]","typeLabel":"string"},"description":"Elliptic category names (eg. \"Dark Market\"), matched case-insensitively. If a matched risk rule involves any of these categories, the policy triggers regardless of the risk score. Leave empty to trigger on the risk score threshold only.","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.8.pendingChangeRequest.body.oneOf.5.rule.oneOf.7.configuration.triggeredRules.categories","typeLabel":"string[]"}},"required":["ruleIds","categories"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.8.pendingChangeRequest.body.oneOf.5.rule.oneOf.7.configuration.triggeredRules","typeLabel":"object"},"fallbackBehaviours":{"type":"object","properties":{"skipUnscreenableTransaction":{"type":"boolean","description":"skip all wallet requests that cannot be screened (eg. raw signatures)","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.8.pendingChangeRequest.body.oneOf.5.rule.oneOf.7.configuration.fallbackBehaviours.skipUnscreenableTransaction","typeLabel":"boolean"},"skipUnsupportedNetwork":{"type":"boolean","description":"skip requests on a network not supported yet in our Elliptic integration","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.8.pendingChangeRequest.body.oneOf.5.rule.oneOf.7.configuration.fallbackBehaviours.skipUnsupportedNetwork","typeLabel":"boolean"},"skipEllipticFailure":{"type":"boolean","description":"skip any failure of the Elliptic analysis (timeout, rate limiting, any error)","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.8.pendingChangeRequest.body.oneOf.5.rule.oneOf.7.configuration.fallbackBehaviours.skipEllipticFailure","typeLabel":"boolean"}},"required":["skipUnscreenableTransaction","skipUnsupportedNetwork","skipEllipticFailure"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.8.pendingChangeRequest.body.oneOf.5.rule.oneOf.7.configuration.fallbackBehaviours","typeLabel":"object"}},"required":["riskScoreThreshold","triggeredRules","fallbackBehaviours"],"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.8.pendingChangeRequest.body.oneOf.5.rule.oneOf.7.configuration","typeLabel":"object"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.8.pendingChangeRequest.body.oneOf.5.rule.oneOf.7","typeLabel":"EllipticTransactionPrescreening · object"},{"type":"object","title":"GlobalLedgerTransactionPrescreening","description":"This rule uses GlobalLedger KYT for pre-screening outgoing transfers by checking the destination address risk score.\n\nUpon transfer attempt, we will query GlobalLedger's address risk API, and check if the risk score (0-100) is at or above the configured threshold, or if any alerts show up. If so, the policy will be triggered.\n\nIt's called \"Pre\"-screening, because the scanned transaction is not on chain yet, it's still a transaction attempt.","required":["kind","configuration"],"properties":{"kind":{"type":"string","enum":["GlobalLedgerTransactionPrescreening"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.8.pendingChangeRequest.body.oneOf.5.rule.oneOf.8.kind","typeLabel":"enum\u003cstring>"},"configuration":{"type":"object","properties":{"riskScoreThreshold":{"type":"integer","minimum":0,"maximum":100,"description":"Risk score threshold (0-100). Policy triggers if address/transaction risk score >= threshold","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.8.pendingChangeRequest.body.oneOf.5.rule.oneOf.8.configuration.riskScoreThreshold","typeLabel":"integer"},"fallbackBehaviours":{"type":"object","properties":{"skipUnscreenableTransaction":{"type":"boolean","description":"skip all wallet requests that cannot be screened (eg. raw signatures)","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.8.pendingChangeRequest.body.oneOf.5.rule.oneOf.8.configuration.fallbackBehaviours.skipUnscreenableTransaction","typeLabel":"boolean"},"skipUnsupportedNetwork":{"type":"boolean","description":"skip transfer requests to a network not supported yet in our GlobalLedger integration","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.8.pendingChangeRequest.body.oneOf.5.rule.oneOf.8.configuration.fallbackBehaviours.skipUnsupportedNetwork","typeLabel":"boolean"},"skipUnsupportedAsset":{"type":"boolean","description":"skip transfer requests of an asset not supported by our GlobalLedger integration","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.8.pendingChangeRequest.body.oneOf.5.rule.oneOf.8.configuration.fallbackBehaviours.skipUnsupportedAsset","typeLabel":"boolean"},"skipGlobalLedgerFailure":{"type":"boolean","description":"skips any errors from GlobalLedger API request","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.8.pendingChangeRequest.body.oneOf.5.rule.oneOf.8.configuration.fallbackBehaviours.skipGlobalLedgerFailure","typeLabel":"boolean"}},"required":["skipUnscreenableTransaction","skipUnsupportedNetwork","skipUnsupportedAsset","skipGlobalLedgerFailure"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.8.pendingChangeRequest.body.oneOf.5.rule.oneOf.8.configuration.fallbackBehaviours","typeLabel":"object"}},"required":["riskScoreThreshold","fallbackBehaviours"],"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.8.pendingChangeRequest.body.oneOf.5.rule.oneOf.8.configuration","typeLabel":"object"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.8.pendingChangeRequest.body.oneOf.5.rule.oneOf.8","typeLabel":"GlobalLedgerTransactionPrescreening · object"},{"type":"object","title":"TravelRuleTransactionPrescreening","description":"This rule applies a Travel Rule check to outgoing transfers through the vendor selected in `configuration.vendor`: [Notabene](https://docs.dfns.co/integrations/travel-rule/notabene) or Sumsub. It can only be used once that vendor's integration is activated from the Dfns dashboard settings.\n\nIt ***ONLY*** applies to Dfns [Transfer Asset](https://docs.dfns.co/api-reference/wallets/transfer-asset) Api Calls. It is NOT supported for Transfers initiated via the dashboard. Upon transfer attempt with a [TravelRule](https://docs.dfns.co/api-reference/wallets/transfer-asset#body-travel-rule) payload, we call the vendor's APIs on your behalf to validate and submit the travel rule message, then wait for its outcome. With Notabene, Dfns waits for a response from the counterparty (for custodial transfers) or from Notabene (for non-custodial transfers). With Sumsub, Dfns submits a Travel Rule message and waits for Sumsub to report its outcome. In both cases the wait is bounded by `configuration.autoTriggerTimeoutSeconds`, after which the policy's configured action is applied.\n\nThe transfer's `travelRule` payload must be of the kind matching `configuration.vendor` — a mismatch triggers the policy and applies its configured action. A given wallet must be covered by at most one travel-rule policy (of any vendor): if several travel-rule policies apply to the same transfer carrying a `travelRule` payload, it is treated as a misconfiguration and blocked without contacting any vendor. Signatures and transfers without a payload are not affected, since the rule does not apply to them.\n\nIt's called \"Pre\"-screening, because the transaction is not on chain yet, it's still a transaction attempt (before the transaction actually make it on chain).","required":["kind","configuration"],"properties":{"kind":{"type":"string","enum":["TravelRuleTransactionPrescreening"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.8.pendingChangeRequest.body.oneOf.5.rule.oneOf.9.kind","typeLabel":"enum\u003cstring>"},"configuration":{"oneOf":[{"type":"object","title":"TravelRuleNotabeneConfiguration","required":["vendor"],"properties":{"vendor":{"type":"string","enum":["Notabene"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.8.pendingChangeRequest.body.oneOf.5.rule.oneOf.9.configuration.oneOf.0.vendor","typeLabel":"enum\u003cstring>"},"autoTriggerTimeoutSeconds":{"type":"integer","minimum":0,"maximum":2592000,"default":86400,"description":"Seconds to wait for the vendor's verdict before the policy action applies. Maximum 2592000 (30 days). Defaults to 86400 (24 hours).","uniqueKey":"\\items.items.[INDEX].oneOf.8.pendingChangeRequest.body.oneOf.5.rule.oneOf.9.configuration.oneOf.0.autoTriggerTimeoutSeconds","typeLabel":"integer"},"autoClearAfterDeliveredTimeoutSeconds":{"type":"integer","minimum":0,"maximum":2592000,"description":"Seconds after delivery before a still-pending evaluation clears. Maximum 2592000 (30 days).","uniqueKey":"\\items.items.[INDEX].oneOf.8.pendingChangeRequest.body.oneOf.5.rule.oneOf.9.configuration.oneOf.0.autoClearAfterDeliveredTimeoutSeconds","typeLabel":"integer"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.8.pendingChangeRequest.body.oneOf.5.rule.oneOf.9.configuration.oneOf.0","typeLabel":"TravelRuleNotabeneConfiguration · object"},{"type":"object","title":"TravelRuleSumsubConfiguration","required":["vendor"],"properties":{"vendor":{"type":"string","enum":["Sumsub"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.8.pendingChangeRequest.body.oneOf.5.rule.oneOf.9.configuration.oneOf.1.vendor","typeLabel":"enum\u003cstring>"},"autoTriggerTimeoutSeconds":{"type":"integer","minimum":0,"maximum":2592000,"default":86400,"description":"Seconds to wait for the vendor's verdict before the policy action applies. Maximum 2592000 (30 days). Defaults to 86400 (24 hours).","uniqueKey":"\\items.items.[INDEX].oneOf.8.pendingChangeRequest.body.oneOf.5.rule.oneOf.9.configuration.oneOf.1.autoTriggerTimeoutSeconds","typeLabel":"integer"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.8.pendingChangeRequest.body.oneOf.5.rule.oneOf.9.configuration.oneOf.1","typeLabel":"TravelRuleSumsubConfiguration · object"}],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.8.pendingChangeRequest.body.oneOf.5.rule.oneOf.9.configuration","typeLabel":"TravelRuleNotabeneConfiguration · object | TravelRuleSumsubConfiguration · object"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.8.pendingChangeRequest.body.oneOf.5.rule.oneOf.9","typeLabel":"TravelRuleTransactionPrescreening · object"}],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.8.pendingChangeRequest.body.oneOf.5.rule","typeLabel":"AlwaysTrigger · object | TransactionRecipientWhitelist · object | TransactionAmountLimit · object | TransactionAmountLimitNominal · object | TransactionAmountVelocity · object | TransactionCountVelocity · object | ChainalysisTransactionPrescreening · object | EllipticTransactionPrescreening · object | GlobalLedgerTransactionPrescreening · object | TravelRuleTransactionPrescreening · object"},"action":{"oneOf":[{"type":"object","title":"RequestApproval","description":"\nThis action means that activity will first require an Approval process to be completed before it can be executed (or be aborted if someone rejects it during the approval process).\n\nOne or several groups of approvers need to be specified. These groups define who is allowed to approve / reject an activity.\n\nThe activity will only be executed if all approver groups reach their \"quorum\" of approvals. Otherwise, if any one user within any approver group rejects, then the activity is aborted and the call is not executed.\n\nThe example below shows a `RequestApproval` action, configured with one approval group requiring 2 approvals amongst three specific users.\n\n```json\n{\n \"action\": {\n \"kind\": \"RequestApproval\",\n \"autoRejectTimeout\": 60, // minutes\n \"approvalGroups\": [\n {\n \"name\": \"Admins\",\n \"quorum\": 2, // only 2 approvers required in that group \n \"approvers\": {\n \"userId\": {\n \"in\": [\"us-...1\", \"us-...2\", \"us-...3\"],\n }\n }\n }\n ],\n\n }\n}\n```\n\n**Don't lock yourself up**\n\nBy default, users cannot approve an activity they initiated themselves, even if they are in an approval group. To allow this, you must set `initiatorCanApprove: true`.\n\n*Example 1:* For any wallet transfer, a policy is setup to require approval from **1 specific admin user** (eg. the CEO). `initiatorCanApprove` was not set to `true`. If the CEO himself initiates a transfer, no-one can approve his transfer and it's stuck.\n\n*Example 2:* Company has only 3 users. A policy is setup to require approval from **any 3 users** (`quorum: 3`) for any modification of a policy. `initiatorCanApprove` was not set to `true`. In this case, they are locked, and the policy cannot be modified: whoever requests a modification cannot approve, and the policy is therefore always missing one approver. To unlock, they would need to invite a new user and give him the rights to approve as well.\n ","required":["kind","approvalGroups"],"properties":{"kind":{"type":"string","enum":["RequestApproval"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.8.pendingChangeRequest.body.oneOf.5.action.oneOf.0.kind","typeLabel":"enum\u003cstring>"},"approvalGroups":{"type":"array","items":{"type":"object","properties":{"quorum":{"type":"integer","minimum":1,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.8.pendingChangeRequest.body.oneOf.5.action.oneOf.0.approvalGroups.items.[INDEX].quorum","typeLabel":"integer"},"approvers":{"type":"object","properties":{"userId":{"type":"object","properties":{"in":{"type":"array","items":{"type":"string","minLength":1,"uniqueKey":"\\items.items.[INDEX].oneOf.8.pendingChangeRequest.body.oneOf.5.action.oneOf.0.approvalGroups.items.[INDEX].approvers.userId.in.items.[INDEX]","typeLabel":"string"},"minItems":1,"maxItems":100,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.8.pendingChangeRequest.body.oneOf.5.action.oneOf.0.approvalGroups.items.[INDEX].approvers.userId.in","typeLabel":"string[]"}},"required":["in"],"additionalProperties":false,"description":"Users and service accounts who may approve.","uniqueKey":"\\items.items.[INDEX].oneOf.8.pendingChangeRequest.body.oneOf.5.action.oneOf.0.approvalGroups.items.[INDEX].approvers.userId","typeLabel":"object"},"userGroupId":{"type":"object","properties":{"in":{"type":"array","items":{"type":"string","minLength":1,"maxLength":64,"pattern":"^ug-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"User group id.","example":"ug-139tf-f58l8-lsbt6dp47lfsdvgh","uniqueKey":"\\items.items.[INDEX].oneOf.8.pendingChangeRequest.body.oneOf.5.action.oneOf.0.approvalGroups.items.[INDEX].approvers.userGroupId.in.items.[INDEX]","typeLabel":"string"},"minItems":1,"maxItems":100,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.8.pendingChangeRequest.body.oneOf.5.action.oneOf.0.approvalGroups.items.[INDEX].approvers.userGroupId.in","typeLabel":"string[]"}},"required":["in"],"additionalProperties":false,"description":"User groups whose members may approve.","uniqueKey":"\\items.items.[INDEX].oneOf.8.pendingChangeRequest.body.oneOf.5.action.oneOf.0.approvalGroups.items.[INDEX].approvers.userGroupId","typeLabel":"object"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.8.pendingChangeRequest.body.oneOf.5.action.oneOf.0.approvalGroups.items.[INDEX].approvers","typeLabel":"object"},"name":{"type":"string","uniqueKey":"\\items.items.[INDEX].oneOf.8.pendingChangeRequest.body.oneOf.5.action.oneOf.0.approvalGroups.items.[INDEX].name","typeLabel":"string"},"initiatorCanApprove":{"type":"boolean","description":"Whether the initiator of the activity can participate in the approval.","uniqueKey":"\\items.items.[INDEX].oneOf.8.pendingChangeRequest.body.oneOf.5.action.oneOf.0.approvalGroups.items.[INDEX].initiatorCanApprove","typeLabel":"boolean"},"serviceAccountsCanApprove":{"type":"boolean","description":"Whether service accounts can participate in the approval for this group.","uniqueKey":"\\items.items.[INDEX].oneOf.8.pendingChangeRequest.body.oneOf.5.action.oneOf.0.approvalGroups.items.[INDEX].serviceAccountsCanApprove","typeLabel":"boolean"}},"required":["quorum","approvers"],"additionalProperties":false,"uniqueKey":"\\items.items.[INDEX].oneOf.8.pendingChangeRequest.body.oneOf.5.action.oneOf.0.approvalGroups.items.[INDEX]","typeLabel":"object"},"minItems":1,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.8.pendingChangeRequest.body.oneOf.5.action.oneOf.0.approvalGroups","typeLabel":"object[]"},"autoRejectTimeout":{"oneOf":[{"type":"integer","minimum":1,"uniqueKey":"\\items.items.[INDEX].oneOf.8.pendingChangeRequest.body.oneOf.5.action.oneOf.0.autoRejectTimeout.oneOf.0","typeLabel":"integer"},{"type":"null","minimum":1,"uniqueKey":"\\items.items.[INDEX].oneOf.8.pendingChangeRequest.body.oneOf.5.action.oneOf.0.autoRejectTimeout.oneOf.1","typeLabel":"null"}],"uniqueKey":"\\items.items.[INDEX].oneOf.8.pendingChangeRequest.body.oneOf.5.action.oneOf.0.autoRejectTimeout","typeLabel":"integer | null"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.8.pendingChangeRequest.body.oneOf.5.action.oneOf.0","typeLabel":"RequestApproval · object"},{"type":"object","title":"Block","description":"This action means that the activity will be blocked if the policy is triggered.\n\n```json\n{\n \"action\": {\n \"kind\": \"Block\"\n }\n}\n```\n","required":["kind"],"properties":{"kind":{"type":"string","enum":["Block"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.8.pendingChangeRequest.body.oneOf.5.action.oneOf.1.kind","typeLabel":"enum\u003cstring>"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.8.pendingChangeRequest.body.oneOf.5.action.oneOf.1","typeLabel":"Block · object"},{"type":"object","title":"NoAction","description":"\n This action kind means that nothing will happen after policy rule evaluation. It's meant to be used with policy rules \"`ChainalysisTransactionPrescreening`\" or \"`ChainalysisTransactionScreening`\". This action is for when you just want the KYT analysis rule to be run, and then if triggered, those result returned in a `policy.triggered` [Webhook Event](https://docs.dfns.co/api-reference/webhook-events).\n\n```json\n{\n \"action\": {\n \"kind\": \"NoAction\"\n }\n}\n```\n ","required":["kind"],"properties":{"kind":{"type":"string","enum":["NoAction"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.8.pendingChangeRequest.body.oneOf.5.action.oneOf.2.kind","typeLabel":"enum\u003cstring>"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.8.pendingChangeRequest.body.oneOf.5.action.oneOf.2","typeLabel":"NoAction · object"}],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.8.pendingChangeRequest.body.oneOf.5.action","typeLabel":"RequestApproval · object | Block · object | NoAction · object"},"dateCreated":{"type":"string","uniqueKey":"\\items.items.[INDEX].oneOf.8.pendingChangeRequest.body.oneOf.5.dateCreated","typeLabel":"string"},"dateUpdated":{"type":"string","uniqueKey":"\\items.items.[INDEX].oneOf.8.pendingChangeRequest.body.oneOf.5.dateUpdated","typeLabel":"string"},"filters":{"type":"object","properties":{"walletId":{"type":"object","properties":{"in":{"type":"array","items":{"type":"string","minLength":1,"uniqueKey":"\\items.items.[INDEX].oneOf.8.pendingChangeRequest.body.oneOf.5.filters.walletId.in.items.[INDEX]","typeLabel":"string"},"minItems":1,"maxItems":100,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.8.pendingChangeRequest.body.oneOf.5.filters.walletId.in","typeLabel":"string[]"}},"required":["in"],"additionalProperties":false,"uniqueKey":"\\items.items.[INDEX].oneOf.8.pendingChangeRequest.body.oneOf.5.filters.walletId","typeLabel":"object"},"walletTags":{"type":"object","properties":{"hasAny":{"type":"array","items":{"type":"string","minLength":1,"uniqueKey":"\\items.items.[INDEX].oneOf.8.pendingChangeRequest.body.oneOf.5.filters.walletTags.hasAny.items.[INDEX]","typeLabel":"string"},"minItems":1,"maxItems":100,"uniqueKey":"\\items.items.[INDEX].oneOf.8.pendingChangeRequest.body.oneOf.5.filters.walletTags.hasAny","typeLabel":"string[]"},"hasAll":{"type":"array","items":{"type":"string","minLength":1,"uniqueKey":"\\items.items.[INDEX].oneOf.8.pendingChangeRequest.body.oneOf.5.filters.walletTags.hasAll.items.[INDEX]","typeLabel":"string"},"minItems":1,"maxItems":100,"uniqueKey":"\\items.items.[INDEX].oneOf.8.pendingChangeRequest.body.oneOf.5.filters.walletTags.hasAll","typeLabel":"string[]"}},"additionalProperties":false,"uniqueKey":"\\items.items.[INDEX].oneOf.8.pendingChangeRequest.body.oneOf.5.filters.walletTags","typeLabel":"object"},"keyId":{"type":"object","properties":{"in":{"type":"array","items":{"type":"string","minLength":1,"maxLength":64,"pattern":"^key-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"Key id.","example":"key-01snl-t56gb-j8tsok0vn802p80i","uniqueKey":"\\items.items.[INDEX].oneOf.8.pendingChangeRequest.body.oneOf.5.filters.keyId.in.items.[INDEX]","typeLabel":"string"},"minItems":1,"maxItems":100,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.8.pendingChangeRequest.body.oneOf.5.filters.keyId.in","typeLabel":"string[]"}},"required":["in"],"additionalProperties":false,"uniqueKey":"\\items.items.[INDEX].oneOf.8.pendingChangeRequest.body.oneOf.5.filters.keyId","typeLabel":"object"},"keyStoreId":{"type":"object","properties":{"in":{"type":"array","items":{"type":"string","minLength":1,"maxLength":64,"pattern":"^store-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"Key store id.","example":"store-425nf-ebf0a-qq22t6qra51tj8j0","uniqueKey":"\\items.items.[INDEX].oneOf.8.pendingChangeRequest.body.oneOf.5.filters.keyStoreId.in.items.[INDEX]","typeLabel":"string"},"minItems":1,"maxItems":100,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.8.pendingChangeRequest.body.oneOf.5.filters.keyStoreId.in","typeLabel":"string[]"}},"required":["in"],"additionalProperties":false,"uniqueKey":"\\items.items.[INDEX].oneOf.8.pendingChangeRequest.body.oneOf.5.filters.keyStoreId","typeLabel":"object"}},"additionalProperties":false,"uniqueKey":"\\items.items.[INDEX].oneOf.8.pendingChangeRequest.body.oneOf.5.filters","typeLabel":"object"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.8.pendingChangeRequest.body.oneOf.5","typeLabel":"Wallets:Sign · object"},{"type":"object","title":"Wallets:IncomingTransaction","required":["id","name","status","activityKind","rule","action"],"properties":{"id":{"type":"string","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.8.pendingChangeRequest.body.oneOf.6.id","typeLabel":"string"},"name":{"type":"string","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.8.pendingChangeRequest.body.oneOf.6.name","typeLabel":"string"},"status":{"type":"string","enum":["Active","Archived"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.8.pendingChangeRequest.body.oneOf.6.status","typeLabel":"enum\u003cstring>"},"activityKind":{"type":"string","enum":["Wallets:IncomingTransaction"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.8.pendingChangeRequest.body.oneOf.6.activityKind","typeLabel":"enum\u003cstring>"},"rule":{"type":"object","title":"ChainalysisTransactionScreening","description":"\n\u003cInfo>\nThis rule can only be used once the Chainalysis integration is activated from the Dfns dashboard settings. (see more on [Chainalysis](https://docs.dfns.co/integrations/aml-kyt/chainalysis) integration page).\n\u003c/Info>\n\nThis rule can be used on a policy of `activityKind` = `Wallets:IncomingTransaction`, and with the action kind `NoAction`. It's a rule based on Chainalysis KYT integration (Know-Your-Transaction). Upon an incoming transaction detectedby our indexers, we will [register the transfer with Chainalysis](https://docs.chainalysis.com/api/kyt/#registration-register-a-transfer), and fetch the results of the analysis (alerts \u0026 exposures detected). Based on the results, and the configuration of this rule, the policy will be triggered.\n\nThe shape of the rule is almost like the `ChainalysisTransactionPrescreening` rule, expect the the `address` property is not supported.\n\n```json\n{\n \"rule\": {\n \"kind\": \"ChainalysisTransactionPrescreening\",\n \"configuration\": {\n \"alerts\": {\n \"alertLevel\": \"LOW\",\n \"categoryIds\": []\n },\n \"exposures\": {\n \"direct\": {\n \"categoryIds\": []\n }\n },\n \"fallbackBehaviours\": {\n \"skipUnscreenableTransaction\": false,\n \"skipUnsupportedNetwork\": false,\n \"skipUnsupportedAsset\": false,\n \"skipChainalysisFailure\": false\n }\n }\n }\n}\n```\n\n**Configuration**\n\nPlease refer to the configuration for the `ChainalysisTransactionPrescreening` rule.\n","required":["kind","configuration"],"properties":{"kind":{"type":"string","enum":["ChainalysisTransactionScreening"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.8.pendingChangeRequest.body.oneOf.6.rule.kind","typeLabel":"enum\u003cstring>"},"configuration":{"type":"object","properties":{"alerts":{"type":"object","properties":{"alertLevel":{"type":"string","enum":["LOW","MEDIUM","HIGH","SEVERE"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.8.pendingChangeRequest.body.oneOf.6.rule.configuration.alerts.alertLevel","typeLabel":"enum\u003cstring>"},"categoryIds":{"type":"array","items":{"type":"integer","exclusiveMinimum":0,"uniqueKey":"\\items.items.[INDEX].oneOf.8.pendingChangeRequest.body.oneOf.6.rule.configuration.alerts.categoryIds.items.[INDEX]","typeLabel":"integer"},"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.8.pendingChangeRequest.body.oneOf.6.rule.configuration.alerts.categoryIds","typeLabel":"integer[]"}},"required":["alertLevel","categoryIds"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.8.pendingChangeRequest.body.oneOf.6.rule.configuration.alerts","typeLabel":"object"},"exposures":{"type":"object","properties":{"direct":{"type":"object","properties":{"categoryIds":{"type":"array","items":{"type":"integer","exclusiveMinimum":0,"uniqueKey":"\\items.items.[INDEX].oneOf.8.pendingChangeRequest.body.oneOf.6.rule.configuration.exposures.direct.categoryIds.items.[INDEX]","typeLabel":"integer"},"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.8.pendingChangeRequest.body.oneOf.6.rule.configuration.exposures.direct.categoryIds","typeLabel":"integer[]"}},"required":["categoryIds"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.8.pendingChangeRequest.body.oneOf.6.rule.configuration.exposures.direct","typeLabel":"object"}},"required":["direct"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.8.pendingChangeRequest.body.oneOf.6.rule.configuration.exposures","typeLabel":"object"},"fallbackBehaviours":{"type":"object","properties":{"skipUnscreenableTransaction":{"type":"boolean","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.8.pendingChangeRequest.body.oneOf.6.rule.configuration.fallbackBehaviours.skipUnscreenableTransaction","typeLabel":"boolean"},"skipUnsupportedNetwork":{"type":"boolean","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.8.pendingChangeRequest.body.oneOf.6.rule.configuration.fallbackBehaviours.skipUnsupportedNetwork","typeLabel":"boolean"},"skipUnsupportedAsset":{"type":"boolean","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.8.pendingChangeRequest.body.oneOf.6.rule.configuration.fallbackBehaviours.skipUnsupportedAsset","typeLabel":"boolean"},"skipChainalysisFailure":{"type":"boolean","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.8.pendingChangeRequest.body.oneOf.6.rule.configuration.fallbackBehaviours.skipChainalysisFailure","typeLabel":"boolean"}},"required":["skipUnscreenableTransaction","skipUnsupportedNetwork","skipUnsupportedAsset","skipChainalysisFailure"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.8.pendingChangeRequest.body.oneOf.6.rule.configuration.fallbackBehaviours","typeLabel":"object"},"userIdTemplate":{"type":"string","minLength":1,"maxLength":50,"pattern":"^([a-zA-Z0-9_:-]|{wallet\\.id}|{wallet\\.externalId})+$","default":"dfns","description":"**Deprecated** — set `userIdTemplate` on the Chainalysis integration setting instead; when set there, the integration-level template takes precedence over this one.\n\nValue sent to Chainalysis as the \"user ID\". Used by Chainalysis for grouping transaction screenings.\n \nThis template can include variables, included in brackets. The following variables are currently supported: `{wallet.id}` and `{wallet.externalId}`.\nAs an example, if you set `userIdTemplate: \"dfns:{wallet.id}_{wallet.externalId}\"`, when your wallet receives a transaction that gets screened by a Chainalysis policy, the \"user ID\" sent to Chainalysis will be `dfns:wa-xxx_yyy` (`wa-xxx` being the wallet ID, and `yyy` being the wallet external ID).","uniqueKey":"\\items.items.[INDEX].oneOf.8.pendingChangeRequest.body.oneOf.6.rule.configuration.userIdTemplate","typeLabel":"string"}},"required":["alerts","exposures","fallbackBehaviours"],"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.8.pendingChangeRequest.body.oneOf.6.rule.configuration","typeLabel":"object"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.8.pendingChangeRequest.body.oneOf.6.rule","typeLabel":"ChainalysisTransactionScreening · object"},"action":{"type":"object","title":"NoAction","description":"\n This action kind means that nothing will happen after policy rule evaluation. It's meant to be used with policy rules \"`ChainalysisTransactionPrescreening`\" or \"`ChainalysisTransactionScreening`\". This action is for when you just want the KYT analysis rule to be run, and then if triggered, those result returned in a `policy.triggered` [Webhook Event](https://docs.dfns.co/api-reference/webhook-events).\n\n```json\n{\n \"action\": {\n \"kind\": \"NoAction\"\n }\n}\n```\n ","required":["kind"],"properties":{"kind":{"type":"string","enum":["NoAction"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.8.pendingChangeRequest.body.oneOf.6.action.kind","typeLabel":"enum\u003cstring>"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.8.pendingChangeRequest.body.oneOf.6.action","typeLabel":"NoAction · object"},"dateCreated":{"type":"string","uniqueKey":"\\items.items.[INDEX].oneOf.8.pendingChangeRequest.body.oneOf.6.dateCreated","typeLabel":"string"},"dateUpdated":{"type":"string","uniqueKey":"\\items.items.[INDEX].oneOf.8.pendingChangeRequest.body.oneOf.6.dateUpdated","typeLabel":"string"},"filters":{"type":"object","properties":{"walletId":{"type":"object","properties":{"in":{"type":"array","items":{"type":"string","minLength":1,"uniqueKey":"\\items.items.[INDEX].oneOf.8.pendingChangeRequest.body.oneOf.6.filters.walletId.in.items.[INDEX]","typeLabel":"string"},"minItems":1,"maxItems":100,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.8.pendingChangeRequest.body.oneOf.6.filters.walletId.in","typeLabel":"string[]"}},"required":["in"],"additionalProperties":false,"uniqueKey":"\\items.items.[INDEX].oneOf.8.pendingChangeRequest.body.oneOf.6.filters.walletId","typeLabel":"object"},"walletTags":{"type":"object","properties":{"hasAny":{"type":"array","items":{"type":"string","minLength":1,"uniqueKey":"\\items.items.[INDEX].oneOf.8.pendingChangeRequest.body.oneOf.6.filters.walletTags.hasAny.items.[INDEX]","typeLabel":"string"},"minItems":1,"maxItems":100,"uniqueKey":"\\items.items.[INDEX].oneOf.8.pendingChangeRequest.body.oneOf.6.filters.walletTags.hasAny","typeLabel":"string[]"},"hasAll":{"type":"array","items":{"type":"string","minLength":1,"uniqueKey":"\\items.items.[INDEX].oneOf.8.pendingChangeRequest.body.oneOf.6.filters.walletTags.hasAll.items.[INDEX]","typeLabel":"string"},"minItems":1,"maxItems":100,"uniqueKey":"\\items.items.[INDEX].oneOf.8.pendingChangeRequest.body.oneOf.6.filters.walletTags.hasAll","typeLabel":"string[]"}},"additionalProperties":false,"uniqueKey":"\\items.items.[INDEX].oneOf.8.pendingChangeRequest.body.oneOf.6.filters.walletTags","typeLabel":"object"},"keyId":{"type":"object","properties":{"in":{"type":"array","items":{"type":"string","minLength":1,"maxLength":64,"pattern":"^key-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"Key id.","example":"key-01snl-t56gb-j8tsok0vn802p80i","uniqueKey":"\\items.items.[INDEX].oneOf.8.pendingChangeRequest.body.oneOf.6.filters.keyId.in.items.[INDEX]","typeLabel":"string"},"minItems":1,"maxItems":100,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.8.pendingChangeRequest.body.oneOf.6.filters.keyId.in","typeLabel":"string[]"}},"required":["in"],"additionalProperties":false,"uniqueKey":"\\items.items.[INDEX].oneOf.8.pendingChangeRequest.body.oneOf.6.filters.keyId","typeLabel":"object"},"keyStoreId":{"type":"object","properties":{"in":{"type":"array","items":{"type":"string","minLength":1,"maxLength":64,"pattern":"^store-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"Key store id.","example":"store-425nf-ebf0a-qq22t6qra51tj8j0","uniqueKey":"\\items.items.[INDEX].oneOf.8.pendingChangeRequest.body.oneOf.6.filters.keyStoreId.in.items.[INDEX]","typeLabel":"string"},"minItems":1,"maxItems":100,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.8.pendingChangeRequest.body.oneOf.6.filters.keyStoreId.in","typeLabel":"string[]"}},"required":["in"],"additionalProperties":false,"uniqueKey":"\\items.items.[INDEX].oneOf.8.pendingChangeRequest.body.oneOf.6.filters.keyStoreId","typeLabel":"object"}},"additionalProperties":false,"uniqueKey":"\\items.items.[INDEX].oneOf.8.pendingChangeRequest.body.oneOf.6.filters","typeLabel":"object"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.8.pendingChangeRequest.body.oneOf.6","typeLabel":"Wallets:IncomingTransaction · object"},{"type":"object","title":"Vaults:ReleaseQuarantine","required":["id","name","status","activityKind","rule","action"],"properties":{"id":{"type":"string","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.8.pendingChangeRequest.body.oneOf.7.id","typeLabel":"string"},"name":{"type":"string","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.8.pendingChangeRequest.body.oneOf.7.name","typeLabel":"string"},"status":{"type":"string","enum":["Active","Archived"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.8.pendingChangeRequest.body.oneOf.7.status","typeLabel":"enum\u003cstring>"},"activityKind":{"type":"string","enum":["Vaults:ReleaseQuarantine"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.8.pendingChangeRequest.body.oneOf.7.activityKind","typeLabel":"enum\u003cstring>"},"rule":{"oneOf":[{"type":"object","title":"AlwaysTrigger","description":"This rule will always be triggered, meaning that if this rule is defined on a policy, the policy will always trigger the policy action, regardless of the activity details.","required":["kind"],"properties":{"kind":{"type":"string","enum":["AlwaysTrigger"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.8.pendingChangeRequest.body.oneOf.7.rule.oneOf.0.kind","typeLabel":"enum\u003cstring>"},"configuration":{"type":"object","properties":{},"additionalProperties":false,"uniqueKey":"\\items.items.[INDEX].oneOf.8.pendingChangeRequest.body.oneOf.7.rule.oneOf.0.configuration","typeLabel":"object"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.8.pendingChangeRequest.body.oneOf.7.rule.oneOf.0","typeLabel":"AlwaysTrigger · object"},{"type":"object","title":"ChainalysisQuarantineScreening","description":"\n\u003cInfo>\nThis rule can only be used once the Chainalysis integration is activated from the Dfns dashboard settings. (see more on [Chainalysis](https://docs.dfns.co/integrations/aml-kyt/chainalysis) integration page).\n\u003c/Info>\n\nThis rule can be used on a policy of `activityKind` = `Vaults:ReleaseQuarantine`. When a quarantined vault deposit was screened by Chainalysis KYT, the screening result (alerts \u0026 direct exposure) is stored with the quarantine. When a release of the quarantined funds is requested, this rule evaluates that **stored** result — no new Chainalysis call is made. Based on the stored result and the configuration of this rule, the policy will be triggered.\n\nIf the quarantine has **no stored KYT result** (the result was not received yet, the network/asset is not supported by the Chainalysis integration, or screening failed), the rule **always triggers** (fail closed): the release then follows the policy action (approval or block).\n\n```json\n{\n \"rule\": {\n \"kind\": \"ChainalysisQuarantineScreening\",\n \"configuration\": {\n \"alerts\": {\n \"alertLevel\": \"LOW\",\n \"categoryIds\": []\n },\n \"exposures\": {\n \"direct\": {\n \"categoryIds\": []\n }\n }\n }\n }\n}\n```\n\n**Configuration**\n\n| Property | Type | Description |\n| --- | --- | --- |\n| `alerts`\u003cbr>\u003cbr>`.alertLevel`* | `string` | Minimum alert level above which the rule should trigger, if any alert was returned in the stored Chainalysis results. Can be `LOW`, `MEDIUM`, `HIGH`, or `SEVERE` |\n| `alerts`\u003cbr>\u003cbr>`.categoryIds`* | list of integers | List of Chainalysis category IDs (see [here](https://docs.chainalysis.com/api/kyt/#categories)). If you leave this list empty, alerts of any category will trigger the rule. Otherwise, if you only want the rule to trigger on specific categories, you can specify some in the list. |\n| `exposures`\u003cbr>\u003cbr>`.direct`\u003cbr>\u003cbr>`.categoryIds`* | list of integers | List of Chainalysis category IDs (see [here](https://docs.chainalysis.com/api/kyt/#categories)). If you leave this list empty, a direct exposure of any category in the stored results will trigger the rule. Otherwise, if you only want the rule to trigger on specific categories, you can specify some in the list. |\n","required":["kind","configuration"],"properties":{"kind":{"type":"string","enum":["ChainalysisQuarantineScreening"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.8.pendingChangeRequest.body.oneOf.7.rule.oneOf.1.kind","typeLabel":"enum\u003cstring>"},"configuration":{"type":"object","properties":{"alerts":{"type":"object","properties":{"alertLevel":{"type":"string","enum":["LOW","MEDIUM","HIGH","SEVERE"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.8.pendingChangeRequest.body.oneOf.7.rule.oneOf.1.configuration.alerts.alertLevel","typeLabel":"enum\u003cstring>"},"categoryIds":{"type":"array","items":{"type":"integer","exclusiveMinimum":0,"uniqueKey":"\\items.items.[INDEX].oneOf.8.pendingChangeRequest.body.oneOf.7.rule.oneOf.1.configuration.alerts.categoryIds.items.[INDEX]","typeLabel":"integer"},"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.8.pendingChangeRequest.body.oneOf.7.rule.oneOf.1.configuration.alerts.categoryIds","typeLabel":"integer[]"}},"required":["alertLevel","categoryIds"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.8.pendingChangeRequest.body.oneOf.7.rule.oneOf.1.configuration.alerts","typeLabel":"object"},"exposures":{"type":"object","properties":{"direct":{"type":"object","properties":{"categoryIds":{"type":"array","items":{"type":"integer","exclusiveMinimum":0,"uniqueKey":"\\items.items.[INDEX].oneOf.8.pendingChangeRequest.body.oneOf.7.rule.oneOf.1.configuration.exposures.direct.categoryIds.items.[INDEX]","typeLabel":"integer"},"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.8.pendingChangeRequest.body.oneOf.7.rule.oneOf.1.configuration.exposures.direct.categoryIds","typeLabel":"integer[]"}},"required":["categoryIds"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.8.pendingChangeRequest.body.oneOf.7.rule.oneOf.1.configuration.exposures.direct","typeLabel":"object"}},"required":["direct"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.8.pendingChangeRequest.body.oneOf.7.rule.oneOf.1.configuration.exposures","typeLabel":"object"}},"required":["alerts","exposures"],"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.8.pendingChangeRequest.body.oneOf.7.rule.oneOf.1.configuration","typeLabel":"object"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.8.pendingChangeRequest.body.oneOf.7.rule.oneOf.1","typeLabel":"ChainalysisQuarantineScreening · object"}],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.8.pendingChangeRequest.body.oneOf.7.rule","typeLabel":"AlwaysTrigger · object | ChainalysisQuarantineScreening · object"},"action":{"oneOf":[{"type":"object","title":"RequestApproval","description":"\nThis action means that activity will first require an Approval process to be completed before it can be executed (or be aborted if someone rejects it during the approval process).\n\nOne or several groups of approvers need to be specified. These groups define who is allowed to approve / reject an activity.\n\nThe activity will only be executed if all approver groups reach their \"quorum\" of approvals. Otherwise, if any one user within any approver group rejects, then the activity is aborted and the call is not executed.\n\nThe example below shows a `RequestApproval` action, configured with one approval group requiring 2 approvals amongst three specific users.\n\n```json\n{\n \"action\": {\n \"kind\": \"RequestApproval\",\n \"autoRejectTimeout\": 60, // minutes\n \"approvalGroups\": [\n {\n \"name\": \"Admins\",\n \"quorum\": 2, // only 2 approvers required in that group \n \"approvers\": {\n \"userId\": {\n \"in\": [\"us-...1\", \"us-...2\", \"us-...3\"],\n }\n }\n }\n ],\n\n }\n}\n```\n\n**Don't lock yourself up**\n\nBy default, users cannot approve an activity they initiated themselves, even if they are in an approval group. To allow this, you must set `initiatorCanApprove: true`.\n\n*Example 1:* For any wallet transfer, a policy is setup to require approval from **1 specific admin user** (eg. the CEO). `initiatorCanApprove` was not set to `true`. If the CEO himself initiates a transfer, no-one can approve his transfer and it's stuck.\n\n*Example 2:* Company has only 3 users. A policy is setup to require approval from **any 3 users** (`quorum: 3`) for any modification of a policy. `initiatorCanApprove` was not set to `true`. In this case, they are locked, and the policy cannot be modified: whoever requests a modification cannot approve, and the policy is therefore always missing one approver. To unlock, they would need to invite a new user and give him the rights to approve as well.\n ","required":["kind","approvalGroups"],"properties":{"kind":{"type":"string","enum":["RequestApproval"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.8.pendingChangeRequest.body.oneOf.7.action.oneOf.0.kind","typeLabel":"enum\u003cstring>"},"approvalGroups":{"type":"array","items":{"type":"object","properties":{"quorum":{"type":"integer","minimum":1,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.8.pendingChangeRequest.body.oneOf.7.action.oneOf.0.approvalGroups.items.[INDEX].quorum","typeLabel":"integer"},"approvers":{"type":"object","properties":{"userId":{"type":"object","properties":{"in":{"type":"array","items":{"type":"string","minLength":1,"uniqueKey":"\\items.items.[INDEX].oneOf.8.pendingChangeRequest.body.oneOf.7.action.oneOf.0.approvalGroups.items.[INDEX].approvers.userId.in.items.[INDEX]","typeLabel":"string"},"minItems":1,"maxItems":100,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.8.pendingChangeRequest.body.oneOf.7.action.oneOf.0.approvalGroups.items.[INDEX].approvers.userId.in","typeLabel":"string[]"}},"required":["in"],"additionalProperties":false,"description":"Users and service accounts who may approve.","uniqueKey":"\\items.items.[INDEX].oneOf.8.pendingChangeRequest.body.oneOf.7.action.oneOf.0.approvalGroups.items.[INDEX].approvers.userId","typeLabel":"object"},"userGroupId":{"type":"object","properties":{"in":{"type":"array","items":{"type":"string","minLength":1,"maxLength":64,"pattern":"^ug-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"User group id.","example":"ug-139tf-f58l8-lsbt6dp47lfsdvgh","uniqueKey":"\\items.items.[INDEX].oneOf.8.pendingChangeRequest.body.oneOf.7.action.oneOf.0.approvalGroups.items.[INDEX].approvers.userGroupId.in.items.[INDEX]","typeLabel":"string"},"minItems":1,"maxItems":100,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.8.pendingChangeRequest.body.oneOf.7.action.oneOf.0.approvalGroups.items.[INDEX].approvers.userGroupId.in","typeLabel":"string[]"}},"required":["in"],"additionalProperties":false,"description":"User groups whose members may approve.","uniqueKey":"\\items.items.[INDEX].oneOf.8.pendingChangeRequest.body.oneOf.7.action.oneOf.0.approvalGroups.items.[INDEX].approvers.userGroupId","typeLabel":"object"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.8.pendingChangeRequest.body.oneOf.7.action.oneOf.0.approvalGroups.items.[INDEX].approvers","typeLabel":"object"},"name":{"type":"string","uniqueKey":"\\items.items.[INDEX].oneOf.8.pendingChangeRequest.body.oneOf.7.action.oneOf.0.approvalGroups.items.[INDEX].name","typeLabel":"string"},"initiatorCanApprove":{"type":"boolean","description":"Whether the initiator of the activity can participate in the approval.","uniqueKey":"\\items.items.[INDEX].oneOf.8.pendingChangeRequest.body.oneOf.7.action.oneOf.0.approvalGroups.items.[INDEX].initiatorCanApprove","typeLabel":"boolean"},"serviceAccountsCanApprove":{"type":"boolean","description":"Whether service accounts can participate in the approval for this group.","uniqueKey":"\\items.items.[INDEX].oneOf.8.pendingChangeRequest.body.oneOf.7.action.oneOf.0.approvalGroups.items.[INDEX].serviceAccountsCanApprove","typeLabel":"boolean"}},"required":["quorum","approvers"],"additionalProperties":false,"uniqueKey":"\\items.items.[INDEX].oneOf.8.pendingChangeRequest.body.oneOf.7.action.oneOf.0.approvalGroups.items.[INDEX]","typeLabel":"object"},"minItems":1,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.8.pendingChangeRequest.body.oneOf.7.action.oneOf.0.approvalGroups","typeLabel":"object[]"},"autoRejectTimeout":{"oneOf":[{"type":"integer","minimum":1,"uniqueKey":"\\items.items.[INDEX].oneOf.8.pendingChangeRequest.body.oneOf.7.action.oneOf.0.autoRejectTimeout.oneOf.0","typeLabel":"integer"},{"type":"null","minimum":1,"uniqueKey":"\\items.items.[INDEX].oneOf.8.pendingChangeRequest.body.oneOf.7.action.oneOf.0.autoRejectTimeout.oneOf.1","typeLabel":"null"}],"uniqueKey":"\\items.items.[INDEX].oneOf.8.pendingChangeRequest.body.oneOf.7.action.oneOf.0.autoRejectTimeout","typeLabel":"integer | null"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.8.pendingChangeRequest.body.oneOf.7.action.oneOf.0","typeLabel":"RequestApproval · object"},{"type":"object","title":"Block","description":"This action means that the activity will be blocked if the policy is triggered.\n\n```json\n{\n \"action\": {\n \"kind\": \"Block\"\n }\n}\n```\n","required":["kind"],"properties":{"kind":{"type":"string","enum":["Block"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.8.pendingChangeRequest.body.oneOf.7.action.oneOf.1.kind","typeLabel":"enum\u003cstring>"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.8.pendingChangeRequest.body.oneOf.7.action.oneOf.1","typeLabel":"Block · object"}],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.8.pendingChangeRequest.body.oneOf.7.action","typeLabel":"RequestApproval · object | Block · object"},"dateCreated":{"type":"string","uniqueKey":"\\items.items.[INDEX].oneOf.8.pendingChangeRequest.body.oneOf.7.dateCreated","typeLabel":"string"},"dateUpdated":{"type":"string","uniqueKey":"\\items.items.[INDEX].oneOf.8.pendingChangeRequest.body.oneOf.7.dateUpdated","typeLabel":"string"},"filters":{"type":"object","properties":{"vaultId":{"type":"object","properties":{"in":{"type":"array","items":{"type":"string","minLength":1,"uniqueKey":"\\items.items.[INDEX].oneOf.8.pendingChangeRequest.body.oneOf.7.filters.vaultId.in.items.[INDEX]","typeLabel":"string"},"minItems":1,"maxItems":100,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.8.pendingChangeRequest.body.oneOf.7.filters.vaultId.in","typeLabel":"string[]"}},"required":["in"],"additionalProperties":false,"uniqueKey":"\\items.items.[INDEX].oneOf.8.pendingChangeRequest.body.oneOf.7.filters.vaultId","typeLabel":"object"},"vaultTags":{"type":"object","properties":{"hasAny":{"type":"array","items":{"type":"string","minLength":1,"uniqueKey":"\\items.items.[INDEX].oneOf.8.pendingChangeRequest.body.oneOf.7.filters.vaultTags.hasAny.items.[INDEX]","typeLabel":"string"},"minItems":1,"maxItems":100,"uniqueKey":"\\items.items.[INDEX].oneOf.8.pendingChangeRequest.body.oneOf.7.filters.vaultTags.hasAny","typeLabel":"string[]"},"hasAll":{"type":"array","items":{"type":"string","minLength":1,"uniqueKey":"\\items.items.[INDEX].oneOf.8.pendingChangeRequest.body.oneOf.7.filters.vaultTags.hasAll.items.[INDEX]","typeLabel":"string"},"minItems":1,"maxItems":100,"uniqueKey":"\\items.items.[INDEX].oneOf.8.pendingChangeRequest.body.oneOf.7.filters.vaultTags.hasAll","typeLabel":"string[]"}},"additionalProperties":false,"uniqueKey":"\\items.items.[INDEX].oneOf.8.pendingChangeRequest.body.oneOf.7.filters.vaultTags","typeLabel":"object"}},"additionalProperties":false,"uniqueKey":"\\items.items.[INDEX].oneOf.8.pendingChangeRequest.body.oneOf.7.filters","typeLabel":"object"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.8.pendingChangeRequest.body.oneOf.7","typeLabel":"Vaults:ReleaseQuarantine · object"},{"type":"object","title":"Vaults:CreateLock","required":["id","name","status","activityKind","rule","action"],"properties":{"id":{"type":"string","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.8.pendingChangeRequest.body.oneOf.8.id","typeLabel":"string"},"name":{"type":"string","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.8.pendingChangeRequest.body.oneOf.8.name","typeLabel":"string"},"status":{"type":"string","enum":["Active","Archived"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.8.pendingChangeRequest.body.oneOf.8.status","typeLabel":"enum\u003cstring>"},"activityKind":{"type":"string","enum":["Vaults:CreateLock"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.8.pendingChangeRequest.body.oneOf.8.activityKind","typeLabel":"enum\u003cstring>"},"rule":{"type":"object","title":"AlwaysTrigger","description":"This rule will always be triggered, meaning that if this rule is defined on a policy, the policy will always trigger the policy action, regardless of the activity details.","required":["kind"],"properties":{"kind":{"type":"string","enum":["AlwaysTrigger"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.8.pendingChangeRequest.body.oneOf.8.rule.kind","typeLabel":"enum\u003cstring>"},"configuration":{"type":"object","properties":{},"additionalProperties":false,"uniqueKey":"\\items.items.[INDEX].oneOf.8.pendingChangeRequest.body.oneOf.8.rule.configuration","typeLabel":"object"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.8.pendingChangeRequest.body.oneOf.8.rule","typeLabel":"AlwaysTrigger · object"},"action":{"oneOf":[{"type":"object","title":"RequestApproval","description":"\nThis action means that activity will first require an Approval process to be completed before it can be executed (or be aborted if someone rejects it during the approval process).\n\nOne or several groups of approvers need to be specified. These groups define who is allowed to approve / reject an activity.\n\nThe activity will only be executed if all approver groups reach their \"quorum\" of approvals. Otherwise, if any one user within any approver group rejects, then the activity is aborted and the call is not executed.\n\nThe example below shows a `RequestApproval` action, configured with one approval group requiring 2 approvals amongst three specific users.\n\n```json\n{\n \"action\": {\n \"kind\": \"RequestApproval\",\n \"autoRejectTimeout\": 60, // minutes\n \"approvalGroups\": [\n {\n \"name\": \"Admins\",\n \"quorum\": 2, // only 2 approvers required in that group \n \"approvers\": {\n \"userId\": {\n \"in\": [\"us-...1\", \"us-...2\", \"us-...3\"],\n }\n }\n }\n ],\n\n }\n}\n```\n\n**Don't lock yourself up**\n\nBy default, users cannot approve an activity they initiated themselves, even if they are in an approval group. To allow this, you must set `initiatorCanApprove: true`.\n\n*Example 1:* For any wallet transfer, a policy is setup to require approval from **1 specific admin user** (eg. the CEO). `initiatorCanApprove` was not set to `true`. If the CEO himself initiates a transfer, no-one can approve his transfer and it's stuck.\n\n*Example 2:* Company has only 3 users. A policy is setup to require approval from **any 3 users** (`quorum: 3`) for any modification of a policy. `initiatorCanApprove` was not set to `true`. In this case, they are locked, and the policy cannot be modified: whoever requests a modification cannot approve, and the policy is therefore always missing one approver. To unlock, they would need to invite a new user and give him the rights to approve as well.\n ","required":["kind","approvalGroups"],"properties":{"kind":{"type":"string","enum":["RequestApproval"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.8.pendingChangeRequest.body.oneOf.8.action.oneOf.0.kind","typeLabel":"enum\u003cstring>"},"approvalGroups":{"type":"array","items":{"type":"object","properties":{"quorum":{"type":"integer","minimum":1,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.8.pendingChangeRequest.body.oneOf.8.action.oneOf.0.approvalGroups.items.[INDEX].quorum","typeLabel":"integer"},"approvers":{"type":"object","properties":{"userId":{"type":"object","properties":{"in":{"type":"array","items":{"type":"string","minLength":1,"uniqueKey":"\\items.items.[INDEX].oneOf.8.pendingChangeRequest.body.oneOf.8.action.oneOf.0.approvalGroups.items.[INDEX].approvers.userId.in.items.[INDEX]","typeLabel":"string"},"minItems":1,"maxItems":100,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.8.pendingChangeRequest.body.oneOf.8.action.oneOf.0.approvalGroups.items.[INDEX].approvers.userId.in","typeLabel":"string[]"}},"required":["in"],"additionalProperties":false,"description":"Users and service accounts who may approve.","uniqueKey":"\\items.items.[INDEX].oneOf.8.pendingChangeRequest.body.oneOf.8.action.oneOf.0.approvalGroups.items.[INDEX].approvers.userId","typeLabel":"object"},"userGroupId":{"type":"object","properties":{"in":{"type":"array","items":{"type":"string","minLength":1,"maxLength":64,"pattern":"^ug-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"User group id.","example":"ug-139tf-f58l8-lsbt6dp47lfsdvgh","uniqueKey":"\\items.items.[INDEX].oneOf.8.pendingChangeRequest.body.oneOf.8.action.oneOf.0.approvalGroups.items.[INDEX].approvers.userGroupId.in.items.[INDEX]","typeLabel":"string"},"minItems":1,"maxItems":100,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.8.pendingChangeRequest.body.oneOf.8.action.oneOf.0.approvalGroups.items.[INDEX].approvers.userGroupId.in","typeLabel":"string[]"}},"required":["in"],"additionalProperties":false,"description":"User groups whose members may approve.","uniqueKey":"\\items.items.[INDEX].oneOf.8.pendingChangeRequest.body.oneOf.8.action.oneOf.0.approvalGroups.items.[INDEX].approvers.userGroupId","typeLabel":"object"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.8.pendingChangeRequest.body.oneOf.8.action.oneOf.0.approvalGroups.items.[INDEX].approvers","typeLabel":"object"},"name":{"type":"string","uniqueKey":"\\items.items.[INDEX].oneOf.8.pendingChangeRequest.body.oneOf.8.action.oneOf.0.approvalGroups.items.[INDEX].name","typeLabel":"string"},"initiatorCanApprove":{"type":"boolean","description":"Whether the initiator of the activity can participate in the approval.","uniqueKey":"\\items.items.[INDEX].oneOf.8.pendingChangeRequest.body.oneOf.8.action.oneOf.0.approvalGroups.items.[INDEX].initiatorCanApprove","typeLabel":"boolean"},"serviceAccountsCanApprove":{"type":"boolean","description":"Whether service accounts can participate in the approval for this group.","uniqueKey":"\\items.items.[INDEX].oneOf.8.pendingChangeRequest.body.oneOf.8.action.oneOf.0.approvalGroups.items.[INDEX].serviceAccountsCanApprove","typeLabel":"boolean"}},"required":["quorum","approvers"],"additionalProperties":false,"uniqueKey":"\\items.items.[INDEX].oneOf.8.pendingChangeRequest.body.oneOf.8.action.oneOf.0.approvalGroups.items.[INDEX]","typeLabel":"object"},"minItems":1,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.8.pendingChangeRequest.body.oneOf.8.action.oneOf.0.approvalGroups","typeLabel":"object[]"},"autoRejectTimeout":{"oneOf":[{"type":"integer","minimum":1,"uniqueKey":"\\items.items.[INDEX].oneOf.8.pendingChangeRequest.body.oneOf.8.action.oneOf.0.autoRejectTimeout.oneOf.0","typeLabel":"integer"},{"type":"null","minimum":1,"uniqueKey":"\\items.items.[INDEX].oneOf.8.pendingChangeRequest.body.oneOf.8.action.oneOf.0.autoRejectTimeout.oneOf.1","typeLabel":"null"}],"uniqueKey":"\\items.items.[INDEX].oneOf.8.pendingChangeRequest.body.oneOf.8.action.oneOf.0.autoRejectTimeout","typeLabel":"integer | null"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.8.pendingChangeRequest.body.oneOf.8.action.oneOf.0","typeLabel":"RequestApproval · object"},{"type":"object","title":"Block","description":"This action means that the activity will be blocked if the policy is triggered.\n\n```json\n{\n \"action\": {\n \"kind\": \"Block\"\n }\n}\n```\n","required":["kind"],"properties":{"kind":{"type":"string","enum":["Block"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.8.pendingChangeRequest.body.oneOf.8.action.oneOf.1.kind","typeLabel":"enum\u003cstring>"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.8.pendingChangeRequest.body.oneOf.8.action.oneOf.1","typeLabel":"Block · object"}],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.8.pendingChangeRequest.body.oneOf.8.action","typeLabel":"RequestApproval · object | Block · object"},"dateCreated":{"type":"string","uniqueKey":"\\items.items.[INDEX].oneOf.8.pendingChangeRequest.body.oneOf.8.dateCreated","typeLabel":"string"},"dateUpdated":{"type":"string","uniqueKey":"\\items.items.[INDEX].oneOf.8.pendingChangeRequest.body.oneOf.8.dateUpdated","typeLabel":"string"},"filters":{"type":"object","properties":{"vaultId":{"type":"object","properties":{"in":{"type":"array","items":{"type":"string","minLength":1,"uniqueKey":"\\items.items.[INDEX].oneOf.8.pendingChangeRequest.body.oneOf.8.filters.vaultId.in.items.[INDEX]","typeLabel":"string"},"minItems":1,"maxItems":100,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.8.pendingChangeRequest.body.oneOf.8.filters.vaultId.in","typeLabel":"string[]"}},"required":["in"],"additionalProperties":false,"uniqueKey":"\\items.items.[INDEX].oneOf.8.pendingChangeRequest.body.oneOf.8.filters.vaultId","typeLabel":"object"},"vaultTags":{"type":"object","properties":{"hasAny":{"type":"array","items":{"type":"string","minLength":1,"uniqueKey":"\\items.items.[INDEX].oneOf.8.pendingChangeRequest.body.oneOf.8.filters.vaultTags.hasAny.items.[INDEX]","typeLabel":"string"},"minItems":1,"maxItems":100,"uniqueKey":"\\items.items.[INDEX].oneOf.8.pendingChangeRequest.body.oneOf.8.filters.vaultTags.hasAny","typeLabel":"string[]"},"hasAll":{"type":"array","items":{"type":"string","minLength":1,"uniqueKey":"\\items.items.[INDEX].oneOf.8.pendingChangeRequest.body.oneOf.8.filters.vaultTags.hasAll.items.[INDEX]","typeLabel":"string"},"minItems":1,"maxItems":100,"uniqueKey":"\\items.items.[INDEX].oneOf.8.pendingChangeRequest.body.oneOf.8.filters.vaultTags.hasAll","typeLabel":"string[]"}},"additionalProperties":false,"uniqueKey":"\\items.items.[INDEX].oneOf.8.pendingChangeRequest.body.oneOf.8.filters.vaultTags","typeLabel":"object"}},"additionalProperties":false,"uniqueKey":"\\items.items.[INDEX].oneOf.8.pendingChangeRequest.body.oneOf.8.filters","typeLabel":"object"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.8.pendingChangeRequest.body.oneOf.8","typeLabel":"Vaults:CreateLock · object"},{"type":"object","title":"Vaults:ReplaceLock","required":["id","name","status","activityKind","rule","action"],"properties":{"id":{"type":"string","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.8.pendingChangeRequest.body.oneOf.9.id","typeLabel":"string"},"name":{"type":"string","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.8.pendingChangeRequest.body.oneOf.9.name","typeLabel":"string"},"status":{"type":"string","enum":["Active","Archived"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.8.pendingChangeRequest.body.oneOf.9.status","typeLabel":"enum\u003cstring>"},"activityKind":{"type":"string","enum":["Vaults:ReplaceLock"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.8.pendingChangeRequest.body.oneOf.9.activityKind","typeLabel":"enum\u003cstring>"},"rule":{"type":"object","title":"AlwaysTrigger","description":"This rule will always be triggered, meaning that if this rule is defined on a policy, the policy will always trigger the policy action, regardless of the activity details.","required":["kind"],"properties":{"kind":{"type":"string","enum":["AlwaysTrigger"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.8.pendingChangeRequest.body.oneOf.9.rule.kind","typeLabel":"enum\u003cstring>"},"configuration":{"type":"object","properties":{},"additionalProperties":false,"uniqueKey":"\\items.items.[INDEX].oneOf.8.pendingChangeRequest.body.oneOf.9.rule.configuration","typeLabel":"object"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.8.pendingChangeRequest.body.oneOf.9.rule","typeLabel":"AlwaysTrigger · object"},"action":{"oneOf":[{"type":"object","title":"RequestApproval","description":"\nThis action means that activity will first require an Approval process to be completed before it can be executed (or be aborted if someone rejects it during the approval process).\n\nOne or several groups of approvers need to be specified. These groups define who is allowed to approve / reject an activity.\n\nThe activity will only be executed if all approver groups reach their \"quorum\" of approvals. Otherwise, if any one user within any approver group rejects, then the activity is aborted and the call is not executed.\n\nThe example below shows a `RequestApproval` action, configured with one approval group requiring 2 approvals amongst three specific users.\n\n```json\n{\n \"action\": {\n \"kind\": \"RequestApproval\",\n \"autoRejectTimeout\": 60, // minutes\n \"approvalGroups\": [\n {\n \"name\": \"Admins\",\n \"quorum\": 2, // only 2 approvers required in that group \n \"approvers\": {\n \"userId\": {\n \"in\": [\"us-...1\", \"us-...2\", \"us-...3\"],\n }\n }\n }\n ],\n\n }\n}\n```\n\n**Don't lock yourself up**\n\nBy default, users cannot approve an activity they initiated themselves, even if they are in an approval group. To allow this, you must set `initiatorCanApprove: true`.\n\n*Example 1:* For any wallet transfer, a policy is setup to require approval from **1 specific admin user** (eg. the CEO). `initiatorCanApprove` was not set to `true`. If the CEO himself initiates a transfer, no-one can approve his transfer and it's stuck.\n\n*Example 2:* Company has only 3 users. A policy is setup to require approval from **any 3 users** (`quorum: 3`) for any modification of a policy. `initiatorCanApprove` was not set to `true`. In this case, they are locked, and the policy cannot be modified: whoever requests a modification cannot approve, and the policy is therefore always missing one approver. To unlock, they would need to invite a new user and give him the rights to approve as well.\n ","required":["kind","approvalGroups"],"properties":{"kind":{"type":"string","enum":["RequestApproval"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.8.pendingChangeRequest.body.oneOf.9.action.oneOf.0.kind","typeLabel":"enum\u003cstring>"},"approvalGroups":{"type":"array","items":{"type":"object","properties":{"quorum":{"type":"integer","minimum":1,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.8.pendingChangeRequest.body.oneOf.9.action.oneOf.0.approvalGroups.items.[INDEX].quorum","typeLabel":"integer"},"approvers":{"type":"object","properties":{"userId":{"type":"object","properties":{"in":{"type":"array","items":{"type":"string","minLength":1,"uniqueKey":"\\items.items.[INDEX].oneOf.8.pendingChangeRequest.body.oneOf.9.action.oneOf.0.approvalGroups.items.[INDEX].approvers.userId.in.items.[INDEX]","typeLabel":"string"},"minItems":1,"maxItems":100,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.8.pendingChangeRequest.body.oneOf.9.action.oneOf.0.approvalGroups.items.[INDEX].approvers.userId.in","typeLabel":"string[]"}},"required":["in"],"additionalProperties":false,"description":"Users and service accounts who may approve.","uniqueKey":"\\items.items.[INDEX].oneOf.8.pendingChangeRequest.body.oneOf.9.action.oneOf.0.approvalGroups.items.[INDEX].approvers.userId","typeLabel":"object"},"userGroupId":{"type":"object","properties":{"in":{"type":"array","items":{"type":"string","minLength":1,"maxLength":64,"pattern":"^ug-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"User group id.","example":"ug-139tf-f58l8-lsbt6dp47lfsdvgh","uniqueKey":"\\items.items.[INDEX].oneOf.8.pendingChangeRequest.body.oneOf.9.action.oneOf.0.approvalGroups.items.[INDEX].approvers.userGroupId.in.items.[INDEX]","typeLabel":"string"},"minItems":1,"maxItems":100,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.8.pendingChangeRequest.body.oneOf.9.action.oneOf.0.approvalGroups.items.[INDEX].approvers.userGroupId.in","typeLabel":"string[]"}},"required":["in"],"additionalProperties":false,"description":"User groups whose members may approve.","uniqueKey":"\\items.items.[INDEX].oneOf.8.pendingChangeRequest.body.oneOf.9.action.oneOf.0.approvalGroups.items.[INDEX].approvers.userGroupId","typeLabel":"object"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.8.pendingChangeRequest.body.oneOf.9.action.oneOf.0.approvalGroups.items.[INDEX].approvers","typeLabel":"object"},"name":{"type":"string","uniqueKey":"\\items.items.[INDEX].oneOf.8.pendingChangeRequest.body.oneOf.9.action.oneOf.0.approvalGroups.items.[INDEX].name","typeLabel":"string"},"initiatorCanApprove":{"type":"boolean","description":"Whether the initiator of the activity can participate in the approval.","uniqueKey":"\\items.items.[INDEX].oneOf.8.pendingChangeRequest.body.oneOf.9.action.oneOf.0.approvalGroups.items.[INDEX].initiatorCanApprove","typeLabel":"boolean"},"serviceAccountsCanApprove":{"type":"boolean","description":"Whether service accounts can participate in the approval for this group.","uniqueKey":"\\items.items.[INDEX].oneOf.8.pendingChangeRequest.body.oneOf.9.action.oneOf.0.approvalGroups.items.[INDEX].serviceAccountsCanApprove","typeLabel":"boolean"}},"required":["quorum","approvers"],"additionalProperties":false,"uniqueKey":"\\items.items.[INDEX].oneOf.8.pendingChangeRequest.body.oneOf.9.action.oneOf.0.approvalGroups.items.[INDEX]","typeLabel":"object"},"minItems":1,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.8.pendingChangeRequest.body.oneOf.9.action.oneOf.0.approvalGroups","typeLabel":"object[]"},"autoRejectTimeout":{"oneOf":[{"type":"integer","minimum":1,"uniqueKey":"\\items.items.[INDEX].oneOf.8.pendingChangeRequest.body.oneOf.9.action.oneOf.0.autoRejectTimeout.oneOf.0","typeLabel":"integer"},{"type":"null","minimum":1,"uniqueKey":"\\items.items.[INDEX].oneOf.8.pendingChangeRequest.body.oneOf.9.action.oneOf.0.autoRejectTimeout.oneOf.1","typeLabel":"null"}],"uniqueKey":"\\items.items.[INDEX].oneOf.8.pendingChangeRequest.body.oneOf.9.action.oneOf.0.autoRejectTimeout","typeLabel":"integer | null"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.8.pendingChangeRequest.body.oneOf.9.action.oneOf.0","typeLabel":"RequestApproval · object"},{"type":"object","title":"Block","description":"This action means that the activity will be blocked if the policy is triggered.\n\n```json\n{\n \"action\": {\n \"kind\": \"Block\"\n }\n}\n```\n","required":["kind"],"properties":{"kind":{"type":"string","enum":["Block"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.8.pendingChangeRequest.body.oneOf.9.action.oneOf.1.kind","typeLabel":"enum\u003cstring>"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.8.pendingChangeRequest.body.oneOf.9.action.oneOf.1","typeLabel":"Block · object"}],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.8.pendingChangeRequest.body.oneOf.9.action","typeLabel":"RequestApproval · object | Block · object"},"dateCreated":{"type":"string","uniqueKey":"\\items.items.[INDEX].oneOf.8.pendingChangeRequest.body.oneOf.9.dateCreated","typeLabel":"string"},"dateUpdated":{"type":"string","uniqueKey":"\\items.items.[INDEX].oneOf.8.pendingChangeRequest.body.oneOf.9.dateUpdated","typeLabel":"string"},"filters":{"type":"object","properties":{"vaultId":{"type":"object","properties":{"in":{"type":"array","items":{"type":"string","minLength":1,"uniqueKey":"\\items.items.[INDEX].oneOf.8.pendingChangeRequest.body.oneOf.9.filters.vaultId.in.items.[INDEX]","typeLabel":"string"},"minItems":1,"maxItems":100,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.8.pendingChangeRequest.body.oneOf.9.filters.vaultId.in","typeLabel":"string[]"}},"required":["in"],"additionalProperties":false,"uniqueKey":"\\items.items.[INDEX].oneOf.8.pendingChangeRequest.body.oneOf.9.filters.vaultId","typeLabel":"object"},"vaultTags":{"type":"object","properties":{"hasAny":{"type":"array","items":{"type":"string","minLength":1,"uniqueKey":"\\items.items.[INDEX].oneOf.8.pendingChangeRequest.body.oneOf.9.filters.vaultTags.hasAny.items.[INDEX]","typeLabel":"string"},"minItems":1,"maxItems":100,"uniqueKey":"\\items.items.[INDEX].oneOf.8.pendingChangeRequest.body.oneOf.9.filters.vaultTags.hasAny","typeLabel":"string[]"},"hasAll":{"type":"array","items":{"type":"string","minLength":1,"uniqueKey":"\\items.items.[INDEX].oneOf.8.pendingChangeRequest.body.oneOf.9.filters.vaultTags.hasAll.items.[INDEX]","typeLabel":"string"},"minItems":1,"maxItems":100,"uniqueKey":"\\items.items.[INDEX].oneOf.8.pendingChangeRequest.body.oneOf.9.filters.vaultTags.hasAll","typeLabel":"string[]"}},"additionalProperties":false,"uniqueKey":"\\items.items.[INDEX].oneOf.8.pendingChangeRequest.body.oneOf.9.filters.vaultTags","typeLabel":"object"}},"additionalProperties":false,"uniqueKey":"\\items.items.[INDEX].oneOf.8.pendingChangeRequest.body.oneOf.9.filters","typeLabel":"object"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.8.pendingChangeRequest.body.oneOf.9","typeLabel":"Vaults:ReplaceLock · object"},{"type":"object","title":"UserAction","required":["id","name","status","activityKind","rule","action"],"properties":{"id":{"type":"string","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.8.pendingChangeRequest.body.oneOf.10.id","typeLabel":"string"},"name":{"type":"string","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.8.pendingChangeRequest.body.oneOf.10.name","typeLabel":"string"},"status":{"type":"string","enum":["Active","Archived"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.8.pendingChangeRequest.body.oneOf.10.status","typeLabel":"enum\u003cstring>"},"activityKind":{"type":"string","enum":["UserAction"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.8.pendingChangeRequest.body.oneOf.10.activityKind","typeLabel":"enum\u003cstring>"},"rule":{"type":"object","properties":{"kind":{"type":"string","enum":["UserAction"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.8.pendingChangeRequest.body.oneOf.10.rule.kind","typeLabel":"enum\u003cstring>"},"configuration":{"type":"object","properties":{"userActionKinds":{"type":"array","items":{"type":"string","uniqueKey":"\\items.items.[INDEX].oneOf.8.pendingChangeRequest.body.oneOf.10.rule.configuration.userActionKinds.items.[INDEX]","typeLabel":"string"},"minItems":1,"description":"The user actions this rule applies to. The rule triggers on any of them.","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.8.pendingChangeRequest.body.oneOf.10.rule.configuration.userActionKinds","typeLabel":"string[]"}},"required":["userActionKinds"],"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.8.pendingChangeRequest.body.oneOf.10.rule.configuration","typeLabel":"object"}},"required":["kind","configuration"],"additionalProperties":false,"title":"UserAction","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.8.pendingChangeRequest.body.oneOf.10.rule","typeLabel":"UserAction · object"},"action":{"oneOf":[{"type":"object","title":"RequestApproval","description":"\nThis action means that activity will first require an Approval process to be completed before it can be executed (or be aborted if someone rejects it during the approval process).\n\nOne or several groups of approvers need to be specified. These groups define who is allowed to approve / reject an activity.\n\nThe activity will only be executed if all approver groups reach their \"quorum\" of approvals. Otherwise, if any one user within any approver group rejects, then the activity is aborted and the call is not executed.\n\nThe example below shows a `RequestApproval` action, configured with one approval group requiring 2 approvals amongst three specific users.\n\n```json\n{\n \"action\": {\n \"kind\": \"RequestApproval\",\n \"autoRejectTimeout\": 60, // minutes\n \"approvalGroups\": [\n {\n \"name\": \"Admins\",\n \"quorum\": 2, // only 2 approvers required in that group \n \"approvers\": {\n \"userId\": {\n \"in\": [\"us-...1\", \"us-...2\", \"us-...3\"],\n }\n }\n }\n ],\n\n }\n}\n```\n\n**Don't lock yourself up**\n\nBy default, users cannot approve an activity they initiated themselves, even if they are in an approval group. To allow this, you must set `initiatorCanApprove: true`.\n\n*Example 1:* For any wallet transfer, a policy is setup to require approval from **1 specific admin user** (eg. the CEO). `initiatorCanApprove` was not set to `true`. If the CEO himself initiates a transfer, no-one can approve his transfer and it's stuck.\n\n*Example 2:* Company has only 3 users. A policy is setup to require approval from **any 3 users** (`quorum: 3`) for any modification of a policy. `initiatorCanApprove` was not set to `true`. In this case, they are locked, and the policy cannot be modified: whoever requests a modification cannot approve, and the policy is therefore always missing one approver. To unlock, they would need to invite a new user and give him the rights to approve as well.\n ","required":["kind","approvalGroups"],"properties":{"kind":{"type":"string","enum":["RequestApproval"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.8.pendingChangeRequest.body.oneOf.10.action.oneOf.0.kind","typeLabel":"enum\u003cstring>"},"approvalGroups":{"type":"array","items":{"type":"object","properties":{"quorum":{"type":"integer","minimum":1,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.8.pendingChangeRequest.body.oneOf.10.action.oneOf.0.approvalGroups.items.[INDEX].quorum","typeLabel":"integer"},"approvers":{"type":"object","properties":{"userId":{"type":"object","properties":{"in":{"type":"array","items":{"type":"string","minLength":1,"uniqueKey":"\\items.items.[INDEX].oneOf.8.pendingChangeRequest.body.oneOf.10.action.oneOf.0.approvalGroups.items.[INDEX].approvers.userId.in.items.[INDEX]","typeLabel":"string"},"minItems":1,"maxItems":100,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.8.pendingChangeRequest.body.oneOf.10.action.oneOf.0.approvalGroups.items.[INDEX].approvers.userId.in","typeLabel":"string[]"}},"required":["in"],"additionalProperties":false,"description":"Users and service accounts who may approve.","uniqueKey":"\\items.items.[INDEX].oneOf.8.pendingChangeRequest.body.oneOf.10.action.oneOf.0.approvalGroups.items.[INDEX].approvers.userId","typeLabel":"object"},"userGroupId":{"type":"object","properties":{"in":{"type":"array","items":{"type":"string","minLength":1,"maxLength":64,"pattern":"^ug-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"User group id.","example":"ug-139tf-f58l8-lsbt6dp47lfsdvgh","uniqueKey":"\\items.items.[INDEX].oneOf.8.pendingChangeRequest.body.oneOf.10.action.oneOf.0.approvalGroups.items.[INDEX].approvers.userGroupId.in.items.[INDEX]","typeLabel":"string"},"minItems":1,"maxItems":100,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.8.pendingChangeRequest.body.oneOf.10.action.oneOf.0.approvalGroups.items.[INDEX].approvers.userGroupId.in","typeLabel":"string[]"}},"required":["in"],"additionalProperties":false,"description":"User groups whose members may approve.","uniqueKey":"\\items.items.[INDEX].oneOf.8.pendingChangeRequest.body.oneOf.10.action.oneOf.0.approvalGroups.items.[INDEX].approvers.userGroupId","typeLabel":"object"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.8.pendingChangeRequest.body.oneOf.10.action.oneOf.0.approvalGroups.items.[INDEX].approvers","typeLabel":"object"},"name":{"type":"string","uniqueKey":"\\items.items.[INDEX].oneOf.8.pendingChangeRequest.body.oneOf.10.action.oneOf.0.approvalGroups.items.[INDEX].name","typeLabel":"string"},"initiatorCanApprove":{"type":"boolean","description":"Whether the initiator of the activity can participate in the approval.","uniqueKey":"\\items.items.[INDEX].oneOf.8.pendingChangeRequest.body.oneOf.10.action.oneOf.0.approvalGroups.items.[INDEX].initiatorCanApprove","typeLabel":"boolean"},"serviceAccountsCanApprove":{"type":"boolean","description":"Whether service accounts can participate in the approval for this group.","uniqueKey":"\\items.items.[INDEX].oneOf.8.pendingChangeRequest.body.oneOf.10.action.oneOf.0.approvalGroups.items.[INDEX].serviceAccountsCanApprove","typeLabel":"boolean"}},"required":["quorum","approvers"],"additionalProperties":false,"uniqueKey":"\\items.items.[INDEX].oneOf.8.pendingChangeRequest.body.oneOf.10.action.oneOf.0.approvalGroups.items.[INDEX]","typeLabel":"object"},"minItems":1,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.8.pendingChangeRequest.body.oneOf.10.action.oneOf.0.approvalGroups","typeLabel":"object[]"},"autoRejectTimeout":{"oneOf":[{"type":"integer","minimum":1,"uniqueKey":"\\items.items.[INDEX].oneOf.8.pendingChangeRequest.body.oneOf.10.action.oneOf.0.autoRejectTimeout.oneOf.0","typeLabel":"integer"},{"type":"null","minimum":1,"uniqueKey":"\\items.items.[INDEX].oneOf.8.pendingChangeRequest.body.oneOf.10.action.oneOf.0.autoRejectTimeout.oneOf.1","typeLabel":"null"}],"uniqueKey":"\\items.items.[INDEX].oneOf.8.pendingChangeRequest.body.oneOf.10.action.oneOf.0.autoRejectTimeout","typeLabel":"integer | null"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.8.pendingChangeRequest.body.oneOf.10.action.oneOf.0","typeLabel":"RequestApproval · object"},{"type":"object","title":"Block","description":"This action means that the activity will be blocked if the policy is triggered.\n\n```json\n{\n \"action\": {\n \"kind\": \"Block\"\n }\n}\n```\n","required":["kind"],"properties":{"kind":{"type":"string","enum":["Block"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.8.pendingChangeRequest.body.oneOf.10.action.oneOf.1.kind","typeLabel":"enum\u003cstring>"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.8.pendingChangeRequest.body.oneOf.10.action.oneOf.1","typeLabel":"Block · object"}],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.8.pendingChangeRequest.body.oneOf.10.action","typeLabel":"RequestApproval · object | Block · object"},"dateCreated":{"type":"string","uniqueKey":"\\items.items.[INDEX].oneOf.8.pendingChangeRequest.body.oneOf.10.dateCreated","typeLabel":"string"},"dateUpdated":{"type":"string","uniqueKey":"\\items.items.[INDEX].oneOf.8.pendingChangeRequest.body.oneOf.10.dateUpdated","typeLabel":"string"},"filters":{"type":"object","properties":{},"uniqueKey":"\\items.items.[INDEX].oneOf.8.pendingChangeRequest.body.oneOf.10.filters","typeLabel":"object"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.8.pendingChangeRequest.body.oneOf.10","typeLabel":"UserAction · object"}],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.8.pendingChangeRequest.body","typeLabel":"Registry:Addresses:Modify · object | Permissions:Assign · object | Permissions:Modify · object | Policies:Modify · object | Registry:ContractSchemas:Modify · object | Wallets:Sign · object | Wallets:IncomingTransaction · object | Vaults:ReleaseQuarantine · object | Vaults:CreateLock · object | Vaults:ReplaceLock · object | UserAction · object"},"dateResolved":{"type":"string","format":"date-time","uniqueKey":"\\items.items.[INDEX].oneOf.8.pendingChangeRequest.dateResolved","typeLabel":"string\u003cdate-time>"},"approvalId":{"type":"string","uniqueKey":"\\items.items.[INDEX].oneOf.8.pendingChangeRequest.approvalId","typeLabel":"string"}},"required":["id","requester","kind","operationKind","status","entityId","dateCreated","body"],"additionalProperties":false,"uniqueKey":"\\items.items.[INDEX].oneOf.8.pendingChangeRequest","typeLabel":"object"}},"additionalProperties":false,"uniqueKey":"\\items.items.[INDEX].oneOf.8","typeLabel":"Vaults:CreateLock · object"},{"type":"object","title":"Vaults:ReplaceLock","required":["id","name","status","activityKind","rule","action"],"properties":{"id":{"type":"string","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.9.id","typeLabel":"string"},"name":{"type":"string","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.9.name","typeLabel":"string"},"status":{"type":"string","enum":["Active","Archived"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.9.status","typeLabel":"enum\u003cstring>"},"activityKind":{"type":"string","enum":["Vaults:ReplaceLock"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.9.activityKind","typeLabel":"enum\u003cstring>"},"rule":{"type":"object","title":"AlwaysTrigger","description":"This rule will always be triggered, meaning that if this rule is defined on a policy, the policy will always trigger the policy action, regardless of the activity details.","required":["kind"],"properties":{"kind":{"type":"string","enum":["AlwaysTrigger"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.9.rule.kind","typeLabel":"enum\u003cstring>"},"configuration":{"type":"object","properties":{},"additionalProperties":false,"uniqueKey":"\\items.items.[INDEX].oneOf.9.rule.configuration","typeLabel":"object"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.9.rule","typeLabel":"AlwaysTrigger · object"},"action":{"oneOf":[{"type":"object","title":"RequestApproval","description":"\nThis action means that activity will first require an Approval process to be completed before it can be executed (or be aborted if someone rejects it during the approval process).\n\nOne or several groups of approvers need to be specified. These groups define who is allowed to approve / reject an activity.\n\nThe activity will only be executed if all approver groups reach their \"quorum\" of approvals. Otherwise, if any one user within any approver group rejects, then the activity is aborted and the call is not executed.\n\nThe example below shows a `RequestApproval` action, configured with one approval group requiring 2 approvals amongst three specific users.\n\n```json\n{\n \"action\": {\n \"kind\": \"RequestApproval\",\n \"autoRejectTimeout\": 60, // minutes\n \"approvalGroups\": [\n {\n \"name\": \"Admins\",\n \"quorum\": 2, // only 2 approvers required in that group \n \"approvers\": {\n \"userId\": {\n \"in\": [\"us-...1\", \"us-...2\", \"us-...3\"],\n }\n }\n }\n ],\n\n }\n}\n```\n\n**Don't lock yourself up**\n\nBy default, users cannot approve an activity they initiated themselves, even if they are in an approval group. To allow this, you must set `initiatorCanApprove: true`.\n\n*Example 1:* For any wallet transfer, a policy is setup to require approval from **1 specific admin user** (eg. the CEO). `initiatorCanApprove` was not set to `true`. If the CEO himself initiates a transfer, no-one can approve his transfer and it's stuck.\n\n*Example 2:* Company has only 3 users. A policy is setup to require approval from **any 3 users** (`quorum: 3`) for any modification of a policy. `initiatorCanApprove` was not set to `true`. In this case, they are locked, and the policy cannot be modified: whoever requests a modification cannot approve, and the policy is therefore always missing one approver. To unlock, they would need to invite a new user and give him the rights to approve as well.\n ","required":["kind","approvalGroups"],"properties":{"kind":{"type":"string","enum":["RequestApproval"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.9.action.oneOf.0.kind","typeLabel":"enum\u003cstring>"},"approvalGroups":{"type":"array","items":{"type":"object","properties":{"quorum":{"type":"integer","minimum":1,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.9.action.oneOf.0.approvalGroups.items.[INDEX].quorum","typeLabel":"integer"},"approvers":{"type":"object","properties":{"userId":{"type":"object","properties":{"in":{"type":"array","items":{"type":"string","minLength":1,"uniqueKey":"\\items.items.[INDEX].oneOf.9.action.oneOf.0.approvalGroups.items.[INDEX].approvers.userId.in.items.[INDEX]","typeLabel":"string"},"minItems":1,"maxItems":100,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.9.action.oneOf.0.approvalGroups.items.[INDEX].approvers.userId.in","typeLabel":"string[]"}},"required":["in"],"additionalProperties":false,"description":"Users and service accounts who may approve.","uniqueKey":"\\items.items.[INDEX].oneOf.9.action.oneOf.0.approvalGroups.items.[INDEX].approvers.userId","typeLabel":"object"},"userGroupId":{"type":"object","properties":{"in":{"type":"array","items":{"type":"string","minLength":1,"maxLength":64,"pattern":"^ug-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"User group id.","example":"ug-139tf-f58l8-lsbt6dp47lfsdvgh","uniqueKey":"\\items.items.[INDEX].oneOf.9.action.oneOf.0.approvalGroups.items.[INDEX].approvers.userGroupId.in.items.[INDEX]","typeLabel":"string"},"minItems":1,"maxItems":100,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.9.action.oneOf.0.approvalGroups.items.[INDEX].approvers.userGroupId.in","typeLabel":"string[]"}},"required":["in"],"additionalProperties":false,"description":"User groups whose members may approve.","uniqueKey":"\\items.items.[INDEX].oneOf.9.action.oneOf.0.approvalGroups.items.[INDEX].approvers.userGroupId","typeLabel":"object"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.9.action.oneOf.0.approvalGroups.items.[INDEX].approvers","typeLabel":"object"},"name":{"type":"string","uniqueKey":"\\items.items.[INDEX].oneOf.9.action.oneOf.0.approvalGroups.items.[INDEX].name","typeLabel":"string"},"initiatorCanApprove":{"type":"boolean","description":"Whether the initiator of the activity can participate in the approval.","uniqueKey":"\\items.items.[INDEX].oneOf.9.action.oneOf.0.approvalGroups.items.[INDEX].initiatorCanApprove","typeLabel":"boolean"},"serviceAccountsCanApprove":{"type":"boolean","description":"Whether service accounts can participate in the approval for this group.","uniqueKey":"\\items.items.[INDEX].oneOf.9.action.oneOf.0.approvalGroups.items.[INDEX].serviceAccountsCanApprove","typeLabel":"boolean"}},"required":["quorum","approvers"],"additionalProperties":false,"uniqueKey":"\\items.items.[INDEX].oneOf.9.action.oneOf.0.approvalGroups.items.[INDEX]","typeLabel":"object"},"minItems":1,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.9.action.oneOf.0.approvalGroups","typeLabel":"object[]"},"autoRejectTimeout":{"oneOf":[{"type":"integer","minimum":1,"uniqueKey":"\\items.items.[INDEX].oneOf.9.action.oneOf.0.autoRejectTimeout.oneOf.0","typeLabel":"integer"},{"type":"null","minimum":1,"uniqueKey":"\\items.items.[INDEX].oneOf.9.action.oneOf.0.autoRejectTimeout.oneOf.1","typeLabel":"null"}],"uniqueKey":"\\items.items.[INDEX].oneOf.9.action.oneOf.0.autoRejectTimeout","typeLabel":"integer | null"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.9.action.oneOf.0","typeLabel":"RequestApproval · object"},{"type":"object","title":"Block","description":"This action means that the activity will be blocked if the policy is triggered.\n\n```json\n{\n \"action\": {\n \"kind\": \"Block\"\n }\n}\n```\n","required":["kind"],"properties":{"kind":{"type":"string","enum":["Block"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.9.action.oneOf.1.kind","typeLabel":"enum\u003cstring>"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.9.action.oneOf.1","typeLabel":"Block · object"}],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.9.action","typeLabel":"RequestApproval · object | Block · object"},"dateCreated":{"type":"string","uniqueKey":"\\items.items.[INDEX].oneOf.9.dateCreated","typeLabel":"string"},"dateUpdated":{"type":"string","uniqueKey":"\\items.items.[INDEX].oneOf.9.dateUpdated","typeLabel":"string"},"filters":{"type":"object","properties":{"vaultId":{"type":"object","properties":{"in":{"type":"array","items":{"type":"string","minLength":1,"uniqueKey":"\\items.items.[INDEX].oneOf.9.filters.vaultId.in.items.[INDEX]","typeLabel":"string"},"minItems":1,"maxItems":100,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.9.filters.vaultId.in","typeLabel":"string[]"}},"required":["in"],"additionalProperties":false,"uniqueKey":"\\items.items.[INDEX].oneOf.9.filters.vaultId","typeLabel":"object"},"vaultTags":{"type":"object","properties":{"hasAny":{"type":"array","items":{"type":"string","minLength":1,"uniqueKey":"\\items.items.[INDEX].oneOf.9.filters.vaultTags.hasAny.items.[INDEX]","typeLabel":"string"},"minItems":1,"maxItems":100,"uniqueKey":"\\items.items.[INDEX].oneOf.9.filters.vaultTags.hasAny","typeLabel":"string[]"},"hasAll":{"type":"array","items":{"type":"string","minLength":1,"uniqueKey":"\\items.items.[INDEX].oneOf.9.filters.vaultTags.hasAll.items.[INDEX]","typeLabel":"string"},"minItems":1,"maxItems":100,"uniqueKey":"\\items.items.[INDEX].oneOf.9.filters.vaultTags.hasAll","typeLabel":"string[]"}},"additionalProperties":false,"uniqueKey":"\\items.items.[INDEX].oneOf.9.filters.vaultTags","typeLabel":"object"}},"additionalProperties":false,"uniqueKey":"\\items.items.[INDEX].oneOf.9.filters","typeLabel":"object"},"pendingChangeRequest":{"type":"object","properties":{"id":{"type":"string","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.9.pendingChangeRequest.id","typeLabel":"string"},"requester":{"type":"object","properties":{"userId":{"type":"string","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.9.pendingChangeRequest.requester.userId","typeLabel":"string"},"tokenId":{"type":"string","uniqueKey":"\\items.items.[INDEX].oneOf.9.pendingChangeRequest.requester.tokenId","typeLabel":"string"},"appId":{"type":"string","uniqueKey":"\\items.items.[INDEX].oneOf.9.pendingChangeRequest.requester.appId","typeLabel":"string"}},"required":["userId"],"description":"The user who initiated the change request.","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.9.pendingChangeRequest.requester","typeLabel":"object"},"kind":{"type":"string","enum":["Policy"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.9.pendingChangeRequest.kind","typeLabel":"enum\u003cstring>"},"operationKind":{"type":"string","enum":["Update"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.9.pendingChangeRequest.operationKind","typeLabel":"enum\u003cstring>"},"status":{"type":"string","enum":["Applied","Failed","Pending","Rejected"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.9.pendingChangeRequest.status","typeLabel":"enum\u003cstring>"},"entityId":{"type":"string","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.9.pendingChangeRequest.entityId","typeLabel":"string"},"dateCreated":{"type":"string","format":"date-time","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.9.pendingChangeRequest.dateCreated","typeLabel":"string\u003cdate-time>"},"body":{"oneOf":[{"type":"object","title":"Registry:Addresses:Modify","required":["id","name","status","activityKind","rule","action"],"properties":{"id":{"type":"string","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.9.pendingChangeRequest.body.oneOf.0.id","typeLabel":"string"},"name":{"type":"string","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.9.pendingChangeRequest.body.oneOf.0.name","typeLabel":"string"},"status":{"type":"string","enum":["Active","Archived"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.9.pendingChangeRequest.body.oneOf.0.status","typeLabel":"enum\u003cstring>"},"activityKind":{"type":"string","enum":["Registry:Addresses:Modify"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.9.pendingChangeRequest.body.oneOf.0.activityKind","typeLabel":"enum\u003cstring>"},"rule":{"type":"object","properties":{"kind":{"type":"string","enum":["AlwaysTrigger"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.9.pendingChangeRequest.body.oneOf.0.rule.kind","typeLabel":"enum\u003cstring>"},"configuration":{"type":"object","properties":{},"additionalProperties":false,"uniqueKey":"\\items.items.[INDEX].oneOf.9.pendingChangeRequest.body.oneOf.0.rule.configuration","typeLabel":"object"}},"required":["kind"],"additionalProperties":false,"description":"This rule will always be triggered, meaning that if this rule is defined on a policy, the policy will always trigger the policy action, regardless of the activity details.","title":"AlwaysTrigger","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.9.pendingChangeRequest.body.oneOf.0.rule","typeLabel":"AlwaysTrigger · object"},"action":{"oneOf":[{"type":"object","title":"RequestApproval","description":"\nThis action means that activity will first require an Approval process to be completed before it can be executed (or be aborted if someone rejects it during the approval process).\n\nOne or several groups of approvers need to be specified. These groups define who is allowed to approve / reject an activity.\n\nThe activity will only be executed if all approver groups reach their \"quorum\" of approvals. Otherwise, if any one user within any approver group rejects, then the activity is aborted and the call is not executed.\n\nThe example below shows a `RequestApproval` action, configured with one approval group requiring 2 approvals amongst three specific users.\n\n```json\n{\n \"action\": {\n \"kind\": \"RequestApproval\",\n \"autoRejectTimeout\": 60, // minutes\n \"approvalGroups\": [\n {\n \"name\": \"Admins\",\n \"quorum\": 2, // only 2 approvers required in that group \n \"approvers\": {\n \"userId\": {\n \"in\": [\"us-...1\", \"us-...2\", \"us-...3\"],\n }\n }\n }\n ],\n\n }\n}\n```\n\n**Don't lock yourself up**\n\nBy default, users cannot approve an activity they initiated themselves, even if they are in an approval group. To allow this, you must set `initiatorCanApprove: true`.\n\n*Example 1:* For any wallet transfer, a policy is setup to require approval from **1 specific admin user** (eg. the CEO). `initiatorCanApprove` was not set to `true`. If the CEO himself initiates a transfer, no-one can approve his transfer and it's stuck.\n\n*Example 2:* Company has only 3 users. A policy is setup to require approval from **any 3 users** (`quorum: 3`) for any modification of a policy. `initiatorCanApprove` was not set to `true`. In this case, they are locked, and the policy cannot be modified: whoever requests a modification cannot approve, and the policy is therefore always missing one approver. To unlock, they would need to invite a new user and give him the rights to approve as well.\n ","required":["kind","approvalGroups"],"properties":{"kind":{"type":"string","enum":["RequestApproval"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.9.pendingChangeRequest.body.oneOf.0.action.oneOf.0.kind","typeLabel":"enum\u003cstring>"},"approvalGroups":{"type":"array","items":{"type":"object","properties":{"quorum":{"type":"integer","minimum":1,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.9.pendingChangeRequest.body.oneOf.0.action.oneOf.0.approvalGroups.items.[INDEX].quorum","typeLabel":"integer"},"approvers":{"type":"object","properties":{"userId":{"type":"object","properties":{"in":{"type":"array","items":{"type":"string","minLength":1,"uniqueKey":"\\items.items.[INDEX].oneOf.9.pendingChangeRequest.body.oneOf.0.action.oneOf.0.approvalGroups.items.[INDEX].approvers.userId.in.items.[INDEX]","typeLabel":"string"},"minItems":1,"maxItems":100,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.9.pendingChangeRequest.body.oneOf.0.action.oneOf.0.approvalGroups.items.[INDEX].approvers.userId.in","typeLabel":"string[]"}},"required":["in"],"additionalProperties":false,"description":"Users and service accounts who may approve.","uniqueKey":"\\items.items.[INDEX].oneOf.9.pendingChangeRequest.body.oneOf.0.action.oneOf.0.approvalGroups.items.[INDEX].approvers.userId","typeLabel":"object"},"userGroupId":{"type":"object","properties":{"in":{"type":"array","items":{"type":"string","minLength":1,"maxLength":64,"pattern":"^ug-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"User group id.","example":"ug-139tf-f58l8-lsbt6dp47lfsdvgh","uniqueKey":"\\items.items.[INDEX].oneOf.9.pendingChangeRequest.body.oneOf.0.action.oneOf.0.approvalGroups.items.[INDEX].approvers.userGroupId.in.items.[INDEX]","typeLabel":"string"},"minItems":1,"maxItems":100,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.9.pendingChangeRequest.body.oneOf.0.action.oneOf.0.approvalGroups.items.[INDEX].approvers.userGroupId.in","typeLabel":"string[]"}},"required":["in"],"additionalProperties":false,"description":"User groups whose members may approve.","uniqueKey":"\\items.items.[INDEX].oneOf.9.pendingChangeRequest.body.oneOf.0.action.oneOf.0.approvalGroups.items.[INDEX].approvers.userGroupId","typeLabel":"object"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.9.pendingChangeRequest.body.oneOf.0.action.oneOf.0.approvalGroups.items.[INDEX].approvers","typeLabel":"object"},"name":{"type":"string","uniqueKey":"\\items.items.[INDEX].oneOf.9.pendingChangeRequest.body.oneOf.0.action.oneOf.0.approvalGroups.items.[INDEX].name","typeLabel":"string"},"initiatorCanApprove":{"type":"boolean","description":"Whether the initiator of the activity can participate in the approval.","uniqueKey":"\\items.items.[INDEX].oneOf.9.pendingChangeRequest.body.oneOf.0.action.oneOf.0.approvalGroups.items.[INDEX].initiatorCanApprove","typeLabel":"boolean"},"serviceAccountsCanApprove":{"type":"boolean","description":"Whether service accounts can participate in the approval for this group.","uniqueKey":"\\items.items.[INDEX].oneOf.9.pendingChangeRequest.body.oneOf.0.action.oneOf.0.approvalGroups.items.[INDEX].serviceAccountsCanApprove","typeLabel":"boolean"}},"required":["quorum","approvers"],"additionalProperties":false,"uniqueKey":"\\items.items.[INDEX].oneOf.9.pendingChangeRequest.body.oneOf.0.action.oneOf.0.approvalGroups.items.[INDEX]","typeLabel":"object"},"minItems":1,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.9.pendingChangeRequest.body.oneOf.0.action.oneOf.0.approvalGroups","typeLabel":"object[]"},"autoRejectTimeout":{"oneOf":[{"type":"integer","minimum":1,"uniqueKey":"\\items.items.[INDEX].oneOf.9.pendingChangeRequest.body.oneOf.0.action.oneOf.0.autoRejectTimeout.oneOf.0","typeLabel":"integer"},{"type":"null","minimum":1,"uniqueKey":"\\items.items.[INDEX].oneOf.9.pendingChangeRequest.body.oneOf.0.action.oneOf.0.autoRejectTimeout.oneOf.1","typeLabel":"null"}],"uniqueKey":"\\items.items.[INDEX].oneOf.9.pendingChangeRequest.body.oneOf.0.action.oneOf.0.autoRejectTimeout","typeLabel":"integer | null"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.9.pendingChangeRequest.body.oneOf.0.action.oneOf.0","typeLabel":"RequestApproval · object"},{"type":"object","title":"Block","description":"This action means that the activity will be blocked if the policy is triggered.\n\n```json\n{\n \"action\": {\n \"kind\": \"Block\"\n }\n}\n```\n","required":["kind"],"properties":{"kind":{"type":"string","enum":["Block"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.9.pendingChangeRequest.body.oneOf.0.action.oneOf.1.kind","typeLabel":"enum\u003cstring>"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.9.pendingChangeRequest.body.oneOf.0.action.oneOf.1","typeLabel":"Block · object"}],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.9.pendingChangeRequest.body.oneOf.0.action","typeLabel":"RequestApproval · object | Block · object"},"dateCreated":{"type":"string","uniqueKey":"\\items.items.[INDEX].oneOf.9.pendingChangeRequest.body.oneOf.0.dateCreated","typeLabel":"string"},"dateUpdated":{"type":"string","uniqueKey":"\\items.items.[INDEX].oneOf.9.pendingChangeRequest.body.oneOf.0.dateUpdated","typeLabel":"string"},"filters":{"type":"object","properties":{},"uniqueKey":"\\items.items.[INDEX].oneOf.9.pendingChangeRequest.body.oneOf.0.filters","typeLabel":"object"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.9.pendingChangeRequest.body.oneOf.0","typeLabel":"Registry:Addresses:Modify · object"},{"type":"object","title":"Permissions:Assign","required":["id","name","status","activityKind","rule","action"],"properties":{"id":{"type":"string","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.9.pendingChangeRequest.body.oneOf.1.id","typeLabel":"string"},"name":{"type":"string","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.9.pendingChangeRequest.body.oneOf.1.name","typeLabel":"string"},"status":{"type":"string","enum":["Active","Archived"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.9.pendingChangeRequest.body.oneOf.1.status","typeLabel":"enum\u003cstring>"},"activityKind":{"type":"string","enum":["Permissions:Assign"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.9.pendingChangeRequest.body.oneOf.1.activityKind","typeLabel":"enum\u003cstring>"},"rule":{"type":"object","properties":{"kind":{"type":"string","enum":["AlwaysTrigger"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.9.pendingChangeRequest.body.oneOf.1.rule.kind","typeLabel":"enum\u003cstring>"},"configuration":{"type":"object","properties":{},"additionalProperties":false,"uniqueKey":"\\items.items.[INDEX].oneOf.9.pendingChangeRequest.body.oneOf.1.rule.configuration","typeLabel":"object"}},"required":["kind"],"additionalProperties":false,"description":"This rule will always be triggered, meaning that if this rule is defined on a policy, the policy will always trigger the policy action, regardless of the activity details.","title":"AlwaysTrigger","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.9.pendingChangeRequest.body.oneOf.1.rule","typeLabel":"AlwaysTrigger · object"},"action":{"oneOf":[{"type":"object","title":"RequestApproval","description":"\nThis action means that activity will first require an Approval process to be completed before it can be executed (or be aborted if someone rejects it during the approval process).\n\nOne or several groups of approvers need to be specified. These groups define who is allowed to approve / reject an activity.\n\nThe activity will only be executed if all approver groups reach their \"quorum\" of approvals. Otherwise, if any one user within any approver group rejects, then the activity is aborted and the call is not executed.\n\nThe example below shows a `RequestApproval` action, configured with one approval group requiring 2 approvals amongst three specific users.\n\n```json\n{\n \"action\": {\n \"kind\": \"RequestApproval\",\n \"autoRejectTimeout\": 60, // minutes\n \"approvalGroups\": [\n {\n \"name\": \"Admins\",\n \"quorum\": 2, // only 2 approvers required in that group \n \"approvers\": {\n \"userId\": {\n \"in\": [\"us-...1\", \"us-...2\", \"us-...3\"],\n }\n }\n }\n ],\n\n }\n}\n```\n\n**Don't lock yourself up**\n\nBy default, users cannot approve an activity they initiated themselves, even if they are in an approval group. To allow this, you must set `initiatorCanApprove: true`.\n\n*Example 1:* For any wallet transfer, a policy is setup to require approval from **1 specific admin user** (eg. the CEO). `initiatorCanApprove` was not set to `true`. If the CEO himself initiates a transfer, no-one can approve his transfer and it's stuck.\n\n*Example 2:* Company has only 3 users. A policy is setup to require approval from **any 3 users** (`quorum: 3`) for any modification of a policy. `initiatorCanApprove` was not set to `true`. In this case, they are locked, and the policy cannot be modified: whoever requests a modification cannot approve, and the policy is therefore always missing one approver. To unlock, they would need to invite a new user and give him the rights to approve as well.\n ","required":["kind","approvalGroups"],"properties":{"kind":{"type":"string","enum":["RequestApproval"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.9.pendingChangeRequest.body.oneOf.1.action.oneOf.0.kind","typeLabel":"enum\u003cstring>"},"approvalGroups":{"type":"array","items":{"type":"object","properties":{"quorum":{"type":"integer","minimum":1,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.9.pendingChangeRequest.body.oneOf.1.action.oneOf.0.approvalGroups.items.[INDEX].quorum","typeLabel":"integer"},"approvers":{"type":"object","properties":{"userId":{"type":"object","properties":{"in":{"type":"array","items":{"type":"string","minLength":1,"uniqueKey":"\\items.items.[INDEX].oneOf.9.pendingChangeRequest.body.oneOf.1.action.oneOf.0.approvalGroups.items.[INDEX].approvers.userId.in.items.[INDEX]","typeLabel":"string"},"minItems":1,"maxItems":100,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.9.pendingChangeRequest.body.oneOf.1.action.oneOf.0.approvalGroups.items.[INDEX].approvers.userId.in","typeLabel":"string[]"}},"required":["in"],"additionalProperties":false,"description":"Users and service accounts who may approve.","uniqueKey":"\\items.items.[INDEX].oneOf.9.pendingChangeRequest.body.oneOf.1.action.oneOf.0.approvalGroups.items.[INDEX].approvers.userId","typeLabel":"object"},"userGroupId":{"type":"object","properties":{"in":{"type":"array","items":{"type":"string","minLength":1,"maxLength":64,"pattern":"^ug-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"User group id.","example":"ug-139tf-f58l8-lsbt6dp47lfsdvgh","uniqueKey":"\\items.items.[INDEX].oneOf.9.pendingChangeRequest.body.oneOf.1.action.oneOf.0.approvalGroups.items.[INDEX].approvers.userGroupId.in.items.[INDEX]","typeLabel":"string"},"minItems":1,"maxItems":100,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.9.pendingChangeRequest.body.oneOf.1.action.oneOf.0.approvalGroups.items.[INDEX].approvers.userGroupId.in","typeLabel":"string[]"}},"required":["in"],"additionalProperties":false,"description":"User groups whose members may approve.","uniqueKey":"\\items.items.[INDEX].oneOf.9.pendingChangeRequest.body.oneOf.1.action.oneOf.0.approvalGroups.items.[INDEX].approvers.userGroupId","typeLabel":"object"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.9.pendingChangeRequest.body.oneOf.1.action.oneOf.0.approvalGroups.items.[INDEX].approvers","typeLabel":"object"},"name":{"type":"string","uniqueKey":"\\items.items.[INDEX].oneOf.9.pendingChangeRequest.body.oneOf.1.action.oneOf.0.approvalGroups.items.[INDEX].name","typeLabel":"string"},"initiatorCanApprove":{"type":"boolean","description":"Whether the initiator of the activity can participate in the approval.","uniqueKey":"\\items.items.[INDEX].oneOf.9.pendingChangeRequest.body.oneOf.1.action.oneOf.0.approvalGroups.items.[INDEX].initiatorCanApprove","typeLabel":"boolean"},"serviceAccountsCanApprove":{"type":"boolean","description":"Whether service accounts can participate in the approval for this group.","uniqueKey":"\\items.items.[INDEX].oneOf.9.pendingChangeRequest.body.oneOf.1.action.oneOf.0.approvalGroups.items.[INDEX].serviceAccountsCanApprove","typeLabel":"boolean"}},"required":["quorum","approvers"],"additionalProperties":false,"uniqueKey":"\\items.items.[INDEX].oneOf.9.pendingChangeRequest.body.oneOf.1.action.oneOf.0.approvalGroups.items.[INDEX]","typeLabel":"object"},"minItems":1,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.9.pendingChangeRequest.body.oneOf.1.action.oneOf.0.approvalGroups","typeLabel":"object[]"},"autoRejectTimeout":{"oneOf":[{"type":"integer","minimum":1,"uniqueKey":"\\items.items.[INDEX].oneOf.9.pendingChangeRequest.body.oneOf.1.action.oneOf.0.autoRejectTimeout.oneOf.0","typeLabel":"integer"},{"type":"null","minimum":1,"uniqueKey":"\\items.items.[INDEX].oneOf.9.pendingChangeRequest.body.oneOf.1.action.oneOf.0.autoRejectTimeout.oneOf.1","typeLabel":"null"}],"uniqueKey":"\\items.items.[INDEX].oneOf.9.pendingChangeRequest.body.oneOf.1.action.oneOf.0.autoRejectTimeout","typeLabel":"integer | null"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.9.pendingChangeRequest.body.oneOf.1.action.oneOf.0","typeLabel":"RequestApproval · object"},{"type":"object","title":"Block","description":"This action means that the activity will be blocked if the policy is triggered.\n\n```json\n{\n \"action\": {\n \"kind\": \"Block\"\n }\n}\n```\n","required":["kind"],"properties":{"kind":{"type":"string","enum":["Block"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.9.pendingChangeRequest.body.oneOf.1.action.oneOf.1.kind","typeLabel":"enum\u003cstring>"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.9.pendingChangeRequest.body.oneOf.1.action.oneOf.1","typeLabel":"Block · object"}],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.9.pendingChangeRequest.body.oneOf.1.action","typeLabel":"RequestApproval · object | Block · object"},"dateCreated":{"type":"string","uniqueKey":"\\items.items.[INDEX].oneOf.9.pendingChangeRequest.body.oneOf.1.dateCreated","typeLabel":"string"},"dateUpdated":{"type":"string","uniqueKey":"\\items.items.[INDEX].oneOf.9.pendingChangeRequest.body.oneOf.1.dateUpdated","typeLabel":"string"},"filters":{"type":"object","properties":{"permissionId":{"type":"object","properties":{"in":{"type":"array","items":{"type":"string","minLength":1,"uniqueKey":"\\items.items.[INDEX].oneOf.9.pendingChangeRequest.body.oneOf.1.filters.permissionId.in.items.[INDEX]","typeLabel":"string"},"minItems":1,"maxItems":100,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.9.pendingChangeRequest.body.oneOf.1.filters.permissionId.in","typeLabel":"string[]"}},"required":["in"],"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.9.pendingChangeRequest.body.oneOf.1.filters.permissionId","typeLabel":"object"}},"required":["permissionId"],"additionalProperties":false,"uniqueKey":"\\items.items.[INDEX].oneOf.9.pendingChangeRequest.body.oneOf.1.filters","typeLabel":"object"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.9.pendingChangeRequest.body.oneOf.1","typeLabel":"Permissions:Assign · object"},{"type":"object","title":"Permissions:Modify","required":["id","name","status","activityKind","rule","action"],"properties":{"id":{"type":"string","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.9.pendingChangeRequest.body.oneOf.2.id","typeLabel":"string"},"name":{"type":"string","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.9.pendingChangeRequest.body.oneOf.2.name","typeLabel":"string"},"status":{"type":"string","enum":["Active","Archived"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.9.pendingChangeRequest.body.oneOf.2.status","typeLabel":"enum\u003cstring>"},"activityKind":{"type":"string","enum":["Permissions:Modify"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.9.pendingChangeRequest.body.oneOf.2.activityKind","typeLabel":"enum\u003cstring>"},"rule":{"type":"object","properties":{"kind":{"type":"string","enum":["AlwaysTrigger"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.9.pendingChangeRequest.body.oneOf.2.rule.kind","typeLabel":"enum\u003cstring>"},"configuration":{"type":"object","properties":{},"additionalProperties":false,"uniqueKey":"\\items.items.[INDEX].oneOf.9.pendingChangeRequest.body.oneOf.2.rule.configuration","typeLabel":"object"}},"required":["kind"],"additionalProperties":false,"description":"This rule will always be triggered, meaning that if this rule is defined on a policy, the policy will always trigger the policy action, regardless of the activity details.","title":"AlwaysTrigger","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.9.pendingChangeRequest.body.oneOf.2.rule","typeLabel":"AlwaysTrigger · object"},"action":{"oneOf":[{"type":"object","title":"RequestApproval","description":"\nThis action means that activity will first require an Approval process to be completed before it can be executed (or be aborted if someone rejects it during the approval process).\n\nOne or several groups of approvers need to be specified. These groups define who is allowed to approve / reject an activity.\n\nThe activity will only be executed if all approver groups reach their \"quorum\" of approvals. Otherwise, if any one user within any approver group rejects, then the activity is aborted and the call is not executed.\n\nThe example below shows a `RequestApproval` action, configured with one approval group requiring 2 approvals amongst three specific users.\n\n```json\n{\n \"action\": {\n \"kind\": \"RequestApproval\",\n \"autoRejectTimeout\": 60, // minutes\n \"approvalGroups\": [\n {\n \"name\": \"Admins\",\n \"quorum\": 2, // only 2 approvers required in that group \n \"approvers\": {\n \"userId\": {\n \"in\": [\"us-...1\", \"us-...2\", \"us-...3\"],\n }\n }\n }\n ],\n\n }\n}\n```\n\n**Don't lock yourself up**\n\nBy default, users cannot approve an activity they initiated themselves, even if they are in an approval group. To allow this, you must set `initiatorCanApprove: true`.\n\n*Example 1:* For any wallet transfer, a policy is setup to require approval from **1 specific admin user** (eg. the CEO). `initiatorCanApprove` was not set to `true`. If the CEO himself initiates a transfer, no-one can approve his transfer and it's stuck.\n\n*Example 2:* Company has only 3 users. A policy is setup to require approval from **any 3 users** (`quorum: 3`) for any modification of a policy. `initiatorCanApprove` was not set to `true`. In this case, they are locked, and the policy cannot be modified: whoever requests a modification cannot approve, and the policy is therefore always missing one approver. To unlock, they would need to invite a new user and give him the rights to approve as well.\n ","required":["kind","approvalGroups"],"properties":{"kind":{"type":"string","enum":["RequestApproval"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.9.pendingChangeRequest.body.oneOf.2.action.oneOf.0.kind","typeLabel":"enum\u003cstring>"},"approvalGroups":{"type":"array","items":{"type":"object","properties":{"quorum":{"type":"integer","minimum":1,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.9.pendingChangeRequest.body.oneOf.2.action.oneOf.0.approvalGroups.items.[INDEX].quorum","typeLabel":"integer"},"approvers":{"type":"object","properties":{"userId":{"type":"object","properties":{"in":{"type":"array","items":{"type":"string","minLength":1,"uniqueKey":"\\items.items.[INDEX].oneOf.9.pendingChangeRequest.body.oneOf.2.action.oneOf.0.approvalGroups.items.[INDEX].approvers.userId.in.items.[INDEX]","typeLabel":"string"},"minItems":1,"maxItems":100,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.9.pendingChangeRequest.body.oneOf.2.action.oneOf.0.approvalGroups.items.[INDEX].approvers.userId.in","typeLabel":"string[]"}},"required":["in"],"additionalProperties":false,"description":"Users and service accounts who may approve.","uniqueKey":"\\items.items.[INDEX].oneOf.9.pendingChangeRequest.body.oneOf.2.action.oneOf.0.approvalGroups.items.[INDEX].approvers.userId","typeLabel":"object"},"userGroupId":{"type":"object","properties":{"in":{"type":"array","items":{"type":"string","minLength":1,"maxLength":64,"pattern":"^ug-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"User group id.","example":"ug-139tf-f58l8-lsbt6dp47lfsdvgh","uniqueKey":"\\items.items.[INDEX].oneOf.9.pendingChangeRequest.body.oneOf.2.action.oneOf.0.approvalGroups.items.[INDEX].approvers.userGroupId.in.items.[INDEX]","typeLabel":"string"},"minItems":1,"maxItems":100,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.9.pendingChangeRequest.body.oneOf.2.action.oneOf.0.approvalGroups.items.[INDEX].approvers.userGroupId.in","typeLabel":"string[]"}},"required":["in"],"additionalProperties":false,"description":"User groups whose members may approve.","uniqueKey":"\\items.items.[INDEX].oneOf.9.pendingChangeRequest.body.oneOf.2.action.oneOf.0.approvalGroups.items.[INDEX].approvers.userGroupId","typeLabel":"object"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.9.pendingChangeRequest.body.oneOf.2.action.oneOf.0.approvalGroups.items.[INDEX].approvers","typeLabel":"object"},"name":{"type":"string","uniqueKey":"\\items.items.[INDEX].oneOf.9.pendingChangeRequest.body.oneOf.2.action.oneOf.0.approvalGroups.items.[INDEX].name","typeLabel":"string"},"initiatorCanApprove":{"type":"boolean","description":"Whether the initiator of the activity can participate in the approval.","uniqueKey":"\\items.items.[INDEX].oneOf.9.pendingChangeRequest.body.oneOf.2.action.oneOf.0.approvalGroups.items.[INDEX].initiatorCanApprove","typeLabel":"boolean"},"serviceAccountsCanApprove":{"type":"boolean","description":"Whether service accounts can participate in the approval for this group.","uniqueKey":"\\items.items.[INDEX].oneOf.9.pendingChangeRequest.body.oneOf.2.action.oneOf.0.approvalGroups.items.[INDEX].serviceAccountsCanApprove","typeLabel":"boolean"}},"required":["quorum","approvers"],"additionalProperties":false,"uniqueKey":"\\items.items.[INDEX].oneOf.9.pendingChangeRequest.body.oneOf.2.action.oneOf.0.approvalGroups.items.[INDEX]","typeLabel":"object"},"minItems":1,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.9.pendingChangeRequest.body.oneOf.2.action.oneOf.0.approvalGroups","typeLabel":"object[]"},"autoRejectTimeout":{"oneOf":[{"type":"integer","minimum":1,"uniqueKey":"\\items.items.[INDEX].oneOf.9.pendingChangeRequest.body.oneOf.2.action.oneOf.0.autoRejectTimeout.oneOf.0","typeLabel":"integer"},{"type":"null","minimum":1,"uniqueKey":"\\items.items.[INDEX].oneOf.9.pendingChangeRequest.body.oneOf.2.action.oneOf.0.autoRejectTimeout.oneOf.1","typeLabel":"null"}],"uniqueKey":"\\items.items.[INDEX].oneOf.9.pendingChangeRequest.body.oneOf.2.action.oneOf.0.autoRejectTimeout","typeLabel":"integer | null"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.9.pendingChangeRequest.body.oneOf.2.action.oneOf.0","typeLabel":"RequestApproval · object"},{"type":"object","title":"Block","description":"This action means that the activity will be blocked if the policy is triggered.\n\n```json\n{\n \"action\": {\n \"kind\": \"Block\"\n }\n}\n```\n","required":["kind"],"properties":{"kind":{"type":"string","enum":["Block"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.9.pendingChangeRequest.body.oneOf.2.action.oneOf.1.kind","typeLabel":"enum\u003cstring>"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.9.pendingChangeRequest.body.oneOf.2.action.oneOf.1","typeLabel":"Block · object"}],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.9.pendingChangeRequest.body.oneOf.2.action","typeLabel":"RequestApproval · object | Block · object"},"dateCreated":{"type":"string","uniqueKey":"\\items.items.[INDEX].oneOf.9.pendingChangeRequest.body.oneOf.2.dateCreated","typeLabel":"string"},"dateUpdated":{"type":"string","uniqueKey":"\\items.items.[INDEX].oneOf.9.pendingChangeRequest.body.oneOf.2.dateUpdated","typeLabel":"string"},"filters":{"type":"object","properties":{"permissionId":{"type":"object","properties":{"in":{"type":"array","items":{"type":"string","minLength":1,"uniqueKey":"\\items.items.[INDEX].oneOf.9.pendingChangeRequest.body.oneOf.2.filters.permissionId.in.items.[INDEX]","typeLabel":"string"},"minItems":1,"maxItems":100,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.9.pendingChangeRequest.body.oneOf.2.filters.permissionId.in","typeLabel":"string[]"}},"required":["in"],"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.9.pendingChangeRequest.body.oneOf.2.filters.permissionId","typeLabel":"object"}},"required":["permissionId"],"additionalProperties":false,"uniqueKey":"\\items.items.[INDEX].oneOf.9.pendingChangeRequest.body.oneOf.2.filters","typeLabel":"object"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.9.pendingChangeRequest.body.oneOf.2","typeLabel":"Permissions:Modify · object"},{"type":"object","title":"Policies:Modify","required":["id","name","status","activityKind","rule","action"],"properties":{"id":{"type":"string","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.9.pendingChangeRequest.body.oneOf.3.id","typeLabel":"string"},"name":{"type":"string","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.9.pendingChangeRequest.body.oneOf.3.name","typeLabel":"string"},"status":{"type":"string","enum":["Active","Archived"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.9.pendingChangeRequest.body.oneOf.3.status","typeLabel":"enum\u003cstring>"},"activityKind":{"type":"string","enum":["Policies:Modify"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.9.pendingChangeRequest.body.oneOf.3.activityKind","typeLabel":"enum\u003cstring>"},"rule":{"type":"object","properties":{"kind":{"type":"string","enum":["AlwaysTrigger"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.9.pendingChangeRequest.body.oneOf.3.rule.kind","typeLabel":"enum\u003cstring>"},"configuration":{"type":"object","properties":{},"additionalProperties":false,"uniqueKey":"\\items.items.[INDEX].oneOf.9.pendingChangeRequest.body.oneOf.3.rule.configuration","typeLabel":"object"}},"required":["kind"],"additionalProperties":false,"description":"This rule will always be triggered, meaning that if this rule is defined on a policy, the policy will always trigger the policy action, regardless of the activity details.","title":"AlwaysTrigger","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.9.pendingChangeRequest.body.oneOf.3.rule","typeLabel":"AlwaysTrigger · object"},"action":{"type":"object","properties":{"kind":{"type":"string","enum":["RequestApproval"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.9.pendingChangeRequest.body.oneOf.3.action.kind","typeLabel":"enum\u003cstring>"},"approvalGroups":{"type":"array","items":{"type":"object","properties":{"quorum":{"type":"integer","minimum":1,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.9.pendingChangeRequest.body.oneOf.3.action.approvalGroups.items.[INDEX].quorum","typeLabel":"integer"},"approvers":{"type":"object","properties":{"userId":{"type":"object","properties":{"in":{"type":"array","items":{"type":"string","minLength":1,"uniqueKey":"\\items.items.[INDEX].oneOf.9.pendingChangeRequest.body.oneOf.3.action.approvalGroups.items.[INDEX].approvers.userId.in.items.[INDEX]","typeLabel":"string"},"minItems":1,"maxItems":100,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.9.pendingChangeRequest.body.oneOf.3.action.approvalGroups.items.[INDEX].approvers.userId.in","typeLabel":"string[]"}},"required":["in"],"additionalProperties":false,"description":"Users and service accounts who may approve.","uniqueKey":"\\items.items.[INDEX].oneOf.9.pendingChangeRequest.body.oneOf.3.action.approvalGroups.items.[INDEX].approvers.userId","typeLabel":"object"},"userGroupId":{"type":"object","properties":{"in":{"type":"array","items":{"type":"string","minLength":1,"maxLength":64,"pattern":"^ug-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"User group id.","example":"ug-139tf-f58l8-lsbt6dp47lfsdvgh","uniqueKey":"\\items.items.[INDEX].oneOf.9.pendingChangeRequest.body.oneOf.3.action.approvalGroups.items.[INDEX].approvers.userGroupId.in.items.[INDEX]","typeLabel":"string"},"minItems":1,"maxItems":100,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.9.pendingChangeRequest.body.oneOf.3.action.approvalGroups.items.[INDEX].approvers.userGroupId.in","typeLabel":"string[]"}},"required":["in"],"additionalProperties":false,"description":"User groups whose members may approve.","uniqueKey":"\\items.items.[INDEX].oneOf.9.pendingChangeRequest.body.oneOf.3.action.approvalGroups.items.[INDEX].approvers.userGroupId","typeLabel":"object"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.9.pendingChangeRequest.body.oneOf.3.action.approvalGroups.items.[INDEX].approvers","typeLabel":"object"},"name":{"type":"string","uniqueKey":"\\items.items.[INDEX].oneOf.9.pendingChangeRequest.body.oneOf.3.action.approvalGroups.items.[INDEX].name","typeLabel":"string"},"initiatorCanApprove":{"type":"boolean","description":"Whether the initiator of the activity can participate in the approval.","uniqueKey":"\\items.items.[INDEX].oneOf.9.pendingChangeRequest.body.oneOf.3.action.approvalGroups.items.[INDEX].initiatorCanApprove","typeLabel":"boolean"},"serviceAccountsCanApprove":{"type":"boolean","description":"Whether service accounts can participate in the approval for this group.","uniqueKey":"\\items.items.[INDEX].oneOf.9.pendingChangeRequest.body.oneOf.3.action.approvalGroups.items.[INDEX].serviceAccountsCanApprove","typeLabel":"boolean"}},"required":["quorum","approvers"],"additionalProperties":false,"uniqueKey":"\\items.items.[INDEX].oneOf.9.pendingChangeRequest.body.oneOf.3.action.approvalGroups.items.[INDEX]","typeLabel":"object"},"minItems":1,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.9.pendingChangeRequest.body.oneOf.3.action.approvalGroups","typeLabel":"object[]"},"autoRejectTimeout":{"oneOf":[{"type":"integer","minimum":1,"uniqueKey":"\\items.items.[INDEX].oneOf.9.pendingChangeRequest.body.oneOf.3.action.autoRejectTimeout.oneOf.0","typeLabel":"integer"},{"type":"null","minimum":1,"uniqueKey":"\\items.items.[INDEX].oneOf.9.pendingChangeRequest.body.oneOf.3.action.autoRejectTimeout.oneOf.1","typeLabel":"null"}],"uniqueKey":"\\items.items.[INDEX].oneOf.9.pendingChangeRequest.body.oneOf.3.action.autoRejectTimeout","typeLabel":"integer | null"}},"required":["kind","approvalGroups"],"additionalProperties":false,"description":"\nThis action means that activity will first require an Approval process to be completed before it can be executed (or be aborted if someone rejects it during the approval process).\n\nOne or several groups of approvers need to be specified. These groups define who is allowed to approve / reject an activity.\n\nThe activity will only be executed if all approver groups reach their \"quorum\" of approvals. Otherwise, if any one user within any approver group rejects, then the activity is aborted and the call is not executed.\n\nThe example below shows a `RequestApproval` action, configured with one approval group requiring 2 approvals amongst three specific users.\n\n```json\n{\n \"action\": {\n \"kind\": \"RequestApproval\",\n \"autoRejectTimeout\": 60, // minutes\n \"approvalGroups\": [\n {\n \"name\": \"Admins\",\n \"quorum\": 2, // only 2 approvers required in that group \n \"approvers\": {\n \"userId\": {\n \"in\": [\"us-...1\", \"us-...2\", \"us-...3\"],\n }\n }\n }\n ],\n\n }\n}\n```\n\n**Don't lock yourself up**\n\nBy default, users cannot approve an activity they initiated themselves, even if they are in an approval group. To allow this, you must set `initiatorCanApprove: true`.\n\n*Example 1:* For any wallet transfer, a policy is setup to require approval from **1 specific admin user** (eg. the CEO). `initiatorCanApprove` was not set to `true`. If the CEO himself initiates a transfer, no-one can approve his transfer and it's stuck.\n\n*Example 2:* Company has only 3 users. A policy is setup to require approval from **any 3 users** (`quorum: 3`) for any modification of a policy. `initiatorCanApprove` was not set to `true`. In this case, they are locked, and the policy cannot be modified: whoever requests a modification cannot approve, and the policy is therefore always missing one approver. To unlock, they would need to invite a new user and give him the rights to approve as well.\n ","title":"RequestApproval","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.9.pendingChangeRequest.body.oneOf.3.action","typeLabel":"RequestApproval · object"},"dateCreated":{"type":"string","uniqueKey":"\\items.items.[INDEX].oneOf.9.pendingChangeRequest.body.oneOf.3.dateCreated","typeLabel":"string"},"dateUpdated":{"type":"string","uniqueKey":"\\items.items.[INDEX].oneOf.9.pendingChangeRequest.body.oneOf.3.dateUpdated","typeLabel":"string"},"filters":{"type":"object","properties":{"policyId":{"type":"object","properties":{"in":{"type":"array","items":{"type":"string","minLength":1,"uniqueKey":"\\items.items.[INDEX].oneOf.9.pendingChangeRequest.body.oneOf.3.filters.policyId.in.items.[INDEX]","typeLabel":"string"},"minItems":1,"maxItems":100,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.9.pendingChangeRequest.body.oneOf.3.filters.policyId.in","typeLabel":"string[]"}},"required":["in"],"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.9.pendingChangeRequest.body.oneOf.3.filters.policyId","typeLabel":"object"}},"required":["policyId"],"additionalProperties":false,"uniqueKey":"\\items.items.[INDEX].oneOf.9.pendingChangeRequest.body.oneOf.3.filters","typeLabel":"object"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.9.pendingChangeRequest.body.oneOf.3","typeLabel":"Policies:Modify · object"},{"type":"object","title":"Registry:ContractSchemas:Modify","required":["id","name","status","activityKind","rule","action"],"properties":{"id":{"type":"string","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.9.pendingChangeRequest.body.oneOf.4.id","typeLabel":"string"},"name":{"type":"string","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.9.pendingChangeRequest.body.oneOf.4.name","typeLabel":"string"},"status":{"type":"string","enum":["Active","Archived"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.9.pendingChangeRequest.body.oneOf.4.status","typeLabel":"enum\u003cstring>"},"activityKind":{"type":"string","enum":["Registry:ContractSchemas:Modify"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.9.pendingChangeRequest.body.oneOf.4.activityKind","typeLabel":"enum\u003cstring>"},"rule":{"type":"object","properties":{"kind":{"type":"string","enum":["AlwaysTrigger"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.9.pendingChangeRequest.body.oneOf.4.rule.kind","typeLabel":"enum\u003cstring>"},"configuration":{"type":"object","properties":{},"additionalProperties":false,"uniqueKey":"\\items.items.[INDEX].oneOf.9.pendingChangeRequest.body.oneOf.4.rule.configuration","typeLabel":"object"}},"required":["kind"],"additionalProperties":false,"description":"This rule will always be triggered, meaning that if this rule is defined on a policy, the policy will always trigger the policy action, regardless of the activity details.","title":"AlwaysTrigger","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.9.pendingChangeRequest.body.oneOf.4.rule","typeLabel":"AlwaysTrigger · object"},"action":{"oneOf":[{"type":"object","title":"RequestApproval","description":"\nThis action means that activity will first require an Approval process to be completed before it can be executed (or be aborted if someone rejects it during the approval process).\n\nOne or several groups of approvers need to be specified. These groups define who is allowed to approve / reject an activity.\n\nThe activity will only be executed if all approver groups reach their \"quorum\" of approvals. Otherwise, if any one user within any approver group rejects, then the activity is aborted and the call is not executed.\n\nThe example below shows a `RequestApproval` action, configured with one approval group requiring 2 approvals amongst three specific users.\n\n```json\n{\n \"action\": {\n \"kind\": \"RequestApproval\",\n \"autoRejectTimeout\": 60, // minutes\n \"approvalGroups\": [\n {\n \"name\": \"Admins\",\n \"quorum\": 2, // only 2 approvers required in that group \n \"approvers\": {\n \"userId\": {\n \"in\": [\"us-...1\", \"us-...2\", \"us-...3\"],\n }\n }\n }\n ],\n\n }\n}\n```\n\n**Don't lock yourself up**\n\nBy default, users cannot approve an activity they initiated themselves, even if they are in an approval group. To allow this, you must set `initiatorCanApprove: true`.\n\n*Example 1:* For any wallet transfer, a policy is setup to require approval from **1 specific admin user** (eg. the CEO). `initiatorCanApprove` was not set to `true`. If the CEO himself initiates a transfer, no-one can approve his transfer and it's stuck.\n\n*Example 2:* Company has only 3 users. A policy is setup to require approval from **any 3 users** (`quorum: 3`) for any modification of a policy. `initiatorCanApprove` was not set to `true`. In this case, they are locked, and the policy cannot be modified: whoever requests a modification cannot approve, and the policy is therefore always missing one approver. To unlock, they would need to invite a new user and give him the rights to approve as well.\n ","required":["kind","approvalGroups"],"properties":{"kind":{"type":"string","enum":["RequestApproval"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.9.pendingChangeRequest.body.oneOf.4.action.oneOf.0.kind","typeLabel":"enum\u003cstring>"},"approvalGroups":{"type":"array","items":{"type":"object","properties":{"quorum":{"type":"integer","minimum":1,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.9.pendingChangeRequest.body.oneOf.4.action.oneOf.0.approvalGroups.items.[INDEX].quorum","typeLabel":"integer"},"approvers":{"type":"object","properties":{"userId":{"type":"object","properties":{"in":{"type":"array","items":{"type":"string","minLength":1,"uniqueKey":"\\items.items.[INDEX].oneOf.9.pendingChangeRequest.body.oneOf.4.action.oneOf.0.approvalGroups.items.[INDEX].approvers.userId.in.items.[INDEX]","typeLabel":"string"},"minItems":1,"maxItems":100,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.9.pendingChangeRequest.body.oneOf.4.action.oneOf.0.approvalGroups.items.[INDEX].approvers.userId.in","typeLabel":"string[]"}},"required":["in"],"additionalProperties":false,"description":"Users and service accounts who may approve.","uniqueKey":"\\items.items.[INDEX].oneOf.9.pendingChangeRequest.body.oneOf.4.action.oneOf.0.approvalGroups.items.[INDEX].approvers.userId","typeLabel":"object"},"userGroupId":{"type":"object","properties":{"in":{"type":"array","items":{"type":"string","minLength":1,"maxLength":64,"pattern":"^ug-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"User group id.","example":"ug-139tf-f58l8-lsbt6dp47lfsdvgh","uniqueKey":"\\items.items.[INDEX].oneOf.9.pendingChangeRequest.body.oneOf.4.action.oneOf.0.approvalGroups.items.[INDEX].approvers.userGroupId.in.items.[INDEX]","typeLabel":"string"},"minItems":1,"maxItems":100,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.9.pendingChangeRequest.body.oneOf.4.action.oneOf.0.approvalGroups.items.[INDEX].approvers.userGroupId.in","typeLabel":"string[]"}},"required":["in"],"additionalProperties":false,"description":"User groups whose members may approve.","uniqueKey":"\\items.items.[INDEX].oneOf.9.pendingChangeRequest.body.oneOf.4.action.oneOf.0.approvalGroups.items.[INDEX].approvers.userGroupId","typeLabel":"object"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.9.pendingChangeRequest.body.oneOf.4.action.oneOf.0.approvalGroups.items.[INDEX].approvers","typeLabel":"object"},"name":{"type":"string","uniqueKey":"\\items.items.[INDEX].oneOf.9.pendingChangeRequest.body.oneOf.4.action.oneOf.0.approvalGroups.items.[INDEX].name","typeLabel":"string"},"initiatorCanApprove":{"type":"boolean","description":"Whether the initiator of the activity can participate in the approval.","uniqueKey":"\\items.items.[INDEX].oneOf.9.pendingChangeRequest.body.oneOf.4.action.oneOf.0.approvalGroups.items.[INDEX].initiatorCanApprove","typeLabel":"boolean"},"serviceAccountsCanApprove":{"type":"boolean","description":"Whether service accounts can participate in the approval for this group.","uniqueKey":"\\items.items.[INDEX].oneOf.9.pendingChangeRequest.body.oneOf.4.action.oneOf.0.approvalGroups.items.[INDEX].serviceAccountsCanApprove","typeLabel":"boolean"}},"required":["quorum","approvers"],"additionalProperties":false,"uniqueKey":"\\items.items.[INDEX].oneOf.9.pendingChangeRequest.body.oneOf.4.action.oneOf.0.approvalGroups.items.[INDEX]","typeLabel":"object"},"minItems":1,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.9.pendingChangeRequest.body.oneOf.4.action.oneOf.0.approvalGroups","typeLabel":"object[]"},"autoRejectTimeout":{"oneOf":[{"type":"integer","minimum":1,"uniqueKey":"\\items.items.[INDEX].oneOf.9.pendingChangeRequest.body.oneOf.4.action.oneOf.0.autoRejectTimeout.oneOf.0","typeLabel":"integer"},{"type":"null","minimum":1,"uniqueKey":"\\items.items.[INDEX].oneOf.9.pendingChangeRequest.body.oneOf.4.action.oneOf.0.autoRejectTimeout.oneOf.1","typeLabel":"null"}],"uniqueKey":"\\items.items.[INDEX].oneOf.9.pendingChangeRequest.body.oneOf.4.action.oneOf.0.autoRejectTimeout","typeLabel":"integer | null"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.9.pendingChangeRequest.body.oneOf.4.action.oneOf.0","typeLabel":"RequestApproval · object"},{"type":"object","title":"Block","description":"This action means that the activity will be blocked if the policy is triggered.\n\n```json\n{\n \"action\": {\n \"kind\": \"Block\"\n }\n}\n```\n","required":["kind"],"properties":{"kind":{"type":"string","enum":["Block"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.9.pendingChangeRequest.body.oneOf.4.action.oneOf.1.kind","typeLabel":"enum\u003cstring>"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.9.pendingChangeRequest.body.oneOf.4.action.oneOf.1","typeLabel":"Block · object"}],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.9.pendingChangeRequest.body.oneOf.4.action","typeLabel":"RequestApproval · object | Block · object"},"dateCreated":{"type":"string","uniqueKey":"\\items.items.[INDEX].oneOf.9.pendingChangeRequest.body.oneOf.4.dateCreated","typeLabel":"string"},"dateUpdated":{"type":"string","uniqueKey":"\\items.items.[INDEX].oneOf.9.pendingChangeRequest.body.oneOf.4.dateUpdated","typeLabel":"string"},"filters":{"type":"object","properties":{},"uniqueKey":"\\items.items.[INDEX].oneOf.9.pendingChangeRequest.body.oneOf.4.filters","typeLabel":"object"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.9.pendingChangeRequest.body.oneOf.4","typeLabel":"Registry:ContractSchemas:Modify · object"},{"type":"object","title":"Wallets:Sign","required":["id","name","status","activityKind","rule","action"],"properties":{"id":{"type":"string","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.9.pendingChangeRequest.body.oneOf.5.id","typeLabel":"string"},"name":{"type":"string","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.9.pendingChangeRequest.body.oneOf.5.name","typeLabel":"string"},"status":{"type":"string","enum":["Active","Archived"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.9.pendingChangeRequest.body.oneOf.5.status","typeLabel":"enum\u003cstring>"},"activityKind":{"type":"string","enum":["Wallets:Sign"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.9.pendingChangeRequest.body.oneOf.5.activityKind","typeLabel":"enum\u003cstring>"},"rule":{"oneOf":[{"type":"object","title":"AlwaysTrigger","description":"This rule will always be triggered, meaning that if this rule is defined on a policy, the policy will always trigger the policy action, regardless of the activity details.","required":["kind"],"properties":{"kind":{"type":"string","enum":["AlwaysTrigger"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.9.pendingChangeRequest.body.oneOf.5.rule.oneOf.0.kind","typeLabel":"enum\u003cstring>"},"configuration":{"type":"object","properties":{},"additionalProperties":false,"uniqueKey":"\\items.items.[INDEX].oneOf.9.pendingChangeRequest.body.oneOf.5.rule.oneOf.0.configuration","typeLabel":"object"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.9.pendingChangeRequest.body.oneOf.5.rule.oneOf.0","typeLabel":"AlwaysTrigger · object"},{"type":"object","title":"TransactionRecipientWhitelist","description":"This rule will trigger if the destination address *is NOT whitelisted*.","required":["kind","configuration"],"properties":{"kind":{"type":"string","enum":["TransactionRecipientWhitelist"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.9.pendingChangeRequest.body.oneOf.5.rule.oneOf.1.kind","typeLabel":"enum\u003cstring>"},"configuration":{"type":"object","properties":{"addresses":{"type":"array","items":{"type":"string","minLength":1,"uniqueKey":"\\items.items.[INDEX].oneOf.9.pendingChangeRequest.body.oneOf.5.rule.oneOf.1.configuration.addresses.items.[INDEX]","typeLabel":"string"},"description":"Whitelisted recipient addresses","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.9.pendingChangeRequest.body.oneOf.5.rule.oneOf.1.configuration.addresses","typeLabel":"string[]"}},"required":["addresses"],"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.9.pendingChangeRequest.body.oneOf.5.rule.oneOf.1.configuration","typeLabel":"object"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.9.pendingChangeRequest.body.oneOf.5.rule.oneOf.1","typeLabel":"TransactionRecipientWhitelist · object"},{"type":"object","title":"TransactionAmountLimit","description":"This rule will trigger if the wallet activity detected is transferring some value whose amount is equal to or greater than a given limit. The limit is inclusive: a transfer whose value exactly equals the limit also triggers.\n\nThe limit is expressed in a fiat `currency` and evaluated against the market value of the transfer. To set a threshold in the asset's own units instead, use `TransactionAmountLimitNominal`.\n\nNote: If the amount of the wallet activity cannot be evaluated for any reason (eg. market prices are not available, or eg. the amount cannot be inferred from a wallet signature request, etc.), by default the rule will trigger the policy (this is called \"failing closed\" and is generally considered a security best practice).","required":["kind","configuration"],"properties":{"kind":{"type":"string","enum":["TransactionAmountLimit"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.9.pendingChangeRequest.body.oneOf.5.rule.oneOf.2.kind","typeLabel":"enum\u003cstring>"},"configuration":{"type":"object","properties":{"limit":{"type":"number","description":"Amount limit in `currency`","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.9.pendingChangeRequest.body.oneOf.5.rule.oneOf.2.configuration.limit","typeLabel":"number"},"currency":{"type":"string","enum":["USD"],"description":"Fiat currency, currently only `USD`","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.9.pendingChangeRequest.body.oneOf.5.rule.oneOf.2.configuration.currency","typeLabel":"enum\u003cstring>"}},"required":["limit","currency"],"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.9.pendingChangeRequest.body.oneOf.5.rule.oneOf.2.configuration","typeLabel":"object"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.9.pendingChangeRequest.body.oneOf.5.rule.oneOf.2","typeLabel":"TransactionAmountLimit · object"},{"type":"object","title":"TransactionAmountLimitNominal","description":"This rule will trigger if the wallet activity detected is transferring more of a listed asset than that asset's limit.\n\nEach limit is expressed in the minimum denomination of its own asset and compared against the transferred amount directly, so the verdict needs no market data and does not move with a price. To set a threshold on the fiat value of a transfer instead, use `TransactionAmountLimit`.\n\nLimits are asset exact: an asset is identified by its network and its Dfns token identifier, so a wrapped or staked derivative is a different asset from the thing it tracks, and a transfer of an asset the rule does not list will not trigger it.\n\nNote: If the transferred amount or the asset cannot be determined for any reason, by default the rule will trigger the policy (this is called \"failing closed\" and is generally considered a security best practice).","required":["kind","configuration"],"properties":{"kind":{"type":"string","enum":["TransactionAmountLimitNominal"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.9.pendingChangeRequest.body.oneOf.5.rule.oneOf.3.kind","typeLabel":"enum\u003cstring>"},"configuration":{"type":"object","properties":{"assets":{"type":"array","items":{"type":"object","properties":{"network":{"type":"string","title":"Network","description":"The network the asset lives on.","enum":["Algorand","AlgorandTestnet","Aptos","AptosTestnet","ArbitrumOne","ArbitrumSepolia","Arc","ArcTestnet","Areum","AvalancheC","AvalancheCFuji","Base","BaseSepolia","Berachain","BerachainBepolia","Bitcoin","BitcoinSignet","BitcoinTestnet4","BitcoinCash","Bob","BobSepolia","Bsc","BscTestnet","Canton","CantonTestnet","Cardano","CardanoPreprod","Concordium","ConcordiumTestnet","Celo","CeloSepolia","Codex","CodexSepolia","CosmosHub4","CosmosIcsTestnet","Dogecoin","DogecoinTestnet","Ethereum","EthereumClassic","EthereumClassicMordor","EthereumSepolia","EthereumHoodi","FlareC","FlareCCoston2","FlowEvm","FlowEvmTestnet","Hedera","HederaTestnet","HyperEvm","HyperEvmTestnet","Ink","InkSepolia","InternetComputer","Ion","IonTestnet","Iota","IotaTestnet","Kusama","KusamaAssetHub","Litecoin","LitecoinTestnet","Monad","MonadTestnet","Movement","MovementTestnet","Near","NearTestnet","Optimism","OptimismSepolia","Origyn","Plasma","PlasmaTestnet","Plume","PlumeSepolia","Paseo","PaseoAssetHub","Polkadot","PolkadotAssetHub","Polygon","PolygonAmoy","Polymesh","PolymeshTestnet","Rayls","RaylsTestnet","Robinhood","RobinhoodSepolia","SeiAtlantic2","SeiPacific1","Solana","SolanaDevnet","Sonic","SonicTestnet","Starknet","StarknetSepolia","Stellar","StellarTestnet","Sui","SuiTestnet","Tezos","TezosShadownet","Tempo","TempoModerato","Tsc","TscTestnet1","Ton","TonTestnet","Tron","TronNile","Westend","WestendAssetHub","Xdc","XdcApothem","XLayer","XLayerSepolia","XrpLedger","XrpLedgerTestnet"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.9.pendingChangeRequest.body.oneOf.5.rule.oneOf.3.configuration.assets.items.[INDEX].network","typeLabel":"enum\u003cstring>"},"tid":{"type":"string","minLength":1,"maxLength":200,"pattern":"^[a-z0-9_]+:[^\\s](?:[ ]?[^\\s])*$","description":"The Dfns token identifier of the asset, for example `native:eth` or `erc20:0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48`. Must be canonical: token contract addresses on hex based networks are lower cased.","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.9.pendingChangeRequest.body.oneOf.5.rule.oneOf.3.configuration.assets.items.[INDEX].tid","typeLabel":"string"},"limit":{"type":"string","pattern":"^\\d+$","description":"Amount limit in the minimum denomination of the asset, as an integer string, matching how a transfer expresses its amount. For an 18 decimal token `\"5000000000000000000\"` is 5 whole tokens.","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.9.pendingChangeRequest.body.oneOf.5.rule.oneOf.3.configuration.assets.items.[INDEX].limit","typeLabel":"string"}},"required":["network","tid","limit"],"additionalProperties":false,"uniqueKey":"\\items.items.[INDEX].oneOf.9.pendingChangeRequest.body.oneOf.5.rule.oneOf.3.configuration.assets.items.[INDEX]","typeLabel":"object"},"minItems":1,"maxItems":100,"description":"The assets this rule applies to, each with its own limit. A transfer of an asset that is not listed does not trigger the rule. The limit applies to each matching transfer individually; nothing is accumulated across transfers.","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.9.pendingChangeRequest.body.oneOf.5.rule.oneOf.3.configuration.assets","typeLabel":"object[]"}},"required":["assets"],"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.9.pendingChangeRequest.body.oneOf.5.rule.oneOf.3.configuration","typeLabel":"object"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.9.pendingChangeRequest.body.oneOf.5.rule.oneOf.3","typeLabel":"TransactionAmountLimitNominal · object"},{"type":"object","title":"TransactionAmountVelocity","description":"This rule will trigger if the cumulative amount transferred from a given wallet within a given timeframe is greater than a specified limit. The aggregate amount evaluated is based only on the wallet that triggered the policy.","required":["kind","configuration"],"properties":{"kind":{"type":"string","enum":["TransactionAmountVelocity"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.9.pendingChangeRequest.body.oneOf.5.rule.oneOf.4.kind","typeLabel":"enum\u003cstring>"},"configuration":{"type":"object","properties":{"limit":{"type":"number","description":"Amount limit in `currency`","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.9.pendingChangeRequest.body.oneOf.5.rule.oneOf.4.configuration.limit","typeLabel":"number"},"currency":{"type":"string","enum":["USD"],"description":"Currency for the amount limit above","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.9.pendingChangeRequest.body.oneOf.5.rule.oneOf.4.configuration.currency","typeLabel":"enum\u003cstring>"},"timeframe":{"type":"integer","minimum":1,"maximum":43200,"description":"Time period in minutes. Minimum 1, Maximum 43,200.","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.9.pendingChangeRequest.body.oneOf.5.rule.oneOf.4.configuration.timeframe","typeLabel":"integer"}},"required":["limit","currency","timeframe"],"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.9.pendingChangeRequest.body.oneOf.5.rule.oneOf.4.configuration","typeLabel":"object"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.9.pendingChangeRequest.body.oneOf.5.rule.oneOf.4","typeLabel":"TransactionAmountVelocity · object"},{"type":"object","title":"TransactionCountVelocity","description":"This rule will trigger if the number of wallet activities for a given wallet within a given timeframe, is greater than a specified limit. The aggregate number of transactions evaluated is based only on the wallet that triggered the policy.","required":["kind","configuration"],"properties":{"kind":{"type":"string","enum":["TransactionCountVelocity"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.9.pendingChangeRequest.body.oneOf.5.rule.oneOf.5.kind","typeLabel":"enum\u003cstring>"},"configuration":{"type":"object","properties":{"limit":{"type":"number","description":"Count limit","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.9.pendingChangeRequest.body.oneOf.5.rule.oneOf.5.configuration.limit","typeLabel":"number"},"timeframe":{"type":"integer","minimum":1,"maximum":43200,"description":"Time period in minutes. Minimum 1, Maximum 43,200.","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.9.pendingChangeRequest.body.oneOf.5.rule.oneOf.5.configuration.timeframe","typeLabel":"integer"}},"required":["limit","timeframe"],"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.9.pendingChangeRequest.body.oneOf.5.rule.oneOf.5.configuration","typeLabel":"object"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.9.pendingChangeRequest.body.oneOf.5.rule.oneOf.5","typeLabel":"TransactionCountVelocity · object"},{"type":"object","title":"ChainalysisTransactionPrescreening","description":"\n\u003cInfo>\nThis rule can only be used once the Chainalysis integration is activated from the Dfns dashboard settings. (see more on [Chainalysis](https://docs.dfns.co/integrations/aml-kyt/chainalysis) integration page).\n\u003c/Info>\n\nIt's a rule based on [Chainalysis](https://docs.dfns.co/integrations/aml-kyt/chainalysis) KYT integration (Know-Your-Transaction). Upon transfer attempt, we will first register the transfer with Chainalysis (as a [\"withdrawal attempt\"](https://docs.chainalysis.com/api/kyt/#registration-register-a-withdrawal-attempt)), and fetch the screening results (alerts, exposures, addresses detected). Based on the results, and the configuration of this rule, the policy will be triggered.\n\nIt's called \"Pre\"-screening, because the scanned transaction is not on chain yet, it's still a transaction attempt (before the transaction actually make it on chain).\n\n```json\n{\n \"rule\": {\n \"kind\": \"ChainalysisTransactionPrescreening\",\n \"configuration\": {\n \"alerts\": {\n \"alertLevel\": \"LOW\",\n \"categoryIds\": []\n },\n \"exposures\": {\n \"direct\": {\n \"categoryIds\": []\n }\n },\n \"addresses\": {\n \"categoryIds\": []\n },\n \"fallbackBehaviours\": {\n \"skipUnscreenableTransaction\": false,\n \"skipUnsupportedNetwork\": false,\n \"skipUnsupportedAsset\": false,\n \"skipChainalysisFailure\": false\n }\n }\n }\n}\n```\n\n**Configuration**\n\n| Property | Type | Description |\n| --- | --- | --- |\n| `alerts`\u003cbr>\u003cbr>`.alertLevel`* | `string` | Minimum alert level above which the rule should trigger, if any [alert is returned in Chainalysis results](https://docs.chainalysis.com/api/kyt/#withdrawal-attempts-get-alerts). Can be `LOW`, `MEDIUM`, `HIGH`, or `SEVERE` |\n| `alerts`\u003cbr>\u003cbr>`.categoryIds`* | list of integers | List of Chainalysis category IDs (see [here](https://docs.chainalysis.com/api/kyt/#categories)). If you leave this list empty, alerts of any category will trigger the rule. Otherwise, if you only want the rule to trigger on specific categories, you can specify some in the list. |\n| `exposures`\u003cbr>\u003cbr>`.direct`\u003cbr>\u003cbr>`.categoryIds`* | list of integers | List of Chainalysis category IDs (see [here](https://docs.chainalysis.com/api/kyt/#categories)). If you leave this list empty, a [direct exposure](https://docs.chainalysis.com/api/kyt/#withdrawal-attempts-get-direct-exposure) of any category detected by chainalysis will trigger the rule. Otherwise, if you only want the rule to trigger on specific categories, you can specify some in the list. |\n| `addresses`\u003cbr>\u003cbr>`.categoryIds`* | list of integers | List of Chainalysis category IDs (see [here](https://docs.chainalysis.com/api/kyt/#categories)). If you leave this list empty, an [address](https://docs.chainalysis.com/api/kyt/#withdrawal-attempts-get-address-identifications) of any category identified by chainalysis will trigger the rule. Otherwise, if you only want the rule to trigger on specific categories, you can specify some in the list. |\n| `fallbackBehaviours`\u003cbr>\u003cbr>`.skipUnscreenableTransaction`* | boolean | Behaviour if the wallet activity is not screenable (eg. if it's a signature request of a hash). If true, a transaction which is \"unscreenable\" will just be skipped, and policy will not trigger |\n| `fallbackBehaviours.skipUnsupportedNetwork`* | boolean | Behaviour if the wallet activity is on a network not supported by chainalysis, or not yet supported in the dfns-chainalysis integration. If true, an unsupported network will just be skipped, and policy will not trigger |\n| `fallbackBehaviours.skipUnsupportedAsset`* | boolean | Behaviour if the wallet activity is with a asset not supported by chainalysis, or not yet supported in the dfns-chainalysis integration. If true, an unsupported asset will just be skipped, and policy will not trigger |\n| `fallbackBehaviours.skipChainalysisFailure`* | boolean | Behaviour if any issue with Chainalysis calls (timeout, results took too long, rate limiting errors, any error). If true, will skip if any error happens |\n\n","required":["kind","configuration"],"properties":{"kind":{"type":"string","enum":["ChainalysisTransactionPrescreening"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.9.pendingChangeRequest.body.oneOf.5.rule.oneOf.6.kind","typeLabel":"enum\u003cstring>"},"configuration":{"type":"object","properties":{"alerts":{"type":"object","properties":{"alertLevel":{"type":"string","enum":["LOW","MEDIUM","HIGH","SEVERE"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.9.pendingChangeRequest.body.oneOf.5.rule.oneOf.6.configuration.alerts.alertLevel","typeLabel":"enum\u003cstring>"},"categoryIds":{"type":"array","items":{"type":"integer","exclusiveMinimum":0,"uniqueKey":"\\items.items.[INDEX].oneOf.9.pendingChangeRequest.body.oneOf.5.rule.oneOf.6.configuration.alerts.categoryIds.items.[INDEX]","typeLabel":"integer"},"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.9.pendingChangeRequest.body.oneOf.5.rule.oneOf.6.configuration.alerts.categoryIds","typeLabel":"integer[]"}},"required":["alertLevel","categoryIds"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.9.pendingChangeRequest.body.oneOf.5.rule.oneOf.6.configuration.alerts","typeLabel":"object"},"exposures":{"type":"object","properties":{"direct":{"type":"object","properties":{"categoryIds":{"type":"array","items":{"type":"integer","exclusiveMinimum":0,"uniqueKey":"\\items.items.[INDEX].oneOf.9.pendingChangeRequest.body.oneOf.5.rule.oneOf.6.configuration.exposures.direct.categoryIds.items.[INDEX]","typeLabel":"integer"},"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.9.pendingChangeRequest.body.oneOf.5.rule.oneOf.6.configuration.exposures.direct.categoryIds","typeLabel":"integer[]"}},"required":["categoryIds"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.9.pendingChangeRequest.body.oneOf.5.rule.oneOf.6.configuration.exposures.direct","typeLabel":"object"}},"required":["direct"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.9.pendingChangeRequest.body.oneOf.5.rule.oneOf.6.configuration.exposures","typeLabel":"object"},"addresses":{"type":"object","properties":{"categoryIds":{"type":"array","items":{"type":"integer","exclusiveMinimum":0,"uniqueKey":"\\items.items.[INDEX].oneOf.9.pendingChangeRequest.body.oneOf.5.rule.oneOf.6.configuration.addresses.categoryIds.items.[INDEX]","typeLabel":"integer"},"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.9.pendingChangeRequest.body.oneOf.5.rule.oneOf.6.configuration.addresses.categoryIds","typeLabel":"integer[]"}},"required":["categoryIds"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.9.pendingChangeRequest.body.oneOf.5.rule.oneOf.6.configuration.addresses","typeLabel":"object"},"fallbackBehaviours":{"type":"object","properties":{"skipUnscreenableTransaction":{"type":"boolean","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.9.pendingChangeRequest.body.oneOf.5.rule.oneOf.6.configuration.fallbackBehaviours.skipUnscreenableTransaction","typeLabel":"boolean"},"skipUnsupportedNetwork":{"type":"boolean","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.9.pendingChangeRequest.body.oneOf.5.rule.oneOf.6.configuration.fallbackBehaviours.skipUnsupportedNetwork","typeLabel":"boolean"},"skipUnsupportedAsset":{"type":"boolean","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.9.pendingChangeRequest.body.oneOf.5.rule.oneOf.6.configuration.fallbackBehaviours.skipUnsupportedAsset","typeLabel":"boolean"},"skipChainalysisFailure":{"type":"boolean","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.9.pendingChangeRequest.body.oneOf.5.rule.oneOf.6.configuration.fallbackBehaviours.skipChainalysisFailure","typeLabel":"boolean"}},"required":["skipUnscreenableTransaction","skipUnsupportedNetwork","skipUnsupportedAsset","skipChainalysisFailure"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.9.pendingChangeRequest.body.oneOf.5.rule.oneOf.6.configuration.fallbackBehaviours","typeLabel":"object"},"userIdTemplate":{"type":"string","minLength":1,"maxLength":50,"pattern":"^([a-zA-Z0-9_:-]|{wallet\\.id}|{wallet\\.externalId})+$","default":"dfns","description":"**Deprecated** — set `userIdTemplate` on the Chainalysis integration setting instead; when set there, the integration-level template takes precedence over this one.\n\nValue sent to Chainalysis as the \"user ID\". Used by Chainalysis for grouping transaction screenings.\n \nThis template can include variables, included in brackets. The following variables are currently supported: `{wallet.id}` and `{wallet.externalId}`.\nAs an example, if you set `userIdTemplate: \"dfns:{wallet.id}_{wallet.externalId}\"`, when your wallet receives a transaction that gets screened by a Chainalysis policy, the \"user ID\" sent to Chainalysis will be `dfns:wa-xxx_yyy` (`wa-xxx` being the wallet ID, and `yyy` being the wallet external ID).","uniqueKey":"\\items.items.[INDEX].oneOf.9.pendingChangeRequest.body.oneOf.5.rule.oneOf.6.configuration.userIdTemplate","typeLabel":"string"}},"required":["alerts","exposures","addresses","fallbackBehaviours"],"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.9.pendingChangeRequest.body.oneOf.5.rule.oneOf.6.configuration","typeLabel":"object"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.9.pendingChangeRequest.body.oneOf.5.rule.oneOf.6","typeLabel":"ChainalysisTransactionPrescreening · object"},{"type":"object","title":"EllipticTransactionPrescreening","description":"\n\u003cInfo>\nThis rule can only be used once the Elliptic integration is activated from the Dfns dashboard settings.\n\u003c/Info>\n\nThis rule uses Elliptic KYT for pre-screening outgoing transfers. Upon transfer attempt, we run a synchronous Elliptic wallet analysis of the destination address, and check the returned risk score against the configured threshold, plus any configured risk rules / categories. If at or above the threshold, or if a configured rule / category matched, the policy is triggered.\n\nIt's called \"Pre\"-screening, because the scanned transaction is not on chain yet, it's still a transaction attempt.","required":["kind","configuration"],"properties":{"kind":{"type":"string","enum":["EllipticTransactionPrescreening"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.9.pendingChangeRequest.body.oneOf.5.rule.oneOf.7.kind","typeLabel":"enum\u003cstring>"},"configuration":{"type":"object","properties":{"riskScoreThreshold":{"type":"number","minimum":0,"maximum":10,"description":"Risk score threshold (0-10, decimals allowed). The policy triggers if the Elliptic risk score is at or above the threshold.","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.9.pendingChangeRequest.body.oneOf.5.rule.oneOf.7.configuration.riskScoreThreshold","typeLabel":"number"},"triggeredRules":{"type":"object","properties":{"ruleIds":{"type":"array","items":{"type":"string","format":"uuid","uniqueKey":"\\items.items.[INDEX].oneOf.9.pendingChangeRequest.body.oneOf.5.rule.oneOf.7.configuration.triggeredRules.ruleIds.items.[INDEX]","typeLabel":"string\u003cuuid>"},"description":"IDs of risk rules from your Elliptic risk model. If any of these rules matched the analysis, the policy triggers regardless of the risk score. Leave empty to trigger on the risk score threshold only.","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.9.pendingChangeRequest.body.oneOf.5.rule.oneOf.7.configuration.triggeredRules.ruleIds","typeLabel":"string\u003cuuid>[]"},"categories":{"type":"array","items":{"type":"string","minLength":1,"uniqueKey":"\\items.items.[INDEX].oneOf.9.pendingChangeRequest.body.oneOf.5.rule.oneOf.7.configuration.triggeredRules.categories.items.[INDEX]","typeLabel":"string"},"description":"Elliptic category names (eg. \"Dark Market\"), matched case-insensitively. If a matched risk rule involves any of these categories, the policy triggers regardless of the risk score. Leave empty to trigger on the risk score threshold only.","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.9.pendingChangeRequest.body.oneOf.5.rule.oneOf.7.configuration.triggeredRules.categories","typeLabel":"string[]"}},"required":["ruleIds","categories"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.9.pendingChangeRequest.body.oneOf.5.rule.oneOf.7.configuration.triggeredRules","typeLabel":"object"},"fallbackBehaviours":{"type":"object","properties":{"skipUnscreenableTransaction":{"type":"boolean","description":"skip all wallet requests that cannot be screened (eg. raw signatures)","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.9.pendingChangeRequest.body.oneOf.5.rule.oneOf.7.configuration.fallbackBehaviours.skipUnscreenableTransaction","typeLabel":"boolean"},"skipUnsupportedNetwork":{"type":"boolean","description":"skip requests on a network not supported yet in our Elliptic integration","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.9.pendingChangeRequest.body.oneOf.5.rule.oneOf.7.configuration.fallbackBehaviours.skipUnsupportedNetwork","typeLabel":"boolean"},"skipEllipticFailure":{"type":"boolean","description":"skip any failure of the Elliptic analysis (timeout, rate limiting, any error)","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.9.pendingChangeRequest.body.oneOf.5.rule.oneOf.7.configuration.fallbackBehaviours.skipEllipticFailure","typeLabel":"boolean"}},"required":["skipUnscreenableTransaction","skipUnsupportedNetwork","skipEllipticFailure"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.9.pendingChangeRequest.body.oneOf.5.rule.oneOf.7.configuration.fallbackBehaviours","typeLabel":"object"}},"required":["riskScoreThreshold","triggeredRules","fallbackBehaviours"],"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.9.pendingChangeRequest.body.oneOf.5.rule.oneOf.7.configuration","typeLabel":"object"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.9.pendingChangeRequest.body.oneOf.5.rule.oneOf.7","typeLabel":"EllipticTransactionPrescreening · object"},{"type":"object","title":"GlobalLedgerTransactionPrescreening","description":"This rule uses GlobalLedger KYT for pre-screening outgoing transfers by checking the destination address risk score.\n\nUpon transfer attempt, we will query GlobalLedger's address risk API, and check if the risk score (0-100) is at or above the configured threshold, or if any alerts show up. If so, the policy will be triggered.\n\nIt's called \"Pre\"-screening, because the scanned transaction is not on chain yet, it's still a transaction attempt.","required":["kind","configuration"],"properties":{"kind":{"type":"string","enum":["GlobalLedgerTransactionPrescreening"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.9.pendingChangeRequest.body.oneOf.5.rule.oneOf.8.kind","typeLabel":"enum\u003cstring>"},"configuration":{"type":"object","properties":{"riskScoreThreshold":{"type":"integer","minimum":0,"maximum":100,"description":"Risk score threshold (0-100). Policy triggers if address/transaction risk score >= threshold","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.9.pendingChangeRequest.body.oneOf.5.rule.oneOf.8.configuration.riskScoreThreshold","typeLabel":"integer"},"fallbackBehaviours":{"type":"object","properties":{"skipUnscreenableTransaction":{"type":"boolean","description":"skip all wallet requests that cannot be screened (eg. raw signatures)","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.9.pendingChangeRequest.body.oneOf.5.rule.oneOf.8.configuration.fallbackBehaviours.skipUnscreenableTransaction","typeLabel":"boolean"},"skipUnsupportedNetwork":{"type":"boolean","description":"skip transfer requests to a network not supported yet in our GlobalLedger integration","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.9.pendingChangeRequest.body.oneOf.5.rule.oneOf.8.configuration.fallbackBehaviours.skipUnsupportedNetwork","typeLabel":"boolean"},"skipUnsupportedAsset":{"type":"boolean","description":"skip transfer requests of an asset not supported by our GlobalLedger integration","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.9.pendingChangeRequest.body.oneOf.5.rule.oneOf.8.configuration.fallbackBehaviours.skipUnsupportedAsset","typeLabel":"boolean"},"skipGlobalLedgerFailure":{"type":"boolean","description":"skips any errors from GlobalLedger API request","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.9.pendingChangeRequest.body.oneOf.5.rule.oneOf.8.configuration.fallbackBehaviours.skipGlobalLedgerFailure","typeLabel":"boolean"}},"required":["skipUnscreenableTransaction","skipUnsupportedNetwork","skipUnsupportedAsset","skipGlobalLedgerFailure"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.9.pendingChangeRequest.body.oneOf.5.rule.oneOf.8.configuration.fallbackBehaviours","typeLabel":"object"}},"required":["riskScoreThreshold","fallbackBehaviours"],"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.9.pendingChangeRequest.body.oneOf.5.rule.oneOf.8.configuration","typeLabel":"object"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.9.pendingChangeRequest.body.oneOf.5.rule.oneOf.8","typeLabel":"GlobalLedgerTransactionPrescreening · object"},{"type":"object","title":"TravelRuleTransactionPrescreening","description":"This rule applies a Travel Rule check to outgoing transfers through the vendor selected in `configuration.vendor`: [Notabene](https://docs.dfns.co/integrations/travel-rule/notabene) or Sumsub. It can only be used once that vendor's integration is activated from the Dfns dashboard settings.\n\nIt ***ONLY*** applies to Dfns [Transfer Asset](https://docs.dfns.co/api-reference/wallets/transfer-asset) Api Calls. It is NOT supported for Transfers initiated via the dashboard. Upon transfer attempt with a [TravelRule](https://docs.dfns.co/api-reference/wallets/transfer-asset#body-travel-rule) payload, we call the vendor's APIs on your behalf to validate and submit the travel rule message, then wait for its outcome. With Notabene, Dfns waits for a response from the counterparty (for custodial transfers) or from Notabene (for non-custodial transfers). With Sumsub, Dfns submits a Travel Rule message and waits for Sumsub to report its outcome. In both cases the wait is bounded by `configuration.autoTriggerTimeoutSeconds`, after which the policy's configured action is applied.\n\nThe transfer's `travelRule` payload must be of the kind matching `configuration.vendor` — a mismatch triggers the policy and applies its configured action. A given wallet must be covered by at most one travel-rule policy (of any vendor): if several travel-rule policies apply to the same transfer carrying a `travelRule` payload, it is treated as a misconfiguration and blocked without contacting any vendor. Signatures and transfers without a payload are not affected, since the rule does not apply to them.\n\nIt's called \"Pre\"-screening, because the transaction is not on chain yet, it's still a transaction attempt (before the transaction actually make it on chain).","required":["kind","configuration"],"properties":{"kind":{"type":"string","enum":["TravelRuleTransactionPrescreening"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.9.pendingChangeRequest.body.oneOf.5.rule.oneOf.9.kind","typeLabel":"enum\u003cstring>"},"configuration":{"oneOf":[{"type":"object","title":"TravelRuleNotabeneConfiguration","required":["vendor"],"properties":{"vendor":{"type":"string","enum":["Notabene"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.9.pendingChangeRequest.body.oneOf.5.rule.oneOf.9.configuration.oneOf.0.vendor","typeLabel":"enum\u003cstring>"},"autoTriggerTimeoutSeconds":{"type":"integer","minimum":0,"maximum":2592000,"default":86400,"description":"Seconds to wait for the vendor's verdict before the policy action applies. Maximum 2592000 (30 days). Defaults to 86400 (24 hours).","uniqueKey":"\\items.items.[INDEX].oneOf.9.pendingChangeRequest.body.oneOf.5.rule.oneOf.9.configuration.oneOf.0.autoTriggerTimeoutSeconds","typeLabel":"integer"},"autoClearAfterDeliveredTimeoutSeconds":{"type":"integer","minimum":0,"maximum":2592000,"description":"Seconds after delivery before a still-pending evaluation clears. Maximum 2592000 (30 days).","uniqueKey":"\\items.items.[INDEX].oneOf.9.pendingChangeRequest.body.oneOf.5.rule.oneOf.9.configuration.oneOf.0.autoClearAfterDeliveredTimeoutSeconds","typeLabel":"integer"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.9.pendingChangeRequest.body.oneOf.5.rule.oneOf.9.configuration.oneOf.0","typeLabel":"TravelRuleNotabeneConfiguration · object"},{"type":"object","title":"TravelRuleSumsubConfiguration","required":["vendor"],"properties":{"vendor":{"type":"string","enum":["Sumsub"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.9.pendingChangeRequest.body.oneOf.5.rule.oneOf.9.configuration.oneOf.1.vendor","typeLabel":"enum\u003cstring>"},"autoTriggerTimeoutSeconds":{"type":"integer","minimum":0,"maximum":2592000,"default":86400,"description":"Seconds to wait for the vendor's verdict before the policy action applies. Maximum 2592000 (30 days). Defaults to 86400 (24 hours).","uniqueKey":"\\items.items.[INDEX].oneOf.9.pendingChangeRequest.body.oneOf.5.rule.oneOf.9.configuration.oneOf.1.autoTriggerTimeoutSeconds","typeLabel":"integer"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.9.pendingChangeRequest.body.oneOf.5.rule.oneOf.9.configuration.oneOf.1","typeLabel":"TravelRuleSumsubConfiguration · object"}],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.9.pendingChangeRequest.body.oneOf.5.rule.oneOf.9.configuration","typeLabel":"TravelRuleNotabeneConfiguration · object | TravelRuleSumsubConfiguration · object"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.9.pendingChangeRequest.body.oneOf.5.rule.oneOf.9","typeLabel":"TravelRuleTransactionPrescreening · object"}],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.9.pendingChangeRequest.body.oneOf.5.rule","typeLabel":"AlwaysTrigger · object | TransactionRecipientWhitelist · object | TransactionAmountLimit · object | TransactionAmountLimitNominal · object | TransactionAmountVelocity · object | TransactionCountVelocity · object | ChainalysisTransactionPrescreening · object | EllipticTransactionPrescreening · object | GlobalLedgerTransactionPrescreening · object | TravelRuleTransactionPrescreening · object"},"action":{"oneOf":[{"type":"object","title":"RequestApproval","description":"\nThis action means that activity will first require an Approval process to be completed before it can be executed (or be aborted if someone rejects it during the approval process).\n\nOne or several groups of approvers need to be specified. These groups define who is allowed to approve / reject an activity.\n\nThe activity will only be executed if all approver groups reach their \"quorum\" of approvals. Otherwise, if any one user within any approver group rejects, then the activity is aborted and the call is not executed.\n\nThe example below shows a `RequestApproval` action, configured with one approval group requiring 2 approvals amongst three specific users.\n\n```json\n{\n \"action\": {\n \"kind\": \"RequestApproval\",\n \"autoRejectTimeout\": 60, // minutes\n \"approvalGroups\": [\n {\n \"name\": \"Admins\",\n \"quorum\": 2, // only 2 approvers required in that group \n \"approvers\": {\n \"userId\": {\n \"in\": [\"us-...1\", \"us-...2\", \"us-...3\"],\n }\n }\n }\n ],\n\n }\n}\n```\n\n**Don't lock yourself up**\n\nBy default, users cannot approve an activity they initiated themselves, even if they are in an approval group. To allow this, you must set `initiatorCanApprove: true`.\n\n*Example 1:* For any wallet transfer, a policy is setup to require approval from **1 specific admin user** (eg. the CEO). `initiatorCanApprove` was not set to `true`. If the CEO himself initiates a transfer, no-one can approve his transfer and it's stuck.\n\n*Example 2:* Company has only 3 users. A policy is setup to require approval from **any 3 users** (`quorum: 3`) for any modification of a policy. `initiatorCanApprove` was not set to `true`. In this case, they are locked, and the policy cannot be modified: whoever requests a modification cannot approve, and the policy is therefore always missing one approver. To unlock, they would need to invite a new user and give him the rights to approve as well.\n ","required":["kind","approvalGroups"],"properties":{"kind":{"type":"string","enum":["RequestApproval"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.9.pendingChangeRequest.body.oneOf.5.action.oneOf.0.kind","typeLabel":"enum\u003cstring>"},"approvalGroups":{"type":"array","items":{"type":"object","properties":{"quorum":{"type":"integer","minimum":1,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.9.pendingChangeRequest.body.oneOf.5.action.oneOf.0.approvalGroups.items.[INDEX].quorum","typeLabel":"integer"},"approvers":{"type":"object","properties":{"userId":{"type":"object","properties":{"in":{"type":"array","items":{"type":"string","minLength":1,"uniqueKey":"\\items.items.[INDEX].oneOf.9.pendingChangeRequest.body.oneOf.5.action.oneOf.0.approvalGroups.items.[INDEX].approvers.userId.in.items.[INDEX]","typeLabel":"string"},"minItems":1,"maxItems":100,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.9.pendingChangeRequest.body.oneOf.5.action.oneOf.0.approvalGroups.items.[INDEX].approvers.userId.in","typeLabel":"string[]"}},"required":["in"],"additionalProperties":false,"description":"Users and service accounts who may approve.","uniqueKey":"\\items.items.[INDEX].oneOf.9.pendingChangeRequest.body.oneOf.5.action.oneOf.0.approvalGroups.items.[INDEX].approvers.userId","typeLabel":"object"},"userGroupId":{"type":"object","properties":{"in":{"type":"array","items":{"type":"string","minLength":1,"maxLength":64,"pattern":"^ug-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"User group id.","example":"ug-139tf-f58l8-lsbt6dp47lfsdvgh","uniqueKey":"\\items.items.[INDEX].oneOf.9.pendingChangeRequest.body.oneOf.5.action.oneOf.0.approvalGroups.items.[INDEX].approvers.userGroupId.in.items.[INDEX]","typeLabel":"string"},"minItems":1,"maxItems":100,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.9.pendingChangeRequest.body.oneOf.5.action.oneOf.0.approvalGroups.items.[INDEX].approvers.userGroupId.in","typeLabel":"string[]"}},"required":["in"],"additionalProperties":false,"description":"User groups whose members may approve.","uniqueKey":"\\items.items.[INDEX].oneOf.9.pendingChangeRequest.body.oneOf.5.action.oneOf.0.approvalGroups.items.[INDEX].approvers.userGroupId","typeLabel":"object"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.9.pendingChangeRequest.body.oneOf.5.action.oneOf.0.approvalGroups.items.[INDEX].approvers","typeLabel":"object"},"name":{"type":"string","uniqueKey":"\\items.items.[INDEX].oneOf.9.pendingChangeRequest.body.oneOf.5.action.oneOf.0.approvalGroups.items.[INDEX].name","typeLabel":"string"},"initiatorCanApprove":{"type":"boolean","description":"Whether the initiator of the activity can participate in the approval.","uniqueKey":"\\items.items.[INDEX].oneOf.9.pendingChangeRequest.body.oneOf.5.action.oneOf.0.approvalGroups.items.[INDEX].initiatorCanApprove","typeLabel":"boolean"},"serviceAccountsCanApprove":{"type":"boolean","description":"Whether service accounts can participate in the approval for this group.","uniqueKey":"\\items.items.[INDEX].oneOf.9.pendingChangeRequest.body.oneOf.5.action.oneOf.0.approvalGroups.items.[INDEX].serviceAccountsCanApprove","typeLabel":"boolean"}},"required":["quorum","approvers"],"additionalProperties":false,"uniqueKey":"\\items.items.[INDEX].oneOf.9.pendingChangeRequest.body.oneOf.5.action.oneOf.0.approvalGroups.items.[INDEX]","typeLabel":"object"},"minItems":1,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.9.pendingChangeRequest.body.oneOf.5.action.oneOf.0.approvalGroups","typeLabel":"object[]"},"autoRejectTimeout":{"oneOf":[{"type":"integer","minimum":1,"uniqueKey":"\\items.items.[INDEX].oneOf.9.pendingChangeRequest.body.oneOf.5.action.oneOf.0.autoRejectTimeout.oneOf.0","typeLabel":"integer"},{"type":"null","minimum":1,"uniqueKey":"\\items.items.[INDEX].oneOf.9.pendingChangeRequest.body.oneOf.5.action.oneOf.0.autoRejectTimeout.oneOf.1","typeLabel":"null"}],"uniqueKey":"\\items.items.[INDEX].oneOf.9.pendingChangeRequest.body.oneOf.5.action.oneOf.0.autoRejectTimeout","typeLabel":"integer | null"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.9.pendingChangeRequest.body.oneOf.5.action.oneOf.0","typeLabel":"RequestApproval · object"},{"type":"object","title":"Block","description":"This action means that the activity will be blocked if the policy is triggered.\n\n```json\n{\n \"action\": {\n \"kind\": \"Block\"\n }\n}\n```\n","required":["kind"],"properties":{"kind":{"type":"string","enum":["Block"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.9.pendingChangeRequest.body.oneOf.5.action.oneOf.1.kind","typeLabel":"enum\u003cstring>"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.9.pendingChangeRequest.body.oneOf.5.action.oneOf.1","typeLabel":"Block · object"},{"type":"object","title":"NoAction","description":"\n This action kind means that nothing will happen after policy rule evaluation. It's meant to be used with policy rules \"`ChainalysisTransactionPrescreening`\" or \"`ChainalysisTransactionScreening`\". This action is for when you just want the KYT analysis rule to be run, and then if triggered, those result returned in a `policy.triggered` [Webhook Event](https://docs.dfns.co/api-reference/webhook-events).\n\n```json\n{\n \"action\": {\n \"kind\": \"NoAction\"\n }\n}\n```\n ","required":["kind"],"properties":{"kind":{"type":"string","enum":["NoAction"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.9.pendingChangeRequest.body.oneOf.5.action.oneOf.2.kind","typeLabel":"enum\u003cstring>"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.9.pendingChangeRequest.body.oneOf.5.action.oneOf.2","typeLabel":"NoAction · object"}],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.9.pendingChangeRequest.body.oneOf.5.action","typeLabel":"RequestApproval · object | Block · object | NoAction · object"},"dateCreated":{"type":"string","uniqueKey":"\\items.items.[INDEX].oneOf.9.pendingChangeRequest.body.oneOf.5.dateCreated","typeLabel":"string"},"dateUpdated":{"type":"string","uniqueKey":"\\items.items.[INDEX].oneOf.9.pendingChangeRequest.body.oneOf.5.dateUpdated","typeLabel":"string"},"filters":{"type":"object","properties":{"walletId":{"type":"object","properties":{"in":{"type":"array","items":{"type":"string","minLength":1,"uniqueKey":"\\items.items.[INDEX].oneOf.9.pendingChangeRequest.body.oneOf.5.filters.walletId.in.items.[INDEX]","typeLabel":"string"},"minItems":1,"maxItems":100,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.9.pendingChangeRequest.body.oneOf.5.filters.walletId.in","typeLabel":"string[]"}},"required":["in"],"additionalProperties":false,"uniqueKey":"\\items.items.[INDEX].oneOf.9.pendingChangeRequest.body.oneOf.5.filters.walletId","typeLabel":"object"},"walletTags":{"type":"object","properties":{"hasAny":{"type":"array","items":{"type":"string","minLength":1,"uniqueKey":"\\items.items.[INDEX].oneOf.9.pendingChangeRequest.body.oneOf.5.filters.walletTags.hasAny.items.[INDEX]","typeLabel":"string"},"minItems":1,"maxItems":100,"uniqueKey":"\\items.items.[INDEX].oneOf.9.pendingChangeRequest.body.oneOf.5.filters.walletTags.hasAny","typeLabel":"string[]"},"hasAll":{"type":"array","items":{"type":"string","minLength":1,"uniqueKey":"\\items.items.[INDEX].oneOf.9.pendingChangeRequest.body.oneOf.5.filters.walletTags.hasAll.items.[INDEX]","typeLabel":"string"},"minItems":1,"maxItems":100,"uniqueKey":"\\items.items.[INDEX].oneOf.9.pendingChangeRequest.body.oneOf.5.filters.walletTags.hasAll","typeLabel":"string[]"}},"additionalProperties":false,"uniqueKey":"\\items.items.[INDEX].oneOf.9.pendingChangeRequest.body.oneOf.5.filters.walletTags","typeLabel":"object"},"keyId":{"type":"object","properties":{"in":{"type":"array","items":{"type":"string","minLength":1,"maxLength":64,"pattern":"^key-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"Key id.","example":"key-01snl-t56gb-j8tsok0vn802p80i","uniqueKey":"\\items.items.[INDEX].oneOf.9.pendingChangeRequest.body.oneOf.5.filters.keyId.in.items.[INDEX]","typeLabel":"string"},"minItems":1,"maxItems":100,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.9.pendingChangeRequest.body.oneOf.5.filters.keyId.in","typeLabel":"string[]"}},"required":["in"],"additionalProperties":false,"uniqueKey":"\\items.items.[INDEX].oneOf.9.pendingChangeRequest.body.oneOf.5.filters.keyId","typeLabel":"object"},"keyStoreId":{"type":"object","properties":{"in":{"type":"array","items":{"type":"string","minLength":1,"maxLength":64,"pattern":"^store-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"Key store id.","example":"store-425nf-ebf0a-qq22t6qra51tj8j0","uniqueKey":"\\items.items.[INDEX].oneOf.9.pendingChangeRequest.body.oneOf.5.filters.keyStoreId.in.items.[INDEX]","typeLabel":"string"},"minItems":1,"maxItems":100,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.9.pendingChangeRequest.body.oneOf.5.filters.keyStoreId.in","typeLabel":"string[]"}},"required":["in"],"additionalProperties":false,"uniqueKey":"\\items.items.[INDEX].oneOf.9.pendingChangeRequest.body.oneOf.5.filters.keyStoreId","typeLabel":"object"}},"additionalProperties":false,"uniqueKey":"\\items.items.[INDEX].oneOf.9.pendingChangeRequest.body.oneOf.5.filters","typeLabel":"object"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.9.pendingChangeRequest.body.oneOf.5","typeLabel":"Wallets:Sign · object"},{"type":"object","title":"Wallets:IncomingTransaction","required":["id","name","status","activityKind","rule","action"],"properties":{"id":{"type":"string","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.9.pendingChangeRequest.body.oneOf.6.id","typeLabel":"string"},"name":{"type":"string","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.9.pendingChangeRequest.body.oneOf.6.name","typeLabel":"string"},"status":{"type":"string","enum":["Active","Archived"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.9.pendingChangeRequest.body.oneOf.6.status","typeLabel":"enum\u003cstring>"},"activityKind":{"type":"string","enum":["Wallets:IncomingTransaction"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.9.pendingChangeRequest.body.oneOf.6.activityKind","typeLabel":"enum\u003cstring>"},"rule":{"type":"object","title":"ChainalysisTransactionScreening","description":"\n\u003cInfo>\nThis rule can only be used once the Chainalysis integration is activated from the Dfns dashboard settings. (see more on [Chainalysis](https://docs.dfns.co/integrations/aml-kyt/chainalysis) integration page).\n\u003c/Info>\n\nThis rule can be used on a policy of `activityKind` = `Wallets:IncomingTransaction`, and with the action kind `NoAction`. It's a rule based on Chainalysis KYT integration (Know-Your-Transaction). Upon an incoming transaction detectedby our indexers, we will [register the transfer with Chainalysis](https://docs.chainalysis.com/api/kyt/#registration-register-a-transfer), and fetch the results of the analysis (alerts \u0026 exposures detected). Based on the results, and the configuration of this rule, the policy will be triggered.\n\nThe shape of the rule is almost like the `ChainalysisTransactionPrescreening` rule, expect the the `address` property is not supported.\n\n```json\n{\n \"rule\": {\n \"kind\": \"ChainalysisTransactionPrescreening\",\n \"configuration\": {\n \"alerts\": {\n \"alertLevel\": \"LOW\",\n \"categoryIds\": []\n },\n \"exposures\": {\n \"direct\": {\n \"categoryIds\": []\n }\n },\n \"fallbackBehaviours\": {\n \"skipUnscreenableTransaction\": false,\n \"skipUnsupportedNetwork\": false,\n \"skipUnsupportedAsset\": false,\n \"skipChainalysisFailure\": false\n }\n }\n }\n}\n```\n\n**Configuration**\n\nPlease refer to the configuration for the `ChainalysisTransactionPrescreening` rule.\n","required":["kind","configuration"],"properties":{"kind":{"type":"string","enum":["ChainalysisTransactionScreening"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.9.pendingChangeRequest.body.oneOf.6.rule.kind","typeLabel":"enum\u003cstring>"},"configuration":{"type":"object","properties":{"alerts":{"type":"object","properties":{"alertLevel":{"type":"string","enum":["LOW","MEDIUM","HIGH","SEVERE"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.9.pendingChangeRequest.body.oneOf.6.rule.configuration.alerts.alertLevel","typeLabel":"enum\u003cstring>"},"categoryIds":{"type":"array","items":{"type":"integer","exclusiveMinimum":0,"uniqueKey":"\\items.items.[INDEX].oneOf.9.pendingChangeRequest.body.oneOf.6.rule.configuration.alerts.categoryIds.items.[INDEX]","typeLabel":"integer"},"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.9.pendingChangeRequest.body.oneOf.6.rule.configuration.alerts.categoryIds","typeLabel":"integer[]"}},"required":["alertLevel","categoryIds"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.9.pendingChangeRequest.body.oneOf.6.rule.configuration.alerts","typeLabel":"object"},"exposures":{"type":"object","properties":{"direct":{"type":"object","properties":{"categoryIds":{"type":"array","items":{"type":"integer","exclusiveMinimum":0,"uniqueKey":"\\items.items.[INDEX].oneOf.9.pendingChangeRequest.body.oneOf.6.rule.configuration.exposures.direct.categoryIds.items.[INDEX]","typeLabel":"integer"},"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.9.pendingChangeRequest.body.oneOf.6.rule.configuration.exposures.direct.categoryIds","typeLabel":"integer[]"}},"required":["categoryIds"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.9.pendingChangeRequest.body.oneOf.6.rule.configuration.exposures.direct","typeLabel":"object"}},"required":["direct"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.9.pendingChangeRequest.body.oneOf.6.rule.configuration.exposures","typeLabel":"object"},"fallbackBehaviours":{"type":"object","properties":{"skipUnscreenableTransaction":{"type":"boolean","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.9.pendingChangeRequest.body.oneOf.6.rule.configuration.fallbackBehaviours.skipUnscreenableTransaction","typeLabel":"boolean"},"skipUnsupportedNetwork":{"type":"boolean","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.9.pendingChangeRequest.body.oneOf.6.rule.configuration.fallbackBehaviours.skipUnsupportedNetwork","typeLabel":"boolean"},"skipUnsupportedAsset":{"type":"boolean","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.9.pendingChangeRequest.body.oneOf.6.rule.configuration.fallbackBehaviours.skipUnsupportedAsset","typeLabel":"boolean"},"skipChainalysisFailure":{"type":"boolean","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.9.pendingChangeRequest.body.oneOf.6.rule.configuration.fallbackBehaviours.skipChainalysisFailure","typeLabel":"boolean"}},"required":["skipUnscreenableTransaction","skipUnsupportedNetwork","skipUnsupportedAsset","skipChainalysisFailure"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.9.pendingChangeRequest.body.oneOf.6.rule.configuration.fallbackBehaviours","typeLabel":"object"},"userIdTemplate":{"type":"string","minLength":1,"maxLength":50,"pattern":"^([a-zA-Z0-9_:-]|{wallet\\.id}|{wallet\\.externalId})+$","default":"dfns","description":"**Deprecated** — set `userIdTemplate` on the Chainalysis integration setting instead; when set there, the integration-level template takes precedence over this one.\n\nValue sent to Chainalysis as the \"user ID\". Used by Chainalysis for grouping transaction screenings.\n \nThis template can include variables, included in brackets. The following variables are currently supported: `{wallet.id}` and `{wallet.externalId}`.\nAs an example, if you set `userIdTemplate: \"dfns:{wallet.id}_{wallet.externalId}\"`, when your wallet receives a transaction that gets screened by a Chainalysis policy, the \"user ID\" sent to Chainalysis will be `dfns:wa-xxx_yyy` (`wa-xxx` being the wallet ID, and `yyy` being the wallet external ID).","uniqueKey":"\\items.items.[INDEX].oneOf.9.pendingChangeRequest.body.oneOf.6.rule.configuration.userIdTemplate","typeLabel":"string"}},"required":["alerts","exposures","fallbackBehaviours"],"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.9.pendingChangeRequest.body.oneOf.6.rule.configuration","typeLabel":"object"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.9.pendingChangeRequest.body.oneOf.6.rule","typeLabel":"ChainalysisTransactionScreening · object"},"action":{"type":"object","title":"NoAction","description":"\n This action kind means that nothing will happen after policy rule evaluation. It's meant to be used with policy rules \"`ChainalysisTransactionPrescreening`\" or \"`ChainalysisTransactionScreening`\". This action is for when you just want the KYT analysis rule to be run, and then if triggered, those result returned in a `policy.triggered` [Webhook Event](https://docs.dfns.co/api-reference/webhook-events).\n\n```json\n{\n \"action\": {\n \"kind\": \"NoAction\"\n }\n}\n```\n ","required":["kind"],"properties":{"kind":{"type":"string","enum":["NoAction"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.9.pendingChangeRequest.body.oneOf.6.action.kind","typeLabel":"enum\u003cstring>"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.9.pendingChangeRequest.body.oneOf.6.action","typeLabel":"NoAction · object"},"dateCreated":{"type":"string","uniqueKey":"\\items.items.[INDEX].oneOf.9.pendingChangeRequest.body.oneOf.6.dateCreated","typeLabel":"string"},"dateUpdated":{"type":"string","uniqueKey":"\\items.items.[INDEX].oneOf.9.pendingChangeRequest.body.oneOf.6.dateUpdated","typeLabel":"string"},"filters":{"type":"object","properties":{"walletId":{"type":"object","properties":{"in":{"type":"array","items":{"type":"string","minLength":1,"uniqueKey":"\\items.items.[INDEX].oneOf.9.pendingChangeRequest.body.oneOf.6.filters.walletId.in.items.[INDEX]","typeLabel":"string"},"minItems":1,"maxItems":100,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.9.pendingChangeRequest.body.oneOf.6.filters.walletId.in","typeLabel":"string[]"}},"required":["in"],"additionalProperties":false,"uniqueKey":"\\items.items.[INDEX].oneOf.9.pendingChangeRequest.body.oneOf.6.filters.walletId","typeLabel":"object"},"walletTags":{"type":"object","properties":{"hasAny":{"type":"array","items":{"type":"string","minLength":1,"uniqueKey":"\\items.items.[INDEX].oneOf.9.pendingChangeRequest.body.oneOf.6.filters.walletTags.hasAny.items.[INDEX]","typeLabel":"string"},"minItems":1,"maxItems":100,"uniqueKey":"\\items.items.[INDEX].oneOf.9.pendingChangeRequest.body.oneOf.6.filters.walletTags.hasAny","typeLabel":"string[]"},"hasAll":{"type":"array","items":{"type":"string","minLength":1,"uniqueKey":"\\items.items.[INDEX].oneOf.9.pendingChangeRequest.body.oneOf.6.filters.walletTags.hasAll.items.[INDEX]","typeLabel":"string"},"minItems":1,"maxItems":100,"uniqueKey":"\\items.items.[INDEX].oneOf.9.pendingChangeRequest.body.oneOf.6.filters.walletTags.hasAll","typeLabel":"string[]"}},"additionalProperties":false,"uniqueKey":"\\items.items.[INDEX].oneOf.9.pendingChangeRequest.body.oneOf.6.filters.walletTags","typeLabel":"object"},"keyId":{"type":"object","properties":{"in":{"type":"array","items":{"type":"string","minLength":1,"maxLength":64,"pattern":"^key-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"Key id.","example":"key-01snl-t56gb-j8tsok0vn802p80i","uniqueKey":"\\items.items.[INDEX].oneOf.9.pendingChangeRequest.body.oneOf.6.filters.keyId.in.items.[INDEX]","typeLabel":"string"},"minItems":1,"maxItems":100,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.9.pendingChangeRequest.body.oneOf.6.filters.keyId.in","typeLabel":"string[]"}},"required":["in"],"additionalProperties":false,"uniqueKey":"\\items.items.[INDEX].oneOf.9.pendingChangeRequest.body.oneOf.6.filters.keyId","typeLabel":"object"},"keyStoreId":{"type":"object","properties":{"in":{"type":"array","items":{"type":"string","minLength":1,"maxLength":64,"pattern":"^store-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"Key store id.","example":"store-425nf-ebf0a-qq22t6qra51tj8j0","uniqueKey":"\\items.items.[INDEX].oneOf.9.pendingChangeRequest.body.oneOf.6.filters.keyStoreId.in.items.[INDEX]","typeLabel":"string"},"minItems":1,"maxItems":100,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.9.pendingChangeRequest.body.oneOf.6.filters.keyStoreId.in","typeLabel":"string[]"}},"required":["in"],"additionalProperties":false,"uniqueKey":"\\items.items.[INDEX].oneOf.9.pendingChangeRequest.body.oneOf.6.filters.keyStoreId","typeLabel":"object"}},"additionalProperties":false,"uniqueKey":"\\items.items.[INDEX].oneOf.9.pendingChangeRequest.body.oneOf.6.filters","typeLabel":"object"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.9.pendingChangeRequest.body.oneOf.6","typeLabel":"Wallets:IncomingTransaction · object"},{"type":"object","title":"Vaults:ReleaseQuarantine","required":["id","name","status","activityKind","rule","action"],"properties":{"id":{"type":"string","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.9.pendingChangeRequest.body.oneOf.7.id","typeLabel":"string"},"name":{"type":"string","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.9.pendingChangeRequest.body.oneOf.7.name","typeLabel":"string"},"status":{"type":"string","enum":["Active","Archived"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.9.pendingChangeRequest.body.oneOf.7.status","typeLabel":"enum\u003cstring>"},"activityKind":{"type":"string","enum":["Vaults:ReleaseQuarantine"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.9.pendingChangeRequest.body.oneOf.7.activityKind","typeLabel":"enum\u003cstring>"},"rule":{"oneOf":[{"type":"object","title":"AlwaysTrigger","description":"This rule will always be triggered, meaning that if this rule is defined on a policy, the policy will always trigger the policy action, regardless of the activity details.","required":["kind"],"properties":{"kind":{"type":"string","enum":["AlwaysTrigger"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.9.pendingChangeRequest.body.oneOf.7.rule.oneOf.0.kind","typeLabel":"enum\u003cstring>"},"configuration":{"type":"object","properties":{},"additionalProperties":false,"uniqueKey":"\\items.items.[INDEX].oneOf.9.pendingChangeRequest.body.oneOf.7.rule.oneOf.0.configuration","typeLabel":"object"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.9.pendingChangeRequest.body.oneOf.7.rule.oneOf.0","typeLabel":"AlwaysTrigger · object"},{"type":"object","title":"ChainalysisQuarantineScreening","description":"\n\u003cInfo>\nThis rule can only be used once the Chainalysis integration is activated from the Dfns dashboard settings. (see more on [Chainalysis](https://docs.dfns.co/integrations/aml-kyt/chainalysis) integration page).\n\u003c/Info>\n\nThis rule can be used on a policy of `activityKind` = `Vaults:ReleaseQuarantine`. When a quarantined vault deposit was screened by Chainalysis KYT, the screening result (alerts \u0026 direct exposure) is stored with the quarantine. When a release of the quarantined funds is requested, this rule evaluates that **stored** result — no new Chainalysis call is made. Based on the stored result and the configuration of this rule, the policy will be triggered.\n\nIf the quarantine has **no stored KYT result** (the result was not received yet, the network/asset is not supported by the Chainalysis integration, or screening failed), the rule **always triggers** (fail closed): the release then follows the policy action (approval or block).\n\n```json\n{\n \"rule\": {\n \"kind\": \"ChainalysisQuarantineScreening\",\n \"configuration\": {\n \"alerts\": {\n \"alertLevel\": \"LOW\",\n \"categoryIds\": []\n },\n \"exposures\": {\n \"direct\": {\n \"categoryIds\": []\n }\n }\n }\n }\n}\n```\n\n**Configuration**\n\n| Property | Type | Description |\n| --- | --- | --- |\n| `alerts`\u003cbr>\u003cbr>`.alertLevel`* | `string` | Minimum alert level above which the rule should trigger, if any alert was returned in the stored Chainalysis results. Can be `LOW`, `MEDIUM`, `HIGH`, or `SEVERE` |\n| `alerts`\u003cbr>\u003cbr>`.categoryIds`* | list of integers | List of Chainalysis category IDs (see [here](https://docs.chainalysis.com/api/kyt/#categories)). If you leave this list empty, alerts of any category will trigger the rule. Otherwise, if you only want the rule to trigger on specific categories, you can specify some in the list. |\n| `exposures`\u003cbr>\u003cbr>`.direct`\u003cbr>\u003cbr>`.categoryIds`* | list of integers | List of Chainalysis category IDs (see [here](https://docs.chainalysis.com/api/kyt/#categories)). If you leave this list empty, a direct exposure of any category in the stored results will trigger the rule. Otherwise, if you only want the rule to trigger on specific categories, you can specify some in the list. |\n","required":["kind","configuration"],"properties":{"kind":{"type":"string","enum":["ChainalysisQuarantineScreening"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.9.pendingChangeRequest.body.oneOf.7.rule.oneOf.1.kind","typeLabel":"enum\u003cstring>"},"configuration":{"type":"object","properties":{"alerts":{"type":"object","properties":{"alertLevel":{"type":"string","enum":["LOW","MEDIUM","HIGH","SEVERE"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.9.pendingChangeRequest.body.oneOf.7.rule.oneOf.1.configuration.alerts.alertLevel","typeLabel":"enum\u003cstring>"},"categoryIds":{"type":"array","items":{"type":"integer","exclusiveMinimum":0,"uniqueKey":"\\items.items.[INDEX].oneOf.9.pendingChangeRequest.body.oneOf.7.rule.oneOf.1.configuration.alerts.categoryIds.items.[INDEX]","typeLabel":"integer"},"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.9.pendingChangeRequest.body.oneOf.7.rule.oneOf.1.configuration.alerts.categoryIds","typeLabel":"integer[]"}},"required":["alertLevel","categoryIds"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.9.pendingChangeRequest.body.oneOf.7.rule.oneOf.1.configuration.alerts","typeLabel":"object"},"exposures":{"type":"object","properties":{"direct":{"type":"object","properties":{"categoryIds":{"type":"array","items":{"type":"integer","exclusiveMinimum":0,"uniqueKey":"\\items.items.[INDEX].oneOf.9.pendingChangeRequest.body.oneOf.7.rule.oneOf.1.configuration.exposures.direct.categoryIds.items.[INDEX]","typeLabel":"integer"},"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.9.pendingChangeRequest.body.oneOf.7.rule.oneOf.1.configuration.exposures.direct.categoryIds","typeLabel":"integer[]"}},"required":["categoryIds"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.9.pendingChangeRequest.body.oneOf.7.rule.oneOf.1.configuration.exposures.direct","typeLabel":"object"}},"required":["direct"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.9.pendingChangeRequest.body.oneOf.7.rule.oneOf.1.configuration.exposures","typeLabel":"object"}},"required":["alerts","exposures"],"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.9.pendingChangeRequest.body.oneOf.7.rule.oneOf.1.configuration","typeLabel":"object"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.9.pendingChangeRequest.body.oneOf.7.rule.oneOf.1","typeLabel":"ChainalysisQuarantineScreening · object"}],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.9.pendingChangeRequest.body.oneOf.7.rule","typeLabel":"AlwaysTrigger · object | ChainalysisQuarantineScreening · object"},"action":{"oneOf":[{"type":"object","title":"RequestApproval","description":"\nThis action means that activity will first require an Approval process to be completed before it can be executed (or be aborted if someone rejects it during the approval process).\n\nOne or several groups of approvers need to be specified. These groups define who is allowed to approve / reject an activity.\n\nThe activity will only be executed if all approver groups reach their \"quorum\" of approvals. Otherwise, if any one user within any approver group rejects, then the activity is aborted and the call is not executed.\n\nThe example below shows a `RequestApproval` action, configured with one approval group requiring 2 approvals amongst three specific users.\n\n```json\n{\n \"action\": {\n \"kind\": \"RequestApproval\",\n \"autoRejectTimeout\": 60, // minutes\n \"approvalGroups\": [\n {\n \"name\": \"Admins\",\n \"quorum\": 2, // only 2 approvers required in that group \n \"approvers\": {\n \"userId\": {\n \"in\": [\"us-...1\", \"us-...2\", \"us-...3\"],\n }\n }\n }\n ],\n\n }\n}\n```\n\n**Don't lock yourself up**\n\nBy default, users cannot approve an activity they initiated themselves, even if they are in an approval group. To allow this, you must set `initiatorCanApprove: true`.\n\n*Example 1:* For any wallet transfer, a policy is setup to require approval from **1 specific admin user** (eg. the CEO). `initiatorCanApprove` was not set to `true`. If the CEO himself initiates a transfer, no-one can approve his transfer and it's stuck.\n\n*Example 2:* Company has only 3 users. A policy is setup to require approval from **any 3 users** (`quorum: 3`) for any modification of a policy. `initiatorCanApprove` was not set to `true`. In this case, they are locked, and the policy cannot be modified: whoever requests a modification cannot approve, and the policy is therefore always missing one approver. To unlock, they would need to invite a new user and give him the rights to approve as well.\n ","required":["kind","approvalGroups"],"properties":{"kind":{"type":"string","enum":["RequestApproval"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.9.pendingChangeRequest.body.oneOf.7.action.oneOf.0.kind","typeLabel":"enum\u003cstring>"},"approvalGroups":{"type":"array","items":{"type":"object","properties":{"quorum":{"type":"integer","minimum":1,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.9.pendingChangeRequest.body.oneOf.7.action.oneOf.0.approvalGroups.items.[INDEX].quorum","typeLabel":"integer"},"approvers":{"type":"object","properties":{"userId":{"type":"object","properties":{"in":{"type":"array","items":{"type":"string","minLength":1,"uniqueKey":"\\items.items.[INDEX].oneOf.9.pendingChangeRequest.body.oneOf.7.action.oneOf.0.approvalGroups.items.[INDEX].approvers.userId.in.items.[INDEX]","typeLabel":"string"},"minItems":1,"maxItems":100,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.9.pendingChangeRequest.body.oneOf.7.action.oneOf.0.approvalGroups.items.[INDEX].approvers.userId.in","typeLabel":"string[]"}},"required":["in"],"additionalProperties":false,"description":"Users and service accounts who may approve.","uniqueKey":"\\items.items.[INDEX].oneOf.9.pendingChangeRequest.body.oneOf.7.action.oneOf.0.approvalGroups.items.[INDEX].approvers.userId","typeLabel":"object"},"userGroupId":{"type":"object","properties":{"in":{"type":"array","items":{"type":"string","minLength":1,"maxLength":64,"pattern":"^ug-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"User group id.","example":"ug-139tf-f58l8-lsbt6dp47lfsdvgh","uniqueKey":"\\items.items.[INDEX].oneOf.9.pendingChangeRequest.body.oneOf.7.action.oneOf.0.approvalGroups.items.[INDEX].approvers.userGroupId.in.items.[INDEX]","typeLabel":"string"},"minItems":1,"maxItems":100,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.9.pendingChangeRequest.body.oneOf.7.action.oneOf.0.approvalGroups.items.[INDEX].approvers.userGroupId.in","typeLabel":"string[]"}},"required":["in"],"additionalProperties":false,"description":"User groups whose members may approve.","uniqueKey":"\\items.items.[INDEX].oneOf.9.pendingChangeRequest.body.oneOf.7.action.oneOf.0.approvalGroups.items.[INDEX].approvers.userGroupId","typeLabel":"object"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.9.pendingChangeRequest.body.oneOf.7.action.oneOf.0.approvalGroups.items.[INDEX].approvers","typeLabel":"object"},"name":{"type":"string","uniqueKey":"\\items.items.[INDEX].oneOf.9.pendingChangeRequest.body.oneOf.7.action.oneOf.0.approvalGroups.items.[INDEX].name","typeLabel":"string"},"initiatorCanApprove":{"type":"boolean","description":"Whether the initiator of the activity can participate in the approval.","uniqueKey":"\\items.items.[INDEX].oneOf.9.pendingChangeRequest.body.oneOf.7.action.oneOf.0.approvalGroups.items.[INDEX].initiatorCanApprove","typeLabel":"boolean"},"serviceAccountsCanApprove":{"type":"boolean","description":"Whether service accounts can participate in the approval for this group.","uniqueKey":"\\items.items.[INDEX].oneOf.9.pendingChangeRequest.body.oneOf.7.action.oneOf.0.approvalGroups.items.[INDEX].serviceAccountsCanApprove","typeLabel":"boolean"}},"required":["quorum","approvers"],"additionalProperties":false,"uniqueKey":"\\items.items.[INDEX].oneOf.9.pendingChangeRequest.body.oneOf.7.action.oneOf.0.approvalGroups.items.[INDEX]","typeLabel":"object"},"minItems":1,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.9.pendingChangeRequest.body.oneOf.7.action.oneOf.0.approvalGroups","typeLabel":"object[]"},"autoRejectTimeout":{"oneOf":[{"type":"integer","minimum":1,"uniqueKey":"\\items.items.[INDEX].oneOf.9.pendingChangeRequest.body.oneOf.7.action.oneOf.0.autoRejectTimeout.oneOf.0","typeLabel":"integer"},{"type":"null","minimum":1,"uniqueKey":"\\items.items.[INDEX].oneOf.9.pendingChangeRequest.body.oneOf.7.action.oneOf.0.autoRejectTimeout.oneOf.1","typeLabel":"null"}],"uniqueKey":"\\items.items.[INDEX].oneOf.9.pendingChangeRequest.body.oneOf.7.action.oneOf.0.autoRejectTimeout","typeLabel":"integer | null"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.9.pendingChangeRequest.body.oneOf.7.action.oneOf.0","typeLabel":"RequestApproval · object"},{"type":"object","title":"Block","description":"This action means that the activity will be blocked if the policy is triggered.\n\n```json\n{\n \"action\": {\n \"kind\": \"Block\"\n }\n}\n```\n","required":["kind"],"properties":{"kind":{"type":"string","enum":["Block"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.9.pendingChangeRequest.body.oneOf.7.action.oneOf.1.kind","typeLabel":"enum\u003cstring>"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.9.pendingChangeRequest.body.oneOf.7.action.oneOf.1","typeLabel":"Block · object"}],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.9.pendingChangeRequest.body.oneOf.7.action","typeLabel":"RequestApproval · object | Block · object"},"dateCreated":{"type":"string","uniqueKey":"\\items.items.[INDEX].oneOf.9.pendingChangeRequest.body.oneOf.7.dateCreated","typeLabel":"string"},"dateUpdated":{"type":"string","uniqueKey":"\\items.items.[INDEX].oneOf.9.pendingChangeRequest.body.oneOf.7.dateUpdated","typeLabel":"string"},"filters":{"type":"object","properties":{"vaultId":{"type":"object","properties":{"in":{"type":"array","items":{"type":"string","minLength":1,"uniqueKey":"\\items.items.[INDEX].oneOf.9.pendingChangeRequest.body.oneOf.7.filters.vaultId.in.items.[INDEX]","typeLabel":"string"},"minItems":1,"maxItems":100,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.9.pendingChangeRequest.body.oneOf.7.filters.vaultId.in","typeLabel":"string[]"}},"required":["in"],"additionalProperties":false,"uniqueKey":"\\items.items.[INDEX].oneOf.9.pendingChangeRequest.body.oneOf.7.filters.vaultId","typeLabel":"object"},"vaultTags":{"type":"object","properties":{"hasAny":{"type":"array","items":{"type":"string","minLength":1,"uniqueKey":"\\items.items.[INDEX].oneOf.9.pendingChangeRequest.body.oneOf.7.filters.vaultTags.hasAny.items.[INDEX]","typeLabel":"string"},"minItems":1,"maxItems":100,"uniqueKey":"\\items.items.[INDEX].oneOf.9.pendingChangeRequest.body.oneOf.7.filters.vaultTags.hasAny","typeLabel":"string[]"},"hasAll":{"type":"array","items":{"type":"string","minLength":1,"uniqueKey":"\\items.items.[INDEX].oneOf.9.pendingChangeRequest.body.oneOf.7.filters.vaultTags.hasAll.items.[INDEX]","typeLabel":"string"},"minItems":1,"maxItems":100,"uniqueKey":"\\items.items.[INDEX].oneOf.9.pendingChangeRequest.body.oneOf.7.filters.vaultTags.hasAll","typeLabel":"string[]"}},"additionalProperties":false,"uniqueKey":"\\items.items.[INDEX].oneOf.9.pendingChangeRequest.body.oneOf.7.filters.vaultTags","typeLabel":"object"}},"additionalProperties":false,"uniqueKey":"\\items.items.[INDEX].oneOf.9.pendingChangeRequest.body.oneOf.7.filters","typeLabel":"object"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.9.pendingChangeRequest.body.oneOf.7","typeLabel":"Vaults:ReleaseQuarantine · object"},{"type":"object","title":"Vaults:CreateLock","required":["id","name","status","activityKind","rule","action"],"properties":{"id":{"type":"string","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.9.pendingChangeRequest.body.oneOf.8.id","typeLabel":"string"},"name":{"type":"string","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.9.pendingChangeRequest.body.oneOf.8.name","typeLabel":"string"},"status":{"type":"string","enum":["Active","Archived"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.9.pendingChangeRequest.body.oneOf.8.status","typeLabel":"enum\u003cstring>"},"activityKind":{"type":"string","enum":["Vaults:CreateLock"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.9.pendingChangeRequest.body.oneOf.8.activityKind","typeLabel":"enum\u003cstring>"},"rule":{"type":"object","title":"AlwaysTrigger","description":"This rule will always be triggered, meaning that if this rule is defined on a policy, the policy will always trigger the policy action, regardless of the activity details.","required":["kind"],"properties":{"kind":{"type":"string","enum":["AlwaysTrigger"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.9.pendingChangeRequest.body.oneOf.8.rule.kind","typeLabel":"enum\u003cstring>"},"configuration":{"type":"object","properties":{},"additionalProperties":false,"uniqueKey":"\\items.items.[INDEX].oneOf.9.pendingChangeRequest.body.oneOf.8.rule.configuration","typeLabel":"object"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.9.pendingChangeRequest.body.oneOf.8.rule","typeLabel":"AlwaysTrigger · object"},"action":{"oneOf":[{"type":"object","title":"RequestApproval","description":"\nThis action means that activity will first require an Approval process to be completed before it can be executed (or be aborted if someone rejects it during the approval process).\n\nOne or several groups of approvers need to be specified. These groups define who is allowed to approve / reject an activity.\n\nThe activity will only be executed if all approver groups reach their \"quorum\" of approvals. Otherwise, if any one user within any approver group rejects, then the activity is aborted and the call is not executed.\n\nThe example below shows a `RequestApproval` action, configured with one approval group requiring 2 approvals amongst three specific users.\n\n```json\n{\n \"action\": {\n \"kind\": \"RequestApproval\",\n \"autoRejectTimeout\": 60, // minutes\n \"approvalGroups\": [\n {\n \"name\": \"Admins\",\n \"quorum\": 2, // only 2 approvers required in that group \n \"approvers\": {\n \"userId\": {\n \"in\": [\"us-...1\", \"us-...2\", \"us-...3\"],\n }\n }\n }\n ],\n\n }\n}\n```\n\n**Don't lock yourself up**\n\nBy default, users cannot approve an activity they initiated themselves, even if they are in an approval group. To allow this, you must set `initiatorCanApprove: true`.\n\n*Example 1:* For any wallet transfer, a policy is setup to require approval from **1 specific admin user** (eg. the CEO). `initiatorCanApprove` was not set to `true`. If the CEO himself initiates a transfer, no-one can approve his transfer and it's stuck.\n\n*Example 2:* Company has only 3 users. A policy is setup to require approval from **any 3 users** (`quorum: 3`) for any modification of a policy. `initiatorCanApprove` was not set to `true`. In this case, they are locked, and the policy cannot be modified: whoever requests a modification cannot approve, and the policy is therefore always missing one approver. To unlock, they would need to invite a new user and give him the rights to approve as well.\n ","required":["kind","approvalGroups"],"properties":{"kind":{"type":"string","enum":["RequestApproval"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.9.pendingChangeRequest.body.oneOf.8.action.oneOf.0.kind","typeLabel":"enum\u003cstring>"},"approvalGroups":{"type":"array","items":{"type":"object","properties":{"quorum":{"type":"integer","minimum":1,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.9.pendingChangeRequest.body.oneOf.8.action.oneOf.0.approvalGroups.items.[INDEX].quorum","typeLabel":"integer"},"approvers":{"type":"object","properties":{"userId":{"type":"object","properties":{"in":{"type":"array","items":{"type":"string","minLength":1,"uniqueKey":"\\items.items.[INDEX].oneOf.9.pendingChangeRequest.body.oneOf.8.action.oneOf.0.approvalGroups.items.[INDEX].approvers.userId.in.items.[INDEX]","typeLabel":"string"},"minItems":1,"maxItems":100,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.9.pendingChangeRequest.body.oneOf.8.action.oneOf.0.approvalGroups.items.[INDEX].approvers.userId.in","typeLabel":"string[]"}},"required":["in"],"additionalProperties":false,"description":"Users and service accounts who may approve.","uniqueKey":"\\items.items.[INDEX].oneOf.9.pendingChangeRequest.body.oneOf.8.action.oneOf.0.approvalGroups.items.[INDEX].approvers.userId","typeLabel":"object"},"userGroupId":{"type":"object","properties":{"in":{"type":"array","items":{"type":"string","minLength":1,"maxLength":64,"pattern":"^ug-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"User group id.","example":"ug-139tf-f58l8-lsbt6dp47lfsdvgh","uniqueKey":"\\items.items.[INDEX].oneOf.9.pendingChangeRequest.body.oneOf.8.action.oneOf.0.approvalGroups.items.[INDEX].approvers.userGroupId.in.items.[INDEX]","typeLabel":"string"},"minItems":1,"maxItems":100,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.9.pendingChangeRequest.body.oneOf.8.action.oneOf.0.approvalGroups.items.[INDEX].approvers.userGroupId.in","typeLabel":"string[]"}},"required":["in"],"additionalProperties":false,"description":"User groups whose members may approve.","uniqueKey":"\\items.items.[INDEX].oneOf.9.pendingChangeRequest.body.oneOf.8.action.oneOf.0.approvalGroups.items.[INDEX].approvers.userGroupId","typeLabel":"object"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.9.pendingChangeRequest.body.oneOf.8.action.oneOf.0.approvalGroups.items.[INDEX].approvers","typeLabel":"object"},"name":{"type":"string","uniqueKey":"\\items.items.[INDEX].oneOf.9.pendingChangeRequest.body.oneOf.8.action.oneOf.0.approvalGroups.items.[INDEX].name","typeLabel":"string"},"initiatorCanApprove":{"type":"boolean","description":"Whether the initiator of the activity can participate in the approval.","uniqueKey":"\\items.items.[INDEX].oneOf.9.pendingChangeRequest.body.oneOf.8.action.oneOf.0.approvalGroups.items.[INDEX].initiatorCanApprove","typeLabel":"boolean"},"serviceAccountsCanApprove":{"type":"boolean","description":"Whether service accounts can participate in the approval for this group.","uniqueKey":"\\items.items.[INDEX].oneOf.9.pendingChangeRequest.body.oneOf.8.action.oneOf.0.approvalGroups.items.[INDEX].serviceAccountsCanApprove","typeLabel":"boolean"}},"required":["quorum","approvers"],"additionalProperties":false,"uniqueKey":"\\items.items.[INDEX].oneOf.9.pendingChangeRequest.body.oneOf.8.action.oneOf.0.approvalGroups.items.[INDEX]","typeLabel":"object"},"minItems":1,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.9.pendingChangeRequest.body.oneOf.8.action.oneOf.0.approvalGroups","typeLabel":"object[]"},"autoRejectTimeout":{"oneOf":[{"type":"integer","minimum":1,"uniqueKey":"\\items.items.[INDEX].oneOf.9.pendingChangeRequest.body.oneOf.8.action.oneOf.0.autoRejectTimeout.oneOf.0","typeLabel":"integer"},{"type":"null","minimum":1,"uniqueKey":"\\items.items.[INDEX].oneOf.9.pendingChangeRequest.body.oneOf.8.action.oneOf.0.autoRejectTimeout.oneOf.1","typeLabel":"null"}],"uniqueKey":"\\items.items.[INDEX].oneOf.9.pendingChangeRequest.body.oneOf.8.action.oneOf.0.autoRejectTimeout","typeLabel":"integer | null"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.9.pendingChangeRequest.body.oneOf.8.action.oneOf.0","typeLabel":"RequestApproval · object"},{"type":"object","title":"Block","description":"This action means that the activity will be blocked if the policy is triggered.\n\n```json\n{\n \"action\": {\n \"kind\": \"Block\"\n }\n}\n```\n","required":["kind"],"properties":{"kind":{"type":"string","enum":["Block"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.9.pendingChangeRequest.body.oneOf.8.action.oneOf.1.kind","typeLabel":"enum\u003cstring>"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.9.pendingChangeRequest.body.oneOf.8.action.oneOf.1","typeLabel":"Block · object"}],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.9.pendingChangeRequest.body.oneOf.8.action","typeLabel":"RequestApproval · object | Block · object"},"dateCreated":{"type":"string","uniqueKey":"\\items.items.[INDEX].oneOf.9.pendingChangeRequest.body.oneOf.8.dateCreated","typeLabel":"string"},"dateUpdated":{"type":"string","uniqueKey":"\\items.items.[INDEX].oneOf.9.pendingChangeRequest.body.oneOf.8.dateUpdated","typeLabel":"string"},"filters":{"type":"object","properties":{"vaultId":{"type":"object","properties":{"in":{"type":"array","items":{"type":"string","minLength":1,"uniqueKey":"\\items.items.[INDEX].oneOf.9.pendingChangeRequest.body.oneOf.8.filters.vaultId.in.items.[INDEX]","typeLabel":"string"},"minItems":1,"maxItems":100,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.9.pendingChangeRequest.body.oneOf.8.filters.vaultId.in","typeLabel":"string[]"}},"required":["in"],"additionalProperties":false,"uniqueKey":"\\items.items.[INDEX].oneOf.9.pendingChangeRequest.body.oneOf.8.filters.vaultId","typeLabel":"object"},"vaultTags":{"type":"object","properties":{"hasAny":{"type":"array","items":{"type":"string","minLength":1,"uniqueKey":"\\items.items.[INDEX].oneOf.9.pendingChangeRequest.body.oneOf.8.filters.vaultTags.hasAny.items.[INDEX]","typeLabel":"string"},"minItems":1,"maxItems":100,"uniqueKey":"\\items.items.[INDEX].oneOf.9.pendingChangeRequest.body.oneOf.8.filters.vaultTags.hasAny","typeLabel":"string[]"},"hasAll":{"type":"array","items":{"type":"string","minLength":1,"uniqueKey":"\\items.items.[INDEX].oneOf.9.pendingChangeRequest.body.oneOf.8.filters.vaultTags.hasAll.items.[INDEX]","typeLabel":"string"},"minItems":1,"maxItems":100,"uniqueKey":"\\items.items.[INDEX].oneOf.9.pendingChangeRequest.body.oneOf.8.filters.vaultTags.hasAll","typeLabel":"string[]"}},"additionalProperties":false,"uniqueKey":"\\items.items.[INDEX].oneOf.9.pendingChangeRequest.body.oneOf.8.filters.vaultTags","typeLabel":"object"}},"additionalProperties":false,"uniqueKey":"\\items.items.[INDEX].oneOf.9.pendingChangeRequest.body.oneOf.8.filters","typeLabel":"object"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.9.pendingChangeRequest.body.oneOf.8","typeLabel":"Vaults:CreateLock · object"},{"type":"object","title":"Vaults:ReplaceLock","required":["id","name","status","activityKind","rule","action"],"properties":{"id":{"type":"string","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.9.pendingChangeRequest.body.oneOf.9.id","typeLabel":"string"},"name":{"type":"string","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.9.pendingChangeRequest.body.oneOf.9.name","typeLabel":"string"},"status":{"type":"string","enum":["Active","Archived"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.9.pendingChangeRequest.body.oneOf.9.status","typeLabel":"enum\u003cstring>"},"activityKind":{"type":"string","enum":["Vaults:ReplaceLock"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.9.pendingChangeRequest.body.oneOf.9.activityKind","typeLabel":"enum\u003cstring>"},"rule":{"type":"object","title":"AlwaysTrigger","description":"This rule will always be triggered, meaning that if this rule is defined on a policy, the policy will always trigger the policy action, regardless of the activity details.","required":["kind"],"properties":{"kind":{"type":"string","enum":["AlwaysTrigger"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.9.pendingChangeRequest.body.oneOf.9.rule.kind","typeLabel":"enum\u003cstring>"},"configuration":{"type":"object","properties":{},"additionalProperties":false,"uniqueKey":"\\items.items.[INDEX].oneOf.9.pendingChangeRequest.body.oneOf.9.rule.configuration","typeLabel":"object"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.9.pendingChangeRequest.body.oneOf.9.rule","typeLabel":"AlwaysTrigger · object"},"action":{"oneOf":[{"type":"object","title":"RequestApproval","description":"\nThis action means that activity will first require an Approval process to be completed before it can be executed (or be aborted if someone rejects it during the approval process).\n\nOne or several groups of approvers need to be specified. These groups define who is allowed to approve / reject an activity.\n\nThe activity will only be executed if all approver groups reach their \"quorum\" of approvals. Otherwise, if any one user within any approver group rejects, then the activity is aborted and the call is not executed.\n\nThe example below shows a `RequestApproval` action, configured with one approval group requiring 2 approvals amongst three specific users.\n\n```json\n{\n \"action\": {\n \"kind\": \"RequestApproval\",\n \"autoRejectTimeout\": 60, // minutes\n \"approvalGroups\": [\n {\n \"name\": \"Admins\",\n \"quorum\": 2, // only 2 approvers required in that group \n \"approvers\": {\n \"userId\": {\n \"in\": [\"us-...1\", \"us-...2\", \"us-...3\"],\n }\n }\n }\n ],\n\n }\n}\n```\n\n**Don't lock yourself up**\n\nBy default, users cannot approve an activity they initiated themselves, even if they are in an approval group. To allow this, you must set `initiatorCanApprove: true`.\n\n*Example 1:* For any wallet transfer, a policy is setup to require approval from **1 specific admin user** (eg. the CEO). `initiatorCanApprove` was not set to `true`. If the CEO himself initiates a transfer, no-one can approve his transfer and it's stuck.\n\n*Example 2:* Company has only 3 users. A policy is setup to require approval from **any 3 users** (`quorum: 3`) for any modification of a policy. `initiatorCanApprove` was not set to `true`. In this case, they are locked, and the policy cannot be modified: whoever requests a modification cannot approve, and the policy is therefore always missing one approver. To unlock, they would need to invite a new user and give him the rights to approve as well.\n ","required":["kind","approvalGroups"],"properties":{"kind":{"type":"string","enum":["RequestApproval"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.9.pendingChangeRequest.body.oneOf.9.action.oneOf.0.kind","typeLabel":"enum\u003cstring>"},"approvalGroups":{"type":"array","items":{"type":"object","properties":{"quorum":{"type":"integer","minimum":1,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.9.pendingChangeRequest.body.oneOf.9.action.oneOf.0.approvalGroups.items.[INDEX].quorum","typeLabel":"integer"},"approvers":{"type":"object","properties":{"userId":{"type":"object","properties":{"in":{"type":"array","items":{"type":"string","minLength":1,"uniqueKey":"\\items.items.[INDEX].oneOf.9.pendingChangeRequest.body.oneOf.9.action.oneOf.0.approvalGroups.items.[INDEX].approvers.userId.in.items.[INDEX]","typeLabel":"string"},"minItems":1,"maxItems":100,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.9.pendingChangeRequest.body.oneOf.9.action.oneOf.0.approvalGroups.items.[INDEX].approvers.userId.in","typeLabel":"string[]"}},"required":["in"],"additionalProperties":false,"description":"Users and service accounts who may approve.","uniqueKey":"\\items.items.[INDEX].oneOf.9.pendingChangeRequest.body.oneOf.9.action.oneOf.0.approvalGroups.items.[INDEX].approvers.userId","typeLabel":"object"},"userGroupId":{"type":"object","properties":{"in":{"type":"array","items":{"type":"string","minLength":1,"maxLength":64,"pattern":"^ug-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"User group id.","example":"ug-139tf-f58l8-lsbt6dp47lfsdvgh","uniqueKey":"\\items.items.[INDEX].oneOf.9.pendingChangeRequest.body.oneOf.9.action.oneOf.0.approvalGroups.items.[INDEX].approvers.userGroupId.in.items.[INDEX]","typeLabel":"string"},"minItems":1,"maxItems":100,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.9.pendingChangeRequest.body.oneOf.9.action.oneOf.0.approvalGroups.items.[INDEX].approvers.userGroupId.in","typeLabel":"string[]"}},"required":["in"],"additionalProperties":false,"description":"User groups whose members may approve.","uniqueKey":"\\items.items.[INDEX].oneOf.9.pendingChangeRequest.body.oneOf.9.action.oneOf.0.approvalGroups.items.[INDEX].approvers.userGroupId","typeLabel":"object"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.9.pendingChangeRequest.body.oneOf.9.action.oneOf.0.approvalGroups.items.[INDEX].approvers","typeLabel":"object"},"name":{"type":"string","uniqueKey":"\\items.items.[INDEX].oneOf.9.pendingChangeRequest.body.oneOf.9.action.oneOf.0.approvalGroups.items.[INDEX].name","typeLabel":"string"},"initiatorCanApprove":{"type":"boolean","description":"Whether the initiator of the activity can participate in the approval.","uniqueKey":"\\items.items.[INDEX].oneOf.9.pendingChangeRequest.body.oneOf.9.action.oneOf.0.approvalGroups.items.[INDEX].initiatorCanApprove","typeLabel":"boolean"},"serviceAccountsCanApprove":{"type":"boolean","description":"Whether service accounts can participate in the approval for this group.","uniqueKey":"\\items.items.[INDEX].oneOf.9.pendingChangeRequest.body.oneOf.9.action.oneOf.0.approvalGroups.items.[INDEX].serviceAccountsCanApprove","typeLabel":"boolean"}},"required":["quorum","approvers"],"additionalProperties":false,"uniqueKey":"\\items.items.[INDEX].oneOf.9.pendingChangeRequest.body.oneOf.9.action.oneOf.0.approvalGroups.items.[INDEX]","typeLabel":"object"},"minItems":1,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.9.pendingChangeRequest.body.oneOf.9.action.oneOf.0.approvalGroups","typeLabel":"object[]"},"autoRejectTimeout":{"oneOf":[{"type":"integer","minimum":1,"uniqueKey":"\\items.items.[INDEX].oneOf.9.pendingChangeRequest.body.oneOf.9.action.oneOf.0.autoRejectTimeout.oneOf.0","typeLabel":"integer"},{"type":"null","minimum":1,"uniqueKey":"\\items.items.[INDEX].oneOf.9.pendingChangeRequest.body.oneOf.9.action.oneOf.0.autoRejectTimeout.oneOf.1","typeLabel":"null"}],"uniqueKey":"\\items.items.[INDEX].oneOf.9.pendingChangeRequest.body.oneOf.9.action.oneOf.0.autoRejectTimeout","typeLabel":"integer | null"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.9.pendingChangeRequest.body.oneOf.9.action.oneOf.0","typeLabel":"RequestApproval · object"},{"type":"object","title":"Block","description":"This action means that the activity will be blocked if the policy is triggered.\n\n```json\n{\n \"action\": {\n \"kind\": \"Block\"\n }\n}\n```\n","required":["kind"],"properties":{"kind":{"type":"string","enum":["Block"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.9.pendingChangeRequest.body.oneOf.9.action.oneOf.1.kind","typeLabel":"enum\u003cstring>"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.9.pendingChangeRequest.body.oneOf.9.action.oneOf.1","typeLabel":"Block · object"}],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.9.pendingChangeRequest.body.oneOf.9.action","typeLabel":"RequestApproval · object | Block · object"},"dateCreated":{"type":"string","uniqueKey":"\\items.items.[INDEX].oneOf.9.pendingChangeRequest.body.oneOf.9.dateCreated","typeLabel":"string"},"dateUpdated":{"type":"string","uniqueKey":"\\items.items.[INDEX].oneOf.9.pendingChangeRequest.body.oneOf.9.dateUpdated","typeLabel":"string"},"filters":{"type":"object","properties":{"vaultId":{"type":"object","properties":{"in":{"type":"array","items":{"type":"string","minLength":1,"uniqueKey":"\\items.items.[INDEX].oneOf.9.pendingChangeRequest.body.oneOf.9.filters.vaultId.in.items.[INDEX]","typeLabel":"string"},"minItems":1,"maxItems":100,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.9.pendingChangeRequest.body.oneOf.9.filters.vaultId.in","typeLabel":"string[]"}},"required":["in"],"additionalProperties":false,"uniqueKey":"\\items.items.[INDEX].oneOf.9.pendingChangeRequest.body.oneOf.9.filters.vaultId","typeLabel":"object"},"vaultTags":{"type":"object","properties":{"hasAny":{"type":"array","items":{"type":"string","minLength":1,"uniqueKey":"\\items.items.[INDEX].oneOf.9.pendingChangeRequest.body.oneOf.9.filters.vaultTags.hasAny.items.[INDEX]","typeLabel":"string"},"minItems":1,"maxItems":100,"uniqueKey":"\\items.items.[INDEX].oneOf.9.pendingChangeRequest.body.oneOf.9.filters.vaultTags.hasAny","typeLabel":"string[]"},"hasAll":{"type":"array","items":{"type":"string","minLength":1,"uniqueKey":"\\items.items.[INDEX].oneOf.9.pendingChangeRequest.body.oneOf.9.filters.vaultTags.hasAll.items.[INDEX]","typeLabel":"string"},"minItems":1,"maxItems":100,"uniqueKey":"\\items.items.[INDEX].oneOf.9.pendingChangeRequest.body.oneOf.9.filters.vaultTags.hasAll","typeLabel":"string[]"}},"additionalProperties":false,"uniqueKey":"\\items.items.[INDEX].oneOf.9.pendingChangeRequest.body.oneOf.9.filters.vaultTags","typeLabel":"object"}},"additionalProperties":false,"uniqueKey":"\\items.items.[INDEX].oneOf.9.pendingChangeRequest.body.oneOf.9.filters","typeLabel":"object"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.9.pendingChangeRequest.body.oneOf.9","typeLabel":"Vaults:ReplaceLock · object"},{"type":"object","title":"UserAction","required":["id","name","status","activityKind","rule","action"],"properties":{"id":{"type":"string","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.9.pendingChangeRequest.body.oneOf.10.id","typeLabel":"string"},"name":{"type":"string","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.9.pendingChangeRequest.body.oneOf.10.name","typeLabel":"string"},"status":{"type":"string","enum":["Active","Archived"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.9.pendingChangeRequest.body.oneOf.10.status","typeLabel":"enum\u003cstring>"},"activityKind":{"type":"string","enum":["UserAction"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.9.pendingChangeRequest.body.oneOf.10.activityKind","typeLabel":"enum\u003cstring>"},"rule":{"type":"object","properties":{"kind":{"type":"string","enum":["UserAction"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.9.pendingChangeRequest.body.oneOf.10.rule.kind","typeLabel":"enum\u003cstring>"},"configuration":{"type":"object","properties":{"userActionKinds":{"type":"array","items":{"type":"string","uniqueKey":"\\items.items.[INDEX].oneOf.9.pendingChangeRequest.body.oneOf.10.rule.configuration.userActionKinds.items.[INDEX]","typeLabel":"string"},"minItems":1,"description":"The user actions this rule applies to. The rule triggers on any of them.","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.9.pendingChangeRequest.body.oneOf.10.rule.configuration.userActionKinds","typeLabel":"string[]"}},"required":["userActionKinds"],"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.9.pendingChangeRequest.body.oneOf.10.rule.configuration","typeLabel":"object"}},"required":["kind","configuration"],"additionalProperties":false,"title":"UserAction","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.9.pendingChangeRequest.body.oneOf.10.rule","typeLabel":"UserAction · object"},"action":{"oneOf":[{"type":"object","title":"RequestApproval","description":"\nThis action means that activity will first require an Approval process to be completed before it can be executed (or be aborted if someone rejects it during the approval process).\n\nOne or several groups of approvers need to be specified. These groups define who is allowed to approve / reject an activity.\n\nThe activity will only be executed if all approver groups reach their \"quorum\" of approvals. Otherwise, if any one user within any approver group rejects, then the activity is aborted and the call is not executed.\n\nThe example below shows a `RequestApproval` action, configured with one approval group requiring 2 approvals amongst three specific users.\n\n```json\n{\n \"action\": {\n \"kind\": \"RequestApproval\",\n \"autoRejectTimeout\": 60, // minutes\n \"approvalGroups\": [\n {\n \"name\": \"Admins\",\n \"quorum\": 2, // only 2 approvers required in that group \n \"approvers\": {\n \"userId\": {\n \"in\": [\"us-...1\", \"us-...2\", \"us-...3\"],\n }\n }\n }\n ],\n\n }\n}\n```\n\n**Don't lock yourself up**\n\nBy default, users cannot approve an activity they initiated themselves, even if they are in an approval group. To allow this, you must set `initiatorCanApprove: true`.\n\n*Example 1:* For any wallet transfer, a policy is setup to require approval from **1 specific admin user** (eg. the CEO). `initiatorCanApprove` was not set to `true`. If the CEO himself initiates a transfer, no-one can approve his transfer and it's stuck.\n\n*Example 2:* Company has only 3 users. A policy is setup to require approval from **any 3 users** (`quorum: 3`) for any modification of a policy. `initiatorCanApprove` was not set to `true`. In this case, they are locked, and the policy cannot be modified: whoever requests a modification cannot approve, and the policy is therefore always missing one approver. To unlock, they would need to invite a new user and give him the rights to approve as well.\n ","required":["kind","approvalGroups"],"properties":{"kind":{"type":"string","enum":["RequestApproval"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.9.pendingChangeRequest.body.oneOf.10.action.oneOf.0.kind","typeLabel":"enum\u003cstring>"},"approvalGroups":{"type":"array","items":{"type":"object","properties":{"quorum":{"type":"integer","minimum":1,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.9.pendingChangeRequest.body.oneOf.10.action.oneOf.0.approvalGroups.items.[INDEX].quorum","typeLabel":"integer"},"approvers":{"type":"object","properties":{"userId":{"type":"object","properties":{"in":{"type":"array","items":{"type":"string","minLength":1,"uniqueKey":"\\items.items.[INDEX].oneOf.9.pendingChangeRequest.body.oneOf.10.action.oneOf.0.approvalGroups.items.[INDEX].approvers.userId.in.items.[INDEX]","typeLabel":"string"},"minItems":1,"maxItems":100,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.9.pendingChangeRequest.body.oneOf.10.action.oneOf.0.approvalGroups.items.[INDEX].approvers.userId.in","typeLabel":"string[]"}},"required":["in"],"additionalProperties":false,"description":"Users and service accounts who may approve.","uniqueKey":"\\items.items.[INDEX].oneOf.9.pendingChangeRequest.body.oneOf.10.action.oneOf.0.approvalGroups.items.[INDEX].approvers.userId","typeLabel":"object"},"userGroupId":{"type":"object","properties":{"in":{"type":"array","items":{"type":"string","minLength":1,"maxLength":64,"pattern":"^ug-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"User group id.","example":"ug-139tf-f58l8-lsbt6dp47lfsdvgh","uniqueKey":"\\items.items.[INDEX].oneOf.9.pendingChangeRequest.body.oneOf.10.action.oneOf.0.approvalGroups.items.[INDEX].approvers.userGroupId.in.items.[INDEX]","typeLabel":"string"},"minItems":1,"maxItems":100,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.9.pendingChangeRequest.body.oneOf.10.action.oneOf.0.approvalGroups.items.[INDEX].approvers.userGroupId.in","typeLabel":"string[]"}},"required":["in"],"additionalProperties":false,"description":"User groups whose members may approve.","uniqueKey":"\\items.items.[INDEX].oneOf.9.pendingChangeRequest.body.oneOf.10.action.oneOf.0.approvalGroups.items.[INDEX].approvers.userGroupId","typeLabel":"object"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.9.pendingChangeRequest.body.oneOf.10.action.oneOf.0.approvalGroups.items.[INDEX].approvers","typeLabel":"object"},"name":{"type":"string","uniqueKey":"\\items.items.[INDEX].oneOf.9.pendingChangeRequest.body.oneOf.10.action.oneOf.0.approvalGroups.items.[INDEX].name","typeLabel":"string"},"initiatorCanApprove":{"type":"boolean","description":"Whether the initiator of the activity can participate in the approval.","uniqueKey":"\\items.items.[INDEX].oneOf.9.pendingChangeRequest.body.oneOf.10.action.oneOf.0.approvalGroups.items.[INDEX].initiatorCanApprove","typeLabel":"boolean"},"serviceAccountsCanApprove":{"type":"boolean","description":"Whether service accounts can participate in the approval for this group.","uniqueKey":"\\items.items.[INDEX].oneOf.9.pendingChangeRequest.body.oneOf.10.action.oneOf.0.approvalGroups.items.[INDEX].serviceAccountsCanApprove","typeLabel":"boolean"}},"required":["quorum","approvers"],"additionalProperties":false,"uniqueKey":"\\items.items.[INDEX].oneOf.9.pendingChangeRequest.body.oneOf.10.action.oneOf.0.approvalGroups.items.[INDEX]","typeLabel":"object"},"minItems":1,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.9.pendingChangeRequest.body.oneOf.10.action.oneOf.0.approvalGroups","typeLabel":"object[]"},"autoRejectTimeout":{"oneOf":[{"type":"integer","minimum":1,"uniqueKey":"\\items.items.[INDEX].oneOf.9.pendingChangeRequest.body.oneOf.10.action.oneOf.0.autoRejectTimeout.oneOf.0","typeLabel":"integer"},{"type":"null","minimum":1,"uniqueKey":"\\items.items.[INDEX].oneOf.9.pendingChangeRequest.body.oneOf.10.action.oneOf.0.autoRejectTimeout.oneOf.1","typeLabel":"null"}],"uniqueKey":"\\items.items.[INDEX].oneOf.9.pendingChangeRequest.body.oneOf.10.action.oneOf.0.autoRejectTimeout","typeLabel":"integer | null"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.9.pendingChangeRequest.body.oneOf.10.action.oneOf.0","typeLabel":"RequestApproval · object"},{"type":"object","title":"Block","description":"This action means that the activity will be blocked if the policy is triggered.\n\n```json\n{\n \"action\": {\n \"kind\": \"Block\"\n }\n}\n```\n","required":["kind"],"properties":{"kind":{"type":"string","enum":["Block"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.9.pendingChangeRequest.body.oneOf.10.action.oneOf.1.kind","typeLabel":"enum\u003cstring>"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.9.pendingChangeRequest.body.oneOf.10.action.oneOf.1","typeLabel":"Block · object"}],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.9.pendingChangeRequest.body.oneOf.10.action","typeLabel":"RequestApproval · object | Block · object"},"dateCreated":{"type":"string","uniqueKey":"\\items.items.[INDEX].oneOf.9.pendingChangeRequest.body.oneOf.10.dateCreated","typeLabel":"string"},"dateUpdated":{"type":"string","uniqueKey":"\\items.items.[INDEX].oneOf.9.pendingChangeRequest.body.oneOf.10.dateUpdated","typeLabel":"string"},"filters":{"type":"object","properties":{},"uniqueKey":"\\items.items.[INDEX].oneOf.9.pendingChangeRequest.body.oneOf.10.filters","typeLabel":"object"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.9.pendingChangeRequest.body.oneOf.10","typeLabel":"UserAction · object"}],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.9.pendingChangeRequest.body","typeLabel":"Registry:Addresses:Modify · object | Permissions:Assign · object | Permissions:Modify · object | Policies:Modify · object | Registry:ContractSchemas:Modify · object | Wallets:Sign · object | Wallets:IncomingTransaction · object | Vaults:ReleaseQuarantine · object | Vaults:CreateLock · object | Vaults:ReplaceLock · object | UserAction · object"},"dateResolved":{"type":"string","format":"date-time","uniqueKey":"\\items.items.[INDEX].oneOf.9.pendingChangeRequest.dateResolved","typeLabel":"string\u003cdate-time>"},"approvalId":{"type":"string","uniqueKey":"\\items.items.[INDEX].oneOf.9.pendingChangeRequest.approvalId","typeLabel":"string"}},"required":["id","requester","kind","operationKind","status","entityId","dateCreated","body"],"additionalProperties":false,"uniqueKey":"\\items.items.[INDEX].oneOf.9.pendingChangeRequest","typeLabel":"object"}},"additionalProperties":false,"uniqueKey":"\\items.items.[INDEX].oneOf.9","typeLabel":"Vaults:ReplaceLock · object"},{"type":"object","title":"UserAction","required":["id","name","status","activityKind","rule","action"],"properties":{"id":{"type":"string","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.10.id","typeLabel":"string"},"name":{"type":"string","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.10.name","typeLabel":"string"},"status":{"type":"string","enum":["Active","Archived"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.10.status","typeLabel":"enum\u003cstring>"},"activityKind":{"type":"string","enum":["UserAction"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.10.activityKind","typeLabel":"enum\u003cstring>"},"rule":{"type":"object","properties":{"kind":{"type":"string","enum":["UserAction"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.10.rule.kind","typeLabel":"enum\u003cstring>"},"configuration":{"type":"object","properties":{"userActionKinds":{"type":"array","items":{"type":"string","uniqueKey":"\\items.items.[INDEX].oneOf.10.rule.configuration.userActionKinds.items.[INDEX]","typeLabel":"string"},"minItems":1,"description":"The user actions this rule applies to. The rule triggers on any of them.","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.10.rule.configuration.userActionKinds","typeLabel":"string[]"}},"required":["userActionKinds"],"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.10.rule.configuration","typeLabel":"object"}},"required":["kind","configuration"],"additionalProperties":false,"title":"UserAction","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.10.rule","typeLabel":"UserAction · object"},"action":{"oneOf":[{"type":"object","title":"RequestApproval","description":"\nThis action means that activity will first require an Approval process to be completed before it can be executed (or be aborted if someone rejects it during the approval process).\n\nOne or several groups of approvers need to be specified. These groups define who is allowed to approve / reject an activity.\n\nThe activity will only be executed if all approver groups reach their \"quorum\" of approvals. Otherwise, if any one user within any approver group rejects, then the activity is aborted and the call is not executed.\n\nThe example below shows a `RequestApproval` action, configured with one approval group requiring 2 approvals amongst three specific users.\n\n```json\n{\n \"action\": {\n \"kind\": \"RequestApproval\",\n \"autoRejectTimeout\": 60, // minutes\n \"approvalGroups\": [\n {\n \"name\": \"Admins\",\n \"quorum\": 2, // only 2 approvers required in that group \n \"approvers\": {\n \"userId\": {\n \"in\": [\"us-...1\", \"us-...2\", \"us-...3\"],\n }\n }\n }\n ],\n\n }\n}\n```\n\n**Don't lock yourself up**\n\nBy default, users cannot approve an activity they initiated themselves, even if they are in an approval group. To allow this, you must set `initiatorCanApprove: true`.\n\n*Example 1:* For any wallet transfer, a policy is setup to require approval from **1 specific admin user** (eg. the CEO). `initiatorCanApprove` was not set to `true`. If the CEO himself initiates a transfer, no-one can approve his transfer and it's stuck.\n\n*Example 2:* Company has only 3 users. A policy is setup to require approval from **any 3 users** (`quorum: 3`) for any modification of a policy. `initiatorCanApprove` was not set to `true`. In this case, they are locked, and the policy cannot be modified: whoever requests a modification cannot approve, and the policy is therefore always missing one approver. To unlock, they would need to invite a new user and give him the rights to approve as well.\n ","required":["kind","approvalGroups"],"properties":{"kind":{"type":"string","enum":["RequestApproval"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.10.action.oneOf.0.kind","typeLabel":"enum\u003cstring>"},"approvalGroups":{"type":"array","items":{"type":"object","properties":{"quorum":{"type":"integer","minimum":1,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.10.action.oneOf.0.approvalGroups.items.[INDEX].quorum","typeLabel":"integer"},"approvers":{"type":"object","properties":{"userId":{"type":"object","properties":{"in":{"type":"array","items":{"type":"string","minLength":1,"uniqueKey":"\\items.items.[INDEX].oneOf.10.action.oneOf.0.approvalGroups.items.[INDEX].approvers.userId.in.items.[INDEX]","typeLabel":"string"},"minItems":1,"maxItems":100,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.10.action.oneOf.0.approvalGroups.items.[INDEX].approvers.userId.in","typeLabel":"string[]"}},"required":["in"],"additionalProperties":false,"description":"Users and service accounts who may approve.","uniqueKey":"\\items.items.[INDEX].oneOf.10.action.oneOf.0.approvalGroups.items.[INDEX].approvers.userId","typeLabel":"object"},"userGroupId":{"type":"object","properties":{"in":{"type":"array","items":{"type":"string","minLength":1,"maxLength":64,"pattern":"^ug-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"User group id.","example":"ug-139tf-f58l8-lsbt6dp47lfsdvgh","uniqueKey":"\\items.items.[INDEX].oneOf.10.action.oneOf.0.approvalGroups.items.[INDEX].approvers.userGroupId.in.items.[INDEX]","typeLabel":"string"},"minItems":1,"maxItems":100,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.10.action.oneOf.0.approvalGroups.items.[INDEX].approvers.userGroupId.in","typeLabel":"string[]"}},"required":["in"],"additionalProperties":false,"description":"User groups whose members may approve.","uniqueKey":"\\items.items.[INDEX].oneOf.10.action.oneOf.0.approvalGroups.items.[INDEX].approvers.userGroupId","typeLabel":"object"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.10.action.oneOf.0.approvalGroups.items.[INDEX].approvers","typeLabel":"object"},"name":{"type":"string","uniqueKey":"\\items.items.[INDEX].oneOf.10.action.oneOf.0.approvalGroups.items.[INDEX].name","typeLabel":"string"},"initiatorCanApprove":{"type":"boolean","description":"Whether the initiator of the activity can participate in the approval.","uniqueKey":"\\items.items.[INDEX].oneOf.10.action.oneOf.0.approvalGroups.items.[INDEX].initiatorCanApprove","typeLabel":"boolean"},"serviceAccountsCanApprove":{"type":"boolean","description":"Whether service accounts can participate in the approval for this group.","uniqueKey":"\\items.items.[INDEX].oneOf.10.action.oneOf.0.approvalGroups.items.[INDEX].serviceAccountsCanApprove","typeLabel":"boolean"}},"required":["quorum","approvers"],"additionalProperties":false,"uniqueKey":"\\items.items.[INDEX].oneOf.10.action.oneOf.0.approvalGroups.items.[INDEX]","typeLabel":"object"},"minItems":1,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.10.action.oneOf.0.approvalGroups","typeLabel":"object[]"},"autoRejectTimeout":{"oneOf":[{"type":"integer","minimum":1,"uniqueKey":"\\items.items.[INDEX].oneOf.10.action.oneOf.0.autoRejectTimeout.oneOf.0","typeLabel":"integer"},{"type":"null","minimum":1,"uniqueKey":"\\items.items.[INDEX].oneOf.10.action.oneOf.0.autoRejectTimeout.oneOf.1","typeLabel":"null"}],"uniqueKey":"\\items.items.[INDEX].oneOf.10.action.oneOf.0.autoRejectTimeout","typeLabel":"integer | null"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.10.action.oneOf.0","typeLabel":"RequestApproval · object"},{"type":"object","title":"Block","description":"This action means that the activity will be blocked if the policy is triggered.\n\n```json\n{\n \"action\": {\n \"kind\": \"Block\"\n }\n}\n```\n","required":["kind"],"properties":{"kind":{"type":"string","enum":["Block"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.10.action.oneOf.1.kind","typeLabel":"enum\u003cstring>"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.10.action.oneOf.1","typeLabel":"Block · object"}],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.10.action","typeLabel":"RequestApproval · object | Block · object"},"dateCreated":{"type":"string","uniqueKey":"\\items.items.[INDEX].oneOf.10.dateCreated","typeLabel":"string"},"dateUpdated":{"type":"string","uniqueKey":"\\items.items.[INDEX].oneOf.10.dateUpdated","typeLabel":"string"},"filters":{"type":"object","properties":{},"uniqueKey":"\\items.items.[INDEX].oneOf.10.filters","typeLabel":"object"},"pendingChangeRequest":{"type":"object","properties":{"id":{"type":"string","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.10.pendingChangeRequest.id","typeLabel":"string"},"requester":{"type":"object","properties":{"userId":{"type":"string","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.10.pendingChangeRequest.requester.userId","typeLabel":"string"},"tokenId":{"type":"string","uniqueKey":"\\items.items.[INDEX].oneOf.10.pendingChangeRequest.requester.tokenId","typeLabel":"string"},"appId":{"type":"string","uniqueKey":"\\items.items.[INDEX].oneOf.10.pendingChangeRequest.requester.appId","typeLabel":"string"}},"required":["userId"],"description":"The user who initiated the change request.","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.10.pendingChangeRequest.requester","typeLabel":"object"},"kind":{"type":"string","enum":["Policy"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.10.pendingChangeRequest.kind","typeLabel":"enum\u003cstring>"},"operationKind":{"type":"string","enum":["Update"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.10.pendingChangeRequest.operationKind","typeLabel":"enum\u003cstring>"},"status":{"type":"string","enum":["Applied","Failed","Pending","Rejected"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.10.pendingChangeRequest.status","typeLabel":"enum\u003cstring>"},"entityId":{"type":"string","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.10.pendingChangeRequest.entityId","typeLabel":"string"},"dateCreated":{"type":"string","format":"date-time","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.10.pendingChangeRequest.dateCreated","typeLabel":"string\u003cdate-time>"},"body":{"oneOf":[{"type":"object","title":"Registry:Addresses:Modify","required":["id","name","status","activityKind","rule","action"],"properties":{"id":{"type":"string","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.10.pendingChangeRequest.body.oneOf.0.id","typeLabel":"string"},"name":{"type":"string","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.10.pendingChangeRequest.body.oneOf.0.name","typeLabel":"string"},"status":{"type":"string","enum":["Active","Archived"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.10.pendingChangeRequest.body.oneOf.0.status","typeLabel":"enum\u003cstring>"},"activityKind":{"type":"string","enum":["Registry:Addresses:Modify"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.10.pendingChangeRequest.body.oneOf.0.activityKind","typeLabel":"enum\u003cstring>"},"rule":{"type":"object","properties":{"kind":{"type":"string","enum":["AlwaysTrigger"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.10.pendingChangeRequest.body.oneOf.0.rule.kind","typeLabel":"enum\u003cstring>"},"configuration":{"type":"object","properties":{},"additionalProperties":false,"uniqueKey":"\\items.items.[INDEX].oneOf.10.pendingChangeRequest.body.oneOf.0.rule.configuration","typeLabel":"object"}},"required":["kind"],"additionalProperties":false,"description":"This rule will always be triggered, meaning that if this rule is defined on a policy, the policy will always trigger the policy action, regardless of the activity details.","title":"AlwaysTrigger","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.10.pendingChangeRequest.body.oneOf.0.rule","typeLabel":"AlwaysTrigger · object"},"action":{"oneOf":[{"type":"object","title":"RequestApproval","description":"\nThis action means that activity will first require an Approval process to be completed before it can be executed (or be aborted if someone rejects it during the approval process).\n\nOne or several groups of approvers need to be specified. These groups define who is allowed to approve / reject an activity.\n\nThe activity will only be executed if all approver groups reach their \"quorum\" of approvals. Otherwise, if any one user within any approver group rejects, then the activity is aborted and the call is not executed.\n\nThe example below shows a `RequestApproval` action, configured with one approval group requiring 2 approvals amongst three specific users.\n\n```json\n{\n \"action\": {\n \"kind\": \"RequestApproval\",\n \"autoRejectTimeout\": 60, // minutes\n \"approvalGroups\": [\n {\n \"name\": \"Admins\",\n \"quorum\": 2, // only 2 approvers required in that group \n \"approvers\": {\n \"userId\": {\n \"in\": [\"us-...1\", \"us-...2\", \"us-...3\"],\n }\n }\n }\n ],\n\n }\n}\n```\n\n**Don't lock yourself up**\n\nBy default, users cannot approve an activity they initiated themselves, even if they are in an approval group. To allow this, you must set `initiatorCanApprove: true`.\n\n*Example 1:* For any wallet transfer, a policy is setup to require approval from **1 specific admin user** (eg. the CEO). `initiatorCanApprove` was not set to `true`. If the CEO himself initiates a transfer, no-one can approve his transfer and it's stuck.\n\n*Example 2:* Company has only 3 users. A policy is setup to require approval from **any 3 users** (`quorum: 3`) for any modification of a policy. `initiatorCanApprove` was not set to `true`. In this case, they are locked, and the policy cannot be modified: whoever requests a modification cannot approve, and the policy is therefore always missing one approver. To unlock, they would need to invite a new user and give him the rights to approve as well.\n ","required":["kind","approvalGroups"],"properties":{"kind":{"type":"string","enum":["RequestApproval"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.10.pendingChangeRequest.body.oneOf.0.action.oneOf.0.kind","typeLabel":"enum\u003cstring>"},"approvalGroups":{"type":"array","items":{"type":"object","properties":{"quorum":{"type":"integer","minimum":1,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.10.pendingChangeRequest.body.oneOf.0.action.oneOf.0.approvalGroups.items.[INDEX].quorum","typeLabel":"integer"},"approvers":{"type":"object","properties":{"userId":{"type":"object","properties":{"in":{"type":"array","items":{"type":"string","minLength":1,"uniqueKey":"\\items.items.[INDEX].oneOf.10.pendingChangeRequest.body.oneOf.0.action.oneOf.0.approvalGroups.items.[INDEX].approvers.userId.in.items.[INDEX]","typeLabel":"string"},"minItems":1,"maxItems":100,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.10.pendingChangeRequest.body.oneOf.0.action.oneOf.0.approvalGroups.items.[INDEX].approvers.userId.in","typeLabel":"string[]"}},"required":["in"],"additionalProperties":false,"description":"Users and service accounts who may approve.","uniqueKey":"\\items.items.[INDEX].oneOf.10.pendingChangeRequest.body.oneOf.0.action.oneOf.0.approvalGroups.items.[INDEX].approvers.userId","typeLabel":"object"},"userGroupId":{"type":"object","properties":{"in":{"type":"array","items":{"type":"string","minLength":1,"maxLength":64,"pattern":"^ug-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"User group id.","example":"ug-139tf-f58l8-lsbt6dp47lfsdvgh","uniqueKey":"\\items.items.[INDEX].oneOf.10.pendingChangeRequest.body.oneOf.0.action.oneOf.0.approvalGroups.items.[INDEX].approvers.userGroupId.in.items.[INDEX]","typeLabel":"string"},"minItems":1,"maxItems":100,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.10.pendingChangeRequest.body.oneOf.0.action.oneOf.0.approvalGroups.items.[INDEX].approvers.userGroupId.in","typeLabel":"string[]"}},"required":["in"],"additionalProperties":false,"description":"User groups whose members may approve.","uniqueKey":"\\items.items.[INDEX].oneOf.10.pendingChangeRequest.body.oneOf.0.action.oneOf.0.approvalGroups.items.[INDEX].approvers.userGroupId","typeLabel":"object"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.10.pendingChangeRequest.body.oneOf.0.action.oneOf.0.approvalGroups.items.[INDEX].approvers","typeLabel":"object"},"name":{"type":"string","uniqueKey":"\\items.items.[INDEX].oneOf.10.pendingChangeRequest.body.oneOf.0.action.oneOf.0.approvalGroups.items.[INDEX].name","typeLabel":"string"},"initiatorCanApprove":{"type":"boolean","description":"Whether the initiator of the activity can participate in the approval.","uniqueKey":"\\items.items.[INDEX].oneOf.10.pendingChangeRequest.body.oneOf.0.action.oneOf.0.approvalGroups.items.[INDEX].initiatorCanApprove","typeLabel":"boolean"},"serviceAccountsCanApprove":{"type":"boolean","description":"Whether service accounts can participate in the approval for this group.","uniqueKey":"\\items.items.[INDEX].oneOf.10.pendingChangeRequest.body.oneOf.0.action.oneOf.0.approvalGroups.items.[INDEX].serviceAccountsCanApprove","typeLabel":"boolean"}},"required":["quorum","approvers"],"additionalProperties":false,"uniqueKey":"\\items.items.[INDEX].oneOf.10.pendingChangeRequest.body.oneOf.0.action.oneOf.0.approvalGroups.items.[INDEX]","typeLabel":"object"},"minItems":1,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.10.pendingChangeRequest.body.oneOf.0.action.oneOf.0.approvalGroups","typeLabel":"object[]"},"autoRejectTimeout":{"oneOf":[{"type":"integer","minimum":1,"uniqueKey":"\\items.items.[INDEX].oneOf.10.pendingChangeRequest.body.oneOf.0.action.oneOf.0.autoRejectTimeout.oneOf.0","typeLabel":"integer"},{"type":"null","minimum":1,"uniqueKey":"\\items.items.[INDEX].oneOf.10.pendingChangeRequest.body.oneOf.0.action.oneOf.0.autoRejectTimeout.oneOf.1","typeLabel":"null"}],"uniqueKey":"\\items.items.[INDEX].oneOf.10.pendingChangeRequest.body.oneOf.0.action.oneOf.0.autoRejectTimeout","typeLabel":"integer | null"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.10.pendingChangeRequest.body.oneOf.0.action.oneOf.0","typeLabel":"RequestApproval · object"},{"type":"object","title":"Block","description":"This action means that the activity will be blocked if the policy is triggered.\n\n```json\n{\n \"action\": {\n \"kind\": \"Block\"\n }\n}\n```\n","required":["kind"],"properties":{"kind":{"type":"string","enum":["Block"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.10.pendingChangeRequest.body.oneOf.0.action.oneOf.1.kind","typeLabel":"enum\u003cstring>"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.10.pendingChangeRequest.body.oneOf.0.action.oneOf.1","typeLabel":"Block · object"}],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.10.pendingChangeRequest.body.oneOf.0.action","typeLabel":"RequestApproval · object | Block · object"},"dateCreated":{"type":"string","uniqueKey":"\\items.items.[INDEX].oneOf.10.pendingChangeRequest.body.oneOf.0.dateCreated","typeLabel":"string"},"dateUpdated":{"type":"string","uniqueKey":"\\items.items.[INDEX].oneOf.10.pendingChangeRequest.body.oneOf.0.dateUpdated","typeLabel":"string"},"filters":{"type":"object","properties":{},"uniqueKey":"\\items.items.[INDEX].oneOf.10.pendingChangeRequest.body.oneOf.0.filters","typeLabel":"object"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.10.pendingChangeRequest.body.oneOf.0","typeLabel":"Registry:Addresses:Modify · object"},{"type":"object","title":"Permissions:Assign","required":["id","name","status","activityKind","rule","action"],"properties":{"id":{"type":"string","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.10.pendingChangeRequest.body.oneOf.1.id","typeLabel":"string"},"name":{"type":"string","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.10.pendingChangeRequest.body.oneOf.1.name","typeLabel":"string"},"status":{"type":"string","enum":["Active","Archived"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.10.pendingChangeRequest.body.oneOf.1.status","typeLabel":"enum\u003cstring>"},"activityKind":{"type":"string","enum":["Permissions:Assign"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.10.pendingChangeRequest.body.oneOf.1.activityKind","typeLabel":"enum\u003cstring>"},"rule":{"type":"object","properties":{"kind":{"type":"string","enum":["AlwaysTrigger"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.10.pendingChangeRequest.body.oneOf.1.rule.kind","typeLabel":"enum\u003cstring>"},"configuration":{"type":"object","properties":{},"additionalProperties":false,"uniqueKey":"\\items.items.[INDEX].oneOf.10.pendingChangeRequest.body.oneOf.1.rule.configuration","typeLabel":"object"}},"required":["kind"],"additionalProperties":false,"description":"This rule will always be triggered, meaning that if this rule is defined on a policy, the policy will always trigger the policy action, regardless of the activity details.","title":"AlwaysTrigger","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.10.pendingChangeRequest.body.oneOf.1.rule","typeLabel":"AlwaysTrigger · object"},"action":{"oneOf":[{"type":"object","title":"RequestApproval","description":"\nThis action means that activity will first require an Approval process to be completed before it can be executed (or be aborted if someone rejects it during the approval process).\n\nOne or several groups of approvers need to be specified. These groups define who is allowed to approve / reject an activity.\n\nThe activity will only be executed if all approver groups reach their \"quorum\" of approvals. Otherwise, if any one user within any approver group rejects, then the activity is aborted and the call is not executed.\n\nThe example below shows a `RequestApproval` action, configured with one approval group requiring 2 approvals amongst three specific users.\n\n```json\n{\n \"action\": {\n \"kind\": \"RequestApproval\",\n \"autoRejectTimeout\": 60, // minutes\n \"approvalGroups\": [\n {\n \"name\": \"Admins\",\n \"quorum\": 2, // only 2 approvers required in that group \n \"approvers\": {\n \"userId\": {\n \"in\": [\"us-...1\", \"us-...2\", \"us-...3\"],\n }\n }\n }\n ],\n\n }\n}\n```\n\n**Don't lock yourself up**\n\nBy default, users cannot approve an activity they initiated themselves, even if they are in an approval group. To allow this, you must set `initiatorCanApprove: true`.\n\n*Example 1:* For any wallet transfer, a policy is setup to require approval from **1 specific admin user** (eg. the CEO). `initiatorCanApprove` was not set to `true`. If the CEO himself initiates a transfer, no-one can approve his transfer and it's stuck.\n\n*Example 2:* Company has only 3 users. A policy is setup to require approval from **any 3 users** (`quorum: 3`) for any modification of a policy. `initiatorCanApprove` was not set to `true`. In this case, they are locked, and the policy cannot be modified: whoever requests a modification cannot approve, and the policy is therefore always missing one approver. To unlock, they would need to invite a new user and give him the rights to approve as well.\n ","required":["kind","approvalGroups"],"properties":{"kind":{"type":"string","enum":["RequestApproval"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.10.pendingChangeRequest.body.oneOf.1.action.oneOf.0.kind","typeLabel":"enum\u003cstring>"},"approvalGroups":{"type":"array","items":{"type":"object","properties":{"quorum":{"type":"integer","minimum":1,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.10.pendingChangeRequest.body.oneOf.1.action.oneOf.0.approvalGroups.items.[INDEX].quorum","typeLabel":"integer"},"approvers":{"type":"object","properties":{"userId":{"type":"object","properties":{"in":{"type":"array","items":{"type":"string","minLength":1,"uniqueKey":"\\items.items.[INDEX].oneOf.10.pendingChangeRequest.body.oneOf.1.action.oneOf.0.approvalGroups.items.[INDEX].approvers.userId.in.items.[INDEX]","typeLabel":"string"},"minItems":1,"maxItems":100,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.10.pendingChangeRequest.body.oneOf.1.action.oneOf.0.approvalGroups.items.[INDEX].approvers.userId.in","typeLabel":"string[]"}},"required":["in"],"additionalProperties":false,"description":"Users and service accounts who may approve.","uniqueKey":"\\items.items.[INDEX].oneOf.10.pendingChangeRequest.body.oneOf.1.action.oneOf.0.approvalGroups.items.[INDEX].approvers.userId","typeLabel":"object"},"userGroupId":{"type":"object","properties":{"in":{"type":"array","items":{"type":"string","minLength":1,"maxLength":64,"pattern":"^ug-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"User group id.","example":"ug-139tf-f58l8-lsbt6dp47lfsdvgh","uniqueKey":"\\items.items.[INDEX].oneOf.10.pendingChangeRequest.body.oneOf.1.action.oneOf.0.approvalGroups.items.[INDEX].approvers.userGroupId.in.items.[INDEX]","typeLabel":"string"},"minItems":1,"maxItems":100,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.10.pendingChangeRequest.body.oneOf.1.action.oneOf.0.approvalGroups.items.[INDEX].approvers.userGroupId.in","typeLabel":"string[]"}},"required":["in"],"additionalProperties":false,"description":"User groups whose members may approve.","uniqueKey":"\\items.items.[INDEX].oneOf.10.pendingChangeRequest.body.oneOf.1.action.oneOf.0.approvalGroups.items.[INDEX].approvers.userGroupId","typeLabel":"object"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.10.pendingChangeRequest.body.oneOf.1.action.oneOf.0.approvalGroups.items.[INDEX].approvers","typeLabel":"object"},"name":{"type":"string","uniqueKey":"\\items.items.[INDEX].oneOf.10.pendingChangeRequest.body.oneOf.1.action.oneOf.0.approvalGroups.items.[INDEX].name","typeLabel":"string"},"initiatorCanApprove":{"type":"boolean","description":"Whether the initiator of the activity can participate in the approval.","uniqueKey":"\\items.items.[INDEX].oneOf.10.pendingChangeRequest.body.oneOf.1.action.oneOf.0.approvalGroups.items.[INDEX].initiatorCanApprove","typeLabel":"boolean"},"serviceAccountsCanApprove":{"type":"boolean","description":"Whether service accounts can participate in the approval for this group.","uniqueKey":"\\items.items.[INDEX].oneOf.10.pendingChangeRequest.body.oneOf.1.action.oneOf.0.approvalGroups.items.[INDEX].serviceAccountsCanApprove","typeLabel":"boolean"}},"required":["quorum","approvers"],"additionalProperties":false,"uniqueKey":"\\items.items.[INDEX].oneOf.10.pendingChangeRequest.body.oneOf.1.action.oneOf.0.approvalGroups.items.[INDEX]","typeLabel":"object"},"minItems":1,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.10.pendingChangeRequest.body.oneOf.1.action.oneOf.0.approvalGroups","typeLabel":"object[]"},"autoRejectTimeout":{"oneOf":[{"type":"integer","minimum":1,"uniqueKey":"\\items.items.[INDEX].oneOf.10.pendingChangeRequest.body.oneOf.1.action.oneOf.0.autoRejectTimeout.oneOf.0","typeLabel":"integer"},{"type":"null","minimum":1,"uniqueKey":"\\items.items.[INDEX].oneOf.10.pendingChangeRequest.body.oneOf.1.action.oneOf.0.autoRejectTimeout.oneOf.1","typeLabel":"null"}],"uniqueKey":"\\items.items.[INDEX].oneOf.10.pendingChangeRequest.body.oneOf.1.action.oneOf.0.autoRejectTimeout","typeLabel":"integer | null"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.10.pendingChangeRequest.body.oneOf.1.action.oneOf.0","typeLabel":"RequestApproval · object"},{"type":"object","title":"Block","description":"This action means that the activity will be blocked if the policy is triggered.\n\n```json\n{\n \"action\": {\n \"kind\": \"Block\"\n }\n}\n```\n","required":["kind"],"properties":{"kind":{"type":"string","enum":["Block"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.10.pendingChangeRequest.body.oneOf.1.action.oneOf.1.kind","typeLabel":"enum\u003cstring>"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.10.pendingChangeRequest.body.oneOf.1.action.oneOf.1","typeLabel":"Block · object"}],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.10.pendingChangeRequest.body.oneOf.1.action","typeLabel":"RequestApproval · object | Block · object"},"dateCreated":{"type":"string","uniqueKey":"\\items.items.[INDEX].oneOf.10.pendingChangeRequest.body.oneOf.1.dateCreated","typeLabel":"string"},"dateUpdated":{"type":"string","uniqueKey":"\\items.items.[INDEX].oneOf.10.pendingChangeRequest.body.oneOf.1.dateUpdated","typeLabel":"string"},"filters":{"type":"object","properties":{"permissionId":{"type":"object","properties":{"in":{"type":"array","items":{"type":"string","minLength":1,"uniqueKey":"\\items.items.[INDEX].oneOf.10.pendingChangeRequest.body.oneOf.1.filters.permissionId.in.items.[INDEX]","typeLabel":"string"},"minItems":1,"maxItems":100,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.10.pendingChangeRequest.body.oneOf.1.filters.permissionId.in","typeLabel":"string[]"}},"required":["in"],"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.10.pendingChangeRequest.body.oneOf.1.filters.permissionId","typeLabel":"object"}},"required":["permissionId"],"additionalProperties":false,"uniqueKey":"\\items.items.[INDEX].oneOf.10.pendingChangeRequest.body.oneOf.1.filters","typeLabel":"object"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.10.pendingChangeRequest.body.oneOf.1","typeLabel":"Permissions:Assign · object"},{"type":"object","title":"Permissions:Modify","required":["id","name","status","activityKind","rule","action"],"properties":{"id":{"type":"string","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.10.pendingChangeRequest.body.oneOf.2.id","typeLabel":"string"},"name":{"type":"string","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.10.pendingChangeRequest.body.oneOf.2.name","typeLabel":"string"},"status":{"type":"string","enum":["Active","Archived"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.10.pendingChangeRequest.body.oneOf.2.status","typeLabel":"enum\u003cstring>"},"activityKind":{"type":"string","enum":["Permissions:Modify"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.10.pendingChangeRequest.body.oneOf.2.activityKind","typeLabel":"enum\u003cstring>"},"rule":{"type":"object","properties":{"kind":{"type":"string","enum":["AlwaysTrigger"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.10.pendingChangeRequest.body.oneOf.2.rule.kind","typeLabel":"enum\u003cstring>"},"configuration":{"type":"object","properties":{},"additionalProperties":false,"uniqueKey":"\\items.items.[INDEX].oneOf.10.pendingChangeRequest.body.oneOf.2.rule.configuration","typeLabel":"object"}},"required":["kind"],"additionalProperties":false,"description":"This rule will always be triggered, meaning that if this rule is defined on a policy, the policy will always trigger the policy action, regardless of the activity details.","title":"AlwaysTrigger","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.10.pendingChangeRequest.body.oneOf.2.rule","typeLabel":"AlwaysTrigger · object"},"action":{"oneOf":[{"type":"object","title":"RequestApproval","description":"\nThis action means that activity will first require an Approval process to be completed before it can be executed (or be aborted if someone rejects it during the approval process).\n\nOne or several groups of approvers need to be specified. These groups define who is allowed to approve / reject an activity.\n\nThe activity will only be executed if all approver groups reach their \"quorum\" of approvals. Otherwise, if any one user within any approver group rejects, then the activity is aborted and the call is not executed.\n\nThe example below shows a `RequestApproval` action, configured with one approval group requiring 2 approvals amongst three specific users.\n\n```json\n{\n \"action\": {\n \"kind\": \"RequestApproval\",\n \"autoRejectTimeout\": 60, // minutes\n \"approvalGroups\": [\n {\n \"name\": \"Admins\",\n \"quorum\": 2, // only 2 approvers required in that group \n \"approvers\": {\n \"userId\": {\n \"in\": [\"us-...1\", \"us-...2\", \"us-...3\"],\n }\n }\n }\n ],\n\n }\n}\n```\n\n**Don't lock yourself up**\n\nBy default, users cannot approve an activity they initiated themselves, even if they are in an approval group. To allow this, you must set `initiatorCanApprove: true`.\n\n*Example 1:* For any wallet transfer, a policy is setup to require approval from **1 specific admin user** (eg. the CEO). `initiatorCanApprove` was not set to `true`. If the CEO himself initiates a transfer, no-one can approve his transfer and it's stuck.\n\n*Example 2:* Company has only 3 users. A policy is setup to require approval from **any 3 users** (`quorum: 3`) for any modification of a policy. `initiatorCanApprove` was not set to `true`. In this case, they are locked, and the policy cannot be modified: whoever requests a modification cannot approve, and the policy is therefore always missing one approver. To unlock, they would need to invite a new user and give him the rights to approve as well.\n ","required":["kind","approvalGroups"],"properties":{"kind":{"type":"string","enum":["RequestApproval"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.10.pendingChangeRequest.body.oneOf.2.action.oneOf.0.kind","typeLabel":"enum\u003cstring>"},"approvalGroups":{"type":"array","items":{"type":"object","properties":{"quorum":{"type":"integer","minimum":1,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.10.pendingChangeRequest.body.oneOf.2.action.oneOf.0.approvalGroups.items.[INDEX].quorum","typeLabel":"integer"},"approvers":{"type":"object","properties":{"userId":{"type":"object","properties":{"in":{"type":"array","items":{"type":"string","minLength":1,"uniqueKey":"\\items.items.[INDEX].oneOf.10.pendingChangeRequest.body.oneOf.2.action.oneOf.0.approvalGroups.items.[INDEX].approvers.userId.in.items.[INDEX]","typeLabel":"string"},"minItems":1,"maxItems":100,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.10.pendingChangeRequest.body.oneOf.2.action.oneOf.0.approvalGroups.items.[INDEX].approvers.userId.in","typeLabel":"string[]"}},"required":["in"],"additionalProperties":false,"description":"Users and service accounts who may approve.","uniqueKey":"\\items.items.[INDEX].oneOf.10.pendingChangeRequest.body.oneOf.2.action.oneOf.0.approvalGroups.items.[INDEX].approvers.userId","typeLabel":"object"},"userGroupId":{"type":"object","properties":{"in":{"type":"array","items":{"type":"string","minLength":1,"maxLength":64,"pattern":"^ug-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"User group id.","example":"ug-139tf-f58l8-lsbt6dp47lfsdvgh","uniqueKey":"\\items.items.[INDEX].oneOf.10.pendingChangeRequest.body.oneOf.2.action.oneOf.0.approvalGroups.items.[INDEX].approvers.userGroupId.in.items.[INDEX]","typeLabel":"string"},"minItems":1,"maxItems":100,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.10.pendingChangeRequest.body.oneOf.2.action.oneOf.0.approvalGroups.items.[INDEX].approvers.userGroupId.in","typeLabel":"string[]"}},"required":["in"],"additionalProperties":false,"description":"User groups whose members may approve.","uniqueKey":"\\items.items.[INDEX].oneOf.10.pendingChangeRequest.body.oneOf.2.action.oneOf.0.approvalGroups.items.[INDEX].approvers.userGroupId","typeLabel":"object"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.10.pendingChangeRequest.body.oneOf.2.action.oneOf.0.approvalGroups.items.[INDEX].approvers","typeLabel":"object"},"name":{"type":"string","uniqueKey":"\\items.items.[INDEX].oneOf.10.pendingChangeRequest.body.oneOf.2.action.oneOf.0.approvalGroups.items.[INDEX].name","typeLabel":"string"},"initiatorCanApprove":{"type":"boolean","description":"Whether the initiator of the activity can participate in the approval.","uniqueKey":"\\items.items.[INDEX].oneOf.10.pendingChangeRequest.body.oneOf.2.action.oneOf.0.approvalGroups.items.[INDEX].initiatorCanApprove","typeLabel":"boolean"},"serviceAccountsCanApprove":{"type":"boolean","description":"Whether service accounts can participate in the approval for this group.","uniqueKey":"\\items.items.[INDEX].oneOf.10.pendingChangeRequest.body.oneOf.2.action.oneOf.0.approvalGroups.items.[INDEX].serviceAccountsCanApprove","typeLabel":"boolean"}},"required":["quorum","approvers"],"additionalProperties":false,"uniqueKey":"\\items.items.[INDEX].oneOf.10.pendingChangeRequest.body.oneOf.2.action.oneOf.0.approvalGroups.items.[INDEX]","typeLabel":"object"},"minItems":1,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.10.pendingChangeRequest.body.oneOf.2.action.oneOf.0.approvalGroups","typeLabel":"object[]"},"autoRejectTimeout":{"oneOf":[{"type":"integer","minimum":1,"uniqueKey":"\\items.items.[INDEX].oneOf.10.pendingChangeRequest.body.oneOf.2.action.oneOf.0.autoRejectTimeout.oneOf.0","typeLabel":"integer"},{"type":"null","minimum":1,"uniqueKey":"\\items.items.[INDEX].oneOf.10.pendingChangeRequest.body.oneOf.2.action.oneOf.0.autoRejectTimeout.oneOf.1","typeLabel":"null"}],"uniqueKey":"\\items.items.[INDEX].oneOf.10.pendingChangeRequest.body.oneOf.2.action.oneOf.0.autoRejectTimeout","typeLabel":"integer | null"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.10.pendingChangeRequest.body.oneOf.2.action.oneOf.0","typeLabel":"RequestApproval · object"},{"type":"object","title":"Block","description":"This action means that the activity will be blocked if the policy is triggered.\n\n```json\n{\n \"action\": {\n \"kind\": \"Block\"\n }\n}\n```\n","required":["kind"],"properties":{"kind":{"type":"string","enum":["Block"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.10.pendingChangeRequest.body.oneOf.2.action.oneOf.1.kind","typeLabel":"enum\u003cstring>"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.10.pendingChangeRequest.body.oneOf.2.action.oneOf.1","typeLabel":"Block · object"}],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.10.pendingChangeRequest.body.oneOf.2.action","typeLabel":"RequestApproval · object | Block · object"},"dateCreated":{"type":"string","uniqueKey":"\\items.items.[INDEX].oneOf.10.pendingChangeRequest.body.oneOf.2.dateCreated","typeLabel":"string"},"dateUpdated":{"type":"string","uniqueKey":"\\items.items.[INDEX].oneOf.10.pendingChangeRequest.body.oneOf.2.dateUpdated","typeLabel":"string"},"filters":{"type":"object","properties":{"permissionId":{"type":"object","properties":{"in":{"type":"array","items":{"type":"string","minLength":1,"uniqueKey":"\\items.items.[INDEX].oneOf.10.pendingChangeRequest.body.oneOf.2.filters.permissionId.in.items.[INDEX]","typeLabel":"string"},"minItems":1,"maxItems":100,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.10.pendingChangeRequest.body.oneOf.2.filters.permissionId.in","typeLabel":"string[]"}},"required":["in"],"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.10.pendingChangeRequest.body.oneOf.2.filters.permissionId","typeLabel":"object"}},"required":["permissionId"],"additionalProperties":false,"uniqueKey":"\\items.items.[INDEX].oneOf.10.pendingChangeRequest.body.oneOf.2.filters","typeLabel":"object"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.10.pendingChangeRequest.body.oneOf.2","typeLabel":"Permissions:Modify · object"},{"type":"object","title":"Policies:Modify","required":["id","name","status","activityKind","rule","action"],"properties":{"id":{"type":"string","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.10.pendingChangeRequest.body.oneOf.3.id","typeLabel":"string"},"name":{"type":"string","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.10.pendingChangeRequest.body.oneOf.3.name","typeLabel":"string"},"status":{"type":"string","enum":["Active","Archived"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.10.pendingChangeRequest.body.oneOf.3.status","typeLabel":"enum\u003cstring>"},"activityKind":{"type":"string","enum":["Policies:Modify"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.10.pendingChangeRequest.body.oneOf.3.activityKind","typeLabel":"enum\u003cstring>"},"rule":{"type":"object","properties":{"kind":{"type":"string","enum":["AlwaysTrigger"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.10.pendingChangeRequest.body.oneOf.3.rule.kind","typeLabel":"enum\u003cstring>"},"configuration":{"type":"object","properties":{},"additionalProperties":false,"uniqueKey":"\\items.items.[INDEX].oneOf.10.pendingChangeRequest.body.oneOf.3.rule.configuration","typeLabel":"object"}},"required":["kind"],"additionalProperties":false,"description":"This rule will always be triggered, meaning that if this rule is defined on a policy, the policy will always trigger the policy action, regardless of the activity details.","title":"AlwaysTrigger","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.10.pendingChangeRequest.body.oneOf.3.rule","typeLabel":"AlwaysTrigger · object"},"action":{"type":"object","properties":{"kind":{"type":"string","enum":["RequestApproval"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.10.pendingChangeRequest.body.oneOf.3.action.kind","typeLabel":"enum\u003cstring>"},"approvalGroups":{"type":"array","items":{"type":"object","properties":{"quorum":{"type":"integer","minimum":1,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.10.pendingChangeRequest.body.oneOf.3.action.approvalGroups.items.[INDEX].quorum","typeLabel":"integer"},"approvers":{"type":"object","properties":{"userId":{"type":"object","properties":{"in":{"type":"array","items":{"type":"string","minLength":1,"uniqueKey":"\\items.items.[INDEX].oneOf.10.pendingChangeRequest.body.oneOf.3.action.approvalGroups.items.[INDEX].approvers.userId.in.items.[INDEX]","typeLabel":"string"},"minItems":1,"maxItems":100,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.10.pendingChangeRequest.body.oneOf.3.action.approvalGroups.items.[INDEX].approvers.userId.in","typeLabel":"string[]"}},"required":["in"],"additionalProperties":false,"description":"Users and service accounts who may approve.","uniqueKey":"\\items.items.[INDEX].oneOf.10.pendingChangeRequest.body.oneOf.3.action.approvalGroups.items.[INDEX].approvers.userId","typeLabel":"object"},"userGroupId":{"type":"object","properties":{"in":{"type":"array","items":{"type":"string","minLength":1,"maxLength":64,"pattern":"^ug-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"User group id.","example":"ug-139tf-f58l8-lsbt6dp47lfsdvgh","uniqueKey":"\\items.items.[INDEX].oneOf.10.pendingChangeRequest.body.oneOf.3.action.approvalGroups.items.[INDEX].approvers.userGroupId.in.items.[INDEX]","typeLabel":"string"},"minItems":1,"maxItems":100,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.10.pendingChangeRequest.body.oneOf.3.action.approvalGroups.items.[INDEX].approvers.userGroupId.in","typeLabel":"string[]"}},"required":["in"],"additionalProperties":false,"description":"User groups whose members may approve.","uniqueKey":"\\items.items.[INDEX].oneOf.10.pendingChangeRequest.body.oneOf.3.action.approvalGroups.items.[INDEX].approvers.userGroupId","typeLabel":"object"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.10.pendingChangeRequest.body.oneOf.3.action.approvalGroups.items.[INDEX].approvers","typeLabel":"object"},"name":{"type":"string","uniqueKey":"\\items.items.[INDEX].oneOf.10.pendingChangeRequest.body.oneOf.3.action.approvalGroups.items.[INDEX].name","typeLabel":"string"},"initiatorCanApprove":{"type":"boolean","description":"Whether the initiator of the activity can participate in the approval.","uniqueKey":"\\items.items.[INDEX].oneOf.10.pendingChangeRequest.body.oneOf.3.action.approvalGroups.items.[INDEX].initiatorCanApprove","typeLabel":"boolean"},"serviceAccountsCanApprove":{"type":"boolean","description":"Whether service accounts can participate in the approval for this group.","uniqueKey":"\\items.items.[INDEX].oneOf.10.pendingChangeRequest.body.oneOf.3.action.approvalGroups.items.[INDEX].serviceAccountsCanApprove","typeLabel":"boolean"}},"required":["quorum","approvers"],"additionalProperties":false,"uniqueKey":"\\items.items.[INDEX].oneOf.10.pendingChangeRequest.body.oneOf.3.action.approvalGroups.items.[INDEX]","typeLabel":"object"},"minItems":1,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.10.pendingChangeRequest.body.oneOf.3.action.approvalGroups","typeLabel":"object[]"},"autoRejectTimeout":{"oneOf":[{"type":"integer","minimum":1,"uniqueKey":"\\items.items.[INDEX].oneOf.10.pendingChangeRequest.body.oneOf.3.action.autoRejectTimeout.oneOf.0","typeLabel":"integer"},{"type":"null","minimum":1,"uniqueKey":"\\items.items.[INDEX].oneOf.10.pendingChangeRequest.body.oneOf.3.action.autoRejectTimeout.oneOf.1","typeLabel":"null"}],"uniqueKey":"\\items.items.[INDEX].oneOf.10.pendingChangeRequest.body.oneOf.3.action.autoRejectTimeout","typeLabel":"integer | null"}},"required":["kind","approvalGroups"],"additionalProperties":false,"description":"\nThis action means that activity will first require an Approval process to be completed before it can be executed (or be aborted if someone rejects it during the approval process).\n\nOne or several groups of approvers need to be specified. These groups define who is allowed to approve / reject an activity.\n\nThe activity will only be executed if all approver groups reach their \"quorum\" of approvals. Otherwise, if any one user within any approver group rejects, then the activity is aborted and the call is not executed.\n\nThe example below shows a `RequestApproval` action, configured with one approval group requiring 2 approvals amongst three specific users.\n\n```json\n{\n \"action\": {\n \"kind\": \"RequestApproval\",\n \"autoRejectTimeout\": 60, // minutes\n \"approvalGroups\": [\n {\n \"name\": \"Admins\",\n \"quorum\": 2, // only 2 approvers required in that group \n \"approvers\": {\n \"userId\": {\n \"in\": [\"us-...1\", \"us-...2\", \"us-...3\"],\n }\n }\n }\n ],\n\n }\n}\n```\n\n**Don't lock yourself up**\n\nBy default, users cannot approve an activity they initiated themselves, even if they are in an approval group. To allow this, you must set `initiatorCanApprove: true`.\n\n*Example 1:* For any wallet transfer, a policy is setup to require approval from **1 specific admin user** (eg. the CEO). `initiatorCanApprove` was not set to `true`. If the CEO himself initiates a transfer, no-one can approve his transfer and it's stuck.\n\n*Example 2:* Company has only 3 users. A policy is setup to require approval from **any 3 users** (`quorum: 3`) for any modification of a policy. `initiatorCanApprove` was not set to `true`. In this case, they are locked, and the policy cannot be modified: whoever requests a modification cannot approve, and the policy is therefore always missing one approver. To unlock, they would need to invite a new user and give him the rights to approve as well.\n ","title":"RequestApproval","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.10.pendingChangeRequest.body.oneOf.3.action","typeLabel":"RequestApproval · object"},"dateCreated":{"type":"string","uniqueKey":"\\items.items.[INDEX].oneOf.10.pendingChangeRequest.body.oneOf.3.dateCreated","typeLabel":"string"},"dateUpdated":{"type":"string","uniqueKey":"\\items.items.[INDEX].oneOf.10.pendingChangeRequest.body.oneOf.3.dateUpdated","typeLabel":"string"},"filters":{"type":"object","properties":{"policyId":{"type":"object","properties":{"in":{"type":"array","items":{"type":"string","minLength":1,"uniqueKey":"\\items.items.[INDEX].oneOf.10.pendingChangeRequest.body.oneOf.3.filters.policyId.in.items.[INDEX]","typeLabel":"string"},"minItems":1,"maxItems":100,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.10.pendingChangeRequest.body.oneOf.3.filters.policyId.in","typeLabel":"string[]"}},"required":["in"],"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.10.pendingChangeRequest.body.oneOf.3.filters.policyId","typeLabel":"object"}},"required":["policyId"],"additionalProperties":false,"uniqueKey":"\\items.items.[INDEX].oneOf.10.pendingChangeRequest.body.oneOf.3.filters","typeLabel":"object"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.10.pendingChangeRequest.body.oneOf.3","typeLabel":"Policies:Modify · object"},{"type":"object","title":"Registry:ContractSchemas:Modify","required":["id","name","status","activityKind","rule","action"],"properties":{"id":{"type":"string","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.10.pendingChangeRequest.body.oneOf.4.id","typeLabel":"string"},"name":{"type":"string","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.10.pendingChangeRequest.body.oneOf.4.name","typeLabel":"string"},"status":{"type":"string","enum":["Active","Archived"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.10.pendingChangeRequest.body.oneOf.4.status","typeLabel":"enum\u003cstring>"},"activityKind":{"type":"string","enum":["Registry:ContractSchemas:Modify"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.10.pendingChangeRequest.body.oneOf.4.activityKind","typeLabel":"enum\u003cstring>"},"rule":{"type":"object","properties":{"kind":{"type":"string","enum":["AlwaysTrigger"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.10.pendingChangeRequest.body.oneOf.4.rule.kind","typeLabel":"enum\u003cstring>"},"configuration":{"type":"object","properties":{},"additionalProperties":false,"uniqueKey":"\\items.items.[INDEX].oneOf.10.pendingChangeRequest.body.oneOf.4.rule.configuration","typeLabel":"object"}},"required":["kind"],"additionalProperties":false,"description":"This rule will always be triggered, meaning that if this rule is defined on a policy, the policy will always trigger the policy action, regardless of the activity details.","title":"AlwaysTrigger","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.10.pendingChangeRequest.body.oneOf.4.rule","typeLabel":"AlwaysTrigger · object"},"action":{"oneOf":[{"type":"object","title":"RequestApproval","description":"\nThis action means that activity will first require an Approval process to be completed before it can be executed (or be aborted if someone rejects it during the approval process).\n\nOne or several groups of approvers need to be specified. These groups define who is allowed to approve / reject an activity.\n\nThe activity will only be executed if all approver groups reach their \"quorum\" of approvals. Otherwise, if any one user within any approver group rejects, then the activity is aborted and the call is not executed.\n\nThe example below shows a `RequestApproval` action, configured with one approval group requiring 2 approvals amongst three specific users.\n\n```json\n{\n \"action\": {\n \"kind\": \"RequestApproval\",\n \"autoRejectTimeout\": 60, // minutes\n \"approvalGroups\": [\n {\n \"name\": \"Admins\",\n \"quorum\": 2, // only 2 approvers required in that group \n \"approvers\": {\n \"userId\": {\n \"in\": [\"us-...1\", \"us-...2\", \"us-...3\"],\n }\n }\n }\n ],\n\n }\n}\n```\n\n**Don't lock yourself up**\n\nBy default, users cannot approve an activity they initiated themselves, even if they are in an approval group. To allow this, you must set `initiatorCanApprove: true`.\n\n*Example 1:* For any wallet transfer, a policy is setup to require approval from **1 specific admin user** (eg. the CEO). `initiatorCanApprove` was not set to `true`. If the CEO himself initiates a transfer, no-one can approve his transfer and it's stuck.\n\n*Example 2:* Company has only 3 users. A policy is setup to require approval from **any 3 users** (`quorum: 3`) for any modification of a policy. `initiatorCanApprove` was not set to `true`. In this case, they are locked, and the policy cannot be modified: whoever requests a modification cannot approve, and the policy is therefore always missing one approver. To unlock, they would need to invite a new user and give him the rights to approve as well.\n ","required":["kind","approvalGroups"],"properties":{"kind":{"type":"string","enum":["RequestApproval"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.10.pendingChangeRequest.body.oneOf.4.action.oneOf.0.kind","typeLabel":"enum\u003cstring>"},"approvalGroups":{"type":"array","items":{"type":"object","properties":{"quorum":{"type":"integer","minimum":1,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.10.pendingChangeRequest.body.oneOf.4.action.oneOf.0.approvalGroups.items.[INDEX].quorum","typeLabel":"integer"},"approvers":{"type":"object","properties":{"userId":{"type":"object","properties":{"in":{"type":"array","items":{"type":"string","minLength":1,"uniqueKey":"\\items.items.[INDEX].oneOf.10.pendingChangeRequest.body.oneOf.4.action.oneOf.0.approvalGroups.items.[INDEX].approvers.userId.in.items.[INDEX]","typeLabel":"string"},"minItems":1,"maxItems":100,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.10.pendingChangeRequest.body.oneOf.4.action.oneOf.0.approvalGroups.items.[INDEX].approvers.userId.in","typeLabel":"string[]"}},"required":["in"],"additionalProperties":false,"description":"Users and service accounts who may approve.","uniqueKey":"\\items.items.[INDEX].oneOf.10.pendingChangeRequest.body.oneOf.4.action.oneOf.0.approvalGroups.items.[INDEX].approvers.userId","typeLabel":"object"},"userGroupId":{"type":"object","properties":{"in":{"type":"array","items":{"type":"string","minLength":1,"maxLength":64,"pattern":"^ug-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"User group id.","example":"ug-139tf-f58l8-lsbt6dp47lfsdvgh","uniqueKey":"\\items.items.[INDEX].oneOf.10.pendingChangeRequest.body.oneOf.4.action.oneOf.0.approvalGroups.items.[INDEX].approvers.userGroupId.in.items.[INDEX]","typeLabel":"string"},"minItems":1,"maxItems":100,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.10.pendingChangeRequest.body.oneOf.4.action.oneOf.0.approvalGroups.items.[INDEX].approvers.userGroupId.in","typeLabel":"string[]"}},"required":["in"],"additionalProperties":false,"description":"User groups whose members may approve.","uniqueKey":"\\items.items.[INDEX].oneOf.10.pendingChangeRequest.body.oneOf.4.action.oneOf.0.approvalGroups.items.[INDEX].approvers.userGroupId","typeLabel":"object"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.10.pendingChangeRequest.body.oneOf.4.action.oneOf.0.approvalGroups.items.[INDEX].approvers","typeLabel":"object"},"name":{"type":"string","uniqueKey":"\\items.items.[INDEX].oneOf.10.pendingChangeRequest.body.oneOf.4.action.oneOf.0.approvalGroups.items.[INDEX].name","typeLabel":"string"},"initiatorCanApprove":{"type":"boolean","description":"Whether the initiator of the activity can participate in the approval.","uniqueKey":"\\items.items.[INDEX].oneOf.10.pendingChangeRequest.body.oneOf.4.action.oneOf.0.approvalGroups.items.[INDEX].initiatorCanApprove","typeLabel":"boolean"},"serviceAccountsCanApprove":{"type":"boolean","description":"Whether service accounts can participate in the approval for this group.","uniqueKey":"\\items.items.[INDEX].oneOf.10.pendingChangeRequest.body.oneOf.4.action.oneOf.0.approvalGroups.items.[INDEX].serviceAccountsCanApprove","typeLabel":"boolean"}},"required":["quorum","approvers"],"additionalProperties":false,"uniqueKey":"\\items.items.[INDEX].oneOf.10.pendingChangeRequest.body.oneOf.4.action.oneOf.0.approvalGroups.items.[INDEX]","typeLabel":"object"},"minItems":1,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.10.pendingChangeRequest.body.oneOf.4.action.oneOf.0.approvalGroups","typeLabel":"object[]"},"autoRejectTimeout":{"oneOf":[{"type":"integer","minimum":1,"uniqueKey":"\\items.items.[INDEX].oneOf.10.pendingChangeRequest.body.oneOf.4.action.oneOf.0.autoRejectTimeout.oneOf.0","typeLabel":"integer"},{"type":"null","minimum":1,"uniqueKey":"\\items.items.[INDEX].oneOf.10.pendingChangeRequest.body.oneOf.4.action.oneOf.0.autoRejectTimeout.oneOf.1","typeLabel":"null"}],"uniqueKey":"\\items.items.[INDEX].oneOf.10.pendingChangeRequest.body.oneOf.4.action.oneOf.0.autoRejectTimeout","typeLabel":"integer | null"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.10.pendingChangeRequest.body.oneOf.4.action.oneOf.0","typeLabel":"RequestApproval · object"},{"type":"object","title":"Block","description":"This action means that the activity will be blocked if the policy is triggered.\n\n```json\n{\n \"action\": {\n \"kind\": \"Block\"\n }\n}\n```\n","required":["kind"],"properties":{"kind":{"type":"string","enum":["Block"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.10.pendingChangeRequest.body.oneOf.4.action.oneOf.1.kind","typeLabel":"enum\u003cstring>"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.10.pendingChangeRequest.body.oneOf.4.action.oneOf.1","typeLabel":"Block · object"}],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.10.pendingChangeRequest.body.oneOf.4.action","typeLabel":"RequestApproval · object | Block · object"},"dateCreated":{"type":"string","uniqueKey":"\\items.items.[INDEX].oneOf.10.pendingChangeRequest.body.oneOf.4.dateCreated","typeLabel":"string"},"dateUpdated":{"type":"string","uniqueKey":"\\items.items.[INDEX].oneOf.10.pendingChangeRequest.body.oneOf.4.dateUpdated","typeLabel":"string"},"filters":{"type":"object","properties":{},"uniqueKey":"\\items.items.[INDEX].oneOf.10.pendingChangeRequest.body.oneOf.4.filters","typeLabel":"object"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.10.pendingChangeRequest.body.oneOf.4","typeLabel":"Registry:ContractSchemas:Modify · object"},{"type":"object","title":"Wallets:Sign","required":["id","name","status","activityKind","rule","action"],"properties":{"id":{"type":"string","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.10.pendingChangeRequest.body.oneOf.5.id","typeLabel":"string"},"name":{"type":"string","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.10.pendingChangeRequest.body.oneOf.5.name","typeLabel":"string"},"status":{"type":"string","enum":["Active","Archived"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.10.pendingChangeRequest.body.oneOf.5.status","typeLabel":"enum\u003cstring>"},"activityKind":{"type":"string","enum":["Wallets:Sign"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.10.pendingChangeRequest.body.oneOf.5.activityKind","typeLabel":"enum\u003cstring>"},"rule":{"oneOf":[{"type":"object","title":"AlwaysTrigger","description":"This rule will always be triggered, meaning that if this rule is defined on a policy, the policy will always trigger the policy action, regardless of the activity details.","required":["kind"],"properties":{"kind":{"type":"string","enum":["AlwaysTrigger"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.10.pendingChangeRequest.body.oneOf.5.rule.oneOf.0.kind","typeLabel":"enum\u003cstring>"},"configuration":{"type":"object","properties":{},"additionalProperties":false,"uniqueKey":"\\items.items.[INDEX].oneOf.10.pendingChangeRequest.body.oneOf.5.rule.oneOf.0.configuration","typeLabel":"object"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.10.pendingChangeRequest.body.oneOf.5.rule.oneOf.0","typeLabel":"AlwaysTrigger · object"},{"type":"object","title":"TransactionRecipientWhitelist","description":"This rule will trigger if the destination address *is NOT whitelisted*.","required":["kind","configuration"],"properties":{"kind":{"type":"string","enum":["TransactionRecipientWhitelist"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.10.pendingChangeRequest.body.oneOf.5.rule.oneOf.1.kind","typeLabel":"enum\u003cstring>"},"configuration":{"type":"object","properties":{"addresses":{"type":"array","items":{"type":"string","minLength":1,"uniqueKey":"\\items.items.[INDEX].oneOf.10.pendingChangeRequest.body.oneOf.5.rule.oneOf.1.configuration.addresses.items.[INDEX]","typeLabel":"string"},"description":"Whitelisted recipient addresses","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.10.pendingChangeRequest.body.oneOf.5.rule.oneOf.1.configuration.addresses","typeLabel":"string[]"}},"required":["addresses"],"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.10.pendingChangeRequest.body.oneOf.5.rule.oneOf.1.configuration","typeLabel":"object"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.10.pendingChangeRequest.body.oneOf.5.rule.oneOf.1","typeLabel":"TransactionRecipientWhitelist · object"},{"type":"object","title":"TransactionAmountLimit","description":"This rule will trigger if the wallet activity detected is transferring some value whose amount is equal to or greater than a given limit. The limit is inclusive: a transfer whose value exactly equals the limit also triggers.\n\nThe limit is expressed in a fiat `currency` and evaluated against the market value of the transfer. To set a threshold in the asset's own units instead, use `TransactionAmountLimitNominal`.\n\nNote: If the amount of the wallet activity cannot be evaluated for any reason (eg. market prices are not available, or eg. the amount cannot be inferred from a wallet signature request, etc.), by default the rule will trigger the policy (this is called \"failing closed\" and is generally considered a security best practice).","required":["kind","configuration"],"properties":{"kind":{"type":"string","enum":["TransactionAmountLimit"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.10.pendingChangeRequest.body.oneOf.5.rule.oneOf.2.kind","typeLabel":"enum\u003cstring>"},"configuration":{"type":"object","properties":{"limit":{"type":"number","description":"Amount limit in `currency`","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.10.pendingChangeRequest.body.oneOf.5.rule.oneOf.2.configuration.limit","typeLabel":"number"},"currency":{"type":"string","enum":["USD"],"description":"Fiat currency, currently only `USD`","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.10.pendingChangeRequest.body.oneOf.5.rule.oneOf.2.configuration.currency","typeLabel":"enum\u003cstring>"}},"required":["limit","currency"],"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.10.pendingChangeRequest.body.oneOf.5.rule.oneOf.2.configuration","typeLabel":"object"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.10.pendingChangeRequest.body.oneOf.5.rule.oneOf.2","typeLabel":"TransactionAmountLimit · object"},{"type":"object","title":"TransactionAmountLimitNominal","description":"This rule will trigger if the wallet activity detected is transferring more of a listed asset than that asset's limit.\n\nEach limit is expressed in the minimum denomination of its own asset and compared against the transferred amount directly, so the verdict needs no market data and does not move with a price. To set a threshold on the fiat value of a transfer instead, use `TransactionAmountLimit`.\n\nLimits are asset exact: an asset is identified by its network and its Dfns token identifier, so a wrapped or staked derivative is a different asset from the thing it tracks, and a transfer of an asset the rule does not list will not trigger it.\n\nNote: If the transferred amount or the asset cannot be determined for any reason, by default the rule will trigger the policy (this is called \"failing closed\" and is generally considered a security best practice).","required":["kind","configuration"],"properties":{"kind":{"type":"string","enum":["TransactionAmountLimitNominal"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.10.pendingChangeRequest.body.oneOf.5.rule.oneOf.3.kind","typeLabel":"enum\u003cstring>"},"configuration":{"type":"object","properties":{"assets":{"type":"array","items":{"type":"object","properties":{"network":{"type":"string","title":"Network","description":"The network the asset lives on.","enum":["Algorand","AlgorandTestnet","Aptos","AptosTestnet","ArbitrumOne","ArbitrumSepolia","Arc","ArcTestnet","Areum","AvalancheC","AvalancheCFuji","Base","BaseSepolia","Berachain","BerachainBepolia","Bitcoin","BitcoinSignet","BitcoinTestnet4","BitcoinCash","Bob","BobSepolia","Bsc","BscTestnet","Canton","CantonTestnet","Cardano","CardanoPreprod","Concordium","ConcordiumTestnet","Celo","CeloSepolia","Codex","CodexSepolia","CosmosHub4","CosmosIcsTestnet","Dogecoin","DogecoinTestnet","Ethereum","EthereumClassic","EthereumClassicMordor","EthereumSepolia","EthereumHoodi","FlareC","FlareCCoston2","FlowEvm","FlowEvmTestnet","Hedera","HederaTestnet","HyperEvm","HyperEvmTestnet","Ink","InkSepolia","InternetComputer","Ion","IonTestnet","Iota","IotaTestnet","Kusama","KusamaAssetHub","Litecoin","LitecoinTestnet","Monad","MonadTestnet","Movement","MovementTestnet","Near","NearTestnet","Optimism","OptimismSepolia","Origyn","Plasma","PlasmaTestnet","Plume","PlumeSepolia","Paseo","PaseoAssetHub","Polkadot","PolkadotAssetHub","Polygon","PolygonAmoy","Polymesh","PolymeshTestnet","Rayls","RaylsTestnet","Robinhood","RobinhoodSepolia","SeiAtlantic2","SeiPacific1","Solana","SolanaDevnet","Sonic","SonicTestnet","Starknet","StarknetSepolia","Stellar","StellarTestnet","Sui","SuiTestnet","Tezos","TezosShadownet","Tempo","TempoModerato","Tsc","TscTestnet1","Ton","TonTestnet","Tron","TronNile","Westend","WestendAssetHub","Xdc","XdcApothem","XLayer","XLayerSepolia","XrpLedger","XrpLedgerTestnet"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.10.pendingChangeRequest.body.oneOf.5.rule.oneOf.3.configuration.assets.items.[INDEX].network","typeLabel":"enum\u003cstring>"},"tid":{"type":"string","minLength":1,"maxLength":200,"pattern":"^[a-z0-9_]+:[^\\s](?:[ ]?[^\\s])*$","description":"The Dfns token identifier of the asset, for example `native:eth` or `erc20:0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48`. Must be canonical: token contract addresses on hex based networks are lower cased.","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.10.pendingChangeRequest.body.oneOf.5.rule.oneOf.3.configuration.assets.items.[INDEX].tid","typeLabel":"string"},"limit":{"type":"string","pattern":"^\\d+$","description":"Amount limit in the minimum denomination of the asset, as an integer string, matching how a transfer expresses its amount. For an 18 decimal token `\"5000000000000000000\"` is 5 whole tokens.","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.10.pendingChangeRequest.body.oneOf.5.rule.oneOf.3.configuration.assets.items.[INDEX].limit","typeLabel":"string"}},"required":["network","tid","limit"],"additionalProperties":false,"uniqueKey":"\\items.items.[INDEX].oneOf.10.pendingChangeRequest.body.oneOf.5.rule.oneOf.3.configuration.assets.items.[INDEX]","typeLabel":"object"},"minItems":1,"maxItems":100,"description":"The assets this rule applies to, each with its own limit. A transfer of an asset that is not listed does not trigger the rule. The limit applies to each matching transfer individually; nothing is accumulated across transfers.","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.10.pendingChangeRequest.body.oneOf.5.rule.oneOf.3.configuration.assets","typeLabel":"object[]"}},"required":["assets"],"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.10.pendingChangeRequest.body.oneOf.5.rule.oneOf.3.configuration","typeLabel":"object"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.10.pendingChangeRequest.body.oneOf.5.rule.oneOf.3","typeLabel":"TransactionAmountLimitNominal · object"},{"type":"object","title":"TransactionAmountVelocity","description":"This rule will trigger if the cumulative amount transferred from a given wallet within a given timeframe is greater than a specified limit. The aggregate amount evaluated is based only on the wallet that triggered the policy.","required":["kind","configuration"],"properties":{"kind":{"type":"string","enum":["TransactionAmountVelocity"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.10.pendingChangeRequest.body.oneOf.5.rule.oneOf.4.kind","typeLabel":"enum\u003cstring>"},"configuration":{"type":"object","properties":{"limit":{"type":"number","description":"Amount limit in `currency`","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.10.pendingChangeRequest.body.oneOf.5.rule.oneOf.4.configuration.limit","typeLabel":"number"},"currency":{"type":"string","enum":["USD"],"description":"Currency for the amount limit above","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.10.pendingChangeRequest.body.oneOf.5.rule.oneOf.4.configuration.currency","typeLabel":"enum\u003cstring>"},"timeframe":{"type":"integer","minimum":1,"maximum":43200,"description":"Time period in minutes. Minimum 1, Maximum 43,200.","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.10.pendingChangeRequest.body.oneOf.5.rule.oneOf.4.configuration.timeframe","typeLabel":"integer"}},"required":["limit","currency","timeframe"],"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.10.pendingChangeRequest.body.oneOf.5.rule.oneOf.4.configuration","typeLabel":"object"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.10.pendingChangeRequest.body.oneOf.5.rule.oneOf.4","typeLabel":"TransactionAmountVelocity · object"},{"type":"object","title":"TransactionCountVelocity","description":"This rule will trigger if the number of wallet activities for a given wallet within a given timeframe, is greater than a specified limit. The aggregate number of transactions evaluated is based only on the wallet that triggered the policy.","required":["kind","configuration"],"properties":{"kind":{"type":"string","enum":["TransactionCountVelocity"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.10.pendingChangeRequest.body.oneOf.5.rule.oneOf.5.kind","typeLabel":"enum\u003cstring>"},"configuration":{"type":"object","properties":{"limit":{"type":"number","description":"Count limit","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.10.pendingChangeRequest.body.oneOf.5.rule.oneOf.5.configuration.limit","typeLabel":"number"},"timeframe":{"type":"integer","minimum":1,"maximum":43200,"description":"Time period in minutes. Minimum 1, Maximum 43,200.","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.10.pendingChangeRequest.body.oneOf.5.rule.oneOf.5.configuration.timeframe","typeLabel":"integer"}},"required":["limit","timeframe"],"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.10.pendingChangeRequest.body.oneOf.5.rule.oneOf.5.configuration","typeLabel":"object"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.10.pendingChangeRequest.body.oneOf.5.rule.oneOf.5","typeLabel":"TransactionCountVelocity · object"},{"type":"object","title":"ChainalysisTransactionPrescreening","description":"\n\u003cInfo>\nThis rule can only be used once the Chainalysis integration is activated from the Dfns dashboard settings. (see more on [Chainalysis](https://docs.dfns.co/integrations/aml-kyt/chainalysis) integration page).\n\u003c/Info>\n\nIt's a rule based on [Chainalysis](https://docs.dfns.co/integrations/aml-kyt/chainalysis) KYT integration (Know-Your-Transaction). Upon transfer attempt, we will first register the transfer with Chainalysis (as a [\"withdrawal attempt\"](https://docs.chainalysis.com/api/kyt/#registration-register-a-withdrawal-attempt)), and fetch the screening results (alerts, exposures, addresses detected). Based on the results, and the configuration of this rule, the policy will be triggered.\n\nIt's called \"Pre\"-screening, because the scanned transaction is not on chain yet, it's still a transaction attempt (before the transaction actually make it on chain).\n\n```json\n{\n \"rule\": {\n \"kind\": \"ChainalysisTransactionPrescreening\",\n \"configuration\": {\n \"alerts\": {\n \"alertLevel\": \"LOW\",\n \"categoryIds\": []\n },\n \"exposures\": {\n \"direct\": {\n \"categoryIds\": []\n }\n },\n \"addresses\": {\n \"categoryIds\": []\n },\n \"fallbackBehaviours\": {\n \"skipUnscreenableTransaction\": false,\n \"skipUnsupportedNetwork\": false,\n \"skipUnsupportedAsset\": false,\n \"skipChainalysisFailure\": false\n }\n }\n }\n}\n```\n\n**Configuration**\n\n| Property | Type | Description |\n| --- | --- | --- |\n| `alerts`\u003cbr>\u003cbr>`.alertLevel`* | `string` | Minimum alert level above which the rule should trigger, if any [alert is returned in Chainalysis results](https://docs.chainalysis.com/api/kyt/#withdrawal-attempts-get-alerts). Can be `LOW`, `MEDIUM`, `HIGH`, or `SEVERE` |\n| `alerts`\u003cbr>\u003cbr>`.categoryIds`* | list of integers | List of Chainalysis category IDs (see [here](https://docs.chainalysis.com/api/kyt/#categories)). If you leave this list empty, alerts of any category will trigger the rule. Otherwise, if you only want the rule to trigger on specific categories, you can specify some in the list. |\n| `exposures`\u003cbr>\u003cbr>`.direct`\u003cbr>\u003cbr>`.categoryIds`* | list of integers | List of Chainalysis category IDs (see [here](https://docs.chainalysis.com/api/kyt/#categories)). If you leave this list empty, a [direct exposure](https://docs.chainalysis.com/api/kyt/#withdrawal-attempts-get-direct-exposure) of any category detected by chainalysis will trigger the rule. Otherwise, if you only want the rule to trigger on specific categories, you can specify some in the list. |\n| `addresses`\u003cbr>\u003cbr>`.categoryIds`* | list of integers | List of Chainalysis category IDs (see [here](https://docs.chainalysis.com/api/kyt/#categories)). If you leave this list empty, an [address](https://docs.chainalysis.com/api/kyt/#withdrawal-attempts-get-address-identifications) of any category identified by chainalysis will trigger the rule. Otherwise, if you only want the rule to trigger on specific categories, you can specify some in the list. |\n| `fallbackBehaviours`\u003cbr>\u003cbr>`.skipUnscreenableTransaction`* | boolean | Behaviour if the wallet activity is not screenable (eg. if it's a signature request of a hash). If true, a transaction which is \"unscreenable\" will just be skipped, and policy will not trigger |\n| `fallbackBehaviours.skipUnsupportedNetwork`* | boolean | Behaviour if the wallet activity is on a network not supported by chainalysis, or not yet supported in the dfns-chainalysis integration. If true, an unsupported network will just be skipped, and policy will not trigger |\n| `fallbackBehaviours.skipUnsupportedAsset`* | boolean | Behaviour if the wallet activity is with a asset not supported by chainalysis, or not yet supported in the dfns-chainalysis integration. If true, an unsupported asset will just be skipped, and policy will not trigger |\n| `fallbackBehaviours.skipChainalysisFailure`* | boolean | Behaviour if any issue with Chainalysis calls (timeout, results took too long, rate limiting errors, any error). If true, will skip if any error happens |\n\n","required":["kind","configuration"],"properties":{"kind":{"type":"string","enum":["ChainalysisTransactionPrescreening"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.10.pendingChangeRequest.body.oneOf.5.rule.oneOf.6.kind","typeLabel":"enum\u003cstring>"},"configuration":{"type":"object","properties":{"alerts":{"type":"object","properties":{"alertLevel":{"type":"string","enum":["LOW","MEDIUM","HIGH","SEVERE"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.10.pendingChangeRequest.body.oneOf.5.rule.oneOf.6.configuration.alerts.alertLevel","typeLabel":"enum\u003cstring>"},"categoryIds":{"type":"array","items":{"type":"integer","exclusiveMinimum":0,"uniqueKey":"\\items.items.[INDEX].oneOf.10.pendingChangeRequest.body.oneOf.5.rule.oneOf.6.configuration.alerts.categoryIds.items.[INDEX]","typeLabel":"integer"},"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.10.pendingChangeRequest.body.oneOf.5.rule.oneOf.6.configuration.alerts.categoryIds","typeLabel":"integer[]"}},"required":["alertLevel","categoryIds"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.10.pendingChangeRequest.body.oneOf.5.rule.oneOf.6.configuration.alerts","typeLabel":"object"},"exposures":{"type":"object","properties":{"direct":{"type":"object","properties":{"categoryIds":{"type":"array","items":{"type":"integer","exclusiveMinimum":0,"uniqueKey":"\\items.items.[INDEX].oneOf.10.pendingChangeRequest.body.oneOf.5.rule.oneOf.6.configuration.exposures.direct.categoryIds.items.[INDEX]","typeLabel":"integer"},"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.10.pendingChangeRequest.body.oneOf.5.rule.oneOf.6.configuration.exposures.direct.categoryIds","typeLabel":"integer[]"}},"required":["categoryIds"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.10.pendingChangeRequest.body.oneOf.5.rule.oneOf.6.configuration.exposures.direct","typeLabel":"object"}},"required":["direct"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.10.pendingChangeRequest.body.oneOf.5.rule.oneOf.6.configuration.exposures","typeLabel":"object"},"addresses":{"type":"object","properties":{"categoryIds":{"type":"array","items":{"type":"integer","exclusiveMinimum":0,"uniqueKey":"\\items.items.[INDEX].oneOf.10.pendingChangeRequest.body.oneOf.5.rule.oneOf.6.configuration.addresses.categoryIds.items.[INDEX]","typeLabel":"integer"},"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.10.pendingChangeRequest.body.oneOf.5.rule.oneOf.6.configuration.addresses.categoryIds","typeLabel":"integer[]"}},"required":["categoryIds"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.10.pendingChangeRequest.body.oneOf.5.rule.oneOf.6.configuration.addresses","typeLabel":"object"},"fallbackBehaviours":{"type":"object","properties":{"skipUnscreenableTransaction":{"type":"boolean","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.10.pendingChangeRequest.body.oneOf.5.rule.oneOf.6.configuration.fallbackBehaviours.skipUnscreenableTransaction","typeLabel":"boolean"},"skipUnsupportedNetwork":{"type":"boolean","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.10.pendingChangeRequest.body.oneOf.5.rule.oneOf.6.configuration.fallbackBehaviours.skipUnsupportedNetwork","typeLabel":"boolean"},"skipUnsupportedAsset":{"type":"boolean","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.10.pendingChangeRequest.body.oneOf.5.rule.oneOf.6.configuration.fallbackBehaviours.skipUnsupportedAsset","typeLabel":"boolean"},"skipChainalysisFailure":{"type":"boolean","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.10.pendingChangeRequest.body.oneOf.5.rule.oneOf.6.configuration.fallbackBehaviours.skipChainalysisFailure","typeLabel":"boolean"}},"required":["skipUnscreenableTransaction","skipUnsupportedNetwork","skipUnsupportedAsset","skipChainalysisFailure"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.10.pendingChangeRequest.body.oneOf.5.rule.oneOf.6.configuration.fallbackBehaviours","typeLabel":"object"},"userIdTemplate":{"type":"string","minLength":1,"maxLength":50,"pattern":"^([a-zA-Z0-9_:-]|{wallet\\.id}|{wallet\\.externalId})+$","default":"dfns","description":"**Deprecated** — set `userIdTemplate` on the Chainalysis integration setting instead; when set there, the integration-level template takes precedence over this one.\n\nValue sent to Chainalysis as the \"user ID\". Used by Chainalysis for grouping transaction screenings.\n \nThis template can include variables, included in brackets. The following variables are currently supported: `{wallet.id}` and `{wallet.externalId}`.\nAs an example, if you set `userIdTemplate: \"dfns:{wallet.id}_{wallet.externalId}\"`, when your wallet receives a transaction that gets screened by a Chainalysis policy, the \"user ID\" sent to Chainalysis will be `dfns:wa-xxx_yyy` (`wa-xxx` being the wallet ID, and `yyy` being the wallet external ID).","uniqueKey":"\\items.items.[INDEX].oneOf.10.pendingChangeRequest.body.oneOf.5.rule.oneOf.6.configuration.userIdTemplate","typeLabel":"string"}},"required":["alerts","exposures","addresses","fallbackBehaviours"],"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.10.pendingChangeRequest.body.oneOf.5.rule.oneOf.6.configuration","typeLabel":"object"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.10.pendingChangeRequest.body.oneOf.5.rule.oneOf.6","typeLabel":"ChainalysisTransactionPrescreening · object"},{"type":"object","title":"EllipticTransactionPrescreening","description":"\n\u003cInfo>\nThis rule can only be used once the Elliptic integration is activated from the Dfns dashboard settings.\n\u003c/Info>\n\nThis rule uses Elliptic KYT for pre-screening outgoing transfers. Upon transfer attempt, we run a synchronous Elliptic wallet analysis of the destination address, and check the returned risk score against the configured threshold, plus any configured risk rules / categories. If at or above the threshold, or if a configured rule / category matched, the policy is triggered.\n\nIt's called \"Pre\"-screening, because the scanned transaction is not on chain yet, it's still a transaction attempt.","required":["kind","configuration"],"properties":{"kind":{"type":"string","enum":["EllipticTransactionPrescreening"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.10.pendingChangeRequest.body.oneOf.5.rule.oneOf.7.kind","typeLabel":"enum\u003cstring>"},"configuration":{"type":"object","properties":{"riskScoreThreshold":{"type":"number","minimum":0,"maximum":10,"description":"Risk score threshold (0-10, decimals allowed). The policy triggers if the Elliptic risk score is at or above the threshold.","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.10.pendingChangeRequest.body.oneOf.5.rule.oneOf.7.configuration.riskScoreThreshold","typeLabel":"number"},"triggeredRules":{"type":"object","properties":{"ruleIds":{"type":"array","items":{"type":"string","format":"uuid","uniqueKey":"\\items.items.[INDEX].oneOf.10.pendingChangeRequest.body.oneOf.5.rule.oneOf.7.configuration.triggeredRules.ruleIds.items.[INDEX]","typeLabel":"string\u003cuuid>"},"description":"IDs of risk rules from your Elliptic risk model. If any of these rules matched the analysis, the policy triggers regardless of the risk score. Leave empty to trigger on the risk score threshold only.","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.10.pendingChangeRequest.body.oneOf.5.rule.oneOf.7.configuration.triggeredRules.ruleIds","typeLabel":"string\u003cuuid>[]"},"categories":{"type":"array","items":{"type":"string","minLength":1,"uniqueKey":"\\items.items.[INDEX].oneOf.10.pendingChangeRequest.body.oneOf.5.rule.oneOf.7.configuration.triggeredRules.categories.items.[INDEX]","typeLabel":"string"},"description":"Elliptic category names (eg. \"Dark Market\"), matched case-insensitively. If a matched risk rule involves any of these categories, the policy triggers regardless of the risk score. Leave empty to trigger on the risk score threshold only.","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.10.pendingChangeRequest.body.oneOf.5.rule.oneOf.7.configuration.triggeredRules.categories","typeLabel":"string[]"}},"required":["ruleIds","categories"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.10.pendingChangeRequest.body.oneOf.5.rule.oneOf.7.configuration.triggeredRules","typeLabel":"object"},"fallbackBehaviours":{"type":"object","properties":{"skipUnscreenableTransaction":{"type":"boolean","description":"skip all wallet requests that cannot be screened (eg. raw signatures)","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.10.pendingChangeRequest.body.oneOf.5.rule.oneOf.7.configuration.fallbackBehaviours.skipUnscreenableTransaction","typeLabel":"boolean"},"skipUnsupportedNetwork":{"type":"boolean","description":"skip requests on a network not supported yet in our Elliptic integration","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.10.pendingChangeRequest.body.oneOf.5.rule.oneOf.7.configuration.fallbackBehaviours.skipUnsupportedNetwork","typeLabel":"boolean"},"skipEllipticFailure":{"type":"boolean","description":"skip any failure of the Elliptic analysis (timeout, rate limiting, any error)","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.10.pendingChangeRequest.body.oneOf.5.rule.oneOf.7.configuration.fallbackBehaviours.skipEllipticFailure","typeLabel":"boolean"}},"required":["skipUnscreenableTransaction","skipUnsupportedNetwork","skipEllipticFailure"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.10.pendingChangeRequest.body.oneOf.5.rule.oneOf.7.configuration.fallbackBehaviours","typeLabel":"object"}},"required":["riskScoreThreshold","triggeredRules","fallbackBehaviours"],"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.10.pendingChangeRequest.body.oneOf.5.rule.oneOf.7.configuration","typeLabel":"object"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.10.pendingChangeRequest.body.oneOf.5.rule.oneOf.7","typeLabel":"EllipticTransactionPrescreening · object"},{"type":"object","title":"GlobalLedgerTransactionPrescreening","description":"This rule uses GlobalLedger KYT for pre-screening outgoing transfers by checking the destination address risk score.\n\nUpon transfer attempt, we will query GlobalLedger's address risk API, and check if the risk score (0-100) is at or above the configured threshold, or if any alerts show up. If so, the policy will be triggered.\n\nIt's called \"Pre\"-screening, because the scanned transaction is not on chain yet, it's still a transaction attempt.","required":["kind","configuration"],"properties":{"kind":{"type":"string","enum":["GlobalLedgerTransactionPrescreening"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.10.pendingChangeRequest.body.oneOf.5.rule.oneOf.8.kind","typeLabel":"enum\u003cstring>"},"configuration":{"type":"object","properties":{"riskScoreThreshold":{"type":"integer","minimum":0,"maximum":100,"description":"Risk score threshold (0-100). Policy triggers if address/transaction risk score >= threshold","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.10.pendingChangeRequest.body.oneOf.5.rule.oneOf.8.configuration.riskScoreThreshold","typeLabel":"integer"},"fallbackBehaviours":{"type":"object","properties":{"skipUnscreenableTransaction":{"type":"boolean","description":"skip all wallet requests that cannot be screened (eg. raw signatures)","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.10.pendingChangeRequest.body.oneOf.5.rule.oneOf.8.configuration.fallbackBehaviours.skipUnscreenableTransaction","typeLabel":"boolean"},"skipUnsupportedNetwork":{"type":"boolean","description":"skip transfer requests to a network not supported yet in our GlobalLedger integration","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.10.pendingChangeRequest.body.oneOf.5.rule.oneOf.8.configuration.fallbackBehaviours.skipUnsupportedNetwork","typeLabel":"boolean"},"skipUnsupportedAsset":{"type":"boolean","description":"skip transfer requests of an asset not supported by our GlobalLedger integration","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.10.pendingChangeRequest.body.oneOf.5.rule.oneOf.8.configuration.fallbackBehaviours.skipUnsupportedAsset","typeLabel":"boolean"},"skipGlobalLedgerFailure":{"type":"boolean","description":"skips any errors from GlobalLedger API request","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.10.pendingChangeRequest.body.oneOf.5.rule.oneOf.8.configuration.fallbackBehaviours.skipGlobalLedgerFailure","typeLabel":"boolean"}},"required":["skipUnscreenableTransaction","skipUnsupportedNetwork","skipUnsupportedAsset","skipGlobalLedgerFailure"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.10.pendingChangeRequest.body.oneOf.5.rule.oneOf.8.configuration.fallbackBehaviours","typeLabel":"object"}},"required":["riskScoreThreshold","fallbackBehaviours"],"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.10.pendingChangeRequest.body.oneOf.5.rule.oneOf.8.configuration","typeLabel":"object"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.10.pendingChangeRequest.body.oneOf.5.rule.oneOf.8","typeLabel":"GlobalLedgerTransactionPrescreening · object"},{"type":"object","title":"TravelRuleTransactionPrescreening","description":"This rule applies a Travel Rule check to outgoing transfers through the vendor selected in `configuration.vendor`: [Notabene](https://docs.dfns.co/integrations/travel-rule/notabene) or Sumsub. It can only be used once that vendor's integration is activated from the Dfns dashboard settings.\n\nIt ***ONLY*** applies to Dfns [Transfer Asset](https://docs.dfns.co/api-reference/wallets/transfer-asset) Api Calls. It is NOT supported for Transfers initiated via the dashboard. Upon transfer attempt with a [TravelRule](https://docs.dfns.co/api-reference/wallets/transfer-asset#body-travel-rule) payload, we call the vendor's APIs on your behalf to validate and submit the travel rule message, then wait for its outcome. With Notabene, Dfns waits for a response from the counterparty (for custodial transfers) or from Notabene (for non-custodial transfers). With Sumsub, Dfns submits a Travel Rule message and waits for Sumsub to report its outcome. In both cases the wait is bounded by `configuration.autoTriggerTimeoutSeconds`, after which the policy's configured action is applied.\n\nThe transfer's `travelRule` payload must be of the kind matching `configuration.vendor` — a mismatch triggers the policy and applies its configured action. A given wallet must be covered by at most one travel-rule policy (of any vendor): if several travel-rule policies apply to the same transfer carrying a `travelRule` payload, it is treated as a misconfiguration and blocked without contacting any vendor. Signatures and transfers without a payload are not affected, since the rule does not apply to them.\n\nIt's called \"Pre\"-screening, because the transaction is not on chain yet, it's still a transaction attempt (before the transaction actually make it on chain).","required":["kind","configuration"],"properties":{"kind":{"type":"string","enum":["TravelRuleTransactionPrescreening"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.10.pendingChangeRequest.body.oneOf.5.rule.oneOf.9.kind","typeLabel":"enum\u003cstring>"},"configuration":{"oneOf":[{"type":"object","title":"TravelRuleNotabeneConfiguration","required":["vendor"],"properties":{"vendor":{"type":"string","enum":["Notabene"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.10.pendingChangeRequest.body.oneOf.5.rule.oneOf.9.configuration.oneOf.0.vendor","typeLabel":"enum\u003cstring>"},"autoTriggerTimeoutSeconds":{"type":"integer","minimum":0,"maximum":2592000,"default":86400,"description":"Seconds to wait for the vendor's verdict before the policy action applies. Maximum 2592000 (30 days). Defaults to 86400 (24 hours).","uniqueKey":"\\items.items.[INDEX].oneOf.10.pendingChangeRequest.body.oneOf.5.rule.oneOf.9.configuration.oneOf.0.autoTriggerTimeoutSeconds","typeLabel":"integer"},"autoClearAfterDeliveredTimeoutSeconds":{"type":"integer","minimum":0,"maximum":2592000,"description":"Seconds after delivery before a still-pending evaluation clears. Maximum 2592000 (30 days).","uniqueKey":"\\items.items.[INDEX].oneOf.10.pendingChangeRequest.body.oneOf.5.rule.oneOf.9.configuration.oneOf.0.autoClearAfterDeliveredTimeoutSeconds","typeLabel":"integer"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.10.pendingChangeRequest.body.oneOf.5.rule.oneOf.9.configuration.oneOf.0","typeLabel":"TravelRuleNotabeneConfiguration · object"},{"type":"object","title":"TravelRuleSumsubConfiguration","required":["vendor"],"properties":{"vendor":{"type":"string","enum":["Sumsub"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.10.pendingChangeRequest.body.oneOf.5.rule.oneOf.9.configuration.oneOf.1.vendor","typeLabel":"enum\u003cstring>"},"autoTriggerTimeoutSeconds":{"type":"integer","minimum":0,"maximum":2592000,"default":86400,"description":"Seconds to wait for the vendor's verdict before the policy action applies. Maximum 2592000 (30 days). Defaults to 86400 (24 hours).","uniqueKey":"\\items.items.[INDEX].oneOf.10.pendingChangeRequest.body.oneOf.5.rule.oneOf.9.configuration.oneOf.1.autoTriggerTimeoutSeconds","typeLabel":"integer"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.10.pendingChangeRequest.body.oneOf.5.rule.oneOf.9.configuration.oneOf.1","typeLabel":"TravelRuleSumsubConfiguration · object"}],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.10.pendingChangeRequest.body.oneOf.5.rule.oneOf.9.configuration","typeLabel":"TravelRuleNotabeneConfiguration · object | TravelRuleSumsubConfiguration · object"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.10.pendingChangeRequest.body.oneOf.5.rule.oneOf.9","typeLabel":"TravelRuleTransactionPrescreening · object"}],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.10.pendingChangeRequest.body.oneOf.5.rule","typeLabel":"AlwaysTrigger · object | TransactionRecipientWhitelist · object | TransactionAmountLimit · object | TransactionAmountLimitNominal · object | TransactionAmountVelocity · object | TransactionCountVelocity · object | ChainalysisTransactionPrescreening · object | EllipticTransactionPrescreening · object | GlobalLedgerTransactionPrescreening · object | TravelRuleTransactionPrescreening · object"},"action":{"oneOf":[{"type":"object","title":"RequestApproval","description":"\nThis action means that activity will first require an Approval process to be completed before it can be executed (or be aborted if someone rejects it during the approval process).\n\nOne or several groups of approvers need to be specified. These groups define who is allowed to approve / reject an activity.\n\nThe activity will only be executed if all approver groups reach their \"quorum\" of approvals. Otherwise, if any one user within any approver group rejects, then the activity is aborted and the call is not executed.\n\nThe example below shows a `RequestApproval` action, configured with one approval group requiring 2 approvals amongst three specific users.\n\n```json\n{\n \"action\": {\n \"kind\": \"RequestApproval\",\n \"autoRejectTimeout\": 60, // minutes\n \"approvalGroups\": [\n {\n \"name\": \"Admins\",\n \"quorum\": 2, // only 2 approvers required in that group \n \"approvers\": {\n \"userId\": {\n \"in\": [\"us-...1\", \"us-...2\", \"us-...3\"],\n }\n }\n }\n ],\n\n }\n}\n```\n\n**Don't lock yourself up**\n\nBy default, users cannot approve an activity they initiated themselves, even if they are in an approval group. To allow this, you must set `initiatorCanApprove: true`.\n\n*Example 1:* For any wallet transfer, a policy is setup to require approval from **1 specific admin user** (eg. the CEO). `initiatorCanApprove` was not set to `true`. If the CEO himself initiates a transfer, no-one can approve his transfer and it's stuck.\n\n*Example 2:* Company has only 3 users. A policy is setup to require approval from **any 3 users** (`quorum: 3`) for any modification of a policy. `initiatorCanApprove` was not set to `true`. In this case, they are locked, and the policy cannot be modified: whoever requests a modification cannot approve, and the policy is therefore always missing one approver. To unlock, they would need to invite a new user and give him the rights to approve as well.\n ","required":["kind","approvalGroups"],"properties":{"kind":{"type":"string","enum":["RequestApproval"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.10.pendingChangeRequest.body.oneOf.5.action.oneOf.0.kind","typeLabel":"enum\u003cstring>"},"approvalGroups":{"type":"array","items":{"type":"object","properties":{"quorum":{"type":"integer","minimum":1,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.10.pendingChangeRequest.body.oneOf.5.action.oneOf.0.approvalGroups.items.[INDEX].quorum","typeLabel":"integer"},"approvers":{"type":"object","properties":{"userId":{"type":"object","properties":{"in":{"type":"array","items":{"type":"string","minLength":1,"uniqueKey":"\\items.items.[INDEX].oneOf.10.pendingChangeRequest.body.oneOf.5.action.oneOf.0.approvalGroups.items.[INDEX].approvers.userId.in.items.[INDEX]","typeLabel":"string"},"minItems":1,"maxItems":100,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.10.pendingChangeRequest.body.oneOf.5.action.oneOf.0.approvalGroups.items.[INDEX].approvers.userId.in","typeLabel":"string[]"}},"required":["in"],"additionalProperties":false,"description":"Users and service accounts who may approve.","uniqueKey":"\\items.items.[INDEX].oneOf.10.pendingChangeRequest.body.oneOf.5.action.oneOf.0.approvalGroups.items.[INDEX].approvers.userId","typeLabel":"object"},"userGroupId":{"type":"object","properties":{"in":{"type":"array","items":{"type":"string","minLength":1,"maxLength":64,"pattern":"^ug-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"User group id.","example":"ug-139tf-f58l8-lsbt6dp47lfsdvgh","uniqueKey":"\\items.items.[INDEX].oneOf.10.pendingChangeRequest.body.oneOf.5.action.oneOf.0.approvalGroups.items.[INDEX].approvers.userGroupId.in.items.[INDEX]","typeLabel":"string"},"minItems":1,"maxItems":100,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.10.pendingChangeRequest.body.oneOf.5.action.oneOf.0.approvalGroups.items.[INDEX].approvers.userGroupId.in","typeLabel":"string[]"}},"required":["in"],"additionalProperties":false,"description":"User groups whose members may approve.","uniqueKey":"\\items.items.[INDEX].oneOf.10.pendingChangeRequest.body.oneOf.5.action.oneOf.0.approvalGroups.items.[INDEX].approvers.userGroupId","typeLabel":"object"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.10.pendingChangeRequest.body.oneOf.5.action.oneOf.0.approvalGroups.items.[INDEX].approvers","typeLabel":"object"},"name":{"type":"string","uniqueKey":"\\items.items.[INDEX].oneOf.10.pendingChangeRequest.body.oneOf.5.action.oneOf.0.approvalGroups.items.[INDEX].name","typeLabel":"string"},"initiatorCanApprove":{"type":"boolean","description":"Whether the initiator of the activity can participate in the approval.","uniqueKey":"\\items.items.[INDEX].oneOf.10.pendingChangeRequest.body.oneOf.5.action.oneOf.0.approvalGroups.items.[INDEX].initiatorCanApprove","typeLabel":"boolean"},"serviceAccountsCanApprove":{"type":"boolean","description":"Whether service accounts can participate in the approval for this group.","uniqueKey":"\\items.items.[INDEX].oneOf.10.pendingChangeRequest.body.oneOf.5.action.oneOf.0.approvalGroups.items.[INDEX].serviceAccountsCanApprove","typeLabel":"boolean"}},"required":["quorum","approvers"],"additionalProperties":false,"uniqueKey":"\\items.items.[INDEX].oneOf.10.pendingChangeRequest.body.oneOf.5.action.oneOf.0.approvalGroups.items.[INDEX]","typeLabel":"object"},"minItems":1,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.10.pendingChangeRequest.body.oneOf.5.action.oneOf.0.approvalGroups","typeLabel":"object[]"},"autoRejectTimeout":{"oneOf":[{"type":"integer","minimum":1,"uniqueKey":"\\items.items.[INDEX].oneOf.10.pendingChangeRequest.body.oneOf.5.action.oneOf.0.autoRejectTimeout.oneOf.0","typeLabel":"integer"},{"type":"null","minimum":1,"uniqueKey":"\\items.items.[INDEX].oneOf.10.pendingChangeRequest.body.oneOf.5.action.oneOf.0.autoRejectTimeout.oneOf.1","typeLabel":"null"}],"uniqueKey":"\\items.items.[INDEX].oneOf.10.pendingChangeRequest.body.oneOf.5.action.oneOf.0.autoRejectTimeout","typeLabel":"integer | null"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.10.pendingChangeRequest.body.oneOf.5.action.oneOf.0","typeLabel":"RequestApproval · object"},{"type":"object","title":"Block","description":"This action means that the activity will be blocked if the policy is triggered.\n\n```json\n{\n \"action\": {\n \"kind\": \"Block\"\n }\n}\n```\n","required":["kind"],"properties":{"kind":{"type":"string","enum":["Block"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.10.pendingChangeRequest.body.oneOf.5.action.oneOf.1.kind","typeLabel":"enum\u003cstring>"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.10.pendingChangeRequest.body.oneOf.5.action.oneOf.1","typeLabel":"Block · object"},{"type":"object","title":"NoAction","description":"\n This action kind means that nothing will happen after policy rule evaluation. It's meant to be used with policy rules \"`ChainalysisTransactionPrescreening`\" or \"`ChainalysisTransactionScreening`\". This action is for when you just want the KYT analysis rule to be run, and then if triggered, those result returned in a `policy.triggered` [Webhook Event](https://docs.dfns.co/api-reference/webhook-events).\n\n```json\n{\n \"action\": {\n \"kind\": \"NoAction\"\n }\n}\n```\n ","required":["kind"],"properties":{"kind":{"type":"string","enum":["NoAction"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.10.pendingChangeRequest.body.oneOf.5.action.oneOf.2.kind","typeLabel":"enum\u003cstring>"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.10.pendingChangeRequest.body.oneOf.5.action.oneOf.2","typeLabel":"NoAction · object"}],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.10.pendingChangeRequest.body.oneOf.5.action","typeLabel":"RequestApproval · object | Block · object | NoAction · object"},"dateCreated":{"type":"string","uniqueKey":"\\items.items.[INDEX].oneOf.10.pendingChangeRequest.body.oneOf.5.dateCreated","typeLabel":"string"},"dateUpdated":{"type":"string","uniqueKey":"\\items.items.[INDEX].oneOf.10.pendingChangeRequest.body.oneOf.5.dateUpdated","typeLabel":"string"},"filters":{"type":"object","properties":{"walletId":{"type":"object","properties":{"in":{"type":"array","items":{"type":"string","minLength":1,"uniqueKey":"\\items.items.[INDEX].oneOf.10.pendingChangeRequest.body.oneOf.5.filters.walletId.in.items.[INDEX]","typeLabel":"string"},"minItems":1,"maxItems":100,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.10.pendingChangeRequest.body.oneOf.5.filters.walletId.in","typeLabel":"string[]"}},"required":["in"],"additionalProperties":false,"uniqueKey":"\\items.items.[INDEX].oneOf.10.pendingChangeRequest.body.oneOf.5.filters.walletId","typeLabel":"object"},"walletTags":{"type":"object","properties":{"hasAny":{"type":"array","items":{"type":"string","minLength":1,"uniqueKey":"\\items.items.[INDEX].oneOf.10.pendingChangeRequest.body.oneOf.5.filters.walletTags.hasAny.items.[INDEX]","typeLabel":"string"},"minItems":1,"maxItems":100,"uniqueKey":"\\items.items.[INDEX].oneOf.10.pendingChangeRequest.body.oneOf.5.filters.walletTags.hasAny","typeLabel":"string[]"},"hasAll":{"type":"array","items":{"type":"string","minLength":1,"uniqueKey":"\\items.items.[INDEX].oneOf.10.pendingChangeRequest.body.oneOf.5.filters.walletTags.hasAll.items.[INDEX]","typeLabel":"string"},"minItems":1,"maxItems":100,"uniqueKey":"\\items.items.[INDEX].oneOf.10.pendingChangeRequest.body.oneOf.5.filters.walletTags.hasAll","typeLabel":"string[]"}},"additionalProperties":false,"uniqueKey":"\\items.items.[INDEX].oneOf.10.pendingChangeRequest.body.oneOf.5.filters.walletTags","typeLabel":"object"},"keyId":{"type":"object","properties":{"in":{"type":"array","items":{"type":"string","minLength":1,"maxLength":64,"pattern":"^key-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"Key id.","example":"key-01snl-t56gb-j8tsok0vn802p80i","uniqueKey":"\\items.items.[INDEX].oneOf.10.pendingChangeRequest.body.oneOf.5.filters.keyId.in.items.[INDEX]","typeLabel":"string"},"minItems":1,"maxItems":100,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.10.pendingChangeRequest.body.oneOf.5.filters.keyId.in","typeLabel":"string[]"}},"required":["in"],"additionalProperties":false,"uniqueKey":"\\items.items.[INDEX].oneOf.10.pendingChangeRequest.body.oneOf.5.filters.keyId","typeLabel":"object"},"keyStoreId":{"type":"object","properties":{"in":{"type":"array","items":{"type":"string","minLength":1,"maxLength":64,"pattern":"^store-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"Key store id.","example":"store-425nf-ebf0a-qq22t6qra51tj8j0","uniqueKey":"\\items.items.[INDEX].oneOf.10.pendingChangeRequest.body.oneOf.5.filters.keyStoreId.in.items.[INDEX]","typeLabel":"string"},"minItems":1,"maxItems":100,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.10.pendingChangeRequest.body.oneOf.5.filters.keyStoreId.in","typeLabel":"string[]"}},"required":["in"],"additionalProperties":false,"uniqueKey":"\\items.items.[INDEX].oneOf.10.pendingChangeRequest.body.oneOf.5.filters.keyStoreId","typeLabel":"object"}},"additionalProperties":false,"uniqueKey":"\\items.items.[INDEX].oneOf.10.pendingChangeRequest.body.oneOf.5.filters","typeLabel":"object"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.10.pendingChangeRequest.body.oneOf.5","typeLabel":"Wallets:Sign · object"},{"type":"object","title":"Wallets:IncomingTransaction","required":["id","name","status","activityKind","rule","action"],"properties":{"id":{"type":"string","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.10.pendingChangeRequest.body.oneOf.6.id","typeLabel":"string"},"name":{"type":"string","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.10.pendingChangeRequest.body.oneOf.6.name","typeLabel":"string"},"status":{"type":"string","enum":["Active","Archived"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.10.pendingChangeRequest.body.oneOf.6.status","typeLabel":"enum\u003cstring>"},"activityKind":{"type":"string","enum":["Wallets:IncomingTransaction"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.10.pendingChangeRequest.body.oneOf.6.activityKind","typeLabel":"enum\u003cstring>"},"rule":{"type":"object","title":"ChainalysisTransactionScreening","description":"\n\u003cInfo>\nThis rule can only be used once the Chainalysis integration is activated from the Dfns dashboard settings. (see more on [Chainalysis](https://docs.dfns.co/integrations/aml-kyt/chainalysis) integration page).\n\u003c/Info>\n\nThis rule can be used on a policy of `activityKind` = `Wallets:IncomingTransaction`, and with the action kind `NoAction`. It's a rule based on Chainalysis KYT integration (Know-Your-Transaction). Upon an incoming transaction detectedby our indexers, we will [register the transfer with Chainalysis](https://docs.chainalysis.com/api/kyt/#registration-register-a-transfer), and fetch the results of the analysis (alerts \u0026 exposures detected). Based on the results, and the configuration of this rule, the policy will be triggered.\n\nThe shape of the rule is almost like the `ChainalysisTransactionPrescreening` rule, expect the the `address` property is not supported.\n\n```json\n{\n \"rule\": {\n \"kind\": \"ChainalysisTransactionPrescreening\",\n \"configuration\": {\n \"alerts\": {\n \"alertLevel\": \"LOW\",\n \"categoryIds\": []\n },\n \"exposures\": {\n \"direct\": {\n \"categoryIds\": []\n }\n },\n \"fallbackBehaviours\": {\n \"skipUnscreenableTransaction\": false,\n \"skipUnsupportedNetwork\": false,\n \"skipUnsupportedAsset\": false,\n \"skipChainalysisFailure\": false\n }\n }\n }\n}\n```\n\n**Configuration**\n\nPlease refer to the configuration for the `ChainalysisTransactionPrescreening` rule.\n","required":["kind","configuration"],"properties":{"kind":{"type":"string","enum":["ChainalysisTransactionScreening"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.10.pendingChangeRequest.body.oneOf.6.rule.kind","typeLabel":"enum\u003cstring>"},"configuration":{"type":"object","properties":{"alerts":{"type":"object","properties":{"alertLevel":{"type":"string","enum":["LOW","MEDIUM","HIGH","SEVERE"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.10.pendingChangeRequest.body.oneOf.6.rule.configuration.alerts.alertLevel","typeLabel":"enum\u003cstring>"},"categoryIds":{"type":"array","items":{"type":"integer","exclusiveMinimum":0,"uniqueKey":"\\items.items.[INDEX].oneOf.10.pendingChangeRequest.body.oneOf.6.rule.configuration.alerts.categoryIds.items.[INDEX]","typeLabel":"integer"},"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.10.pendingChangeRequest.body.oneOf.6.rule.configuration.alerts.categoryIds","typeLabel":"integer[]"}},"required":["alertLevel","categoryIds"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.10.pendingChangeRequest.body.oneOf.6.rule.configuration.alerts","typeLabel":"object"},"exposures":{"type":"object","properties":{"direct":{"type":"object","properties":{"categoryIds":{"type":"array","items":{"type":"integer","exclusiveMinimum":0,"uniqueKey":"\\items.items.[INDEX].oneOf.10.pendingChangeRequest.body.oneOf.6.rule.configuration.exposures.direct.categoryIds.items.[INDEX]","typeLabel":"integer"},"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.10.pendingChangeRequest.body.oneOf.6.rule.configuration.exposures.direct.categoryIds","typeLabel":"integer[]"}},"required":["categoryIds"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.10.pendingChangeRequest.body.oneOf.6.rule.configuration.exposures.direct","typeLabel":"object"}},"required":["direct"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.10.pendingChangeRequest.body.oneOf.6.rule.configuration.exposures","typeLabel":"object"},"fallbackBehaviours":{"type":"object","properties":{"skipUnscreenableTransaction":{"type":"boolean","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.10.pendingChangeRequest.body.oneOf.6.rule.configuration.fallbackBehaviours.skipUnscreenableTransaction","typeLabel":"boolean"},"skipUnsupportedNetwork":{"type":"boolean","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.10.pendingChangeRequest.body.oneOf.6.rule.configuration.fallbackBehaviours.skipUnsupportedNetwork","typeLabel":"boolean"},"skipUnsupportedAsset":{"type":"boolean","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.10.pendingChangeRequest.body.oneOf.6.rule.configuration.fallbackBehaviours.skipUnsupportedAsset","typeLabel":"boolean"},"skipChainalysisFailure":{"type":"boolean","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.10.pendingChangeRequest.body.oneOf.6.rule.configuration.fallbackBehaviours.skipChainalysisFailure","typeLabel":"boolean"}},"required":["skipUnscreenableTransaction","skipUnsupportedNetwork","skipUnsupportedAsset","skipChainalysisFailure"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.10.pendingChangeRequest.body.oneOf.6.rule.configuration.fallbackBehaviours","typeLabel":"object"},"userIdTemplate":{"type":"string","minLength":1,"maxLength":50,"pattern":"^([a-zA-Z0-9_:-]|{wallet\\.id}|{wallet\\.externalId})+$","default":"dfns","description":"**Deprecated** — set `userIdTemplate` on the Chainalysis integration setting instead; when set there, the integration-level template takes precedence over this one.\n\nValue sent to Chainalysis as the \"user ID\". Used by Chainalysis for grouping transaction screenings.\n \nThis template can include variables, included in brackets. The following variables are currently supported: `{wallet.id}` and `{wallet.externalId}`.\nAs an example, if you set `userIdTemplate: \"dfns:{wallet.id}_{wallet.externalId}\"`, when your wallet receives a transaction that gets screened by a Chainalysis policy, the \"user ID\" sent to Chainalysis will be `dfns:wa-xxx_yyy` (`wa-xxx` being the wallet ID, and `yyy` being the wallet external ID).","uniqueKey":"\\items.items.[INDEX].oneOf.10.pendingChangeRequest.body.oneOf.6.rule.configuration.userIdTemplate","typeLabel":"string"}},"required":["alerts","exposures","fallbackBehaviours"],"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.10.pendingChangeRequest.body.oneOf.6.rule.configuration","typeLabel":"object"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.10.pendingChangeRequest.body.oneOf.6.rule","typeLabel":"ChainalysisTransactionScreening · object"},"action":{"type":"object","title":"NoAction","description":"\n This action kind means that nothing will happen after policy rule evaluation. It's meant to be used with policy rules \"`ChainalysisTransactionPrescreening`\" or \"`ChainalysisTransactionScreening`\". This action is for when you just want the KYT analysis rule to be run, and then if triggered, those result returned in a `policy.triggered` [Webhook Event](https://docs.dfns.co/api-reference/webhook-events).\n\n```json\n{\n \"action\": {\n \"kind\": \"NoAction\"\n }\n}\n```\n ","required":["kind"],"properties":{"kind":{"type":"string","enum":["NoAction"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.10.pendingChangeRequest.body.oneOf.6.action.kind","typeLabel":"enum\u003cstring>"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.10.pendingChangeRequest.body.oneOf.6.action","typeLabel":"NoAction · object"},"dateCreated":{"type":"string","uniqueKey":"\\items.items.[INDEX].oneOf.10.pendingChangeRequest.body.oneOf.6.dateCreated","typeLabel":"string"},"dateUpdated":{"type":"string","uniqueKey":"\\items.items.[INDEX].oneOf.10.pendingChangeRequest.body.oneOf.6.dateUpdated","typeLabel":"string"},"filters":{"type":"object","properties":{"walletId":{"type":"object","properties":{"in":{"type":"array","items":{"type":"string","minLength":1,"uniqueKey":"\\items.items.[INDEX].oneOf.10.pendingChangeRequest.body.oneOf.6.filters.walletId.in.items.[INDEX]","typeLabel":"string"},"minItems":1,"maxItems":100,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.10.pendingChangeRequest.body.oneOf.6.filters.walletId.in","typeLabel":"string[]"}},"required":["in"],"additionalProperties":false,"uniqueKey":"\\items.items.[INDEX].oneOf.10.pendingChangeRequest.body.oneOf.6.filters.walletId","typeLabel":"object"},"walletTags":{"type":"object","properties":{"hasAny":{"type":"array","items":{"type":"string","minLength":1,"uniqueKey":"\\items.items.[INDEX].oneOf.10.pendingChangeRequest.body.oneOf.6.filters.walletTags.hasAny.items.[INDEX]","typeLabel":"string"},"minItems":1,"maxItems":100,"uniqueKey":"\\items.items.[INDEX].oneOf.10.pendingChangeRequest.body.oneOf.6.filters.walletTags.hasAny","typeLabel":"string[]"},"hasAll":{"type":"array","items":{"type":"string","minLength":1,"uniqueKey":"\\items.items.[INDEX].oneOf.10.pendingChangeRequest.body.oneOf.6.filters.walletTags.hasAll.items.[INDEX]","typeLabel":"string"},"minItems":1,"maxItems":100,"uniqueKey":"\\items.items.[INDEX].oneOf.10.pendingChangeRequest.body.oneOf.6.filters.walletTags.hasAll","typeLabel":"string[]"}},"additionalProperties":false,"uniqueKey":"\\items.items.[INDEX].oneOf.10.pendingChangeRequest.body.oneOf.6.filters.walletTags","typeLabel":"object"},"keyId":{"type":"object","properties":{"in":{"type":"array","items":{"type":"string","minLength":1,"maxLength":64,"pattern":"^key-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"Key id.","example":"key-01snl-t56gb-j8tsok0vn802p80i","uniqueKey":"\\items.items.[INDEX].oneOf.10.pendingChangeRequest.body.oneOf.6.filters.keyId.in.items.[INDEX]","typeLabel":"string"},"minItems":1,"maxItems":100,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.10.pendingChangeRequest.body.oneOf.6.filters.keyId.in","typeLabel":"string[]"}},"required":["in"],"additionalProperties":false,"uniqueKey":"\\items.items.[INDEX].oneOf.10.pendingChangeRequest.body.oneOf.6.filters.keyId","typeLabel":"object"},"keyStoreId":{"type":"object","properties":{"in":{"type":"array","items":{"type":"string","minLength":1,"maxLength":64,"pattern":"^store-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"Key store id.","example":"store-425nf-ebf0a-qq22t6qra51tj8j0","uniqueKey":"\\items.items.[INDEX].oneOf.10.pendingChangeRequest.body.oneOf.6.filters.keyStoreId.in.items.[INDEX]","typeLabel":"string"},"minItems":1,"maxItems":100,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.10.pendingChangeRequest.body.oneOf.6.filters.keyStoreId.in","typeLabel":"string[]"}},"required":["in"],"additionalProperties":false,"uniqueKey":"\\items.items.[INDEX].oneOf.10.pendingChangeRequest.body.oneOf.6.filters.keyStoreId","typeLabel":"object"}},"additionalProperties":false,"uniqueKey":"\\items.items.[INDEX].oneOf.10.pendingChangeRequest.body.oneOf.6.filters","typeLabel":"object"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.10.pendingChangeRequest.body.oneOf.6","typeLabel":"Wallets:IncomingTransaction · object"},{"type":"object","title":"Vaults:ReleaseQuarantine","required":["id","name","status","activityKind","rule","action"],"properties":{"id":{"type":"string","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.10.pendingChangeRequest.body.oneOf.7.id","typeLabel":"string"},"name":{"type":"string","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.10.pendingChangeRequest.body.oneOf.7.name","typeLabel":"string"},"status":{"type":"string","enum":["Active","Archived"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.10.pendingChangeRequest.body.oneOf.7.status","typeLabel":"enum\u003cstring>"},"activityKind":{"type":"string","enum":["Vaults:ReleaseQuarantine"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.10.pendingChangeRequest.body.oneOf.7.activityKind","typeLabel":"enum\u003cstring>"},"rule":{"oneOf":[{"type":"object","title":"AlwaysTrigger","description":"This rule will always be triggered, meaning that if this rule is defined on a policy, the policy will always trigger the policy action, regardless of the activity details.","required":["kind"],"properties":{"kind":{"type":"string","enum":["AlwaysTrigger"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.10.pendingChangeRequest.body.oneOf.7.rule.oneOf.0.kind","typeLabel":"enum\u003cstring>"},"configuration":{"type":"object","properties":{},"additionalProperties":false,"uniqueKey":"\\items.items.[INDEX].oneOf.10.pendingChangeRequest.body.oneOf.7.rule.oneOf.0.configuration","typeLabel":"object"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.10.pendingChangeRequest.body.oneOf.7.rule.oneOf.0","typeLabel":"AlwaysTrigger · object"},{"type":"object","title":"ChainalysisQuarantineScreening","description":"\n\u003cInfo>\nThis rule can only be used once the Chainalysis integration is activated from the Dfns dashboard settings. (see more on [Chainalysis](https://docs.dfns.co/integrations/aml-kyt/chainalysis) integration page).\n\u003c/Info>\n\nThis rule can be used on a policy of `activityKind` = `Vaults:ReleaseQuarantine`. When a quarantined vault deposit was screened by Chainalysis KYT, the screening result (alerts \u0026 direct exposure) is stored with the quarantine. When a release of the quarantined funds is requested, this rule evaluates that **stored** result — no new Chainalysis call is made. Based on the stored result and the configuration of this rule, the policy will be triggered.\n\nIf the quarantine has **no stored KYT result** (the result was not received yet, the network/asset is not supported by the Chainalysis integration, or screening failed), the rule **always triggers** (fail closed): the release then follows the policy action (approval or block).\n\n```json\n{\n \"rule\": {\n \"kind\": \"ChainalysisQuarantineScreening\",\n \"configuration\": {\n \"alerts\": {\n \"alertLevel\": \"LOW\",\n \"categoryIds\": []\n },\n \"exposures\": {\n \"direct\": {\n \"categoryIds\": []\n }\n }\n }\n }\n}\n```\n\n**Configuration**\n\n| Property | Type | Description |\n| --- | --- | --- |\n| `alerts`\u003cbr>\u003cbr>`.alertLevel`* | `string` | Minimum alert level above which the rule should trigger, if any alert was returned in the stored Chainalysis results. Can be `LOW`, `MEDIUM`, `HIGH`, or `SEVERE` |\n| `alerts`\u003cbr>\u003cbr>`.categoryIds`* | list of integers | List of Chainalysis category IDs (see [here](https://docs.chainalysis.com/api/kyt/#categories)). If you leave this list empty, alerts of any category will trigger the rule. Otherwise, if you only want the rule to trigger on specific categories, you can specify some in the list. |\n| `exposures`\u003cbr>\u003cbr>`.direct`\u003cbr>\u003cbr>`.categoryIds`* | list of integers | List of Chainalysis category IDs (see [here](https://docs.chainalysis.com/api/kyt/#categories)). If you leave this list empty, a direct exposure of any category in the stored results will trigger the rule. Otherwise, if you only want the rule to trigger on specific categories, you can specify some in the list. |\n","required":["kind","configuration"],"properties":{"kind":{"type":"string","enum":["ChainalysisQuarantineScreening"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.10.pendingChangeRequest.body.oneOf.7.rule.oneOf.1.kind","typeLabel":"enum\u003cstring>"},"configuration":{"type":"object","properties":{"alerts":{"type":"object","properties":{"alertLevel":{"type":"string","enum":["LOW","MEDIUM","HIGH","SEVERE"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.10.pendingChangeRequest.body.oneOf.7.rule.oneOf.1.configuration.alerts.alertLevel","typeLabel":"enum\u003cstring>"},"categoryIds":{"type":"array","items":{"type":"integer","exclusiveMinimum":0,"uniqueKey":"\\items.items.[INDEX].oneOf.10.pendingChangeRequest.body.oneOf.7.rule.oneOf.1.configuration.alerts.categoryIds.items.[INDEX]","typeLabel":"integer"},"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.10.pendingChangeRequest.body.oneOf.7.rule.oneOf.1.configuration.alerts.categoryIds","typeLabel":"integer[]"}},"required":["alertLevel","categoryIds"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.10.pendingChangeRequest.body.oneOf.7.rule.oneOf.1.configuration.alerts","typeLabel":"object"},"exposures":{"type":"object","properties":{"direct":{"type":"object","properties":{"categoryIds":{"type":"array","items":{"type":"integer","exclusiveMinimum":0,"uniqueKey":"\\items.items.[INDEX].oneOf.10.pendingChangeRequest.body.oneOf.7.rule.oneOf.1.configuration.exposures.direct.categoryIds.items.[INDEX]","typeLabel":"integer"},"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.10.pendingChangeRequest.body.oneOf.7.rule.oneOf.1.configuration.exposures.direct.categoryIds","typeLabel":"integer[]"}},"required":["categoryIds"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.10.pendingChangeRequest.body.oneOf.7.rule.oneOf.1.configuration.exposures.direct","typeLabel":"object"}},"required":["direct"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.10.pendingChangeRequest.body.oneOf.7.rule.oneOf.1.configuration.exposures","typeLabel":"object"}},"required":["alerts","exposures"],"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.10.pendingChangeRequest.body.oneOf.7.rule.oneOf.1.configuration","typeLabel":"object"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.10.pendingChangeRequest.body.oneOf.7.rule.oneOf.1","typeLabel":"ChainalysisQuarantineScreening · object"}],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.10.pendingChangeRequest.body.oneOf.7.rule","typeLabel":"AlwaysTrigger · object | ChainalysisQuarantineScreening · object"},"action":{"oneOf":[{"type":"object","title":"RequestApproval","description":"\nThis action means that activity will first require an Approval process to be completed before it can be executed (or be aborted if someone rejects it during the approval process).\n\nOne or several groups of approvers need to be specified. These groups define who is allowed to approve / reject an activity.\n\nThe activity will only be executed if all approver groups reach their \"quorum\" of approvals. Otherwise, if any one user within any approver group rejects, then the activity is aborted and the call is not executed.\n\nThe example below shows a `RequestApproval` action, configured with one approval group requiring 2 approvals amongst three specific users.\n\n```json\n{\n \"action\": {\n \"kind\": \"RequestApproval\",\n \"autoRejectTimeout\": 60, // minutes\n \"approvalGroups\": [\n {\n \"name\": \"Admins\",\n \"quorum\": 2, // only 2 approvers required in that group \n \"approvers\": {\n \"userId\": {\n \"in\": [\"us-...1\", \"us-...2\", \"us-...3\"],\n }\n }\n }\n ],\n\n }\n}\n```\n\n**Don't lock yourself up**\n\nBy default, users cannot approve an activity they initiated themselves, even if they are in an approval group. To allow this, you must set `initiatorCanApprove: true`.\n\n*Example 1:* For any wallet transfer, a policy is setup to require approval from **1 specific admin user** (eg. the CEO). `initiatorCanApprove` was not set to `true`. If the CEO himself initiates a transfer, no-one can approve his transfer and it's stuck.\n\n*Example 2:* Company has only 3 users. A policy is setup to require approval from **any 3 users** (`quorum: 3`) for any modification of a policy. `initiatorCanApprove` was not set to `true`. In this case, they are locked, and the policy cannot be modified: whoever requests a modification cannot approve, and the policy is therefore always missing one approver. To unlock, they would need to invite a new user and give him the rights to approve as well.\n ","required":["kind","approvalGroups"],"properties":{"kind":{"type":"string","enum":["RequestApproval"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.10.pendingChangeRequest.body.oneOf.7.action.oneOf.0.kind","typeLabel":"enum\u003cstring>"},"approvalGroups":{"type":"array","items":{"type":"object","properties":{"quorum":{"type":"integer","minimum":1,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.10.pendingChangeRequest.body.oneOf.7.action.oneOf.0.approvalGroups.items.[INDEX].quorum","typeLabel":"integer"},"approvers":{"type":"object","properties":{"userId":{"type":"object","properties":{"in":{"type":"array","items":{"type":"string","minLength":1,"uniqueKey":"\\items.items.[INDEX].oneOf.10.pendingChangeRequest.body.oneOf.7.action.oneOf.0.approvalGroups.items.[INDEX].approvers.userId.in.items.[INDEX]","typeLabel":"string"},"minItems":1,"maxItems":100,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.10.pendingChangeRequest.body.oneOf.7.action.oneOf.0.approvalGroups.items.[INDEX].approvers.userId.in","typeLabel":"string[]"}},"required":["in"],"additionalProperties":false,"description":"Users and service accounts who may approve.","uniqueKey":"\\items.items.[INDEX].oneOf.10.pendingChangeRequest.body.oneOf.7.action.oneOf.0.approvalGroups.items.[INDEX].approvers.userId","typeLabel":"object"},"userGroupId":{"type":"object","properties":{"in":{"type":"array","items":{"type":"string","minLength":1,"maxLength":64,"pattern":"^ug-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"User group id.","example":"ug-139tf-f58l8-lsbt6dp47lfsdvgh","uniqueKey":"\\items.items.[INDEX].oneOf.10.pendingChangeRequest.body.oneOf.7.action.oneOf.0.approvalGroups.items.[INDEX].approvers.userGroupId.in.items.[INDEX]","typeLabel":"string"},"minItems":1,"maxItems":100,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.10.pendingChangeRequest.body.oneOf.7.action.oneOf.0.approvalGroups.items.[INDEX].approvers.userGroupId.in","typeLabel":"string[]"}},"required":["in"],"additionalProperties":false,"description":"User groups whose members may approve.","uniqueKey":"\\items.items.[INDEX].oneOf.10.pendingChangeRequest.body.oneOf.7.action.oneOf.0.approvalGroups.items.[INDEX].approvers.userGroupId","typeLabel":"object"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.10.pendingChangeRequest.body.oneOf.7.action.oneOf.0.approvalGroups.items.[INDEX].approvers","typeLabel":"object"},"name":{"type":"string","uniqueKey":"\\items.items.[INDEX].oneOf.10.pendingChangeRequest.body.oneOf.7.action.oneOf.0.approvalGroups.items.[INDEX].name","typeLabel":"string"},"initiatorCanApprove":{"type":"boolean","description":"Whether the initiator of the activity can participate in the approval.","uniqueKey":"\\items.items.[INDEX].oneOf.10.pendingChangeRequest.body.oneOf.7.action.oneOf.0.approvalGroups.items.[INDEX].initiatorCanApprove","typeLabel":"boolean"},"serviceAccountsCanApprove":{"type":"boolean","description":"Whether service accounts can participate in the approval for this group.","uniqueKey":"\\items.items.[INDEX].oneOf.10.pendingChangeRequest.body.oneOf.7.action.oneOf.0.approvalGroups.items.[INDEX].serviceAccountsCanApprove","typeLabel":"boolean"}},"required":["quorum","approvers"],"additionalProperties":false,"uniqueKey":"\\items.items.[INDEX].oneOf.10.pendingChangeRequest.body.oneOf.7.action.oneOf.0.approvalGroups.items.[INDEX]","typeLabel":"object"},"minItems":1,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.10.pendingChangeRequest.body.oneOf.7.action.oneOf.0.approvalGroups","typeLabel":"object[]"},"autoRejectTimeout":{"oneOf":[{"type":"integer","minimum":1,"uniqueKey":"\\items.items.[INDEX].oneOf.10.pendingChangeRequest.body.oneOf.7.action.oneOf.0.autoRejectTimeout.oneOf.0","typeLabel":"integer"},{"type":"null","minimum":1,"uniqueKey":"\\items.items.[INDEX].oneOf.10.pendingChangeRequest.body.oneOf.7.action.oneOf.0.autoRejectTimeout.oneOf.1","typeLabel":"null"}],"uniqueKey":"\\items.items.[INDEX].oneOf.10.pendingChangeRequest.body.oneOf.7.action.oneOf.0.autoRejectTimeout","typeLabel":"integer | null"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.10.pendingChangeRequest.body.oneOf.7.action.oneOf.0","typeLabel":"RequestApproval · object"},{"type":"object","title":"Block","description":"This action means that the activity will be blocked if the policy is triggered.\n\n```json\n{\n \"action\": {\n \"kind\": \"Block\"\n }\n}\n```\n","required":["kind"],"properties":{"kind":{"type":"string","enum":["Block"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.10.pendingChangeRequest.body.oneOf.7.action.oneOf.1.kind","typeLabel":"enum\u003cstring>"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.10.pendingChangeRequest.body.oneOf.7.action.oneOf.1","typeLabel":"Block · object"}],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.10.pendingChangeRequest.body.oneOf.7.action","typeLabel":"RequestApproval · object | Block · object"},"dateCreated":{"type":"string","uniqueKey":"\\items.items.[INDEX].oneOf.10.pendingChangeRequest.body.oneOf.7.dateCreated","typeLabel":"string"},"dateUpdated":{"type":"string","uniqueKey":"\\items.items.[INDEX].oneOf.10.pendingChangeRequest.body.oneOf.7.dateUpdated","typeLabel":"string"},"filters":{"type":"object","properties":{"vaultId":{"type":"object","properties":{"in":{"type":"array","items":{"type":"string","minLength":1,"uniqueKey":"\\items.items.[INDEX].oneOf.10.pendingChangeRequest.body.oneOf.7.filters.vaultId.in.items.[INDEX]","typeLabel":"string"},"minItems":1,"maxItems":100,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.10.pendingChangeRequest.body.oneOf.7.filters.vaultId.in","typeLabel":"string[]"}},"required":["in"],"additionalProperties":false,"uniqueKey":"\\items.items.[INDEX].oneOf.10.pendingChangeRequest.body.oneOf.7.filters.vaultId","typeLabel":"object"},"vaultTags":{"type":"object","properties":{"hasAny":{"type":"array","items":{"type":"string","minLength":1,"uniqueKey":"\\items.items.[INDEX].oneOf.10.pendingChangeRequest.body.oneOf.7.filters.vaultTags.hasAny.items.[INDEX]","typeLabel":"string"},"minItems":1,"maxItems":100,"uniqueKey":"\\items.items.[INDEX].oneOf.10.pendingChangeRequest.body.oneOf.7.filters.vaultTags.hasAny","typeLabel":"string[]"},"hasAll":{"type":"array","items":{"type":"string","minLength":1,"uniqueKey":"\\items.items.[INDEX].oneOf.10.pendingChangeRequest.body.oneOf.7.filters.vaultTags.hasAll.items.[INDEX]","typeLabel":"string"},"minItems":1,"maxItems":100,"uniqueKey":"\\items.items.[INDEX].oneOf.10.pendingChangeRequest.body.oneOf.7.filters.vaultTags.hasAll","typeLabel":"string[]"}},"additionalProperties":false,"uniqueKey":"\\items.items.[INDEX].oneOf.10.pendingChangeRequest.body.oneOf.7.filters.vaultTags","typeLabel":"object"}},"additionalProperties":false,"uniqueKey":"\\items.items.[INDEX].oneOf.10.pendingChangeRequest.body.oneOf.7.filters","typeLabel":"object"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.10.pendingChangeRequest.body.oneOf.7","typeLabel":"Vaults:ReleaseQuarantine · object"},{"type":"object","title":"Vaults:CreateLock","required":["id","name","status","activityKind","rule","action"],"properties":{"id":{"type":"string","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.10.pendingChangeRequest.body.oneOf.8.id","typeLabel":"string"},"name":{"type":"string","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.10.pendingChangeRequest.body.oneOf.8.name","typeLabel":"string"},"status":{"type":"string","enum":["Active","Archived"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.10.pendingChangeRequest.body.oneOf.8.status","typeLabel":"enum\u003cstring>"},"activityKind":{"type":"string","enum":["Vaults:CreateLock"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.10.pendingChangeRequest.body.oneOf.8.activityKind","typeLabel":"enum\u003cstring>"},"rule":{"type":"object","title":"AlwaysTrigger","description":"This rule will always be triggered, meaning that if this rule is defined on a policy, the policy will always trigger the policy action, regardless of the activity details.","required":["kind"],"properties":{"kind":{"type":"string","enum":["AlwaysTrigger"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.10.pendingChangeRequest.body.oneOf.8.rule.kind","typeLabel":"enum\u003cstring>"},"configuration":{"type":"object","properties":{},"additionalProperties":false,"uniqueKey":"\\items.items.[INDEX].oneOf.10.pendingChangeRequest.body.oneOf.8.rule.configuration","typeLabel":"object"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.10.pendingChangeRequest.body.oneOf.8.rule","typeLabel":"AlwaysTrigger · object"},"action":{"oneOf":[{"type":"object","title":"RequestApproval","description":"\nThis action means that activity will first require an Approval process to be completed before it can be executed (or be aborted if someone rejects it during the approval process).\n\nOne or several groups of approvers need to be specified. These groups define who is allowed to approve / reject an activity.\n\nThe activity will only be executed if all approver groups reach their \"quorum\" of approvals. Otherwise, if any one user within any approver group rejects, then the activity is aborted and the call is not executed.\n\nThe example below shows a `RequestApproval` action, configured with one approval group requiring 2 approvals amongst three specific users.\n\n```json\n{\n \"action\": {\n \"kind\": \"RequestApproval\",\n \"autoRejectTimeout\": 60, // minutes\n \"approvalGroups\": [\n {\n \"name\": \"Admins\",\n \"quorum\": 2, // only 2 approvers required in that group \n \"approvers\": {\n \"userId\": {\n \"in\": [\"us-...1\", \"us-...2\", \"us-...3\"],\n }\n }\n }\n ],\n\n }\n}\n```\n\n**Don't lock yourself up**\n\nBy default, users cannot approve an activity they initiated themselves, even if they are in an approval group. To allow this, you must set `initiatorCanApprove: true`.\n\n*Example 1:* For any wallet transfer, a policy is setup to require approval from **1 specific admin user** (eg. the CEO). `initiatorCanApprove` was not set to `true`. If the CEO himself initiates a transfer, no-one can approve his transfer and it's stuck.\n\n*Example 2:* Company has only 3 users. A policy is setup to require approval from **any 3 users** (`quorum: 3`) for any modification of a policy. `initiatorCanApprove` was not set to `true`. In this case, they are locked, and the policy cannot be modified: whoever requests a modification cannot approve, and the policy is therefore always missing one approver. To unlock, they would need to invite a new user and give him the rights to approve as well.\n ","required":["kind","approvalGroups"],"properties":{"kind":{"type":"string","enum":["RequestApproval"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.10.pendingChangeRequest.body.oneOf.8.action.oneOf.0.kind","typeLabel":"enum\u003cstring>"},"approvalGroups":{"type":"array","items":{"type":"object","properties":{"quorum":{"type":"integer","minimum":1,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.10.pendingChangeRequest.body.oneOf.8.action.oneOf.0.approvalGroups.items.[INDEX].quorum","typeLabel":"integer"},"approvers":{"type":"object","properties":{"userId":{"type":"object","properties":{"in":{"type":"array","items":{"type":"string","minLength":1,"uniqueKey":"\\items.items.[INDEX].oneOf.10.pendingChangeRequest.body.oneOf.8.action.oneOf.0.approvalGroups.items.[INDEX].approvers.userId.in.items.[INDEX]","typeLabel":"string"},"minItems":1,"maxItems":100,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.10.pendingChangeRequest.body.oneOf.8.action.oneOf.0.approvalGroups.items.[INDEX].approvers.userId.in","typeLabel":"string[]"}},"required":["in"],"additionalProperties":false,"description":"Users and service accounts who may approve.","uniqueKey":"\\items.items.[INDEX].oneOf.10.pendingChangeRequest.body.oneOf.8.action.oneOf.0.approvalGroups.items.[INDEX].approvers.userId","typeLabel":"object"},"userGroupId":{"type":"object","properties":{"in":{"type":"array","items":{"type":"string","minLength":1,"maxLength":64,"pattern":"^ug-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"User group id.","example":"ug-139tf-f58l8-lsbt6dp47lfsdvgh","uniqueKey":"\\items.items.[INDEX].oneOf.10.pendingChangeRequest.body.oneOf.8.action.oneOf.0.approvalGroups.items.[INDEX].approvers.userGroupId.in.items.[INDEX]","typeLabel":"string"},"minItems":1,"maxItems":100,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.10.pendingChangeRequest.body.oneOf.8.action.oneOf.0.approvalGroups.items.[INDEX].approvers.userGroupId.in","typeLabel":"string[]"}},"required":["in"],"additionalProperties":false,"description":"User groups whose members may approve.","uniqueKey":"\\items.items.[INDEX].oneOf.10.pendingChangeRequest.body.oneOf.8.action.oneOf.0.approvalGroups.items.[INDEX].approvers.userGroupId","typeLabel":"object"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.10.pendingChangeRequest.body.oneOf.8.action.oneOf.0.approvalGroups.items.[INDEX].approvers","typeLabel":"object"},"name":{"type":"string","uniqueKey":"\\items.items.[INDEX].oneOf.10.pendingChangeRequest.body.oneOf.8.action.oneOf.0.approvalGroups.items.[INDEX].name","typeLabel":"string"},"initiatorCanApprove":{"type":"boolean","description":"Whether the initiator of the activity can participate in the approval.","uniqueKey":"\\items.items.[INDEX].oneOf.10.pendingChangeRequest.body.oneOf.8.action.oneOf.0.approvalGroups.items.[INDEX].initiatorCanApprove","typeLabel":"boolean"},"serviceAccountsCanApprove":{"type":"boolean","description":"Whether service accounts can participate in the approval for this group.","uniqueKey":"\\items.items.[INDEX].oneOf.10.pendingChangeRequest.body.oneOf.8.action.oneOf.0.approvalGroups.items.[INDEX].serviceAccountsCanApprove","typeLabel":"boolean"}},"required":["quorum","approvers"],"additionalProperties":false,"uniqueKey":"\\items.items.[INDEX].oneOf.10.pendingChangeRequest.body.oneOf.8.action.oneOf.0.approvalGroups.items.[INDEX]","typeLabel":"object"},"minItems":1,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.10.pendingChangeRequest.body.oneOf.8.action.oneOf.0.approvalGroups","typeLabel":"object[]"},"autoRejectTimeout":{"oneOf":[{"type":"integer","minimum":1,"uniqueKey":"\\items.items.[INDEX].oneOf.10.pendingChangeRequest.body.oneOf.8.action.oneOf.0.autoRejectTimeout.oneOf.0","typeLabel":"integer"},{"type":"null","minimum":1,"uniqueKey":"\\items.items.[INDEX].oneOf.10.pendingChangeRequest.body.oneOf.8.action.oneOf.0.autoRejectTimeout.oneOf.1","typeLabel":"null"}],"uniqueKey":"\\items.items.[INDEX].oneOf.10.pendingChangeRequest.body.oneOf.8.action.oneOf.0.autoRejectTimeout","typeLabel":"integer | null"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.10.pendingChangeRequest.body.oneOf.8.action.oneOf.0","typeLabel":"RequestApproval · object"},{"type":"object","title":"Block","description":"This action means that the activity will be blocked if the policy is triggered.\n\n```json\n{\n \"action\": {\n \"kind\": \"Block\"\n }\n}\n```\n","required":["kind"],"properties":{"kind":{"type":"string","enum":["Block"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.10.pendingChangeRequest.body.oneOf.8.action.oneOf.1.kind","typeLabel":"enum\u003cstring>"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.10.pendingChangeRequest.body.oneOf.8.action.oneOf.1","typeLabel":"Block · object"}],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.10.pendingChangeRequest.body.oneOf.8.action","typeLabel":"RequestApproval · object | Block · object"},"dateCreated":{"type":"string","uniqueKey":"\\items.items.[INDEX].oneOf.10.pendingChangeRequest.body.oneOf.8.dateCreated","typeLabel":"string"},"dateUpdated":{"type":"string","uniqueKey":"\\items.items.[INDEX].oneOf.10.pendingChangeRequest.body.oneOf.8.dateUpdated","typeLabel":"string"},"filters":{"type":"object","properties":{"vaultId":{"type":"object","properties":{"in":{"type":"array","items":{"type":"string","minLength":1,"uniqueKey":"\\items.items.[INDEX].oneOf.10.pendingChangeRequest.body.oneOf.8.filters.vaultId.in.items.[INDEX]","typeLabel":"string"},"minItems":1,"maxItems":100,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.10.pendingChangeRequest.body.oneOf.8.filters.vaultId.in","typeLabel":"string[]"}},"required":["in"],"additionalProperties":false,"uniqueKey":"\\items.items.[INDEX].oneOf.10.pendingChangeRequest.body.oneOf.8.filters.vaultId","typeLabel":"object"},"vaultTags":{"type":"object","properties":{"hasAny":{"type":"array","items":{"type":"string","minLength":1,"uniqueKey":"\\items.items.[INDEX].oneOf.10.pendingChangeRequest.body.oneOf.8.filters.vaultTags.hasAny.items.[INDEX]","typeLabel":"string"},"minItems":1,"maxItems":100,"uniqueKey":"\\items.items.[INDEX].oneOf.10.pendingChangeRequest.body.oneOf.8.filters.vaultTags.hasAny","typeLabel":"string[]"},"hasAll":{"type":"array","items":{"type":"string","minLength":1,"uniqueKey":"\\items.items.[INDEX].oneOf.10.pendingChangeRequest.body.oneOf.8.filters.vaultTags.hasAll.items.[INDEX]","typeLabel":"string"},"minItems":1,"maxItems":100,"uniqueKey":"\\items.items.[INDEX].oneOf.10.pendingChangeRequest.body.oneOf.8.filters.vaultTags.hasAll","typeLabel":"string[]"}},"additionalProperties":false,"uniqueKey":"\\items.items.[INDEX].oneOf.10.pendingChangeRequest.body.oneOf.8.filters.vaultTags","typeLabel":"object"}},"additionalProperties":false,"uniqueKey":"\\items.items.[INDEX].oneOf.10.pendingChangeRequest.body.oneOf.8.filters","typeLabel":"object"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.10.pendingChangeRequest.body.oneOf.8","typeLabel":"Vaults:CreateLock · object"},{"type":"object","title":"Vaults:ReplaceLock","required":["id","name","status","activityKind","rule","action"],"properties":{"id":{"type":"string","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.10.pendingChangeRequest.body.oneOf.9.id","typeLabel":"string"},"name":{"type":"string","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.10.pendingChangeRequest.body.oneOf.9.name","typeLabel":"string"},"status":{"type":"string","enum":["Active","Archived"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.10.pendingChangeRequest.body.oneOf.9.status","typeLabel":"enum\u003cstring>"},"activityKind":{"type":"string","enum":["Vaults:ReplaceLock"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.10.pendingChangeRequest.body.oneOf.9.activityKind","typeLabel":"enum\u003cstring>"},"rule":{"type":"object","title":"AlwaysTrigger","description":"This rule will always be triggered, meaning that if this rule is defined on a policy, the policy will always trigger the policy action, regardless of the activity details.","required":["kind"],"properties":{"kind":{"type":"string","enum":["AlwaysTrigger"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.10.pendingChangeRequest.body.oneOf.9.rule.kind","typeLabel":"enum\u003cstring>"},"configuration":{"type":"object","properties":{},"additionalProperties":false,"uniqueKey":"\\items.items.[INDEX].oneOf.10.pendingChangeRequest.body.oneOf.9.rule.configuration","typeLabel":"object"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.10.pendingChangeRequest.body.oneOf.9.rule","typeLabel":"AlwaysTrigger · object"},"action":{"oneOf":[{"type":"object","title":"RequestApproval","description":"\nThis action means that activity will first require an Approval process to be completed before it can be executed (or be aborted if someone rejects it during the approval process).\n\nOne or several groups of approvers need to be specified. These groups define who is allowed to approve / reject an activity.\n\nThe activity will only be executed if all approver groups reach their \"quorum\" of approvals. Otherwise, if any one user within any approver group rejects, then the activity is aborted and the call is not executed.\n\nThe example below shows a `RequestApproval` action, configured with one approval group requiring 2 approvals amongst three specific users.\n\n```json\n{\n \"action\": {\n \"kind\": \"RequestApproval\",\n \"autoRejectTimeout\": 60, // minutes\n \"approvalGroups\": [\n {\n \"name\": \"Admins\",\n \"quorum\": 2, // only 2 approvers required in that group \n \"approvers\": {\n \"userId\": {\n \"in\": [\"us-...1\", \"us-...2\", \"us-...3\"],\n }\n }\n }\n ],\n\n }\n}\n```\n\n**Don't lock yourself up**\n\nBy default, users cannot approve an activity they initiated themselves, even if they are in an approval group. To allow this, you must set `initiatorCanApprove: true`.\n\n*Example 1:* For any wallet transfer, a policy is setup to require approval from **1 specific admin user** (eg. the CEO). `initiatorCanApprove` was not set to `true`. If the CEO himself initiates a transfer, no-one can approve his transfer and it's stuck.\n\n*Example 2:* Company has only 3 users. A policy is setup to require approval from **any 3 users** (`quorum: 3`) for any modification of a policy. `initiatorCanApprove` was not set to `true`. In this case, they are locked, and the policy cannot be modified: whoever requests a modification cannot approve, and the policy is therefore always missing one approver. To unlock, they would need to invite a new user and give him the rights to approve as well.\n ","required":["kind","approvalGroups"],"properties":{"kind":{"type":"string","enum":["RequestApproval"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.10.pendingChangeRequest.body.oneOf.9.action.oneOf.0.kind","typeLabel":"enum\u003cstring>"},"approvalGroups":{"type":"array","items":{"type":"object","properties":{"quorum":{"type":"integer","minimum":1,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.10.pendingChangeRequest.body.oneOf.9.action.oneOf.0.approvalGroups.items.[INDEX].quorum","typeLabel":"integer"},"approvers":{"type":"object","properties":{"userId":{"type":"object","properties":{"in":{"type":"array","items":{"type":"string","minLength":1,"uniqueKey":"\\items.items.[INDEX].oneOf.10.pendingChangeRequest.body.oneOf.9.action.oneOf.0.approvalGroups.items.[INDEX].approvers.userId.in.items.[INDEX]","typeLabel":"string"},"minItems":1,"maxItems":100,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.10.pendingChangeRequest.body.oneOf.9.action.oneOf.0.approvalGroups.items.[INDEX].approvers.userId.in","typeLabel":"string[]"}},"required":["in"],"additionalProperties":false,"description":"Users and service accounts who may approve.","uniqueKey":"\\items.items.[INDEX].oneOf.10.pendingChangeRequest.body.oneOf.9.action.oneOf.0.approvalGroups.items.[INDEX].approvers.userId","typeLabel":"object"},"userGroupId":{"type":"object","properties":{"in":{"type":"array","items":{"type":"string","minLength":1,"maxLength":64,"pattern":"^ug-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"User group id.","example":"ug-139tf-f58l8-lsbt6dp47lfsdvgh","uniqueKey":"\\items.items.[INDEX].oneOf.10.pendingChangeRequest.body.oneOf.9.action.oneOf.0.approvalGroups.items.[INDEX].approvers.userGroupId.in.items.[INDEX]","typeLabel":"string"},"minItems":1,"maxItems":100,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.10.pendingChangeRequest.body.oneOf.9.action.oneOf.0.approvalGroups.items.[INDEX].approvers.userGroupId.in","typeLabel":"string[]"}},"required":["in"],"additionalProperties":false,"description":"User groups whose members may approve.","uniqueKey":"\\items.items.[INDEX].oneOf.10.pendingChangeRequest.body.oneOf.9.action.oneOf.0.approvalGroups.items.[INDEX].approvers.userGroupId","typeLabel":"object"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.10.pendingChangeRequest.body.oneOf.9.action.oneOf.0.approvalGroups.items.[INDEX].approvers","typeLabel":"object"},"name":{"type":"string","uniqueKey":"\\items.items.[INDEX].oneOf.10.pendingChangeRequest.body.oneOf.9.action.oneOf.0.approvalGroups.items.[INDEX].name","typeLabel":"string"},"initiatorCanApprove":{"type":"boolean","description":"Whether the initiator of the activity can participate in the approval.","uniqueKey":"\\items.items.[INDEX].oneOf.10.pendingChangeRequest.body.oneOf.9.action.oneOf.0.approvalGroups.items.[INDEX].initiatorCanApprove","typeLabel":"boolean"},"serviceAccountsCanApprove":{"type":"boolean","description":"Whether service accounts can participate in the approval for this group.","uniqueKey":"\\items.items.[INDEX].oneOf.10.pendingChangeRequest.body.oneOf.9.action.oneOf.0.approvalGroups.items.[INDEX].serviceAccountsCanApprove","typeLabel":"boolean"}},"required":["quorum","approvers"],"additionalProperties":false,"uniqueKey":"\\items.items.[INDEX].oneOf.10.pendingChangeRequest.body.oneOf.9.action.oneOf.0.approvalGroups.items.[INDEX]","typeLabel":"object"},"minItems":1,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.10.pendingChangeRequest.body.oneOf.9.action.oneOf.0.approvalGroups","typeLabel":"object[]"},"autoRejectTimeout":{"oneOf":[{"type":"integer","minimum":1,"uniqueKey":"\\items.items.[INDEX].oneOf.10.pendingChangeRequest.body.oneOf.9.action.oneOf.0.autoRejectTimeout.oneOf.0","typeLabel":"integer"},{"type":"null","minimum":1,"uniqueKey":"\\items.items.[INDEX].oneOf.10.pendingChangeRequest.body.oneOf.9.action.oneOf.0.autoRejectTimeout.oneOf.1","typeLabel":"null"}],"uniqueKey":"\\items.items.[INDEX].oneOf.10.pendingChangeRequest.body.oneOf.9.action.oneOf.0.autoRejectTimeout","typeLabel":"integer | null"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.10.pendingChangeRequest.body.oneOf.9.action.oneOf.0","typeLabel":"RequestApproval · object"},{"type":"object","title":"Block","description":"This action means that the activity will be blocked if the policy is triggered.\n\n```json\n{\n \"action\": {\n \"kind\": \"Block\"\n }\n}\n```\n","required":["kind"],"properties":{"kind":{"type":"string","enum":["Block"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.10.pendingChangeRequest.body.oneOf.9.action.oneOf.1.kind","typeLabel":"enum\u003cstring>"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.10.pendingChangeRequest.body.oneOf.9.action.oneOf.1","typeLabel":"Block · object"}],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.10.pendingChangeRequest.body.oneOf.9.action","typeLabel":"RequestApproval · object | Block · object"},"dateCreated":{"type":"string","uniqueKey":"\\items.items.[INDEX].oneOf.10.pendingChangeRequest.body.oneOf.9.dateCreated","typeLabel":"string"},"dateUpdated":{"type":"string","uniqueKey":"\\items.items.[INDEX].oneOf.10.pendingChangeRequest.body.oneOf.9.dateUpdated","typeLabel":"string"},"filters":{"type":"object","properties":{"vaultId":{"type":"object","properties":{"in":{"type":"array","items":{"type":"string","minLength":1,"uniqueKey":"\\items.items.[INDEX].oneOf.10.pendingChangeRequest.body.oneOf.9.filters.vaultId.in.items.[INDEX]","typeLabel":"string"},"minItems":1,"maxItems":100,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.10.pendingChangeRequest.body.oneOf.9.filters.vaultId.in","typeLabel":"string[]"}},"required":["in"],"additionalProperties":false,"uniqueKey":"\\items.items.[INDEX].oneOf.10.pendingChangeRequest.body.oneOf.9.filters.vaultId","typeLabel":"object"},"vaultTags":{"type":"object","properties":{"hasAny":{"type":"array","items":{"type":"string","minLength":1,"uniqueKey":"\\items.items.[INDEX].oneOf.10.pendingChangeRequest.body.oneOf.9.filters.vaultTags.hasAny.items.[INDEX]","typeLabel":"string"},"minItems":1,"maxItems":100,"uniqueKey":"\\items.items.[INDEX].oneOf.10.pendingChangeRequest.body.oneOf.9.filters.vaultTags.hasAny","typeLabel":"string[]"},"hasAll":{"type":"array","items":{"type":"string","minLength":1,"uniqueKey":"\\items.items.[INDEX].oneOf.10.pendingChangeRequest.body.oneOf.9.filters.vaultTags.hasAll.items.[INDEX]","typeLabel":"string"},"minItems":1,"maxItems":100,"uniqueKey":"\\items.items.[INDEX].oneOf.10.pendingChangeRequest.body.oneOf.9.filters.vaultTags.hasAll","typeLabel":"string[]"}},"additionalProperties":false,"uniqueKey":"\\items.items.[INDEX].oneOf.10.pendingChangeRequest.body.oneOf.9.filters.vaultTags","typeLabel":"object"}},"additionalProperties":false,"uniqueKey":"\\items.items.[INDEX].oneOf.10.pendingChangeRequest.body.oneOf.9.filters","typeLabel":"object"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.10.pendingChangeRequest.body.oneOf.9","typeLabel":"Vaults:ReplaceLock · object"},{"type":"object","title":"UserAction","required":["id","name","status","activityKind","rule","action"],"properties":{"id":{"type":"string","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.10.pendingChangeRequest.body.oneOf.10.id","typeLabel":"string"},"name":{"type":"string","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.10.pendingChangeRequest.body.oneOf.10.name","typeLabel":"string"},"status":{"type":"string","enum":["Active","Archived"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.10.pendingChangeRequest.body.oneOf.10.status","typeLabel":"enum\u003cstring>"},"activityKind":{"type":"string","enum":["UserAction"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.10.pendingChangeRequest.body.oneOf.10.activityKind","typeLabel":"enum\u003cstring>"},"rule":{"type":"object","properties":{"kind":{"type":"string","enum":["UserAction"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.10.pendingChangeRequest.body.oneOf.10.rule.kind","typeLabel":"enum\u003cstring>"},"configuration":{"type":"object","properties":{"userActionKinds":{"type":"array","items":{"type":"string","uniqueKey":"\\items.items.[INDEX].oneOf.10.pendingChangeRequest.body.oneOf.10.rule.configuration.userActionKinds.items.[INDEX]","typeLabel":"string"},"minItems":1,"description":"The user actions this rule applies to. The rule triggers on any of them.","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.10.pendingChangeRequest.body.oneOf.10.rule.configuration.userActionKinds","typeLabel":"string[]"}},"required":["userActionKinds"],"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.10.pendingChangeRequest.body.oneOf.10.rule.configuration","typeLabel":"object"}},"required":["kind","configuration"],"additionalProperties":false,"title":"UserAction","isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.10.pendingChangeRequest.body.oneOf.10.rule","typeLabel":"UserAction · object"},"action":{"oneOf":[{"type":"object","title":"RequestApproval","description":"\nThis action means that activity will first require an Approval process to be completed before it can be executed (or be aborted if someone rejects it during the approval process).\n\nOne or several groups of approvers need to be specified. These groups define who is allowed to approve / reject an activity.\n\nThe activity will only be executed if all approver groups reach their \"quorum\" of approvals. Otherwise, if any one user within any approver group rejects, then the activity is aborted and the call is not executed.\n\nThe example below shows a `RequestApproval` action, configured with one approval group requiring 2 approvals amongst three specific users.\n\n```json\n{\n \"action\": {\n \"kind\": \"RequestApproval\",\n \"autoRejectTimeout\": 60, // minutes\n \"approvalGroups\": [\n {\n \"name\": \"Admins\",\n \"quorum\": 2, // only 2 approvers required in that group \n \"approvers\": {\n \"userId\": {\n \"in\": [\"us-...1\", \"us-...2\", \"us-...3\"],\n }\n }\n }\n ],\n\n }\n}\n```\n\n**Don't lock yourself up**\n\nBy default, users cannot approve an activity they initiated themselves, even if they are in an approval group. To allow this, you must set `initiatorCanApprove: true`.\n\n*Example 1:* For any wallet transfer, a policy is setup to require approval from **1 specific admin user** (eg. the CEO). `initiatorCanApprove` was not set to `true`. If the CEO himself initiates a transfer, no-one can approve his transfer and it's stuck.\n\n*Example 2:* Company has only 3 users. A policy is setup to require approval from **any 3 users** (`quorum: 3`) for any modification of a policy. `initiatorCanApprove` was not set to `true`. In this case, they are locked, and the policy cannot be modified: whoever requests a modification cannot approve, and the policy is therefore always missing one approver. To unlock, they would need to invite a new user and give him the rights to approve as well.\n ","required":["kind","approvalGroups"],"properties":{"kind":{"type":"string","enum":["RequestApproval"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.10.pendingChangeRequest.body.oneOf.10.action.oneOf.0.kind","typeLabel":"enum\u003cstring>"},"approvalGroups":{"type":"array","items":{"type":"object","properties":{"quorum":{"type":"integer","minimum":1,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.10.pendingChangeRequest.body.oneOf.10.action.oneOf.0.approvalGroups.items.[INDEX].quorum","typeLabel":"integer"},"approvers":{"type":"object","properties":{"userId":{"type":"object","properties":{"in":{"type":"array","items":{"type":"string","minLength":1,"uniqueKey":"\\items.items.[INDEX].oneOf.10.pendingChangeRequest.body.oneOf.10.action.oneOf.0.approvalGroups.items.[INDEX].approvers.userId.in.items.[INDEX]","typeLabel":"string"},"minItems":1,"maxItems":100,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.10.pendingChangeRequest.body.oneOf.10.action.oneOf.0.approvalGroups.items.[INDEX].approvers.userId.in","typeLabel":"string[]"}},"required":["in"],"additionalProperties":false,"description":"Users and service accounts who may approve.","uniqueKey":"\\items.items.[INDEX].oneOf.10.pendingChangeRequest.body.oneOf.10.action.oneOf.0.approvalGroups.items.[INDEX].approvers.userId","typeLabel":"object"},"userGroupId":{"type":"object","properties":{"in":{"type":"array","items":{"type":"string","minLength":1,"maxLength":64,"pattern":"^ug-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"User group id.","example":"ug-139tf-f58l8-lsbt6dp47lfsdvgh","uniqueKey":"\\items.items.[INDEX].oneOf.10.pendingChangeRequest.body.oneOf.10.action.oneOf.0.approvalGroups.items.[INDEX].approvers.userGroupId.in.items.[INDEX]","typeLabel":"string"},"minItems":1,"maxItems":100,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.10.pendingChangeRequest.body.oneOf.10.action.oneOf.0.approvalGroups.items.[INDEX].approvers.userGroupId.in","typeLabel":"string[]"}},"required":["in"],"additionalProperties":false,"description":"User groups whose members may approve.","uniqueKey":"\\items.items.[INDEX].oneOf.10.pendingChangeRequest.body.oneOf.10.action.oneOf.0.approvalGroups.items.[INDEX].approvers.userGroupId","typeLabel":"object"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.10.pendingChangeRequest.body.oneOf.10.action.oneOf.0.approvalGroups.items.[INDEX].approvers","typeLabel":"object"},"name":{"type":"string","uniqueKey":"\\items.items.[INDEX].oneOf.10.pendingChangeRequest.body.oneOf.10.action.oneOf.0.approvalGroups.items.[INDEX].name","typeLabel":"string"},"initiatorCanApprove":{"type":"boolean","description":"Whether the initiator of the activity can participate in the approval.","uniqueKey":"\\items.items.[INDEX].oneOf.10.pendingChangeRequest.body.oneOf.10.action.oneOf.0.approvalGroups.items.[INDEX].initiatorCanApprove","typeLabel":"boolean"},"serviceAccountsCanApprove":{"type":"boolean","description":"Whether service accounts can participate in the approval for this group.","uniqueKey":"\\items.items.[INDEX].oneOf.10.pendingChangeRequest.body.oneOf.10.action.oneOf.0.approvalGroups.items.[INDEX].serviceAccountsCanApprove","typeLabel":"boolean"}},"required":["quorum","approvers"],"additionalProperties":false,"uniqueKey":"\\items.items.[INDEX].oneOf.10.pendingChangeRequest.body.oneOf.10.action.oneOf.0.approvalGroups.items.[INDEX]","typeLabel":"object"},"minItems":1,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.10.pendingChangeRequest.body.oneOf.10.action.oneOf.0.approvalGroups","typeLabel":"object[]"},"autoRejectTimeout":{"oneOf":[{"type":"integer","minimum":1,"uniqueKey":"\\items.items.[INDEX].oneOf.10.pendingChangeRequest.body.oneOf.10.action.oneOf.0.autoRejectTimeout.oneOf.0","typeLabel":"integer"},{"type":"null","minimum":1,"uniqueKey":"\\items.items.[INDEX].oneOf.10.pendingChangeRequest.body.oneOf.10.action.oneOf.0.autoRejectTimeout.oneOf.1","typeLabel":"null"}],"uniqueKey":"\\items.items.[INDEX].oneOf.10.pendingChangeRequest.body.oneOf.10.action.oneOf.0.autoRejectTimeout","typeLabel":"integer | null"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.10.pendingChangeRequest.body.oneOf.10.action.oneOf.0","typeLabel":"RequestApproval · object"},{"type":"object","title":"Block","description":"This action means that the activity will be blocked if the policy is triggered.\n\n```json\n{\n \"action\": {\n \"kind\": \"Block\"\n }\n}\n```\n","required":["kind"],"properties":{"kind":{"type":"string","enum":["Block"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.10.pendingChangeRequest.body.oneOf.10.action.oneOf.1.kind","typeLabel":"enum\u003cstring>"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.10.pendingChangeRequest.body.oneOf.10.action.oneOf.1","typeLabel":"Block · object"}],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.10.pendingChangeRequest.body.oneOf.10.action","typeLabel":"RequestApproval · object | Block · object"},"dateCreated":{"type":"string","uniqueKey":"\\items.items.[INDEX].oneOf.10.pendingChangeRequest.body.oneOf.10.dateCreated","typeLabel":"string"},"dateUpdated":{"type":"string","uniqueKey":"\\items.items.[INDEX].oneOf.10.pendingChangeRequest.body.oneOf.10.dateUpdated","typeLabel":"string"},"filters":{"type":"object","properties":{},"uniqueKey":"\\items.items.[INDEX].oneOf.10.pendingChangeRequest.body.oneOf.10.filters","typeLabel":"object"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.10.pendingChangeRequest.body.oneOf.10","typeLabel":"UserAction · object"}],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].oneOf.10.pendingChangeRequest.body","typeLabel":"Registry:Addresses:Modify · object | Permissions:Assign · object | Permissions:Modify · object | Policies:Modify · object | Registry:ContractSchemas:Modify · object | Wallets:Sign · object | Wallets:IncomingTransaction · object | Vaults:ReleaseQuarantine · object | Vaults:CreateLock · object | Vaults:ReplaceLock · object | UserAction · object"},"dateResolved":{"type":"string","format":"date-time","uniqueKey":"\\items.items.[INDEX].oneOf.10.pendingChangeRequest.dateResolved","typeLabel":"string\u003cdate-time>"},"approvalId":{"type":"string","uniqueKey":"\\items.items.[INDEX].oneOf.10.pendingChangeRequest.approvalId","typeLabel":"string"}},"required":["id","requester","kind","operationKind","status","entityId","dateCreated","body"],"additionalProperties":false,"uniqueKey":"\\items.items.[INDEX].oneOf.10.pendingChangeRequest","typeLabel":"object"}},"additionalProperties":false,"uniqueKey":"\\items.items.[INDEX].oneOf.10","typeLabel":"UserAction · object"}],"uniqueKey":"\\items.items.[INDEX]","typeLabel":"Registry:Addresses:Modify · object | Permissions:Assign · object | Permissions:Modify · object | Policies:Modify · object | Registry:ContractSchemas:Modify · object | Wallets:Sign · object | Wallets:IncomingTransaction · object | Vaults:ReleaseQuarantine · object | Vaults:CreateLock · object | Vaults:ReplaceLock · object | UserAction · object"},"isRequired":true,"uniqueKey":"\\items","typeLabel":"(Registry:Addresses:Modify · object | Permissions:Assign · object | Permissions:Modify · object | Policies:Modify · object | Registry:ContractSchemas:Modify · object | Wallets:Sign · object | Wallets:IncomingTransaction · object | Vaults:ReleaseQuarantine · object | Vaults:CreateLock · object | Vaults:ReplaceLock · object | UserAction · object)[]"},"nextPageToken":{"type":"string","uniqueKey":"nextPageToken","typeLabel":"string"}},"required":["items"],"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"items":[{"id":"\u003cstring>","name":"\u003cstring>","status":"Active","activityKind":"Registry:Addresses:Modify","rule":{"kind":"AlwaysTrigger","configuration":{}},"action":{"kind":"RequestApproval","approvalGroups":[{"quorum":2,"approvers":{"userId":{"in":["\u003cstring>"]},"userGroupId":{"in":["ug-139tf-f58l8-lsbt6dp47lfsdvgh"]}},"name":"\u003cstring>","initiatorCanApprove":true,"serviceAccountsCanApprove":true}],"autoRejectTimeout":2},"dateCreated":"\u003cstring>","dateUpdated":"\u003cstring>","filters":{},"pendingChangeRequest":{"id":"\u003cstring>","requester":{"userId":"\u003cstring>","tokenId":"\u003cstring>","appId":"\u003cstring>"},"kind":"Policy","operationKind":"Update","status":"Applied","entityId":"\u003cstring>","dateCreated":"2023-11-07T05:31:56Z","body":{"id":"\u003cstring>","name":"\u003cstring>","status":"Active","activityKind":"Registry:Addresses:Modify","rule":{"kind":"AlwaysTrigger","configuration":{}},"action":{"kind":"RequestApproval","approvalGroups":[{"quorum":2,"approvers":{"userId":{"in":["\u003cstring>"]},"userGroupId":{"in":["ug-139tf-f58l8-lsbt6dp47lfsdvgh"]}},"name":"\u003cstring>","initiatorCanApprove":true,"serviceAccountsCanApprove":true}],"autoRejectTimeout":2},"dateCreated":"\u003cstring>","dateUpdated":"\u003cstring>","filters":{}},"dateResolved":"2023-11-07T05:31:56Z","approvalId":"\u003cstring>"}}],"nextPageToken":"\u003cstring>"}}},"exampleType":"generated"}},"exampleType":"generated"}},"security":{"9ab00ef7-ff61-4b14-aec7-a8e9e41adac9":{"authenticationToken":{"type":"http","scheme":"bearer","bearerFormat":"JWT","description":"**Bearer Token:** Used to authenticate API requests.\nMore details how to generate the token: [Authentication flows](https://docs.dfns.co/api-reference/auth/login-flows)","scopes":[],"schemeName":"authenticationToken"}}},"servers":{"2602c3b3-eb43-4e3c-b815-397392a0961e":{"url":"https://api.dfns.io","description":"Default - Europe"},"c96f0f9f-2ddd-4d9d-9865-734cc07b61ea":{"url":"https://api.uae.dfns.io","description":"UAE"},"fa081b12-059b-418e-83d2-ffad92338341":{"url":"https://api.dfns.ninja","description":"\u003cDeprecated> Staging"}},"processedSecurityOptions":[{"schemes":[{"scheme":{"type":"http","scheme":"bearer","bearerFormat":"JWT","description":"**Bearer Token:** Used to authenticate API requests.\nMore details how to generate the token: [Authentication flows](https://docs.dfns.co/api-reference/auth/login-flows)","scopes":[],"schemeName":"authenticationToken"},"schema":{"title":"Bearer Auth","type":"string","isRequired":true,"description":"**Bearer Token:** Used to authenticate API requests.\nMore details how to generate the token: [Authentication flows](https://docs.dfns.co/api-reference/auth/login-flows)","format":"bearer","typeLabel":"string\u003cbearer>","deprecated":false},"schemeName":"authenticationToken","name":"Authorization"}],"title":"authenticationToken"}]},"originalFileLocation":"openapi.yaml"},"subdomain":"dfns-6d8c7466","siteName":"DFNS documentation","title":"List Policies - DFNS documentation","navMaps":{"firstHrefInVersion":{},"firstHrefInLanguage":{}},"originalFileLocation":"api-reference/policies/list-policies.mdx"},"headHtml":"\u003cscript data-mint-head>(function(){var d=document.documentElement,p=null;if(!p){try{p=localStorage.getItem(\"isDarkMode\")}catch(e){}if(p==='true')p='dark';else if(p==='false')p='light';if(p!=='light'\u0026\u0026p!=='dark'\u0026\u0026p!=='system')p=\"system\"}var r=p==='system'?(matchMedia(\"(prefers-color-scheme: dark)\").matches?'dark':'light'):p;d.classList.remove(r==='dark'?'light':'dark');d.classList.add(r);d.setAttribute(\"data-theme-preference\",p)})();\u003c/script>\u003cmeta data-mint-head name=\"description\" content=\"Retrieve the list of policies on your organization.\">\u003cmeta data-mint-head name=\"application-name\" content=\"DFNS documentation\">\u003cmeta data-mint-head name=\"generator\" content=\"Mintlify\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/dfns-6d8c7466/hYb5TZBVjwDMqDeA/_generated/favicon/android-chrome-192x192.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"apple-touch-icon\" type=\"image/png\" sizes=\"180x180\" href=\"/mintlify-assets/_mintlify/favicons/dfns-6d8c7466/hYb5TZBVjwDMqDeA/_generated/favicon/apple-touch-icon.png\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/dfns-6d8c7466/hYb5TZBVjwDMqDeA/_generated/favicon/favicon-16x16.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"/mintlify-assets/_mintlify/favicons/dfns-6d8c7466/hYb5TZBVjwDMqDeA/_generated/favicon/favicon-32x32.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"shortcut icon\" type=\"image/x-icon\" href=\"/mintlify-assets/_mintlify/favicons/dfns-6d8c7466/hYb5TZBVjwDMqDeA/_generated/favicon/favicon.ico\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/dfns-6d8c7466/hYb5TZBVjwDMqDeA/_generated/favicon-dark/android-chrome-192x192.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/dfns-6d8c7466/hYb5TZBVjwDMqDeA/_generated/favicon-dark/favicon-16x16.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"/mintlify-assets/_mintlify/favicons/dfns-6d8c7466/hYb5TZBVjwDMqDeA/_generated/favicon-dark/favicon-32x32.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"shortcut icon\" type=\"image/x-icon\" href=\"/mintlify-assets/_mintlify/favicons/dfns-6d8c7466/hYb5TZBVjwDMqDeA/_generated/favicon-dark/favicon.ico\" media=\"(prefers-color-scheme: dark)\">\u003cmeta data-mint-head property=\"og:title\" content=\"List Policies - DFNS documentation\">\u003cmeta data-mint-head property=\"og:description\" content=\"Retrieve the list of policies on your organization.\">\u003cmeta data-mint-head property=\"og:site_name\" content=\"DFNS documentation\">\u003cmeta data-mint-head property=\"og:url\" content=\"https://docs.dfns.co/api-reference/policies/list-policies\">\u003cmeta data-mint-head property=\"og:type\" content=\"website\">\u003cmeta data-mint-head property=\"og:image\" content=\"https://dfns-6d8c7466.mintlify.app/_mintlify/api/og/v2?division=Policies\u0026amp;title=List+Policies\u0026amp;description=Retrieve+the+list+of+policies+on+your+organization.\u0026amp;theme=68e48acc7b17f2bffb410930\u0026amp;signature=8a5f86b9a270398a816d5372922dfc2c8692e1391efeb18768798225eeb2c790\">\u003cmeta data-mint-head property=\"og:image:width\" content=\"1200\">\u003cmeta data-mint-head property=\"og:image:height\" content=\"630\">\u003cmeta data-mint-head name=\"twitter:card\" content=\"summary_large_image\">\u003cmeta data-mint-head name=\"twitter:title\" content=\"List Policies - DFNS documentation\">\u003cmeta data-mint-head name=\"twitter:description\" content=\"Retrieve the list of policies on your organization.\">\u003cmeta data-mint-head name=\"twitter:image\" content=\"https://dfns-6d8c7466.mintlify.app/_mintlify/api/og/v2?division=Policies\u0026amp;title=List+Policies\u0026amp;description=Retrieve+the+list+of+policies+on+your+organization.\u0026amp;theme=68e48acc7b17f2bffb410930\u0026amp;signature=8a5f86b9a270398a816d5372922dfc2c8692e1391efeb18768798225eeb2c790\">\u003cmeta data-mint-head name=\"twitter:image:width\" content=\"1200\">\u003cmeta data-mint-head name=\"twitter:image:height\" content=\"630\">\u003cmeta data-mint-head name=\"msapplication-config\" content=\"/mintlify-assets/_mintlify/favicons/dfns-6d8c7466/hYb5TZBVjwDMqDeA/_generated/favicon/browserconfig.xml\">\u003cmeta data-mint-head name=\"apple-mobile-web-app-title\" content=\"DFNS documentation\">\u003cmeta data-mint-head name=\"msapplication-TileColor\" content=\"#442599\">\u003clink data-mint-head rel=\"canonical\" href=\"https://docs.dfns.co/api-reference/policies/list-policies\">\u003clink data-mint-head rel=\"alternate\" type=\"application/xml\" href=\"/sitemap.xml\">\u003clink data-mint-head rel=\"alternate\" type=\"text/markdown\" href=\"/api-reference/policies/list-policies.md\">\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@graph\":[{\"@type\":\"Organization\",\"@id\":\"https://docs.dfns.co/#organization\",\"name\":\"DFNS documentation\",\"url\":\"https://docs.dfns.co\",\"logo\":{\"@type\":\"ImageObject\",\"url\":\"https://mintcdn.com/dfns-6d8c7466/nK-LFGxQwVjg0flm/images/logo/dfnsdocs-light.svg?fit=max\u0026auto=format\u0026n=nK-LFGxQwVjg0flm\u0026q=85\u0026s=3dc89a5cca38026355ba1f7435c733d4\"}},{\"@type\":\"WebSite\",\"@id\":\"https://docs.dfns.co#website\",\"name\":\"DFNS documentation\",\"url\":\"https://docs.dfns.co\",\"publisher\":{\"@id\":\"https://docs.dfns.co/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https://docs.dfns.co/api-reference/policies/list-policies#webpage\",\"url\":\"https://docs.dfns.co/api-reference/policies/list-policies\",\"name\":\"List Policies\",\"description\":\"Retrieve the list of policies on your organization.\",\"isPartOf\":{\"@id\":\"https://docs.dfns.co#website\"},\"breadcrumb\":{\"@id\":\"https://docs.dfns.co/api-reference/policies/list-policies#breadcrumb\"}},{\"@type\":\"BreadcrumbList\",\"@id\":\"https://docs.dfns.co/api-reference/policies/list-policies#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Management\",\"item\":\"https://docs.dfns.co/api-reference/policies\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Policies\",\"item\":\"https://docs.dfns.co/api-reference/policies\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"List Policies\",\"item\":\"https://docs.dfns.co/api-reference/policies/list-policies\"}]},{\"@type\":[\"TechArticle\",\"APIReference\"],\"@id\":\"https://docs.dfns.co/api-reference/policies/list-policies#apireference\",\"headline\":\"List Policies\",\"name\":\"List Policies\",\"description\":\"Retrieve the list of policies on your organization.\",\"url\":\"https://docs.dfns.co/api-reference/policies/list-policies\",\"mainEntityOfPage\":{\"@id\":\"https://docs.dfns.co/api-reference/policies/list-policies#webpage\"},\"publisher\":{\"@id\":\"https://docs.dfns.co/#organization\"},\"isPartOf\":{\"@id\":\"https://docs.dfns.co#website\"}}]}\u003c/script>\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@type\":\"WebSite\",\"name\":\"DFNS documentation\",\"creator\":{\"@type\":\"Organization\",\"name\":\"Mintlify\",\"url\":\"https://mintlify.com\"}}\u003c/script>","siteName":"DFNS documentation","nav":{"global":null,"tabs":[{"tab":"Documentation","icon":"book-open","pages":[{"title":"Documentation","href":""}]},{"tab":"API reference","icon":"code","pages":[{"title":"API Reference","sidebarTitle":"Introduction","href":"/api-reference"},{"title":"Regions","mode":"wide","href":"/api-reference/regions"},{"title":"Core API Objects","href":"/api-reference/core-objects"},{"title":"API Errors","href":"/api-reference/error-codes"},{"title":"Idempotency","href":"/api-reference/idempotency"},{"title":"Pagination","href":"/api-reference/pagination"},{"title":"Rate Limits","href":"/api-reference/rate-limits"},{"title":"OpenAPI \u0026 Postman","href":"/api-reference/openapi-postman"},{"group":"API Authorization","icon":"key","pages":[{"title":"Required headers","href":"/api-reference/auth/index"},{"group":"Authentication","pages":[{"title":"Authentication flows","icon":"arrow-progress","href":"/api-reference/auth/login-flows"},{"title":"Send Login Code","deprecated":null,"version":null,"openapi":"/openapi.yaml post /auth/login/code","href":"/api-reference/auth/send-login-code"},{"title":"Create Login Challenge","deprecated":null,"version":null,"openapi":"/openapi.yaml post /auth/login/init","href":"/api-reference/auth/create-login-challenge"},{"title":"Complete User Login","deprecated":null,"version":null,"openapi":"/openapi.yaml post /auth/login","href":"/api-reference/auth/complete-user-login"},{"title":"Initiate SSO Login","deprecated":null,"version":null,"openapi":"/openapi.yaml post /auth/login/sso/init","href":"/api-reference/auth/initiate-sso-login"},{"title":"Complete SSO Login","deprecated":null,"version":null,"openapi":"/openapi.yaml post /auth/login/sso","href":"/api-reference/auth/complete-sso-login"},{"title":"Initiate OIDC Login","deprecated":null,"version":null,"openapi":"/openapi.yaml post /auth/login/oidc/init","href":"/api-reference/auth/initiate-oidc-login"},{"title":"Complete OIDC Login","deprecated":null,"version":null,"openapi":"/openapi.yaml post /auth/login/oidc","href":"/api-reference/auth/complete-oidc-login"},{"title":"Oidc Login Credentials","deprecated":null,"version":null,"openapi":"/openapi.yaml post /auth/login/oidc/credentials","href":"/api-reference/auth/oidc-login-credentials"},{"title":"Social Login","deprecated":null,"version":null,"openapi":"/openapi.yaml post /auth/login/social","href":"/api-reference/auth/social-login"},{"title":"Delegated Login","deprecated":null,"version":null,"openapi":"/openapi.yaml post /auth/login/delegated","href":"/api-reference/auth/delegated-login"},{"title":"Exchange Access Token","deprecated":null,"version":null,"openapi":"/openapi.yaml post /auth/tokens","href":"/api-reference/auth/exchange-access-token"},{"title":"Logout","deprecated":null,"version":null,"openapi":"/openapi.yaml put /auth/logout","href":"/api-reference/auth/logout"}]},{"group":"User Action Signature","pages":[{"title":"User Action Signing flows","icon":"signature","href":"/api-reference/auth/signing-flows"},{"title":"Create User Action Challenge","deprecated":null,"version":null,"openapi":"/openapi.yaml post /auth/action/init","href":"/api-reference/auth/create-user-action-challenge"},{"title":"Create User Action Signature","deprecated":null,"version":null,"openapi":"/openapi.yaml post /auth/action","href":"/api-reference/auth/create-user-action-signature"},{"title":"List Audit Logs","deprecated":null,"version":null,"openapi":"/openapi.yaml get /auth/action/logs","href":"/api-reference/auth/list-audit-logs"},{"title":"Get Audit Log","deprecated":null,"version":null,"openapi":"/openapi.yaml get /auth/action/logs/{id}","href":"/api-reference/auth/get-audit-log"}]}]},{"group":"Identity \u0026 Access Management","icon":"user","pages":[{"group":"Registration","pages":[{"title":"Registration flows","icon":"key","href":"/api-reference/auth/registration-flows"},{"title":"Create Registration Challenge","deprecated":null,"version":null,"openapi":"/openapi.yaml post /auth/registration/init","href":"/api-reference/auth/create-registration-challenge"},{"title":"Create Delegated Registration Challenge","deprecated":null,"version":null,"openapi":"/openapi.yaml post /auth/registration/delegated","href":"/api-reference/auth/create-delegated-registration-challenge"},{"title":"Create Social Registration Challenge","deprecated":null,"version":null,"openapi":"/openapi.yaml post /auth/registration/social","href":"/api-reference/auth/create-social-registration-challenge"},{"title":"Complete User Registration","deprecated":null,"version":null,"openapi":"/openapi.yaml post /auth/registration","href":"/api-reference/auth/complete-user-registration"},{"title":"Complete End User Registration with Wallets","deprecated":null,"version":null,"openapi":"/openapi.yaml post /auth/registration/enduser","href":"/api-reference/auth/complete-end-user-registration-with-wallets"},{"title":"Resend Registration Code","deprecated":null,"version":null,"openapi":"/openapi.yaml put /auth/registration/code","href":"/api-reference/auth/resend-registration-code"}]},{"group":"Users management","pages":[{"title":"Users","icon":"user","href":"/api-reference/auth/users"},{"title":"List Users","deprecated":null,"version":null,"openapi":"/openapi.yaml get /auth/users","href":"/api-reference/auth/list-users"},{"title":"Create User","deprecated":null,"version":null,"openapi":"/openapi.yaml post /auth/users","href":"/api-reference/auth/create-user"},{"title":"Invite Tenant User","deprecated":null,"version":null,"openapi":"/openapi.yaml post /auth/users/invite","href":"/api-reference/auth/invite-tenant-user"},{"title":"Get User","deprecated":null,"version":null,"openapi":"/openapi.yaml get /auth/users/{userId}","href":"/api-reference/auth/get-user"},{"title":"Update User","deprecated":null,"version":null,"openapi":"/openapi.yaml put /auth/users/{userId}","href":"/api-reference/auth/update-user"},{"title":"Activate User","deprecated":null,"version":null,"openapi":"/openapi.yaml put /auth/users/{userId}/activate","href":"/api-reference/auth/activate-user"},{"title":"Deactivate User","deprecated":null,"version":null,"openapi":"/openapi.yaml put /auth/users/{userId}/deactivate","href":"/api-reference/auth/deactivate-user"},{"title":"Delete User","deprecated":null,"version":null,"openapi":"/openapi.yaml delete /auth/users/{userId}","href":"/api-reference/auth/delete-user"}]},{"group":"Permissions","pages":[{"title":"List Permissions","deprecated":null,"version":null,"openapi":"/openapi.yaml get /permissions","href":"/api-reference/permissions/list-permissions"},{"title":"Create Permission","deprecated":null,"version":null,"openapi":"/openapi.yaml post /permissions","href":"/api-reference/permissions/create-permission"},{"title":"Get Permission","deprecated":null,"version":null,"openapi":"/openapi.yaml get /permissions/{permissionId}","href":"/api-reference/permissions/get-permission"},{"title":"Update Permission","deprecated":null,"version":null,"openapi":"/openapi.yaml put /permissions/{permissionId}","href":"/api-reference/permissions/update-permission"},{"title":"Delete Permission","deprecated":null,"version":null,"openapi":"/openapi.yaml delete /permissions/{permissionId}","href":"/api-reference/permissions/delete-permission"},{"title":"Archive Permission","deprecated":null,"version":null,"openapi":"/openapi.yaml put /permissions/{permissionId}/archive","href":"/api-reference/permissions/archive-permission"},{"title":"List Permission Assignments","deprecated":null,"version":null,"openapi":"/openapi.yaml get /permissions/{permissionId}/assignments","href":"/api-reference/permissions/list-permission-assignments"},{"title":"Assign Permission","deprecated":null,"version":null,"openapi":"/openapi.yaml post /permissions/{permissionId}/assignments","href":"/api-reference/permissions/assign-permission"},{"title":"Revoke Permission","deprecated":null,"version":null,"openapi":"/openapi.yaml delete /permissions/{permissionId}/assignments/{assignmentId}","href":"/api-reference/permissions/revoke-permission"}]},{"group":"User Groups","pages":[{"title":"List User Groups","deprecated":null,"version":null,"openapi":"/openapi.yaml get /auth/user-groups","href":"/api-reference/auth/list-user-groups"},{"title":"Create User Group","deprecated":null,"version":null,"openapi":"/openapi.yaml post /auth/user-groups","href":"/api-reference/auth/create-user-group"},{"title":"Get User Group","deprecated":null,"version":null,"openapi":"/openapi.yaml get /auth/user-groups/{userGroupId}","href":"/api-reference/auth/get-user-group"},{"title":"Update User Group","deprecated":null,"version":null,"openapi":"/openapi.yaml put /auth/user-groups/{userGroupId}","href":"/api-reference/auth/update-user-group"},{"title":"Delete User Group","deprecated":null,"version":null,"openapi":"/openapi.yaml delete /auth/user-groups/{userGroupId}","href":"/api-reference/auth/delete-user-group"},{"title":"List User Group Members","deprecated":null,"version":null,"openapi":"/openapi.yaml get /auth/user-groups/{userGroupId}/members","href":"/api-reference/auth/list-user-group-members"},{"title":"Add User Group Members","deprecated":null,"version":null,"openapi":"/openapi.yaml post /auth/user-groups/{userGroupId}/members","href":"/api-reference/auth/add-user-group-members"},{"title":"Remove User Group Members","deprecated":null,"version":null,"openapi":"/openapi.yaml delete /auth/user-groups/{userGroupId}/members","href":"/api-reference/auth/remove-user-group-members"}]},{"group":"Credentials","pages":[{"title":"Credentials","icon":"key","href":"/api-reference/auth/credentials"},{"title":"Credentials API data","icon":"binary-circle-check","href":"/api-reference/auth/credentials-data"},{"title":"List Credentials","deprecated":null,"version":null,"openapi":"/openapi.yaml get /auth/credentials","href":"/api-reference/auth/list-credentials"},{"title":"Create Credential Challenge","deprecated":null,"version":null,"openapi":"/openapi.yaml post /auth/credentials/init","href":"/api-reference/auth/create-credential-challenge"},{"title":"Create Credential","deprecated":null,"version":null,"openapi":"/openapi.yaml post /auth/credentials","href":"/api-reference/auth/create-credential"},{"title":"Create Credential Challenge With Code","deprecated":null,"version":null,"openapi":"/openapi.yaml post /auth/credentials/code/init","href":"/api-reference/auth/create-credential-challenge-with-code"},{"title":"Create Credential With Code","deprecated":null,"version":null,"openapi":"/openapi.yaml post /auth/credentials/code/verify","href":"/api-reference/auth/create-credential-with-code"},{"title":"Activate Credential","deprecated":null,"version":null,"openapi":"/openapi.yaml put /auth/credentials/activate","href":"/api-reference/auth/activate-credential"},{"title":"Deactivate Credential","deprecated":null,"version":null,"openapi":"/openapi.yaml put /auth/credentials/deactivate","href":"/api-reference/auth/deactivate-credential"},{"title":"Delete Credential","deprecated":null,"version":null,"openapi":"/openapi.yaml delete /auth/credentials/{credentialUuid}","href":"/api-reference/auth/delete-credential"},{"title":"Create Credential Code","deprecated":null,"version":null,"openapi":"/openapi.yaml post /auth/credentials/code","href":"/api-reference/auth/create-credential-code"}]},{"group":"Personal Access Tokens","pages":[{"title":"Personal Access Tokens (PAT)","icon":"key","href":"/api-reference/auth/personal-access-tokens"},{"title":"List Personal Access Tokens","deprecated":null,"version":null,"openapi":"/openapi.yaml get /auth/pats","href":"/api-reference/auth/list-personal-access-tokens"},{"title":"Create Personal Access Token","deprecated":null,"version":null,"openapi":"/openapi.yaml post /auth/pats","href":"/api-reference/auth/create-personal-access-token"},{"title":"Get Personal Access Token","deprecated":null,"version":null,"openapi":"/openapi.yaml get /auth/pats/{tokenId}","href":"/api-reference/auth/get-personal-access-token"},{"title":"Update Personal Access Token","deprecated":null,"version":null,"openapi":"/openapi.yaml put /auth/pats/{tokenId}","href":"/api-reference/auth/update-personal-access-token"},{"title":"Activate Personal Access Token","deprecated":null,"version":null,"openapi":"/openapi.yaml put /auth/pats/{tokenId}/activate","href":"/api-reference/auth/activate-personal-access-token"},{"title":"Deactivate Personal Access Token","deprecated":null,"version":null,"openapi":"/openapi.yaml put /auth/pats/{tokenId}/deactivate","href":"/api-reference/auth/deactivate-personal-access-token"},{"title":"Delete Personal Access Token","deprecated":null,"version":null,"openapi":"/openapi.yaml delete /auth/pats/{tokenId}","href":"/api-reference/auth/delete-personal-access-token"}]},{"group":"Account recovery","pages":[{"title":"Account recovery","icon":"life-ring","href":"/api-reference/auth/account-recovery"},{"title":"Send Recovery Code Email","deprecated":null,"version":null,"openapi":"/openapi.yaml post /auth/recover/user/code","href":"/api-reference/auth/send-recovery-code-email"},{"title":"Create Recovery Challenge","deprecated":null,"version":null,"openapi":"/openapi.yaml post /auth/recover/user/init","href":"/api-reference/auth/create-recovery-challenge"},{"title":"Create Delegated Recovery Challenge","deprecated":null,"version":null,"openapi":"/openapi.yaml post /auth/recover/user/delegated","href":"/api-reference/auth/create-delegated-recovery-challenge"},{"title":"Recover User","deprecated":null,"version":null,"openapi":"/openapi.yaml post /auth/recover/user","href":"/api-reference/auth/recover-user"}]},{"group":"Service Accounts","pages":[{"title":"Service Accounts","icon":"robot","href":"/api-reference/auth/service-accounts"},{"title":"List Service Accounts","deprecated":null,"version":null,"openapi":"/openapi.yaml get /auth/service-accounts","href":"/api-reference/auth/list-service-accounts"},{"title":"Create Service Account","deprecated":null,"version":null,"openapi":"/openapi.yaml post /auth/service-accounts","href":"/api-reference/auth/create-service-account"},{"title":"Get Service Account","deprecated":null,"version":null,"openapi":"/openapi.yaml get /auth/service-accounts/{serviceAccountId}","href":"/api-reference/auth/get-service-account"},{"title":"Update Service Account","deprecated":null,"version":null,"openapi":"/openapi.yaml put /auth/service-accounts/{serviceAccountId}","href":"/api-reference/auth/update-service-account"},{"title":"Activate Service Account","deprecated":null,"version":null,"openapi":"/openapi.yaml put /auth/service-accounts/{serviceAccountId}/activate","href":"/api-reference/auth/activate-service-account"},{"title":"Deactivate Service Account","deprecated":null,"version":null,"openapi":"/openapi.yaml put /auth/service-accounts/{serviceAccountId}/deactivate","href":"/api-reference/auth/deactivate-service-account"},{"title":"Delete Service Account","deprecated":null,"version":null,"openapi":"/openapi.yaml delete /auth/service-accounts/{serviceAccountId}","href":"/api-reference/auth/delete-service-account"},{"title":"Create Service Account Credential","deprecated":null,"version":null,"openapi":"/openapi.yaml post /auth/service-accounts/credentials","href":"/api-reference/auth/create-service-account-credential"},{"title":"Delete Service Account Credential","deprecated":null,"version":null,"openapi":"/openapi.yaml delete /auth/service-accounts/credentials/{credentialUuid}","href":"/api-reference/auth/delete-service-account-credential"}]},{"group":"Tenant","pages":[{"group":"Tenant Users","pages":[{"title":"List Tenant Users","deprecated":null,"version":null,"openapi":"/openapi.yaml get /tenant/users","href":"/api-reference/tenant/list-tenant-users"},{"title":"Create Tenant User","deprecated":null,"version":null,"openapi":"/openapi.yaml post /tenant/users","href":"/api-reference/tenant/create-tenant-user"},{"title":"Get Tenant User","deprecated":null,"version":null,"openapi":"/openapi.yaml get /tenant/users/{userId}","href":"/api-reference/tenant/get-tenant-user"},{"title":"Update Tenant User","deprecated":null,"version":null,"openapi":"/openapi.yaml put /tenant/users/{userId}","href":"/api-reference/tenant/update-tenant-user"},{"title":"Delete Tenant User","deprecated":null,"version":null,"openapi":"/openapi.yaml delete /tenant/users/{userId}","href":"/api-reference/tenant/delete-tenant-user"}]},{"group":"Tenant Organizations","pages":[{"title":"List Orgs","deprecated":null,"version":null,"openapi":"/openapi.yaml get /tenant/orgs","href":"/api-reference/tenant/list-orgs"},{"title":"Create Org","deprecated":null,"version":null,"openapi":"/openapi.yaml post /tenant/orgs","href":"/api-reference/tenant/create-org"},{"title":"Get Org","deprecated":null,"version":null,"openapi":"/openapi.yaml get /tenant/orgs/{orgId}","href":"/api-reference/tenant/get-org"},{"title":"Update Org","deprecated":null,"version":null,"openapi":"/openapi.yaml put /tenant/orgs/{orgId}","href":"/api-reference/tenant/update-org"},{"title":"Update Org Status","deprecated":null,"version":null,"openapi":"/openapi.yaml put /tenant/orgs/{orgId}/status","href":"/api-reference/tenant/update-org-status"}]},{"group":"Tenant Permissions","pages":[{"title":"List Tenant Permissions","deprecated":null,"version":null,"openapi":"/openapi.yaml get /tenant/permissions","href":"/api-reference/tenant/list-tenant-permissions"},{"title":"Get Tenant Permission","deprecated":null,"version":null,"openapi":"/openapi.yaml get /tenant/permissions/{permissionId}","href":"/api-reference/tenant/get-tenant-permission"},{"title":"Assign Tenant Permission","deprecated":null,"version":null,"openapi":"/openapi.yaml post /tenant/permissions/{permissionId}/assign","href":"/api-reference/tenant/assign-tenant-permission"},{"title":"Revoke Tenant Permission","deprecated":null,"version":null,"openapi":"/openapi.yaml post /tenant/permissions/{permissionId}/revoke","href":"/api-reference/tenant/revoke-tenant-permission"}]},{"group":"Tenant User Groups","pages":[{"title":"List Tenant User Groups","deprecated":null,"version":null,"openapi":"/openapi.yaml get /tenant/user-groups","href":"/api-reference/tenant/list-tenant-user-groups"},{"title":"Create Tenant User Group","deprecated":null,"version":null,"openapi":"/openapi.yaml post /tenant/user-groups","href":"/api-reference/tenant/create-tenant-user-group"},{"title":"Get Tenant User Group","deprecated":null,"version":null,"openapi":"/openapi.yaml get /tenant/user-groups/{userGroupId}","href":"/api-reference/tenant/get-tenant-user-group"},{"title":"Update Tenant User Group","deprecated":null,"version":null,"openapi":"/openapi.yaml put /tenant/user-groups/{userGroupId}","href":"/api-reference/tenant/update-tenant-user-group"},{"title":"Delete Tenant User Group","deprecated":null,"version":null,"openapi":"/openapi.yaml delete /tenant/user-groups/{userGroupId}","href":"/api-reference/tenant/delete-tenant-user-group"},{"title":"List Tenant User Group Members","deprecated":null,"version":null,"openapi":"/openapi.yaml get /tenant/user-groups/{userGroupId}/members","href":"/api-reference/tenant/list-tenant-user-group-members"},{"title":"Add Tenant User Group Members","deprecated":null,"version":null,"openapi":"/openapi.yaml post /tenant/user-groups/{userGroupId}/members","href":"/api-reference/tenant/add-tenant-user-group-members"},{"title":"Remove Tenant User Group Members","deprecated":null,"version":null,"openapi":"/openapi.yaml delete /tenant/user-groups/{userGroupId}/members","href":"/api-reference/tenant/remove-tenant-user-group-members"}]}]}]},{"group":"Wallets \u0026 Transactions","icon":"globe","pages":[{"group":"Wallets","pages":[{"title":"Wallets","icon":"wallet","href":"/api-reference/wallets/index"},{"title":"Create Wallet","deprecated":null,"version":null,"openapi":"/openapi.yaml post /wallets","href":"/api-reference/wallets/create-wallet"},{"title":"List Wallets","deprecated":null,"version":null,"openapi":"/openapi.yaml get /wallets","href":"/api-reference/wallets/list-wallets"},{"title":"Get Wallet","deprecated":null,"version":null,"openapi":"/openapi.yaml get /wallets/{walletId}","href":"/api-reference/wallets/get-wallet"},{"title":"Update Wallet","deprecated":null,"version":null,"openapi":"/openapi.yaml put /wallets/{walletId}","href":"/api-reference/wallets/update-wallet"},{"title":"Activate Wallet","deprecated":null,"version":null,"openapi":"/openapi.yaml post /wallets/{walletId}/activate","href":"/api-reference/wallets/activate-wallet"},{"title":"Get Wallet Assets","deprecated":null,"version":null,"openapi":"/openapi.yaml get /wallets/{walletId}/assets","href":"/api-reference/wallets/get-wallet-assets"},{"title":"Get Wallet History","deprecated":null,"version":null,"openapi":"/openapi.yaml get /wallets/{walletId}/history","href":"/api-reference/wallets/get-wallet-history"},{"title":"Get Wallet Nfts","deprecated":null,"version":null,"openapi":"/openapi.yaml get /wallets/{walletId}/nfts","href":"/api-reference/wallets/get-wallet-nfts"},{"title":"List Org Wallet History","deprecated":null,"version":null,"openapi":"/openapi.yaml get /wallets/all/history","href":"/api-reference/wallets/list-org-wallet-history"},{"title":"Import Wallet","deprecated":null,"version":null,"openapi":"/openapi.yaml post /wallets/import","href":"/api-reference/wallets/import-wallet"},{"group":"Watched Addresses","pages":[{"title":"Create Address Watch","deprecated":null,"version":null,"openapi":"/openapi.yaml post /address-watches","href":"/api-reference/address-watches/create-address-watch"},{"title":"List Address Watches","deprecated":null,"version":null,"openapi":"/openapi.yaml get /address-watches","href":"/api-reference/address-watches/list-address-watches"},{"title":"Get Address Watch","deprecated":null,"version":null,"openapi":"/openapi.yaml get /address-watches/{addressWatchId}","href":"/api-reference/address-watches/get-address-watch"},{"title":"Get Address Watch Assets","deprecated":null,"version":null,"openapi":"/openapi.yaml get /address-watches/{addressWatchId}/assets","href":"/api-reference/address-watches/get-address-watch-assets"},{"title":"Get Address Watch Blockchain Events","deprecated":null,"version":null,"openapi":"/openapi.yaml get /address-watches/{addressWatchId}/blockchain-events","href":"/api-reference/address-watches/get-address-watch-blockchain-events"},{"title":"Get Address Watch History","deprecated":null,"version":null,"openapi":"/openapi.yaml get /address-watches/{addressWatchId}/history","href":"/api-reference/address-watches/get-address-watch-history"},{"title":"Delete Address Watch","deprecated":null,"version":null,"openapi":"/openapi.yaml delete /address-watches/{addressWatchId}","href":"/api-reference/address-watches/delete-address-watch"},{"title":"Address watch blockchain event transfer confirmed","version":null,"deprecated":null,"openapi":"/openapi.yaml webhook address_watch.blockchain_event.transfer.confirmed","href":"/api-reference/wallets/address-watch-blockchain-event-transfer-confirmed"}]},{"group":"Webhooks","pages":[{"title":"Wallet activated","version":null,"deprecated":null,"openapi":"/openapi.yaml webhook wallet.activated","href":"/api-reference/wallets/wallet-activated"},{"title":"Wallet created","version":null,"deprecated":null,"openapi":"/openapi.yaml webhook wallet.created","href":"/api-reference/wallets/wallet-created"},{"title":"Wallet delegated","version":null,"deprecated":null,"openapi":"/openapi.yaml webhook wallet.delegated","href":"/api-reference/wallets/wallet-delegated"},{"title":"Wallet exported","version":null,"deprecated":null,"openapi":"/openapi.yaml webhook wallet.exported","href":"/api-reference/wallets/wallet-exported"},{"title":"Blockchain event transfer included","version":null,"deprecated":null,"openapi":"/openapi.yaml webhook wallet.blockchain_event.transfer.included","href":"/api-reference/wallets/blockchain-event-transfer-included"},{"title":"Blockchain event detected","version":null,"deprecated":null,"openapi":"/openapi.yaml webhook wallet.blockchainevent.detected","href":"/api-reference/wallets/blockchain-event-detected"}]},{"group":"Wallet Tags","pages":[{"title":"Tags","icon":"tags","href":"/api-reference/wallets/tags"},{"title":"Tag Wallet","deprecated":null,"version":null,"openapi":"/openapi.yaml put /wallets/{walletId}/tags","href":"/api-reference/wallets/tag-wallet"},{"title":"Untag Wallet","deprecated":null,"version":null,"openapi":"/openapi.yaml delete /wallets/{walletId}/tags","href":"/api-reference/wallets/untag-wallet"},{"title":"Wallet tags modified","version":null,"deprecated":null,"openapi":"/openapi.yaml webhook wallet.tags.modified","href":"/api-reference/wallets/wallet-tags-modified"}]},{"group":"Canton Wallets","pages":[{"title":"List Offers","deprecated":null,"version":null,"openapi":"/openapi.yaml get /wallets/{walletId}/offers","href":"/api-reference/wallets/list-offers"},{"title":"Get Offer","deprecated":null,"version":null,"openapi":"/openapi.yaml get /wallets/{walletId}/offers/{offerId}","href":"/api-reference/wallets/get-offer"},{"title":"Accept Offer","deprecated":null,"version":null,"openapi":"/openapi.yaml put /wallets/{walletId}/offers/{offerId}/accept","href":"/api-reference/wallets/accept-offer"},{"title":"Reject Offer","deprecated":null,"version":null,"openapi":"/openapi.yaml put /wallets/{walletId}/offers/{offerId}/reject","href":"/api-reference/wallets/reject-offer"},{"title":"Proxy a request to the Canton Ledger API","deprecated":null,"version":null,"openapi":"/openapi.yaml post /wallets/{walletId}/canton/ledger-api","href":"/api-reference/wallets/proxy-a-request-to-the-canton-ledger-api"},{"group":"Webhooks","pages":[{"title":"Offer accepted","version":null,"deprecated":null,"openapi":"/openapi.yaml webhook wallet.offer.accepted","href":"/api-reference/wallets/offer-accepted"},{"title":"Offer received","version":null,"deprecated":null,"openapi":"/openapi.yaml webhook wallet.offer.received","href":"/api-reference/wallets/offer-received"},{"title":"Offer rejected","version":null,"deprecated":null,"openapi":"/openapi.yaml webhook wallet.offer.rejected","href":"/api-reference/wallets/offer-rejected"},{"title":"Offer withdrawn","version":null,"deprecated":null,"openapi":"/openapi.yaml webhook wallet.offer.withdrawn","href":"/api-reference/wallets/offer-withdrawn"}]}]}]},{"group":"Vaults","pages":[{"title":"Vaults","icon":"vault","href":"/api-reference/vaults/index"},{"title":"Create Vault","deprecated":null,"version":null,"openapi":"/openapi.yaml post /vaults","href":"/api-reference/vaults/create-vault"},{"title":"List Vaults","deprecated":null,"version":null,"openapi":"/openapi.yaml get /vaults","href":"/api-reference/vaults/list-vaults"},{"title":"Get Vault","deprecated":null,"version":null,"openapi":"/openapi.yaml get /vaults/{vaultId}","href":"/api-reference/vaults/get-vault"},{"title":"Update Vault","deprecated":null,"version":null,"openapi":"/openapi.yaml put /vaults/{vaultId}","href":"/api-reference/vaults/update-vault"},{"title":"Create Vault Address","deprecated":null,"version":null,"openapi":"/openapi.yaml post /vaults/{vaultId}/addresses","href":"/api-reference/vaults/create-vault-address"},{"title":"Create Vault Transfer","deprecated":null,"version":null,"openapi":"/openapi.yaml post /vaults/{vaultId}/transfers","href":"/api-reference/vaults/create-vault-transfer"},{"title":"List Vault Assets","deprecated":null,"version":null,"openapi":"/openapi.yaml get /vaults/{vaultId}/assets","href":"/api-reference/vaults/list-vault-assets"},{"title":"List Vault Balances","deprecated":null,"version":null,"openapi":"/openapi.yaml get /vaults/{vaultId}/balances","href":"/api-reference/vaults/list-vault-balances"},{"title":"List Vault History","deprecated":null,"version":null,"openapi":"/openapi.yaml get /vaults/{vaultId}/history","href":"/api-reference/vaults/list-vault-history"},{"title":"List Vault Quarantines","deprecated":null,"version":null,"openapi":"/openapi.yaml get /vaults/{vaultId}/quarantines","href":"/api-reference/vaults/list-vault-quarantines"},{"title":"Get Vault Quarantine","deprecated":null,"version":null,"openapi":"/openapi.yaml get /vaults/{vaultId}/quarantines/{quarantineId}","href":"/api-reference/vaults/get-vault-quarantine"},{"title":"Release Quarantine","deprecated":null,"version":null,"openapi":"/openapi.yaml post /vaults/{vaultId}/quarantines/{quarantineId}/release","href":"/api-reference/vaults/release-quarantine"},{"title":"Create Vault Lock","deprecated":null,"version":null,"openapi":"/openapi.yaml post /vaults/{vaultId}/locks","href":"/api-reference/vaults/create-vault-lock"},{"title":"List Vault Locks","deprecated":null,"version":null,"openapi":"/openapi.yaml get /vaults/{vaultId}/locks","href":"/api-reference/vaults/list-vault-locks"},{"title":"Get Vault Lock","deprecated":null,"version":null,"openapi":"/openapi.yaml get /vaults/{vaultId}/locks/{lockId}","href":"/api-reference/vaults/get-vault-lock"},{"title":"Release Vault Lock","deprecated":null,"version":null,"openapi":"/openapi.yaml post /vaults/{vaultId}/locks/{lockId}/release","href":"/api-reference/vaults/release-vault-lock"},{"title":"Replace Vault Lock","deprecated":null,"version":null,"openapi":"/openapi.yaml post /vaults/{vaultId}/locks/{lockId}/replace","href":"/api-reference/vaults/replace-vault-lock"},{"title":"Transfer Vault Lock","deprecated":null,"version":null,"openapi":"/openapi.yaml post /vaults/{vaultId}/locks/{lockId}/transfer","href":"/api-reference/vaults/transfer-vault-lock"},{"group":"Webhooks","pages":[{"title":"Vault created","version":null,"deprecated":null,"openapi":"/openapi.yaml webhook vault.created","href":"/api-reference/vaults/vault-created"},{"title":"Vault updated","version":null,"deprecated":null,"openapi":"/openapi.yaml webhook vault.updated","href":"/api-reference/vaults/vault-updated"},{"title":"Vault event created","version":null,"deprecated":null,"openapi":"/openapi.yaml webhook vault.event.created","href":"/api-reference/vaults/vault-event-created"}]},{"group":"Vault Tags","pages":[{"title":"Tags","icon":"tags","href":"/api-reference/vaults/tags"},{"title":"Tag Vault","deprecated":null,"version":null,"openapi":"/openapi.yaml put /vaults/{vaultId}/tags","href":"/api-reference/vaults/tag-vault"},{"title":"Untag Vault","deprecated":null,"version":null,"openapi":"/openapi.yaml delete /vaults/{vaultId}/tags","href":"/api-reference/vaults/untag-vault"},{"title":"Vault tags modified","version":null,"deprecated":null,"openapi":"/openapi.yaml webhook vault.tags.modified","href":"/api-reference/vaults/vault-tags-modified"}]}]},{"group":"Keys","pages":[{"title":"Keys","icon":"key","href":"/api-reference/keys"},{"title":"List Keys","deprecated":null,"version":null,"openapi":"/openapi.yaml get /keys","href":"/api-reference/keys/list-keys"},{"title":"Create Key","deprecated":null,"version":null,"openapi":"/openapi.yaml post /keys","href":"/api-reference/keys/create-key"},{"title":"Delegate Key","deprecated":null,"version":null,"openapi":"/openapi.yaml post /keys/{keyId}/delegate","href":"/api-reference/keys/delegate-key"},{"title":"Get Key","deprecated":null,"version":null,"openapi":"/openapi.yaml get /keys/{keyId}","href":"/api-reference/keys/get-key"},{"title":"Update Key","deprecated":null,"version":null,"openapi":"/openapi.yaml put /keys/{keyId}","href":"/api-reference/keys/update-key"},{"title":"Delete Key","deprecated":null,"version":null,"openapi":"/openapi.yaml delete /keys/{keyId}","href":"/api-reference/keys/delete-key"},{"title":"Derive Key","deprecated":null,"version":null,"openapi":"/openapi.yaml post /keys/{keyId}/derive","href":"/api-reference/keys/derive-key"},{"title":"Export Key","deprecated":null,"version":null,"openapi":"/openapi.yaml post /keys/{keyId}/export","href":"/api-reference/keys/export-key"},{"title":"Import Key","deprecated":null,"version":null,"openapi":"/openapi.yaml post /keys/import","href":"/api-reference/keys/import-key"},{"group":"Webhooks","pages":[{"title":"Key created","version":null,"deprecated":null,"openapi":"/openapi.yaml webhook key.created","href":"/api-reference/keys/key-created"},{"title":"Key delegated","version":null,"deprecated":null,"openapi":"/openapi.yaml webhook key.delegated","href":"/api-reference/keys/key-delegated"},{"title":"Key deleted","version":null,"deprecated":null,"openapi":"/openapi.yaml webhook key.deleted","href":"/api-reference/keys/key-deleted"},{"title":"Key exported","version":null,"deprecated":null,"openapi":"/openapi.yaml webhook key.exported","href":"/api-reference/keys/key-exported"}]}]},{"group":"Transfer","pages":[{"title":"Transfer","icon":"right-left-large","href":"/api-reference/transfer"},{"title":"Transfer Asset","deprecated":null,"version":null,"openapi":"/openapi.yaml post /wallets/{walletId}/transfers","href":"/api-reference/wallets/transfer-asset"},{"title":"List Transfers","deprecated":null,"version":null,"openapi":"/openapi.yaml get /wallets/{walletId}/transfers","href":"/api-reference/wallets/list-transfers"},{"title":"Get Transfer","deprecated":null,"version":null,"openapi":"/openapi.yaml get /wallets/{walletId}/transfers/{transferId}","href":"/api-reference/wallets/get-transfer"},{"title":"Cancel Transfer","deprecated":null,"version":null,"openapi":"/openapi.yaml post /wallets/{walletId}/transfers/{transferId}/cancel","href":"/api-reference/wallets/cancel-transfer"},{"title":"Abort Transfer","deprecated":null,"version":null,"openapi":"/openapi.yaml put /wallets/{walletId}/transfers/{transferId}/abort","href":"/api-reference/wallets/abort-transfer"},{"title":"Speed Up Transfer","deprecated":null,"version":null,"openapi":"/openapi.yaml post /wallets/{walletId}/transfers/{transferId}/speed-up","href":"/api-reference/wallets/speed-up-transfer"},{"group":"Webhooks","pages":[{"title":"Transfer requested","version":null,"deprecated":null,"openapi":"/openapi.yaml webhook wallet.transfer.requested","href":"/api-reference/wallets/transfer-requested"},{"title":"Transfer broadcasted","version":null,"deprecated":null,"openapi":"/openapi.yaml webhook wallet.transfer.broadcasted","href":"/api-reference/wallets/transfer-broadcasted"},{"title":"Transfer confirmed","version":null,"deprecated":null,"openapi":"/openapi.yaml webhook wallet.transfer.confirmed","href":"/api-reference/wallets/transfer-confirmed"},{"title":"Transfer failed","version":null,"deprecated":null,"openapi":"/openapi.yaml webhook wallet.transfer.failed","href":"/api-reference/wallets/transfer-failed"},{"title":"Transfer rejected","version":null,"deprecated":null,"openapi":"/openapi.yaml webhook wallet.transfer.rejected","href":"/api-reference/wallets/transfer-rejected"}]}]},{"group":"Broadcast","pages":[{"title":"Broadcast","icon":"tower-broadcast","href":"/api-reference/broadcast/index"},{"title":"Sign and Broadcast Transaction","deprecated":null,"version":null,"openapi":"/openapi.yaml post /wallets/{walletId}/transactions","href":"/api-reference/wallets/sign-and-broadcast-transaction"},{"title":"List Transactions","deprecated":null,"version":null,"openapi":"/openapi.yaml get /wallets/{walletId}/transactions","href":"/api-reference/wallets/list-transactions"},{"title":"Get Transaction","deprecated":null,"version":null,"openapi":"/openapi.yaml get /wallets/{walletId}/transactions/{transactionId}","href":"/api-reference/wallets/get-transaction"},{"title":"Cancel Transaction","deprecated":null,"version":null,"openapi":"/openapi.yaml post /wallets/{walletId}/transactions/{transactionId}/cancel","href":"/api-reference/wallets/cancel-transaction"},{"title":"Abort Transaction","deprecated":null,"version":null,"openapi":"/openapi.yaml put /wallets/{walletId}/transactions/{transactionId}/abort","href":"/api-reference/wallets/abort-transaction"},{"title":"Speed Up Transaction","deprecated":null,"version":null,"openapi":"/openapi.yaml post /wallets/{walletId}/transactions/{transactionId}/speed-up","href":"/api-reference/wallets/speed-up-transaction"},{"group":"Examples per chain","pages":[{"title":"Algorand transactions","sidebarTitle":"Algorand","href":"/api-reference/broadcast/algorand"},{"title":"Aptos transactions","sidebarTitle":"Aptos","href":"/api-reference/broadcast/aptos"},{"title":"Bitcoin / Litecoin transactions","sidebarTitle":"Bitcoin / Litecoin","href":"/api-reference/broadcast/bitcoin"},{"title":"Canton transactions","sidebarTitle":"Canton","href":"/api-reference/broadcast/canton"},{"title":"Cardano transactions","sidebarTitle":"Cardano","href":"/api-reference/broadcast/cardano"},{"title":"EVM transactions","sidebarTitle":"EVM chains","href":"/api-reference/broadcast/evm"},{"title":"Hedera transactions","sidebarTitle":"Hedera","href":"/api-reference/broadcast/hedera"},{"title":"IOTA transactions","sidebarTitle":"IOTA","href":"/api-reference/broadcast/iota"},{"title":"NEAR transactions","sidebarTitle":"NEAR","href":"/api-reference/broadcast/near"},{"title":"Solana transactions","sidebarTitle":"Solana","href":"/api-reference/broadcast/solana"},{"title":"Stellar transactions","sidebarTitle":"Stellar","href":"/api-reference/broadcast/stellar"},{"title":"Sui transactions","sidebarTitle":"Sui","href":"/api-reference/broadcast/sui"},{"title":"Tezos transactions","sidebarTitle":"Tezos","href":"/api-reference/broadcast/tezos"},{"title":"TRON transactions","sidebarTitle":"TRON","href":"/api-reference/broadcast/tron"},{"title":"XRP Ledger transactions","sidebarTitle":"XRP Ledger (Ripple)","href":"/api-reference/broadcast/xrp"}]},{"group":"Webhooks","pages":[{"title":"Transaction requested","version":null,"deprecated":null,"openapi":"/openapi.yaml webhook wallet.transaction.requested","href":"/api-reference/wallets/transaction-requested"},{"title":"Transaction broadcasted","version":null,"deprecated":null,"openapi":"/openapi.yaml webhook wallet.transaction.broadcasted","href":"/api-reference/wallets/transaction-broadcasted"},{"title":"Transaction confirmed","version":null,"deprecated":null,"openapi":"/openapi.yaml webhook wallet.transaction.confirmed","href":"/api-reference/wallets/transaction-confirmed"},{"title":"Transaction failed","version":null,"deprecated":null,"openapi":"/openapi.yaml webhook wallet.transaction.failed","href":"/api-reference/wallets/transaction-failed"},{"title":"Transaction rejected","version":null,"deprecated":null,"openapi":"/openapi.yaml webhook wallet.transaction.rejected","href":"/api-reference/wallets/transaction-rejected"}]}]},{"group":"Sign","pages":[{"title":"Sign","icon":"file-signature","href":"/api-reference/sign/index"},{"title":"Generate Signature","deprecated":null,"version":null,"openapi":"/openapi.yaml post /keys/{keyId}/signatures","href":"/api-reference/keys/generate-signature"},{"title":"List Signatures","deprecated":null,"version":null,"openapi":"/openapi.yaml get /keys/{keyId}/signatures","href":"/api-reference/keys/list-signatures"},{"title":"Get Signature","deprecated":null,"version":null,"openapi":"/openapi.yaml get /keys/{keyId}/signatures/{signatureId}","href":"/api-reference/keys/get-signature"},{"group":"Examples per chain","pages":[{"title":"Algorand signing","sidebarTitle":"Algorand","href":"/api-reference/sign/algorand"},{"title":"Aptos signing","sidebarTitle":"Aptos","href":"/api-reference/sign/aptos"},{"title":"Bitcoin / Litecoin signing","sidebarTitle":"Bitcoin / Litecoin","href":"/api-reference/sign/bitcoin"},{"title":"Cardano signing","sidebarTitle":"Cardano","href":"/api-reference/sign/cardano"},{"title":"Cosmos signing","sidebarTitle":"Cosmos","href":"/api-reference/sign/cosmos"},{"title":"EVM signing","sidebarTitle":"EVM chains","href":"/api-reference/sign/evm"},{"title":"Hedera signing","sidebarTitle":"Hedera","href":"/api-reference/sign/hedera"},{"title":"IOTA signing","sidebarTitle":"IOTA","href":"/api-reference/sign/iota"},{"title":"Kadena signing","sidebarTitle":"Kadena","href":"/api-reference/sign/kadena"},{"title":"NEAR signing","sidebarTitle":"NEAR","href":"/api-reference/sign/near"},{"title":"Solana signing","sidebarTitle":"Solana","href":"/api-reference/sign/solana"},{"title":"Stellar signing","sidebarTitle":"Stellar","href":"/api-reference/sign/stellar"},{"title":"Substrate signing","sidebarTitle":"Substrate (Polkadot)","href":"/api-reference/sign/substrate"},{"title":"Sui signing","sidebarTitle":"Sui","href":"/api-reference/sign/sui"},{"title":"Tezos signing","sidebarTitle":"Tezos","href":"/api-reference/sign/tezos"},{"title":"TRON signing","sidebarTitle":"TRON","href":"/api-reference/sign/tron"},{"title":"TON signing","sidebarTitle":"TON","href":"/api-reference/sign/ton"},{"title":"XRP Ledger signing","sidebarTitle":"XRP Ledger (Ripple)","href":"/api-reference/sign/xrp"}]},{"group":"Webhooks","pages":[{"title":"Signature requested","version":null,"deprecated":null,"openapi":"/openapi.yaml webhook wallet.signature.requested","href":"/api-reference/keys/signature-requested"},{"title":"Signature complete","version":null,"deprecated":null,"openapi":"/openapi.yaml webhook wallet.signature.signed","href":"/api-reference/keys/signature-complete"},{"title":"Signature failed","version":null,"deprecated":null,"openapi":"/openapi.yaml webhook wallet.signature.failed","href":"/api-reference/keys/signature-failed"},{"title":"Signature rejected","version":null,"deprecated":null,"openapi":"/openapi.yaml webhook wallet.signature.rejected","href":"/api-reference/keys/signature-rejected"}]}]},{"group":"Fee Sponsors","pages":[{"title":"Fee Sponsors API","sidebarTitle":"Fee Sponsors","icon":"gas-pump","href":"/api-reference/fee-sponsors"},{"title":"List Fee Sponsors","deprecated":null,"version":null,"openapi":"/openapi.yaml get /fee-sponsors","href":"/api-reference/fee-sponsors/list-fee-sponsors"},{"title":"Create Fee Sponsor","deprecated":null,"version":null,"openapi":"/openapi.yaml post /fee-sponsors","href":"/api-reference/fee-sponsors/create-fee-sponsor"},{"title":"Get Fee Sponsor","deprecated":null,"version":null,"openapi":"/openapi.yaml get /fee-sponsors/{feeSponsorId}","href":"/api-reference/fee-sponsors/get-fee-sponsor"},{"title":"Activate Fee Sponsor","deprecated":null,"version":null,"openapi":"/openapi.yaml put /fee-sponsors/{feeSponsorId}/activate","href":"/api-reference/fee-sponsors/activate-fee-sponsor"},{"title":"Deactivate Fee Sponsor","deprecated":null,"version":null,"openapi":"/openapi.yaml put /fee-sponsors/{feeSponsorId}/deactivate","href":"/api-reference/fee-sponsors/deactivate-fee-sponsor"},{"title":"Delete Fee Sponsor","deprecated":null,"version":null,"openapi":"/openapi.yaml delete /fee-sponsors/{feeSponsorId}","href":"/api-reference/fee-sponsors/delete-fee-sponsor"},{"title":"List Sponsored Fees","deprecated":null,"version":null,"openapi":"/openapi.yaml get /fee-sponsors/{feeSponsorId}/fees","href":"/api-reference/fee-sponsors/list-sponsored-fees"}]},{"group":"Swaps","pages":[{"title":"Swaps API","sidebarTitle":"Swaps","icon":"arrow-right-arrow-left","href":"/api-reference/swaps"},{"title":"Request Swap Quote","deprecated":null,"version":null,"openapi":"/openapi.yaml post /swaps/quotes","href":"/api-reference/swaps/request-swap-quote"},{"title":"Get Swap Quote","deprecated":null,"version":null,"openapi":"/openapi.yaml get /swaps/quotes/{quoteId}","href":"/api-reference/swaps/get-swap-quote"},{"title":"Create Swap","deprecated":null,"version":null,"openapi":"/openapi.yaml post /swaps","href":"/api-reference/swaps/create-swap"},{"title":"Get Swap","deprecated":null,"version":null,"openapi":"/openapi.yaml get /swaps/{swapId}","href":"/api-reference/swaps/get-swap"},{"title":"List Swaps","deprecated":null,"version":null,"openapi":"/openapi.yaml get /swaps","href":"/api-reference/swaps/list-swaps"},{"group":"Webhooks","pages":[{"title":"Swap requested","version":null,"deprecated":null,"openapi":"/openapi.yaml webhook swap.requested","href":"/api-reference/swaps/swap-requested"},{"title":"Swap rejected","version":null,"deprecated":null,"openapi":"/openapi.yaml webhook swap.rejected","href":"/api-reference/swaps/swap-rejected"},{"title":"Swap completed","version":null,"deprecated":null,"openapi":"/openapi.yaml webhook swap.completed","href":"/api-reference/swaps/swap-completed"},{"title":"Swap failed","version":null,"deprecated":null,"openapi":"/openapi.yaml webhook swap.failed","href":"/api-reference/swaps/swap-failed"}]}]},{"group":"Payouts","pages":[{"title":"Request Payout Quote","deprecated":null,"version":null,"openapi":"/openapi.yaml post /payouts/quote","href":"/api-reference/payouts/request-payout-quote"},{"title":"Create Payout","deprecated":null,"version":null,"openapi":"/openapi.yaml post /payouts","href":"/api-reference/payouts/create-payout"},{"title":"List Payouts","deprecated":null,"version":null,"openapi":"/openapi.yaml get /payouts","href":"/api-reference/payouts/list-payouts"},{"title":"Get Payout Status","deprecated":null,"version":null,"openapi":"/openapi.yaml get /payouts/{payoutId}","href":"/api-reference/payouts/get-payout-status"},{"title":"Create Payout Action","deprecated":null,"version":null,"openapi":"/openapi.yaml post /payouts/{payoutId}/action","href":"/api-reference/payouts/create-payout-action"},{"title":"Create Payin","deprecated":null,"version":null,"openapi":"/openapi.yaml post /payins","href":"/api-reference/payins/create-payin"},{"title":"List Payins","deprecated":null,"version":null,"openapi":"/openapi.yaml get /payins","href":"/api-reference/payins/list-payins"},{"title":"Get Payin Status","deprecated":null,"version":null,"openapi":"/openapi.yaml get /payins/{payinId}","href":"/api-reference/payins/get-payin-status"},{"title":"List Payin Balances","deprecated":null,"version":null,"openapi":"/openapi.yaml get /payins/balances","href":"/api-reference/payins/list-payin-balances"},{"title":"Get Payin Recipient","deprecated":null,"version":null,"openapi":"/openapi.yaml get /payins/recipients","href":"/api-reference/payins/get-payin-recipient"},{"title":"Register Payin Recipient","deprecated":null,"version":null,"openapi":"/openapi.yaml post /payins/recipients","href":"/api-reference/payins/register-payin-recipient"},{"title":"List Payin Accounts","deprecated":null,"version":null,"openapi":"/openapi.yaml get /payins/accounts","href":"/api-reference/payins/list-payin-accounts"},{"title":"List Payin Options","deprecated":null,"version":null,"openapi":"/openapi.yaml get /payins/options","href":"/api-reference/payins/list-payin-options"},{"title":"Request Payin Quote","deprecated":null,"version":null,"openapi":"/openapi.yaml post /payins/quote","href":"/api-reference/payins/request-payin-quote"},{"title":"Register Payin Account Asset","deprecated":null,"version":null,"openapi":"/openapi.yaml post /payins/accounts/assets","href":"/api-reference/payins/register-payin-account-asset"},{"group":"Webhooks","pages":[{"title":"Payout action required","version":null,"deprecated":null,"openapi":"/openapi.yaml webhook payout.action.required","href":"/api-reference/payouts/payout-action-required"}]}]},{"group":"Allocations","pages":[{"title":"Allocations API","sidebarTitle":"Allocations","icon":"chart-line-up","href":"/api-reference/allocations"},{"title":"List Allocations","deprecated":null,"version":null,"openapi":"/openapi.yaml get /allocations","href":"/api-reference/allocations/list-allocations"},{"title":"Create Allocation","deprecated":null,"version":null,"openapi":"/openapi.yaml post /allocations","href":"/api-reference/allocations/create-allocation"},{"title":"Get Allocations Info","deprecated":null,"version":null,"openapi":"/openapi.yaml get /allocations/info","href":"/api-reference/allocations/get-allocations-info"},{"title":"Get Allocation","deprecated":null,"version":null,"openapi":"/openapi.yaml get /allocations/{allocationId}","href":"/api-reference/allocations/get-allocation"},{"title":"List Allocation Actions","deprecated":null,"version":null,"openapi":"/openapi.yaml get /allocations/{allocationId}/actions","href":"/api-reference/allocations/list-allocation-actions"},{"title":"Create Allocation Action","deprecated":null,"version":null,"openapi":"/openapi.yaml post /allocations/{allocationId}/actions","href":"/api-reference/allocations/create-allocation-action"},{"title":"Request 0fns Allocation Quote","deprecated":null,"version":null,"openapi":"/openapi.yaml post /allocations/get-0fns-quote","href":"/api-reference/allocations/request-0fns-allocation-quote"},{"title":"Cancel an unfilled 0fns order placement","deprecated":null,"version":null,"openapi":"/openapi.yaml post /allocations/cancel-0fns-order-placement","href":"/api-reference/allocations/cancel-an-unfilled-0fns-order-placement"},{"group":"Webhooks","pages":[{"title":"Allocation action created","version":null,"deprecated":null,"openapi":"/openapi.yaml webhook allocation.action.created","href":"/api-reference/allocations/allocation-action-created"},{"title":"Allocation action completed","version":null,"deprecated":null,"openapi":"/openapi.yaml webhook allocation.action.completed","href":"/api-reference/allocations/allocation-action-completed"},{"title":"Allocation action failed","version":null,"deprecated":null,"openapi":"/openapi.yaml webhook allocation.action.failed","href":"/api-reference/allocations/allocation-action-failed"}]}]},{"group":"Staking","pages":[{"title":"Staking API","sidebarTitle":"Staking","icon":"coins","href":"/api-reference/staking"},{"title":"List Stakes","deprecated":null,"version":null,"openapi":"/openapi.yaml get /staking/stakes","href":"/api-reference/staking/list-stakes"},{"title":"Create Stake","deprecated":null,"version":null,"openapi":"/openapi.yaml post /staking/stakes","href":"/api-reference/staking/create-stake"},{"title":"Get Stakes","deprecated":null,"version":null,"openapi":"/openapi.yaml get /staking/stakes/{stakeId}","href":"/api-reference/staking/get-stakes"},{"title":"List Stake Actions","deprecated":null,"version":null,"openapi":"/openapi.yaml get /staking/stakes/{stakeId}/actions","href":"/api-reference/staking/list-stake-actions"},{"title":"Create Stake Action","deprecated":null,"version":null,"openapi":"/openapi.yaml post /staking/stakes/{stakeId}/actions","href":"/api-reference/staking/create-stake-action"},{"title":"Get Stake Rewards","deprecated":null,"version":null,"openapi":"/openapi.yaml get /staking/stakes/{stakeId}/rewards","href":"/api-reference/staking/get-stake-rewards"}]},{"group":"Networks","pages":[{"title":"Networks","icon":"globe","mode":"wide","href":"/api-reference/networks"},{"title":"Estimate Fees","deprecated":null,"version":null,"openapi":"/openapi.yaml get /networks/fees","href":"/api-reference/networks/estimate-fees"},{"title":"Call Function","deprecated":null,"version":null,"openapi":"/openapi.yaml post /networks/{network}/call-function","href":"/api-reference/networks/call-function"},{"title":"Reindex Transaction","deprecated":null,"version":null,"openapi":"/openapi.yaml post /networks/{network}/transactions/reindex","href":"/api-reference/networks/reindex-transaction"},{"group":"Canton Validators","pages":[{"title":"List Canton Validators","deprecated":null,"version":null,"openapi":"/openapi.yaml get /networks/{network}/validators","href":"/api-reference/networks/list-canton-validators"},{"title":"Create Canton Validator","deprecated":null,"version":null,"openapi":"/openapi.yaml post /networks/{network}/validators","href":"/api-reference/networks/create-canton-validator"},{"title":"Update Canton Validator","deprecated":null,"version":null,"openapi":"/openapi.yaml put /networks/{network}/validators/{validatorId}","href":"/api-reference/networks/update-canton-validator"},{"title":"Get Canton Validator","deprecated":null,"version":null,"openapi":"/openapi.yaml get /networks/{network}/validators/{validatorId}","href":"/api-reference/networks/get-canton-validator"},{"title":"Delete Canton Validator","deprecated":null,"version":null,"openapi":"/openapi.yaml delete /networks/{network}/validators/{validatorId}","href":"/api-reference/networks/delete-canton-validator"}]}]},{"group":"Exchanges","pages":[{"title":"Exchanges API","sidebarTitle":"Exchanges","icon":"building-columns","href":"/api-reference/exchanges"},{"title":"List Exchanges","deprecated":null,"version":null,"openapi":"/openapi.yaml get /exchanges","href":"/api-reference/exchanges/list-exchanges"},{"title":"Create Exchange","deprecated":null,"version":null,"openapi":"/openapi.yaml post /exchanges","href":"/api-reference/exchanges/create-exchange"},{"title":"Get Exchange","deprecated":null,"version":null,"openapi":"/openapi.yaml get /exchanges/{exchangeId}","href":"/api-reference/exchanges/get-exchange"},{"title":"List Accounts","deprecated":null,"version":null,"openapi":"/openapi.yaml get /exchanges/{exchangeId}/accounts","href":"/api-reference/exchanges/list-accounts"},{"title":"List Account Assets","deprecated":null,"version":null,"openapi":"/openapi.yaml get /exchanges/{exchangeId}/accounts/{accountId}/assets","href":"/api-reference/exchanges/list-account-assets"},{"title":"List Asset Withdrawal Networks","deprecated":null,"version":null,"openapi":"/openapi.yaml get /exchanges/{exchangeId}/accounts/{accountId}/assets/{asset}/withdrawal-networks","href":"/api-reference/exchanges/list-asset-withdrawal-networks"},{"title":"Create Exchange Deposit","deprecated":null,"version":null,"openapi":"/openapi.yaml post /exchanges/{exchangeId}/accounts/{accountId}/deposits","href":"/api-reference/exchanges/create-exchange-deposit"},{"title":"Create Exchange Withdrawal","deprecated":null,"version":null,"openapi":"/openapi.yaml post /exchanges/{exchangeId}/accounts/{accountId}/withdrawals","href":"/api-reference/exchanges/create-exchange-withdrawal"},{"title":"Delete Exchange","deprecated":null,"version":null,"openapi":"/openapi.yaml delete /exchanges/{exchangeId}","href":"/api-reference/exchanges/delete-exchange"}]}]},{"group":"Management","icon":"list-check","pages":[{"group":"Policies","pages":[{"title":"Policies API","sidebarTitle":"Policies","description":"API endpoints to create, list, update, archive, and manage policies that enforce business rules and approval workflows on wallet activity.","icon":"shield","href":"/api-reference/policies"},{"title":"List Policies","deprecated":null,"version":null,"openapi":"/openapi.yaml get /v2/policies","href":"/api-reference/policies/list-policies"},{"title":"Create Policy","description":"Setup a new Policy for your organization.\n \n Every policy requires a rule to be specified. Upon policy evaluation, the configuration specified in the rule will be used to determine whether the policy should trigger or not for a given activity.\n \n By exposing controls on permissions and policies, Dfns enables the specification of an admin quorum to approve sensitive actions which could change system governance. Note Dfns does not expose a separate \"admin quorum\" concept like some of our competitors - we simply enable this use case as another configuration of the policy engine itself. This was chosen to promote flexibility as not every customer will have the same requirements around creating and managing admin quorums.","deprecated":null,"version":null,"openapi":"/openapi.yaml post /v2/policies","href":"/api-reference/policies/create-policy"},{"title":"Get Policy","deprecated":null,"version":null,"openapi":"/openapi.yaml get /v2/policies/{policyId}","href":"/api-reference/policies/get-policy"},{"title":"Update Policy","deprecated":null,"version":null,"openapi":"/openapi.yaml put /v2/policies/{policyId}","href":"/api-reference/policies/update-policy"},{"title":"Delete Policy","deprecated":null,"version":null,"openapi":"/openapi.yaml delete /v2/policies/{policyId}","href":"/api-reference/policies/delete-policy"},{"group":"Webhooks","pages":[{"title":"Policy triggered","version":null,"deprecated":null,"openapi":"/openapi.yaml webhook policy.triggered","href":"/api-reference/policies/policy-triggered"},{"title":"Policy activity resolved","version":null,"deprecated":null,"openapi":"/openapi.yaml webhook policy.activity.resolved","href":"/api-reference/policies/policy-activity-resolved"}]},{"group":"Sumsub specific","pages":[{"title":"Get Sumsub Travel Rule public key","deprecated":null,"version":null,"openapi":"/openapi.yaml get /v2/policies/travel-rule/sumsub/public-key","href":"/api-reference/policies/get-sumsub-travel-rule-public-key"},{"title":"Look up the Sumsub Travel Rule VASP of a wallet address","deprecated":null,"version":null,"openapi":"/openapi.yaml post /v2/policies/travel-rule/sumsub/vasp-lookup","href":"/api-reference/policies/look-up-the-sumsub-travel-rule-vasp-of-a-wallet-address"}]}]},{"group":"Approval management","pages":[{"title":"Policy Approvals","icon":"shield-check","href":"/api-reference/policy-approvals"},{"title":"Create Approval Decision","deprecated":null,"version":null,"openapi":"/openapi.yaml post /v2/policy-approvals/{approvalId}/decisions","href":"/api-reference/policies/create-approval-decision"},{"title":"Get Approval","deprecated":null,"version":null,"openapi":"/openapi.yaml get /v2/policy-approvals/{approvalId}","href":"/api-reference/policies/get-approval"},{"title":"List Approvals","deprecated":null,"version":null,"openapi":"/openapi.yaml get /v2/policy-approvals","href":"/api-reference/policies/list-approvals"},{"group":"Webhooks","pages":[{"title":"Policy approval pending","version":null,"deprecated":null,"openapi":"/openapi.yaml webhook policy.approval.pending","href":"/api-reference/policies/policy-approval-pending"},{"title":"Policy approval resolved","version":null,"deprecated":null,"openapi":"/openapi.yaml webhook policy.approval.resolved","href":"/api-reference/policies/policy-approval-resolved"}]}]},{"group":"Agreements","pages":[{"title":"Agreements","icon":"handshake","href":"/api-reference/agreements"},{"title":"Get Latest Unaccepted Agreement","deprecated":null,"version":null,"openapi":"/openapi.yaml get /agreements/latest-unaccepted","href":"/api-reference/agreements/get-latest-unaccepted-agreement"},{"title":"Record Agreement Acceptance","deprecated":null,"version":null,"openapi":"/openapi.yaml post /agreements/{agreementId}/accept","href":"/api-reference/agreements/record-agreement-acceptance"}]},{"group":"Key Storage","pages":[{"title":"List Signers","deprecated":null,"version":null,"openapi":"/openapi.yaml get /signers","href":"/api-reference/signers/list-signers"},{"title":"List Key Stores","deprecated":null,"version":null,"openapi":"/openapi.yaml get /key-stores","href":"/api-reference/signers/list-key-stores"},{"group":"Offline Signer","pages":[{"title":"Create Clone Input","deprecated":null,"version":null,"openapi":"/openapi.yaml post /key-stores/{storeId}/clone/input","href":"/api-reference/signers/create-clone-input"},{"title":"Submit Clone Output","deprecated":null,"version":null,"openapi":"/openapi.yaml post /key-stores/{storeId}/clone/output","href":"/api-reference/signers/submit-clone-output"},{"title":"Create Genesis Input","deprecated":null,"version":null,"openapi":"/openapi.yaml post /key-stores/{storeId}/genesis/input","href":"/api-reference/signers/create-genesis-input"},{"title":"Submit Genesis Output","deprecated":null,"version":null,"openapi":"/openapi.yaml post /key-stores/{storeId}/genesis/output","href":"/api-reference/signers/submit-genesis-output"},{"title":"Create Onchain Sign Input","deprecated":null,"version":null,"openapi":"/openapi.yaml post /key-stores/{storeId}/onchain-sign/input","href":"/api-reference/signers/create-onchain-sign-input"},{"title":"Submit Onchain Sign Output","deprecated":null,"version":null,"openapi":"/openapi.yaml post /key-stores/{storeId}/onchain-sign/output","href":"/api-reference/signers/submit-onchain-sign-output"},{"title":"Create Proof Of Control Input","deprecated":null,"version":null,"openapi":"/openapi.yaml post /key-stores/{storeId}/proof-of-control/input","href":"/api-reference/signers/create-proof-of-control-input"},{"title":"Submit Proof Of Control Output","deprecated":null,"version":null,"openapi":"/openapi.yaml post /key-stores/{storeId}/proof-of-control/output","href":"/api-reference/signers/submit-proof-of-control-output"},{"title":"Create Add Mac User Input","deprecated":null,"version":null,"openapi":"/openapi.yaml post /key-stores/{storeId}/add-mac-user/input","href":"/api-reference/signers/create-add-mac-user-input"},{"title":"Submit Add Mac User Output","deprecated":null,"version":null,"openapi":"/openapi.yaml post /key-stores/{storeId}/add-mac-user/output","href":"/api-reference/signers/submit-add-mac-user-output"},{"title":"Create Key Harvest Input","deprecated":null,"version":null,"openapi":"/openapi.yaml post /key-stores/{storeId}/key-harvest/input","href":"/api-reference/signers/create-key-harvest-input"},{"title":"Submit Key Harvest Output","deprecated":null,"version":null,"openapi":"/openapi.yaml post /key-stores/{storeId}/key-harvest/output","href":"/api-reference/signers/submit-key-harvest-output"},{"title":"Cancel Fleet Operation","deprecated":null,"version":null,"openapi":"/openapi.yaml post /key-stores/{storeId}/fleet-operations/cancel","href":"/api-reference/signers/cancel-fleet-operation"},{"title":"Create Add Provisioner Input","deprecated":null,"version":null,"openapi":"/openapi.yaml post /key-stores/{storeId}/add-provisioner/input","href":"/api-reference/signers/create-add-provisioner-input"},{"title":"Submit Add Provisioner Output","deprecated":null,"version":null,"openapi":"/openapi.yaml post /key-stores/{storeId}/add-provisioner/output","href":"/api-reference/signers/submit-add-provisioner-output"}]}]}]},{"group":"Webhooks","icon":"webhook","pages":[{"group":"Webhook Configuration","pages":[{"title":"Webhooks Configuration","icon":"webhook","href":"/api-reference/webhooks"},{"title":"List Webhooks","deprecated":null,"version":null,"openapi":"/openapi.yaml get /webhooks","href":"/api-reference/webhooks/list-webhooks"},{"title":"Create Webhook","deprecated":null,"version":null,"openapi":"/openapi.yaml post /webhooks","href":"/api-reference/webhooks/create-webhook"},{"title":"Get Webhook","deprecated":null,"version":null,"openapi":"/openapi.yaml get /webhooks/{webhookId}","href":"/api-reference/webhooks/get-webhook"},{"title":"Update Webhook","deprecated":null,"version":null,"openapi":"/openapi.yaml put /webhooks/{webhookId}","href":"/api-reference/webhooks/update-webhook"},{"title":"Delete Webhook","deprecated":null,"version":null,"openapi":"/openapi.yaml delete /webhooks/{webhookId}","href":"/api-reference/webhooks/delete-webhook"},{"title":"Ping Webhook","deprecated":null,"version":null,"openapi":"/openapi.yaml post /webhooks/{webhookId}/ping","href":"/api-reference/webhooks/ping-webhook"}]},{"group":"Events History","pages":[{"title":"Webhook Events","icon":"webhook","href":"/api-reference/webhook-events"},{"title":"Get Webhook Event","deprecated":null,"version":null,"openapi":"/openapi.yaml get /webhooks/{webhookId}/events/{webhookEventId}","href":"/api-reference/webhooks/get-webhook-event"},{"title":"List Webhook Events","deprecated":null,"version":null,"openapi":"/openapi.yaml get /webhooks/{webhookId}/events","href":"/api-reference/webhooks/list-webhook-events"},{"title":"Webhook event retry triggered","version":null,"deprecated":null,"openapi":"/openapi.yaml webhook webhook.event.retry.triggered","href":"/api-reference/webhooks/webhook-event-retry-triggered"}]}]}]},{"tab":"SDK reference","icon":"square-terminal","pages":[{"title":"SDK reference","href":"/sdks"}]},{"tab":"Change Log","icon":"newspaper","pages":[{"title":"Change Log","href":"/changelog"}]}]},"title":"List Policies - DFNS documentation","buildId":"dpl_EnxDqhjaNc9a8MVa833TGULPd9uJ","deploymentId":"dpl_EnxDqhjaNc9a8MVa833TGULPd9uJ","dynamics":["c2aa737661","2b790eda92","b0f84f53ff","a9bb46feb3"],"chunks":["OpenApiReferenceProvider-26-lDe7V.js","utils-CWQmgYtH.js","cloneDeep-izs3Hzxb.js","_Uint8Array-BVIqJ90l.js","isObjectLike-C8vmzPEN.js","isArray-Dcu1dQ5t.js","utils-4-Aw3rSD.js","toString-BX-iyh8G.js","isSymbol-CSH9U2Gm.js","addUniqueKeysToSchema-C2zjXYA5.js","snippetPresets-DFmpFA7C.js","style-to-object-BY3JEAdk.js","v4-DIgz8zy6.js","ApiExamples-FJpQavWq.js","isEqual-BfaiBbcl.js","usePlaygroundInputsStore-D_GvPF7k.js","shallow-Bs2ZB0NO.js","getApiPlaygroundDisplay-DCcqJJk-.js","CodeSnippet-DzDxawVe.js","CodeSnippets-aUr7fU-7.js","Page-CT9uE8Ip.js","getPastedJson-Y1fKsj_I.js","icon-DI4zTsDr.js","MethodPill-C0nDlmSQ.js","DuplicateIcon-NUXbx2nQ.js","createIcon-BdTHrPAi.js","DynamicMarkdown-CtpgKJwj.js","SectionHeading-B3x35tOt.js","axios-vUo_bRtp.js","Markdown-3OmurJMP.js","clsx-DMKzROTp.js","lib-DuNMoZ05.js","lib-B8HbPgcC.js","html-void-elements-mCSPHezU.js","dist-1ms6tsT-.js","katex-YMM-FMeD.js","marked.esm-CZWythHk.js","AssistantPageLink-Ke9xIMFx.js"]}