{
"code": 404,
"message": "workspace not found for slug/uid: workspace"
}
⚠️ This API call will override existing categories with whatever is passed in the request body. Recommended approach is to first fetch the current categories using GET method, modify the response as needed, and then send it back in the request body.
You can read more about preference categories here.
Note:
Changes will only be pushed if "validation_result":{"is_valid":true} in the response. General reasons for validation failure are:
There are multiple categories with the same slug
Some subcategories have been deleted in this version, on which active workflows are configured
You’ve not passed all three categories in the request body - system, transactional, promotional
Array of root preference categories. Exactly three entries are required, one for each root category (system, transactional, promotional), even if empty.
{
"code": 404,
"message": "workspace not found for slug/uid: workspace"
}
{"docsConfig":{"theme":"maple","$schema":"https://mintlify.com/docs.json","name":"SuprSend: API-first notification infrastructure","colors":{"primary":"#2E70E8","light":"#63A3F7","dark":"#2E70E8"},"logo":"https://mintcdn.com/suprsend/CMaQBA3E8wM1DyFj/images/suprsend-logo.svg?fit=max\u0026auto=format\u0026n=CMaQBA3E8wM1DyFj\u0026q=85\u0026s=f325b9764c629a0b488476db369b8d47","favicon":"https://mintcdn.com/suprsend/5H8hv-jDy8OaCsyX/favicon.svg?fit=max\u0026auto=format\u0026n=5H8hv-jDy8OaCsyX\u0026q=85\u0026s=e9c88c84e18f0fd4a64adb33f5fa3603","api":{"openapi":"openapi.yaml"},"background":{"decoration":"windows"},"navbar":{"links":[{"href":"mailto:support@suprsend.com","label":"Contact Us"}],"primary":{"type":"button","label":"Get Started","href":"https://app.suprsend.com"}},"footer":{"socials":{"x":"https://x.com/suprsend","github":"https://github.com/suprsend","linkedin":"https://linkedin.com/company/suprsend","youtube":"https://youtube.com/@suprsend"}},"seo":{"indexing":"all"},"fonts":{"family":"Inter"},"styling":{"codeblocks":"system","latex":true},"integrations":{"ga4":{"measurementId":"G-PPDYBESP2L"},"gtm":{"tagId":"GTM-T6W3P8RG"},"mixpanel":{"projectToken":"2febb9e078d777860c5624f2579507a7"}},"contextual":{"options":["copy","view","chatgpt","claude"],"display":"header"},"navigation":{"global":{"anchors":[{"anchor":"Community","icon":"slack","color":{"light":"#f59f0b","dark":"#f59f0b"},"href":"https://join.slack.com/t/suprsendcommunity/shared_invite/zt-3932rw936-XNWY1RC8bsffh4if4ZyoXQ"},{"anchor":"Trust Center","icon":"shield-halved","color":{"light":"#2564eb","dark":"#2564eb"},"href":"https://trust.suprsend.com"},{"anchor":"Platform Status","icon":"wifi","color":{"light":"#2564eb","dark":"#2564eb"},"href":"https://status.suprsend.com"},{"anchor":"Postman Collection","icon":"code","color":{"light":"#2564eb","dark":"#2564eb"},"href":"https://www.postman.com/suprsend/suprsend/collection/16bdmwa/suprsend-apis"}]},"pages":[]}},"deployment":{"deploymentMetadataValue":{"subdomain":"suprsend","hasAudioNarration":false,"actualSubdomain":"suprsend","customDomains":["docs.suprsend.com"],"gitSource":{"type":"github","owner":"suprsend","repo":"documentation","deployBranch":"main","contentDirectory":"","isPrivate":false,"mountPath":"","label":""},"feedback":{"thumbs":true,"edits":true,"issues":true},"entitlements":{"AI_CHAT":{"status":"ENABLED"},"WEB_MCP":{"status":"ENABLED"},"NARRATION":{"status":"ENABLED"}},"buildId":"6aec2eb7d7fc1c00c9c6bd01","clientVersion":"0.0.4088","searchFilterCounts":[{"language":"default","tag":"Documentation","count":151},{"language":"default","tag":"Developer Resources","count":105},{"language":"default","tag":"Management API","count":91},{"language":"default","tag":"API Reference","count":86},{"language":"default","tag":"SDKs and APIs","count":81},{"language":"default","tag":"SDKs","count":78},{"language":"default","tag":"CORE CONCEPTS","count":57},{"language":"default","tag":"CLI","count":50},{"language":"default","tag":"SuprSend Client SDK","count":43},{"language":"default","tag":"SuprSend Backend SDK","count":34}],"searchSettings":{"showContentSnippets":true}},"assistantConfig":{"deflection":{"enabled":true,"email":"support@suprsend.com","showHelpButton":true}},"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":"rbac-expansion","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":"full-page-search","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":"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":"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":"turbopuffer-dual-write","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},{"name":"editor-metadata","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"sso-setup-deadline-banner","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"turbopuffer-serve","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"live-agents","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"comment-mode","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false}],"privacy":{"consentBanner":{"enabled":true}},"googleFontsInlined":false},"customCss":[{"filePath":"style.css","content":"img{max-width:100%;height:auto}table{overflow-x:auto;display:block;max-width:100%}pre,code{overflow-x:auto;max-width:100%}@media (max-width: 768px){img[width]{width:100%!important;max-width:100%!important;height:auto!important}pre{font-size:13px}}a.card[href=\"https://skills.sh/suprsend/skills\"]{position:relative}a.card[href=\"https://skills.sh/suprsend/skills\"]>img{position:absolute!important;top:1.25rem!important;left:1.5rem!important;width:1.5rem!important;height:1.5rem!important;max-width:1.5rem!important;max-height:1.5rem!important;min-height:1.5rem!important;object-fit:contain!important;z-index:1}a.card[href=\"https://skills.sh/suprsend/skills\"] .px-6.py-5{padding-top:3.25rem!important}a.card[href=\"https://skills.sh/suprsend/skills\"] h2{margin-top:0!important}[data-component-name=\"mermaid-controls-wrapper\"]{display:none!important}.mermaid .nodeLabel,.mermaid .nodeLabel p,.mermaid .edgeLabel,.mermaid .edgeLabel p,.mermaid .cluster-label,.mermaid .cluster-label p{color:#4d4d4d!important}.mermaid .nodeLabel,.mermaid .edgeLabel,.mermaid .cluster-label,.mermaid text{fill:#4d4d4d!important}.dark .mermaid .nodeLabel,.dark .mermaid .nodeLabel p,.dark .mermaid .edgeLabel,.dark .mermaid .edgeLabel p,.dark .mermaid .cluster-label,.dark .mermaid .cluster-label p{color:#cccccc!important}.dark .mermaid .nodeLabel,.dark .mermaid .edgeLabel,.dark .mermaid .cluster-label,.dark .mermaid text{fill:#cccccc!important}.changelog-page-content{padding:0 7rem}@media (max-width: 768px){.changelog-page-content{padding:0 1rem}}.ss-flow{--ss-ink: #1f2937;--ss-muted: #6b7280;--ss-line: #e5e7eb;--ss-accent: #2e70e8;--ss-core-bg: #f5f8fe;--ss-core-line: #d4e2fb;--ss-arrow: #9ca3af;display:grid;grid-template-columns:minmax(0, 1fr) 1.5rem minmax(0, 2.1fr) 1.5rem minmax(0, 1fr);align-items:center;margin:1.75rem 0 2rem;font-size:0.875rem;line-height:1.4;color:var(--ss-ink)}.dark .ss-flow{--ss-ink: #e5e7eb;--ss-muted: #9ca3af;--ss-line: rgba(255, 255, 255, 0.12);--ss-accent: #63a3f7;--ss-core-bg: rgba(46, 112, 232, 0.1);--ss-core-line: rgba(99, 163, 247, 0.28);--ss-arrow: #6b7280}.ss-flow .ss-flow__label{margin:0 0 0.5rem;font-size:0.75rem;font-weight:600;color:var(--ss-muted)}.ss-flow .ss-flow__list{list-style:none;margin:0;padding:0.5rem 0.75rem;border:1px solid var(--ss-line);border-radius:10px;font-size:0.8125rem}.ss-flow .ss-flow__list li{margin:0;padding:0.3125rem 0}.ss-flow .ss-flow__arrow{position:relative;height:1px;margin:1.25rem 0.25rem 0 0.125rem;background:var(--ss-arrow)}.ss-flow .ss-flow__arrow::after{content:\"\";position:absolute;top:-4px;right:-1px;border-top:4.5px solid transparent;border-bottom:4.5px solid transparent;border-left:6px solid var(--ss-arrow)}.ss-flow .ss-flow__core{overflow:hidden;border:1px solid var(--ss-core-line);border-radius:14px;background:var(--ss-core-bg)}.ss-flow .ss-flow__label--core{margin:0;padding:0.875rem 1rem 0;font-size:0.875rem;color:var(--ss-accent)}.ss-flow .ss-flow__stages{list-style:none;margin:0;padding:0.875rem 1rem 1rem}.ss-flow .ss-flow__stage{position:relative;margin:0;padding:0 0 1rem 1.5rem}.ss-flow .ss-flow__stage:last-child{padding-bottom:0}.ss-flow .ss-flow__stage::before{content:\"\";position:absolute;top:0.3rem;left:0;z-index:1;width:0.625rem;height:0.625rem;border-radius:50%;background:var(--ss-accent)}.ss-flow .ss-flow__stage::after{content:\"\";position:absolute;top:0.5rem;bottom:-0.5rem;left:calc(0.3125rem - 1px);width:2px;background:var(--ss-core-line)}.ss-flow .ss-flow__stage:last-child::after{display:none}.ss-flow .ss-flow__stage strong{display:block;font-weight:600;color:var(--ss-ink)}.ss-flow .ss-flow__stage span{display:block;margin-top:0.125rem;font-size:0.8125rem;color:var(--ss-muted)}.ss-flow .ss-flow__logs{margin:0;padding:0.625rem 1rem;border-top:1px dashed var(--ss-core-line);font-size:0.8125rem;color:var(--ss-muted)}.ss-flow .ss-flow__logs strong{font-weight:600;color:var(--ss-ink)}@media (max-width: 640px){.ss-flow{grid-template-columns:minmax(0, 1fr)}.ss-flow .ss-flow__list{display:flex;flex-wrap:wrap;gap:0 1rem}.ss-flow .ss-flow__arrow{width:1px;height:1.25rem;margin:0.5rem auto}.ss-flow .ss-flow__arrow::after{top:auto;right:auto;bottom:-1px;left:-4px;border-top:6px solid var(--ss-arrow);border-right:4.5px solid transparent;border-bottom:0;border-left:4.5px solid transparent}}"}],"page":{"pagePath":"reference/create-update-category","slug":"/reference/create-update-category","pageMetadata":{"title":"Create or Update Preference Category","openapi":"POST /v1/{workspace}/preference_category/","sidebarTitle":"Create/Update Category","description":"Use this API to set preference categories to be used in workflow or to show on user preference page.","href":"/reference/create-update-category"},"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: \"Use this API to set preference categories to be used in workflow or to show on user preference page.\"\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={a:`a`,code:`code`,li:`li`,p:`p`,strong:`strong`,ul:`ul`,..._provideComponents(),...props.components},{Note}=_components;if(!Note)_missingMdxReference(`Note`,true);return _jsxs(_Fragment,{children:[_jsxs(_components.p,{children:[`⚠️ This API call will `,_jsx(_components.strong,{children:`override existing categories`}),` with whatever is passed in the request body. Recommended approach is to first fetch the current categories using `,_jsx(_components.a,{href:`/reference/get-category`,children:`GET method`}),`, modify the response as needed, and then send it back in the request body. `,_jsx(`br`,{}),`\nYou can read more about preference categories `,_jsx(_components.a,{href:`/docs/notification-category`,children:`here`}),`.`]}),`\n`,_jsx(Note,{children:_jsxs(`p`,{children:[_jsxs(_components.p,{children:[_jsx(`strong`,{children:`Note:`}),`\nChanges will only be pushed if `,_jsx(_components.code,{children:`\"validation_result\":{\"is_valid\":true}`}),` in the response. General reasons for validation failure are:`]}),_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:`There are multiple categories with the same slug`}),`\n`,_jsx(_components.li,{children:`Some subcategories have been deleted in this version, on which active workflows are configured`}),`\n`,_jsx(_components.li,{children:`You’ve not passed all three categories in the request body - system, transactional, promotional`}),`\n`]})]})})]})}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":{"codeStyling":"system","config":{},"pageMetadata":{"title":"Create or Update Preference Category","openapi":"POST /v1/{workspace}/preference_category/","sidebarTitle":"Create/Update Category","description":"Use this API to set preference categories to be used in workflow or to show on user preference page.","href":"/reference/create-update-category"}}},"mdxSourceWithNoJs":null},"mdxExtracts":{"tableOfContents":[],"codeExamples":{}},"jsLinks":["/_mintlify/custom/suprsend/1ff47b86af33ef76/apollo-tracker.js"],"openApiReferenceData":{"operation":{"summary":"Update Preference Categories","description":"Use this API to set preference categories to be used in workflow or to show on user preference page.","operationId":"create-update-category","servers":["17741e5d-8062-4ebe-8777-bb570bda60e7"],"security":["38d6497d-a421-4920-931a-b26f356d04bc"],"x-codeSamples":[{"lang":"cURL","label":"Create/Update Category","source":"curl -X POST \"https://management-api.suprsend.com/v1/{workspace}/preference_category/?commit=false\" \\\n --header \"Authorization: ServiceToken {token}\" \\\n --header \"Content-Type: application/json\" \\\n --data '{\n \"root_categories\": [\n {\n \"root_category\": \"system\"\n },\n {\n \"root_category\": \"transactional\",\n \"sections\": [\n {\n \"name\": \"Task Updates\",\n \"categories\": [\n {\n \"category\": \"tagged-to-me\",\n \"name\": \"Tagged to Me\",\n \"description\": \"Status Update or mentions on tasks assigned by me or tagged to me\",\n \"default_preference\": \"opt_in\",\n \"digest_schedule\": {\n \"enabled\": true,\n \"options\": [\n {\n \"id\": \"instant\",\n \"label\": \"Instant\",\n \"frequency\": \"instantly\",\n \"is_default\": true\n },\n {\n \"id\": \"daily-digest\",\n \"label\": \"Daily at 9:00 AM\",\n \"frequency\": \"daily\",\n \"interval\": 1,\n \"time\": { \"edit_policy\": \"editable\", \"default_value\": \"09:00\" },\n \"is_default\": false\n }\n ]\n },\n \"properties\": [\n {\n \"key\": \"threshold\",\n \"label\": \"Threshold\",\n \"value_type\": \"integer\",\n \"is_optional\": false,\n \"default_value\": 10,\n \"edit_policy\": \"editable\"\n }\n ]\n }\n ]\n }\n ]\n },\n {\n \"root_category\": \"promotional\",\n \"sections\": [\n {\n \"name\": \"Product Updates\",\n \"categories\": [\n {\n \"category\": \"newsletter\",\n \"name\": \"Newsletter\",\n \"default_preference\": \"opt_out\",\n \"is_commercial\": true,\n \"digest_schedule\": null,\n \"properties\": null\n }\n ]\n }\n ]\n }\n ]\n }'\n"}],"parameters":["b544c85a-b97a-4e56-b63f-7e8a25117185","2c1acc02-977c-407a-ae3d-cac2f0522819","7b97ce1d-ce0e-4232-8f97-8dd9e25d96a0"],"requestBody":"f9213b3f-fea0-4f05-b2d6-504e0be3d4ef","responses":{"201":"e6fae279-6174-4de7-85ed-19070effd414","401":"58c9f759-504b-4067-bf35-75751dbeb1d1","404":"60d2405b-41cf-4d7c-a7d0-fbdf9e70de24"},"method":"post","type":"path","path":"/v1/{workspace}/preference_category/","baseUrlOptions":["https://management-api.suprsend.com"],"title":"Update Preference Categories","codeSamples":[{"label":"Create/Update Category","lang":"cURL","source":"curl -X POST \"https://management-api.suprsend.com/v1/{workspace}/preference_category/?commit=false\" \\\n --header \"Authorization: ServiceToken {token}\" \\\n --header \"Content-Type: application/json\" \\\n --data '{\n \"root_categories\": [\n {\n \"root_category\": \"system\"\n },\n {\n \"root_category\": \"transactional\",\n \"sections\": [\n {\n \"name\": \"Task Updates\",\n \"categories\": [\n {\n \"category\": \"tagged-to-me\",\n \"name\": \"Tagged to Me\",\n \"description\": \"Status Update or mentions on tasks assigned by me or tagged to me\",\n \"default_preference\": \"opt_in\",\n \"digest_schedule\": {\n \"enabled\": true,\n \"options\": [\n {\n \"id\": \"instant\",\n \"label\": \"Instant\",\n \"frequency\": \"instantly\",\n \"is_default\": true\n },\n {\n \"id\": \"daily-digest\",\n \"label\": \"Daily at 9:00 AM\",\n \"frequency\": \"daily\",\n \"interval\": 1,\n \"time\": { \"edit_policy\": \"editable\", \"default_value\": \"09:00\" },\n \"is_default\": false\n }\n ]\n },\n \"properties\": [\n {\n \"key\": \"threshold\",\n \"label\": \"Threshold\",\n \"value_type\": \"integer\",\n \"is_optional\": false,\n \"default_value\": 10,\n \"edit_policy\": \"editable\"\n }\n ]\n }\n ]\n }\n ]\n },\n {\n \"root_category\": \"promotional\",\n \"sections\": [\n {\n \"name\": \"Product Updates\",\n \"categories\": [\n {\n \"category\": \"newsletter\",\n \"name\": \"Newsletter\",\n \"default_preference\": \"opt_out\",\n \"is_commercial\": true,\n \"digest_schedule\": null,\n \"properties\": null\n }\n ]\n }\n ]\n }\n ]\n }'\n"}],"requiredOnlyExamples":false,"requestExampleType":"codeSamples","responseExampleType":"generated"},"dependencies":{"parameters":{"b544c85a-b97a-4e56-b63f-7e8a25117185":{"in":"path","name":"workspace","required":true,"schema":{"type":"string","isRequired":true,"description":"Workspace slug (staging, production, etc.)","uniqueKey":"","typeLabel":"string"},"description":"Workspace slug (staging, production, etc.)"},"2c1acc02-977c-407a-ae3d-cac2f0522819":{"in":"query","name":"commit","schema":{"type":"boolean","description":"Whether to commit changes immediately. Set to true to make changes live, false to save as draft.","uniqueKey":"","typeLabel":"boolean"},"description":"Whether to commit changes immediately. Set to true to make changes live, false to save as draft."},"7b97ce1d-ce0e-4232-8f97-8dd9e25d96a0":{"in":"query","name":"commit_message","schema":{"type":"string","description":"Optional commit message describing the changes made. Used only when commit=true.","uniqueKey":"","typeLabel":"string"},"description":"Optional commit message describing the changes made. Used only when commit=true."}},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["root_categories"],"properties":{"root_categories":{"type":"array","minItems":3,"maxItems":3,"description":"Array of root preference categories. Exactly three entries are required, one for each root category (system, transactional, promotional), even if empty.","items":{"type":"object","properties":{"root_category":{"type":"string","description":"Root category classification. system=critical notifications, transactional=user actions, promotional=marketing.","enum":["system","transactional","promotional"],"uniqueKey":"root_categories.items.[INDEX].root_category","typeLabel":"enum\u003cstring>"},"sections":{"type":"array","maxItems":25,"description":"Sections group related categories (max 25 per root category). Users cannot set preferences at section level.","items":{"type":"object","properties":{"name":{"type":"string","maxLength":128,"description":"Name of the section displayed in the preference interface.","uniqueKey":"root_categories.items.[INDEX].sections.items.[INDEX].name","typeLabel":"string"},"description":{"type":"string","description":"Description of what notifications this section covers.","uniqueKey":"root_categories.items.[INDEX].sections.items.[INDEX].description","typeLabel":"string"},"tags":{"type":"array","maxItems":25,"description":"Tags to organize and filter sections (max 25). Use lowercase, hyphenated values (e.g., \"security\", \"billing\").","items":{"type":"string","uniqueKey":"root_categories.items.[INDEX].sections.items.[INDEX].tags.items.[INDEX]","typeLabel":"string"},"uniqueKey":"root_categories.items.[INDEX].sections.items.[INDEX].tags","typeLabel":"string[]"},"categories":{"type":"array","maxItems":100,"description":"Categories that users can set preferences for (max 100 per section).","items":{"type":"object","required":["name","default_preference"],"properties":{"name":{"type":"string","maxLength":128,"description":"Display name for the category shown in the preference interface. The category slug is derived from this name.","isRequired":true,"uniqueKey":"root_categories.items.[INDEX].sections.items.[INDEX].categories.items.[INDEX].name","typeLabel":"string"},"default_preference":{"type":"string","description":"Default preference setting for this category.","enum":["opt_in","opt_out","cant_unsubscribe"],"isRequired":true,"uniqueKey":"root_categories.items.[INDEX].sections.items.[INDEX].categories.items.[INDEX].default_preference","typeLabel":"enum\u003cstring>"},"description":{"type":"string","description":"Description of what notifications this category covers.","uniqueKey":"root_categories.items.[INDEX].sections.items.[INDEX].categories.items.[INDEX].description","typeLabel":"string"},"default_mandatory_channels":{"type":"array","description":"Channels that users cannot unsubscribe from when default preference is cant_unsubscribe. Ignored for other default preferences.","items":{"type":"string","enum":["email","sms","whatsapp","androidpush","inbox","iospush","slack","webpush","ms_teams"],"uniqueKey":"root_categories.items.[INDEX].sections.items.[INDEX].categories.items.[INDEX].default_mandatory_channels.items.[INDEX]","typeLabel":"enum\u003cstring>"},"uniqueKey":"root_categories.items.[INDEX].sections.items.[INDEX].categories.items.[INDEX].default_mandatory_channels","typeLabel":"enum\u003cstring>[]"},"default_opt_in_channels":{"oneOf":[{"type":"array","description":"Add channels that should be opted-in by default when preference is either `On` or `Can't Unsubscribe`. Set to null or do not pass this parameter to set all channels as opted-in. In case of `Can't Unsubscribe`, mandatory channels are opted-in by default.","items":{"type":"string","enum":["email","sms","whatsapp","androidpush","inbox","iospush","slack","webpush","ms_teams"],"uniqueKey":"root_categories.items.[INDEX].sections.items.[INDEX].categories.items.[INDEX].default_opt_in_channels.oneOf.0.items.[INDEX]","typeLabel":"enum\u003cstring>"},"uniqueKey":"root_categories.items.[INDEX].sections.items.[INDEX].categories.items.[INDEX].default_opt_in_channels.oneOf.0","typeLabel":"enum\u003cstring>[]"},{"type":"null","description":"Add channels that should be opted-in by default when preference is either `On` or `Can't Unsubscribe`. Set to null or do not pass this parameter to set all channels as opted-in. In case of `Can't Unsubscribe`, mandatory channels are opted-in by default.","items":{"type":"string","enum":["email","sms","whatsapp","androidpush","inbox","iospush","slack","webpush","ms_teams"]},"uniqueKey":"root_categories.items.[INDEX].sections.items.[INDEX].categories.items.[INDEX].default_opt_in_channels.oneOf.1","typeLabel":"null"}],"uniqueKey":"root_categories.items.[INDEX].sections.items.[INDEX].categories.items.[INDEX].default_opt_in_channels","typeLabel":"enum\u003cstring>[] | null"},"tags":{"type":"array","maxItems":25,"description":"Tags to organize and filter categories (max 25). Use lowercase, hyphenated values (e.g., \"user-management\", \"payment-alerts\").","items":{"type":"string","pattern":"^[a-z0-9]+(-[a-z0-9]+)*$","uniqueKey":"root_categories.items.[INDEX].sections.items.[INDEX].categories.items.[INDEX].tags.items.[INDEX]","typeLabel":"string"},"uniqueKey":"root_categories.items.[INDEX].sections.items.[INDEX].categories.items.[INDEX].tags","typeLabel":"string[]"},"is_commercial":{"oneOf":[{"type":"boolean","description":"Marks the category as commercial. Emails sent in a commercial category carry one-click unsubscribe headers (`List-Unsubscribe` and `List-Unsubscribe-Post`), so recipients can opt out of email for this category from their mail client's Unsubscribe button. Omit or pass null to use the default: `true` for promotional categories, `false` for transactional and system categories. Can't be `true` for system categories or for categories with `default_preference` set to `cant_unsubscribe`; the API returns a 400 error in either case. See [Enabling one-click unsubscribe for email](/docs/managing-notification-categories#enabling-one-click-unsubscribe-for-email).","uniqueKey":"root_categories.items.[INDEX].sections.items.[INDEX].categories.items.[INDEX].is_commercial.oneOf.0","typeLabel":"boolean"},{"type":"null","description":"Marks the category as commercial. Emails sent in a commercial category carry one-click unsubscribe headers (`List-Unsubscribe` and `List-Unsubscribe-Post`), so recipients can opt out of email for this category from their mail client's Unsubscribe button. Omit or pass null to use the default: `true` for promotional categories, `false` for transactional and system categories. Can't be `true` for system categories or for categories with `default_preference` set to `cant_unsubscribe`; the API returns a 400 error in either case. See [Enabling one-click unsubscribe for email](/docs/managing-notification-categories#enabling-one-click-unsubscribe-for-email).","uniqueKey":"root_categories.items.[INDEX].sections.items.[INDEX].categories.items.[INDEX].is_commercial.oneOf.1","typeLabel":"null"}],"uniqueKey":"root_categories.items.[INDEX].sections.items.[INDEX].categories.items.[INDEX].is_commercial","typeLabel":"boolean | null"},"digest_schedule":{"oneOf":[{"type":"object","description":"Digest schedule configuration for batching notifications. Set enabled to `false` to disable digest or don't pass this key. Digest schedule will only apply if you add digest node in the workflow linked to this category and set the `schedule_type` in node config to `category_digest_schedule`.","properties":{"enabled":{"type":"boolean","description":"Whether you want to give digest options against this category.","uniqueKey":"root_categories.items.[INDEX].sections.items.[INDEX].categories.items.[INDEX].digest_schedule.oneOf.0.enabled","typeLabel":"boolean"},"options":{"type":"array","description":"Array of digest schedule options (up to 10). Exactly one option must have `is_default` set to true.","maxItems":10,"items":{"type":"object","properties":{"id":{"type":"string","description":"Unique identifier for the option. Max 64 characters, allowed characters: [a-z0-9_-]. id is generated from label if not set.","maxLength":64,"uniqueKey":"root_categories.items.[INDEX].sections.items.[INDEX].categories.items.[INDEX].digest_schedule.oneOf.0.options.items.[INDEX].id","typeLabel":"string"},"label":{"type":"string","description":"Display label to be shown to user for the option.","maxLength":256,"uniqueKey":"root_categories.items.[INDEX].sections.items.[INDEX].categories.items.[INDEX].digest_schedule.oneOf.0.options.items.[INDEX].label","typeLabel":"string"},"frequency":{"type":"string","description":"Frequency of the digest schedule. Instant means the notification will be sent immediately without batching. You can also use this in workflow branch to take users through different flow basis on the frequency.","enum":["instantly","minutely","hourly","daily","weekly","weekly_mo2fr","monthly"],"uniqueKey":"root_categories.items.[INDEX].sections.items.[INDEX].categories.items.[INDEX].digest_schedule.oneOf.0.options.items.[INDEX].frequency","typeLabel":"enum\u003cstring>"},"interval":{"type":"integer","description":"Interval multiplier for the frequency (e.g., interval=2 with frequency=weekly means every 2 weeks). Default value = 1.","minimum":1,"uniqueKey":"root_categories.items.[INDEX].sections.items.[INDEX].categories.items.[INDEX].digest_schedule.oneOf.0.options.items.[INDEX].interval","typeLabel":"integer"},"time":{"type":"object","description":"For `daily`, `weekly`, and `monthly` frequencies, this is the exact time the notification is sent. For `hourly` and `minutely` (interval > 1) frequencies, it's the anchor time from which subsequent intervals are calculated. Applies to all frequencies except `instantly` and `minutely` with interval=1.","properties":{"edit_policy":{"type":"string","enum":["locked","editable"],"description":"Whether the recipient can edit this value. `Locked` means can't edit. Tenant can always edit irrespective of edit_policy.","uniqueKey":"root_categories.items.[INDEX].sections.items.[INDEX].categories.items.[INDEX].digest_schedule.oneOf.0.options.items.[INDEX].time.edit_policy","typeLabel":"enum\u003cstring>"},"default_value":{"type":"string","description":"Default time in HH:MM format (24-hour)","example":"00:00","uniqueKey":"root_categories.items.[INDEX].sections.items.[INDEX].categories.items.[INDEX].digest_schedule.oneOf.0.options.items.[INDEX].time.default_value","typeLabel":"string"}},"uniqueKey":"root_categories.items.[INDEX].sections.items.[INDEX].categories.items.[INDEX].digest_schedule.oneOf.0.options.items.[INDEX].time","typeLabel":"object"},"weekdays":{"type":"object","description":"Weekday configuration. Applicable for `weekly` and `weekly_mo2fr` frequencies. For `weekly_mo2fr`, edit_policy is always `locked` with weekdays Monday through Friday.","properties":{"edit_policy":{"type":"string","enum":["locked","editable"],"description":"Whether the recipient can edit this value. `Locked` means can't edit. Tenant can always edit irrespective of edit_policy.","uniqueKey":"root_categories.items.[INDEX].sections.items.[INDEX].categories.items.[INDEX].digest_schedule.oneOf.0.options.items.[INDEX].weekdays.edit_policy","typeLabel":"enum\u003cstring>"},"default_value":{"type":"array","description":"Array of weekday codes","items":{"type":"string","enum":["su","mo","tu","we","th","fr","sa"],"uniqueKey":"root_categories.items.[INDEX].sections.items.[INDEX].categories.items.[INDEX].digest_schedule.oneOf.0.options.items.[INDEX].weekdays.default_value.items.[INDEX]","typeLabel":"enum\u003cstring>"},"uniqueKey":"root_categories.items.[INDEX].sections.items.[INDEX].categories.items.[INDEX].digest_schedule.oneOf.0.options.items.[INDEX].weekdays.default_value","typeLabel":"enum\u003cstring>[]"}},"uniqueKey":"root_categories.items.[INDEX].sections.items.[INDEX].categories.items.[INDEX].digest_schedule.oneOf.0.options.items.[INDEX].weekdays","typeLabel":"object"},"monthdays":{"type":"object","description":"Monthday configuration. Applicable for `monthly` frequency.","properties":{"edit_policy":{"type":"string","enum":["locked","editable"],"description":"Whether the recipient can edit this value. `Locked` means can't edit. Tenant can always edit irrespective of edit_policy.","uniqueKey":"root_categories.items.[INDEX].sections.items.[INDEX].categories.items.[INDEX].digest_schedule.oneOf.0.options.items.[INDEX].monthdays.edit_policy","typeLabel":"enum\u003cstring>"},"default_value":{"type":"array","description":"Array of monthday objects specifying which days of the month","items":{"type":"object","properties":{"pos":{"type":"integer","description":"Position of the day in the month (1-based)","uniqueKey":"root_categories.items.[INDEX].sections.items.[INDEX].categories.items.[INDEX].digest_schedule.oneOf.0.options.items.[INDEX].monthdays.default_value.items.[INDEX].pos","typeLabel":"integer"},"day":{"type":"string","description":"Optional day of the week. If omitted, refers to the calendar day at that position.","enum":["su","mo","tu","we","th","fr","sa"],"uniqueKey":"root_categories.items.[INDEX].sections.items.[INDEX].categories.items.[INDEX].digest_schedule.oneOf.0.options.items.[INDEX].monthdays.default_value.items.[INDEX].day","typeLabel":"enum\u003cstring>"}},"uniqueKey":"root_categories.items.[INDEX].sections.items.[INDEX].categories.items.[INDEX].digest_schedule.oneOf.0.options.items.[INDEX].monthdays.default_value.items.[INDEX]","typeLabel":"object"},"uniqueKey":"root_categories.items.[INDEX].sections.items.[INDEX].categories.items.[INDEX].digest_schedule.oneOf.0.options.items.[INDEX].monthdays.default_value","typeLabel":"object[]"}},"uniqueKey":"root_categories.items.[INDEX].sections.items.[INDEX].categories.items.[INDEX].digest_schedule.oneOf.0.options.items.[INDEX].monthdays","typeLabel":"object"},"dtstart":{"type":"object","description":"Start date-time configuration. Only applicable for `daily` frequency with interval > 1.","properties":{"edit_policy":{"type":"string","enum":["locked","editable"],"description":"Whether the recipient can edit this value. `Locked` means can't edit. Tenant can always edit irrespective of edit_policy.","uniqueKey":"root_categories.items.[INDEX].sections.items.[INDEX].categories.items.[INDEX].digest_schedule.oneOf.0.options.items.[INDEX].dtstart.edit_policy","typeLabel":"enum\u003cstring>"},"default_value":{"type":"string","format":"date-time","description":"Start date-time in ISO 8601 format","example":"2026-06-20T00:00:00Z","uniqueKey":"root_categories.items.[INDEX].sections.items.[INDEX].categories.items.[INDEX].digest_schedule.oneOf.0.options.items.[INDEX].dtstart.default_value","typeLabel":"string\u003cdate-time>"}},"uniqueKey":"root_categories.items.[INDEX].sections.items.[INDEX].categories.items.[INDEX].digest_schedule.oneOf.0.options.items.[INDEX].dtstart","typeLabel":"object"},"is_default":{"type":"boolean","description":"Whether this option is the default selection. Exactly one option in the array must be set to true.","uniqueKey":"root_categories.items.[INDEX].sections.items.[INDEX].categories.items.[INDEX].digest_schedule.oneOf.0.options.items.[INDEX].is_default","typeLabel":"boolean"}},"uniqueKey":"root_categories.items.[INDEX].sections.items.[INDEX].categories.items.[INDEX].digest_schedule.oneOf.0.options.items.[INDEX]","typeLabel":"object"},"uniqueKey":"root_categories.items.[INDEX].sections.items.[INDEX].categories.items.[INDEX].digest_schedule.oneOf.0.options","typeLabel":"object[]"}},"uniqueKey":"root_categories.items.[INDEX].sections.items.[INDEX].categories.items.[INDEX].digest_schedule.oneOf.0","typeLabel":"object"},{"type":"null","description":"Digest schedule configuration for batching notifications. Set enabled to `false` to disable digest or don't pass this key. Digest schedule will only apply if you add digest node in the workflow linked to this category and set the `schedule_type` in node config to `category_digest_schedule`.","properties":{"enabled":{"type":"boolean","description":"Whether you want to give digest options against this category."},"options":{"type":"array","description":"Array of digest schedule options (up to 10). Exactly one option must have `is_default` set to true.","maxItems":10,"items":{"type":"object","properties":{"id":{"type":"string","description":"Unique identifier for the option. Max 64 characters, allowed characters: [a-z0-9_-]. id is generated from label if not set.","maxLength":64},"label":{"type":"string","description":"Display label to be shown to user for the option.","maxLength":256},"frequency":{"type":"string","description":"Frequency of the digest schedule. Instant means the notification will be sent immediately without batching. You can also use this in workflow branch to take users through different flow basis on the frequency.","enum":["instantly","minutely","hourly","daily","weekly","weekly_mo2fr","monthly"]},"interval":{"type":"integer","description":"Interval multiplier for the frequency (e.g., interval=2 with frequency=weekly means every 2 weeks). Default value = 1.","minimum":1},"time":{"type":"object","description":"For `daily`, `weekly`, and `monthly` frequencies, this is the exact time the notification is sent. For `hourly` and `minutely` (interval > 1) frequencies, it's the anchor time from which subsequent intervals are calculated. Applies to all frequencies except `instantly` and `minutely` with interval=1.","properties":{"edit_policy":{"type":"string","enum":["locked","editable"],"description":"Whether the recipient can edit this value. `Locked` means can't edit. Tenant can always edit irrespective of edit_policy."},"default_value":{"type":"string","description":"Default time in HH:MM format (24-hour)","example":"00:00"}}},"weekdays":{"type":"object","description":"Weekday configuration. Applicable for `weekly` and `weekly_mo2fr` frequencies. For `weekly_mo2fr`, edit_policy is always `locked` with weekdays Monday through Friday.","properties":{"edit_policy":{"type":"string","enum":["locked","editable"],"description":"Whether the recipient can edit this value. `Locked` means can't edit. Tenant can always edit irrespective of edit_policy."},"default_value":{"type":"array","description":"Array of weekday codes","items":{"type":"string","enum":["su","mo","tu","we","th","fr","sa"]}}}},"monthdays":{"type":"object","description":"Monthday configuration. Applicable for `monthly` frequency.","properties":{"edit_policy":{"type":"string","enum":["locked","editable"],"description":"Whether the recipient can edit this value. `Locked` means can't edit. Tenant can always edit irrespective of edit_policy."},"default_value":{"type":"array","description":"Array of monthday objects specifying which days of the month","items":{"type":"object","properties":{"pos":{"type":"integer","description":"Position of the day in the month (1-based)"},"day":{"type":"string","description":"Optional day of the week. If omitted, refers to the calendar day at that position.","enum":["su","mo","tu","we","th","fr","sa"]}}}}}},"dtstart":{"type":"object","description":"Start date-time configuration. Only applicable for `daily` frequency with interval > 1.","properties":{"edit_policy":{"type":"string","enum":["locked","editable"],"description":"Whether the recipient can edit this value. `Locked` means can't edit. Tenant can always edit irrespective of edit_policy."},"default_value":{"type":"string","format":"date-time","description":"Start date-time in ISO 8601 format","example":"2026-06-20T00:00:00Z"}}},"is_default":{"type":"boolean","description":"Whether this option is the default selection. Exactly one option in the array must be set to true."}}}}},"uniqueKey":"root_categories.items.[INDEX].sections.items.[INDEX].categories.items.[INDEX].digest_schedule.oneOf.1","typeLabel":"null"}],"uniqueKey":"root_categories.items.[INDEX].sections.items.[INDEX].categories.items.[INDEX].digest_schedule","typeLabel":"object | null"},"properties":{"oneOf":[{"type":"array","description":"Condition properties for the category (up to 25). Set to null to disable conditions.","maxItems":25,"items":{"type":"object","description":"A condition property that can be configured per category to allow user-level customization.","properties":{"key":{"type":"string","description":"Unique identifier for the property. Must match the pattern [_a-z][a-z0-9_]+ and be at most 64 characters. Reference it in a workflow condition block as `$category.properties.key`. For example, to match a recipient's `role` subscription property against the category's `role` property: `$recipient.subscription.role == $category.properties.role`.","maxLength":64,"uniqueKey":"root_categories.items.[INDEX].sections.items.[INDEX].categories.items.[INDEX].properties.oneOf.0.items.[INDEX].key","typeLabel":"string"},"label":{"type":"string","description":"Optional Display label for the property to be shown to user inside the preference centre.","maxLength":256,"uniqueKey":"root_categories.items.[INDEX].sections.items.[INDEX].categories.items.[INDEX].properties.oneOf.0.items.[INDEX].label","typeLabel":"string"},"value_type":{"type":"string","description":"Data type of the property value","enum":["integer","string","string_choice","list_choice","string_dynamic","list_dynamic"],"uniqueKey":"root_categories.items.[INDEX].sections.items.[INDEX].categories.items.[INDEX].properties.oneOf.0.items.[INDEX].value_type","typeLabel":"enum\u003cstring>"},"is_optional":{"type":"boolean","description":"Whether this property is optional. For optional property, default value is not required.","default":false,"uniqueKey":"root_categories.items.[INDEX].sections.items.[INDEX].categories.items.[INDEX].properties.oneOf.0.items.[INDEX].is_optional","typeLabel":"boolean"},"choices":{"type":"array","description":"Available choices when value_type is `string_choice` or `list_choice`. Up to 25 choices. `string_choice` means single-select list and `list_choice` means multi-select list.","maxItems":25,"items":{"type":"object","properties":{"value":{"type":"string","description":"The underlying value of this choice. This is the value passed to the workflow when the choice is selected.","uniqueKey":"root_categories.items.[INDEX].sections.items.[INDEX].categories.items.[INDEX].properties.oneOf.0.items.[INDEX].choices.items.[INDEX].value","typeLabel":"string"},"label":{"type":"string","description":"Display label for the choice","uniqueKey":"root_categories.items.[INDEX].sections.items.[INDEX].categories.items.[INDEX].properties.oneOf.0.items.[INDEX].choices.items.[INDEX].label","typeLabel":"string"}},"uniqueKey":"root_categories.items.[INDEX].sections.items.[INDEX].categories.items.[INDEX].properties.oneOf.0.items.[INDEX].choices.items.[INDEX]","typeLabel":"object"},"uniqueKey":"root_categories.items.[INDEX].sections.items.[INDEX].categories.items.[INDEX].properties.oneOf.0.items.[INDEX].choices","typeLabel":"object[]"},"default_value":{"oneOf":[{"description":"Default value for the property. Data type depends on value_type — string for string/string_choice/string_dynamic, integer for integer, array of strings for list_choice/list_dynamic. Can be null.","uniqueKey":"root_categories.items.[INDEX].sections.items.[INDEX].categories.items.[INDEX].properties.oneOf.0.items.[INDEX].default_value.oneOf.0","typeLabel":"any"},{"description":"Default value for the property. Data type depends on value_type — string for string/string_choice/string_dynamic, integer for integer, array of strings for list_choice/list_dynamic. Can be null.","type":"null","uniqueKey":"root_categories.items.[INDEX].sections.items.[INDEX].categories.items.[INDEX].properties.oneOf.0.items.[INDEX].default_value.oneOf.1","typeLabel":"null"}],"uniqueKey":"root_categories.items.[INDEX].sections.items.[INDEX].categories.items.[INDEX].properties.oneOf.0.items.[INDEX].default_value","typeLabel":"any | null"},"dynamic_choices_key":{"type":"string","description":"Key path your UI will use to populate dynamic choices. Applicable for `string_dynamic` and `list_dynamic` value types.","uniqueKey":"root_categories.items.[INDEX].sections.items.[INDEX].categories.items.[INDEX].properties.oneOf.0.items.[INDEX].dynamic_choices_key","typeLabel":"string"},"edit_policy":{"type":"string","description":"Whether the recipient can edit this property value. `Locked` means can't edit. Tenant can always edit irrespective of edit_policy.","enum":["locked","editable"],"uniqueKey":"root_categories.items.[INDEX].sections.items.[INDEX].categories.items.[INDEX].properties.oneOf.0.items.[INDEX].edit_policy","typeLabel":"enum\u003cstring>"}},"uniqueKey":"root_categories.items.[INDEX].sections.items.[INDEX].categories.items.[INDEX].properties.oneOf.0.items.[INDEX]","typeLabel":"object"},"uniqueKey":"root_categories.items.[INDEX].sections.items.[INDEX].categories.items.[INDEX].properties.oneOf.0","typeLabel":"object[]"},{"type":"null","description":"Condition properties for the category (up to 25). Set to null to disable conditions.","maxItems":25,"items":{"type":"object","description":"A condition property that can be configured per category to allow user-level customization.","properties":{"key":{"type":"string","description":"Unique identifier for the property. Must match the pattern [_a-z][a-z0-9_]+ and be at most 64 characters. Reference it in a workflow condition block as `$category.properties.key`. For example, to match a recipient's `role` subscription property against the category's `role` property: `$recipient.subscription.role == $category.properties.role`.","maxLength":64},"label":{"type":"string","description":"Optional Display label for the property to be shown to user inside the preference centre.","maxLength":256},"value_type":{"type":"string","description":"Data type of the property value","enum":["integer","string","string_choice","list_choice","string_dynamic","list_dynamic"]},"is_optional":{"type":"boolean","description":"Whether this property is optional. For optional property, default value is not required.","default":false},"choices":{"type":"array","description":"Available choices when value_type is `string_choice` or `list_choice`. Up to 25 choices. `string_choice` means single-select list and `list_choice` means multi-select list.","maxItems":25,"items":{"type":"object","properties":{"value":{"type":"string","description":"The underlying value of this choice. This is the value passed to the workflow when the choice is selected."},"label":{"type":"string","description":"Display label for the choice"}}}},"default_value":{"oneOf":[{"description":"Default value for the property. Data type depends on value_type — string for string/string_choice/string_dynamic, integer for integer, array of strings for list_choice/list_dynamic. Can be null."},{"description":"Default value for the property. Data type depends on value_type — string for string/string_choice/string_dynamic, integer for integer, array of strings for list_choice/list_dynamic. Can be null.","type":"null"}]},"dynamic_choices_key":{"type":"string","description":"Key path your UI will use to populate dynamic choices. Applicable for `string_dynamic` and `list_dynamic` value types."},"edit_policy":{"type":"string","description":"Whether the recipient can edit this property value. `Locked` means can't edit. Tenant can always edit irrespective of edit_policy.","enum":["locked","editable"]}}},"uniqueKey":"root_categories.items.[INDEX].sections.items.[INDEX].categories.items.[INDEX].properties.oneOf.1","typeLabel":"null"}],"uniqueKey":"root_categories.items.[INDEX].sections.items.[INDEX].categories.items.[INDEX].properties","typeLabel":"object[] | null"}},"uniqueKey":"root_categories.items.[INDEX].sections.items.[INDEX].categories.items.[INDEX]","typeLabel":"object"},"uniqueKey":"root_categories.items.[INDEX].sections.items.[INDEX].categories","typeLabel":"object[]"}},"uniqueKey":"root_categories.items.[INDEX].sections.items.[INDEX]","typeLabel":"object"},"uniqueKey":"root_categories.items.[INDEX].sections","typeLabel":"object[]"}},"uniqueKey":"root_categories.items.[INDEX]","typeLabel":"object"},"isRequired":true,"uniqueKey":"root_categories","typeLabel":"object[]"}},"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"root_categories":[{"sections":[{"name":"\u003cstring>","description":"\u003cstring>","tags":["\u003cstring>"],"categories":[{"name":"\u003cstring>","description":"\u003cstring>","default_mandatory_channels":[],"default_opt_in_channels":[],"tags":["\u003cstring>"],"is_commercial":true,"digest_schedule":{"enabled":true,"options":[{"id":"\u003cstring>","label":"\u003cstring>","interval":2,"time":{"default_value":"00:00"},"weekdays":{"default_value":[]},"monthdays":{"default_value":[{"pos":123}]},"dtstart":{"default_value":"2026-06-20T00:00:00Z"},"is_default":true}]},"properties":[{"key":"\u003cstring>","label":"\u003cstring>","is_optional":false,"choices":[{"value":"\u003cstring>","label":"\u003cstring>"}],"default_value":"\u003cunknown>","dynamic_choices_key":"\u003cstring>"}]}]}]}]}}},"exampleType":"generated"}},"exampleType":"generated"},"responses":{"e6fae279-6174-4de7-85ed-19070effd414":{"description":"Successfully created/updated preference category draft","content":{"application/json":{"schema":{"type":"object","properties":{"$schema":{"type":"string","description":"JSON schema reference for preference category structure","example":"https://schema.suprsend.com/preference_category/v1/schema.json","uniqueKey":"$schema","typeLabel":"string"},"root_categories":{"type":"array","description":"Array of root preference categories","items":{"type":"object","properties":{"root_category":{"type":"string","description":"The root category classification for the preference category","example":"system","uniqueKey":"root_categories.items.[INDEX].root_category","typeLabel":"string"},"sections":{"type":"array","description":"Array of sections within the preference category. Can be empty if not yet configured.","items":{"type":"object","properties":{"name":{"type":"string","description":"Name of the section","example":"Account Updates","uniqueKey":"root_categories.items.[INDEX].sections.items.[INDEX].name","typeLabel":"string"},"description":{"type":"string","description":"Description of what notifications this section covers","example":"Important account-related notifications","uniqueKey":"root_categories.items.[INDEX].sections.items.[INDEX].description","typeLabel":"string"},"tags":{"type":"array","description":"Tags to organize and filter sections. Use lowercase, hyphenated values.","items":{"type":"string","uniqueKey":"root_categories.items.[INDEX].sections.items.[INDEX].tags.items.[INDEX]","typeLabel":"string"},"uniqueKey":"root_categories.items.[INDEX].sections.items.[INDEX].tags","typeLabel":"string[]"},"categories":{"type":"array","description":"Array of categories within this section. Can be empty if not yet configured.","items":{"type":"object","properties":{"category":{"type":"string","description":"Unique identifier for the category","example":"password-reset","uniqueKey":"root_categories.items.[INDEX].sections.items.[INDEX].categories.items.[INDEX].category","typeLabel":"string"},"name":{"type":"string","description":"Display name for the category","example":"Password Reset","uniqueKey":"root_categories.items.[INDEX].sections.items.[INDEX].categories.items.[INDEX].name","typeLabel":"string"},"description":{"type":"string","description":"Description of what notifications this category covers","uniqueKey":"root_categories.items.[INDEX].sections.items.[INDEX].categories.items.[INDEX].description","typeLabel":"string"},"default_preference":{"type":"string","description":"Default preference setting for this category","enum":["opt_in","opt_out","cant_unsubscribe"],"example":"opt_in","uniqueKey":"root_categories.items.[INDEX].sections.items.[INDEX].categories.items.[INDEX].default_preference","typeLabel":"enum\u003cstring>"},"default_mandatory_channels":{"type":"array","description":"Channels that are mandatory for this category","items":{"type":"string","enum":["email","sms","whatsapp","androidpush","iospush","inbox","slack","webpush","ms_teams"],"uniqueKey":"root_categories.items.[INDEX].sections.items.[INDEX].categories.items.[INDEX].default_mandatory_channels.items.[INDEX]","typeLabel":"enum\u003cstring>"},"example":["email"],"uniqueKey":"root_categories.items.[INDEX].sections.items.[INDEX].categories.items.[INDEX].default_mandatory_channels","typeLabel":"enum\u003cstring>[]"},"default_opt_in_channels":{"oneOf":[{"type":"array","description":"These channels will only be opt_in when the default preference is `opt_in` or `cant_unsubscribe`. Other channels will be opt_out by default. If not set, all channels will be opt_in by default.","items":{"type":"string","enum":["email","sms","whatsapp","androidpush","iospush","inbox","slack","webpush","ms_teams"],"uniqueKey":"root_categories.items.[INDEX].sections.items.[INDEX].categories.items.[INDEX].default_opt_in_channels.oneOf.0.items.[INDEX]","typeLabel":"enum\u003cstring>"},"example":null,"uniqueKey":"root_categories.items.[INDEX].sections.items.[INDEX].categories.items.[INDEX].default_opt_in_channels.oneOf.0","typeLabel":"enum\u003cstring>[]"},{"type":"null","description":"These channels will only be opt_in when the default preference is `opt_in` or `cant_unsubscribe`. Other channels will be opt_out by default. If not set, all channels will be opt_in by default.","items":{"type":"string","enum":["email","sms","whatsapp","androidpush","iospush","inbox","slack","webpush","ms_teams"]},"example":null,"uniqueKey":"root_categories.items.[INDEX].sections.items.[INDEX].categories.items.[INDEX].default_opt_in_channels.oneOf.1","typeLabel":"null"}],"uniqueKey":"root_categories.items.[INDEX].sections.items.[INDEX].categories.items.[INDEX].default_opt_in_channels","typeLabel":"enum\u003cstring>[] | null"},"tags":{"type":"array","description":"Tags to organize and filter categories. Use lowercase, hyphenated values (e.g., \"user-management\", \"payment-alerts\").","items":{"type":"string","pattern":"^[a-z0-9]+(-[a-z0-9]+)*$","uniqueKey":"root_categories.items.[INDEX].sections.items.[INDEX].categories.items.[INDEX].tags.items.[INDEX]","typeLabel":"string"},"uniqueKey":"root_categories.items.[INDEX].sections.items.[INDEX].categories.items.[INDEX].tags","typeLabel":"string[]"},"is_commercial":{"type":"boolean","description":"Whether emails sent in this category carry one-click unsubscribe headers. Returned as the resolved value, so a category saved without a value shows its root-category default: `true` for promotional, `false` for transactional and system. See [Enabling one-click unsubscribe for email](/docs/managing-notification-categories#enabling-one-click-unsubscribe-for-email).","example":true,"uniqueKey":"root_categories.items.[INDEX].sections.items.[INDEX].categories.items.[INDEX].is_commercial","typeLabel":"boolean"},"digest_schedule":{"oneOf":[{"type":"object","description":"Digest schedule configuration for batching notifications. Set enabled to `false` to disable digest or don't pass this key. Digest schedule will only apply if you add digest node in the workflow linked to this category and set the `schedule_type` in node config to `category_digest_schedule`.","properties":{"enabled":{"type":"boolean","description":"Whether you want to give digest options against this category.","uniqueKey":"root_categories.items.[INDEX].sections.items.[INDEX].categories.items.[INDEX].digest_schedule.oneOf.0.enabled","typeLabel":"boolean"},"options":{"type":"array","description":"Array of digest schedule options (up to 10). Exactly one option must have `is_default` set to true.","maxItems":10,"items":{"type":"object","properties":{"id":{"type":"string","description":"Unique identifier for the option. Max 64 characters, allowed characters: [a-z0-9_-]. id is generated from label if not set.","maxLength":64,"uniqueKey":"root_categories.items.[INDEX].sections.items.[INDEX].categories.items.[INDEX].digest_schedule.oneOf.0.options.items.[INDEX].id","typeLabel":"string"},"label":{"type":"string","description":"Display label to be shown to user for the option.","maxLength":256,"uniqueKey":"root_categories.items.[INDEX].sections.items.[INDEX].categories.items.[INDEX].digest_schedule.oneOf.0.options.items.[INDEX].label","typeLabel":"string"},"frequency":{"type":"string","description":"Frequency of the digest schedule. Instant means the notification will be sent immediately without batching. You can also use this in workflow branch to take users through different flow basis on the frequency.","enum":["instantly","minutely","hourly","daily","weekly","weekly_mo2fr","monthly"],"uniqueKey":"root_categories.items.[INDEX].sections.items.[INDEX].categories.items.[INDEX].digest_schedule.oneOf.0.options.items.[INDEX].frequency","typeLabel":"enum\u003cstring>"},"interval":{"type":"integer","description":"Interval multiplier for the frequency (e.g., interval=2 with frequency=weekly means every 2 weeks). Default value = 1.","minimum":1,"uniqueKey":"root_categories.items.[INDEX].sections.items.[INDEX].categories.items.[INDEX].digest_schedule.oneOf.0.options.items.[INDEX].interval","typeLabel":"integer"},"time":{"type":"object","description":"For `daily`, `weekly`, and `monthly` frequencies, this is the exact time the notification is sent. For `hourly` and `minutely` (interval > 1) frequencies, it's the anchor time from which subsequent intervals are calculated. Applies to all frequencies except `instantly` and `minutely` with interval=1.","properties":{"edit_policy":{"type":"string","enum":["locked","editable"],"description":"Whether the recipient can edit this value. `Locked` means can't edit. Tenant can always edit irrespective of edit_policy.","uniqueKey":"root_categories.items.[INDEX].sections.items.[INDEX].categories.items.[INDEX].digest_schedule.oneOf.0.options.items.[INDEX].time.edit_policy","typeLabel":"enum\u003cstring>"},"default_value":{"type":"string","description":"Default time in HH:MM format (24-hour)","example":"00:00","uniqueKey":"root_categories.items.[INDEX].sections.items.[INDEX].categories.items.[INDEX].digest_schedule.oneOf.0.options.items.[INDEX].time.default_value","typeLabel":"string"}},"uniqueKey":"root_categories.items.[INDEX].sections.items.[INDEX].categories.items.[INDEX].digest_schedule.oneOf.0.options.items.[INDEX].time","typeLabel":"object"},"weekdays":{"type":"object","description":"Weekday configuration. Applicable for `weekly` and `weekly_mo2fr` frequencies. For `weekly_mo2fr`, edit_policy is always `locked` with weekdays Monday through Friday.","properties":{"edit_policy":{"type":"string","enum":["locked","editable"],"description":"Whether the recipient can edit this value. `Locked` means can't edit. Tenant can always edit irrespective of edit_policy.","uniqueKey":"root_categories.items.[INDEX].sections.items.[INDEX].categories.items.[INDEX].digest_schedule.oneOf.0.options.items.[INDEX].weekdays.edit_policy","typeLabel":"enum\u003cstring>"},"default_value":{"type":"array","description":"Array of weekday codes","items":{"type":"string","enum":["su","mo","tu","we","th","fr","sa"],"uniqueKey":"root_categories.items.[INDEX].sections.items.[INDEX].categories.items.[INDEX].digest_schedule.oneOf.0.options.items.[INDEX].weekdays.default_value.items.[INDEX]","typeLabel":"enum\u003cstring>"},"uniqueKey":"root_categories.items.[INDEX].sections.items.[INDEX].categories.items.[INDEX].digest_schedule.oneOf.0.options.items.[INDEX].weekdays.default_value","typeLabel":"enum\u003cstring>[]"}},"uniqueKey":"root_categories.items.[INDEX].sections.items.[INDEX].categories.items.[INDEX].digest_schedule.oneOf.0.options.items.[INDEX].weekdays","typeLabel":"object"},"monthdays":{"type":"object","description":"Monthday configuration. Applicable for `monthly` frequency.","properties":{"edit_policy":{"type":"string","enum":["locked","editable"],"description":"Whether the recipient can edit this value. `Locked` means can't edit. Tenant can always edit irrespective of edit_policy.","uniqueKey":"root_categories.items.[INDEX].sections.items.[INDEX].categories.items.[INDEX].digest_schedule.oneOf.0.options.items.[INDEX].monthdays.edit_policy","typeLabel":"enum\u003cstring>"},"default_value":{"type":"array","description":"Array of monthday objects specifying which days of the month","items":{"type":"object","properties":{"pos":{"type":"integer","description":"Position of the day in the month (1-based)","uniqueKey":"root_categories.items.[INDEX].sections.items.[INDEX].categories.items.[INDEX].digest_schedule.oneOf.0.options.items.[INDEX].monthdays.default_value.items.[INDEX].pos","typeLabel":"integer"},"day":{"type":"string","description":"Optional day of the week. If omitted, refers to the calendar day at that position.","enum":["su","mo","tu","we","th","fr","sa"],"uniqueKey":"root_categories.items.[INDEX].sections.items.[INDEX].categories.items.[INDEX].digest_schedule.oneOf.0.options.items.[INDEX].monthdays.default_value.items.[INDEX].day","typeLabel":"enum\u003cstring>"}},"uniqueKey":"root_categories.items.[INDEX].sections.items.[INDEX].categories.items.[INDEX].digest_schedule.oneOf.0.options.items.[INDEX].monthdays.default_value.items.[INDEX]","typeLabel":"object"},"uniqueKey":"root_categories.items.[INDEX].sections.items.[INDEX].categories.items.[INDEX].digest_schedule.oneOf.0.options.items.[INDEX].monthdays.default_value","typeLabel":"object[]"}},"uniqueKey":"root_categories.items.[INDEX].sections.items.[INDEX].categories.items.[INDEX].digest_schedule.oneOf.0.options.items.[INDEX].monthdays","typeLabel":"object"},"dtstart":{"type":"object","description":"Start date-time configuration. Only applicable for `daily` frequency with interval > 1.","properties":{"edit_policy":{"type":"string","enum":["locked","editable"],"description":"Whether the recipient can edit this value. `Locked` means can't edit. Tenant can always edit irrespective of edit_policy.","uniqueKey":"root_categories.items.[INDEX].sections.items.[INDEX].categories.items.[INDEX].digest_schedule.oneOf.0.options.items.[INDEX].dtstart.edit_policy","typeLabel":"enum\u003cstring>"},"default_value":{"type":"string","format":"date-time","description":"Start date-time in ISO 8601 format","example":"2026-06-20T00:00:00Z","uniqueKey":"root_categories.items.[INDEX].sections.items.[INDEX].categories.items.[INDEX].digest_schedule.oneOf.0.options.items.[INDEX].dtstart.default_value","typeLabel":"string\u003cdate-time>"}},"uniqueKey":"root_categories.items.[INDEX].sections.items.[INDEX].categories.items.[INDEX].digest_schedule.oneOf.0.options.items.[INDEX].dtstart","typeLabel":"object"},"is_default":{"type":"boolean","description":"Whether this option is the default selection. Exactly one option in the array must be set to true.","uniqueKey":"root_categories.items.[INDEX].sections.items.[INDEX].categories.items.[INDEX].digest_schedule.oneOf.0.options.items.[INDEX].is_default","typeLabel":"boolean"}},"uniqueKey":"root_categories.items.[INDEX].sections.items.[INDEX].categories.items.[INDEX].digest_schedule.oneOf.0.options.items.[INDEX]","typeLabel":"object"},"uniqueKey":"root_categories.items.[INDEX].sections.items.[INDEX].categories.items.[INDEX].digest_schedule.oneOf.0.options","typeLabel":"object[]"}},"uniqueKey":"root_categories.items.[INDEX].sections.items.[INDEX].categories.items.[INDEX].digest_schedule.oneOf.0","typeLabel":"object"},{"type":"null","description":"Digest schedule configuration for batching notifications. Set enabled to `false` to disable digest or don't pass this key. Digest schedule will only apply if you add digest node in the workflow linked to this category and set the `schedule_type` in node config to `category_digest_schedule`.","properties":{"enabled":{"type":"boolean","description":"Whether you want to give digest options against this category."},"options":{"type":"array","description":"Array of digest schedule options (up to 10). Exactly one option must have `is_default` set to true.","maxItems":10,"items":{"type":"object","properties":{"id":{"type":"string","description":"Unique identifier for the option. Max 64 characters, allowed characters: [a-z0-9_-]. id is generated from label if not set.","maxLength":64},"label":{"type":"string","description":"Display label to be shown to user for the option.","maxLength":256},"frequency":{"type":"string","description":"Frequency of the digest schedule. Instant means the notification will be sent immediately without batching. You can also use this in workflow branch to take users through different flow basis on the frequency.","enum":["instantly","minutely","hourly","daily","weekly","weekly_mo2fr","monthly"]},"interval":{"type":"integer","description":"Interval multiplier for the frequency (e.g., interval=2 with frequency=weekly means every 2 weeks). Default value = 1.","minimum":1},"time":{"type":"object","description":"For `daily`, `weekly`, and `monthly` frequencies, this is the exact time the notification is sent. For `hourly` and `minutely` (interval > 1) frequencies, it's the anchor time from which subsequent intervals are calculated. Applies to all frequencies except `instantly` and `minutely` with interval=1.","properties":{"edit_policy":{"type":"string","enum":["locked","editable"],"description":"Whether the recipient can edit this value. `Locked` means can't edit. Tenant can always edit irrespective of edit_policy."},"default_value":{"type":"string","description":"Default time in HH:MM format (24-hour)","example":"00:00"}}},"weekdays":{"type":"object","description":"Weekday configuration. Applicable for `weekly` and `weekly_mo2fr` frequencies. For `weekly_mo2fr`, edit_policy is always `locked` with weekdays Monday through Friday.","properties":{"edit_policy":{"type":"string","enum":["locked","editable"],"description":"Whether the recipient can edit this value. `Locked` means can't edit. Tenant can always edit irrespective of edit_policy."},"default_value":{"type":"array","description":"Array of weekday codes","items":{"type":"string","enum":["su","mo","tu","we","th","fr","sa"]}}}},"monthdays":{"type":"object","description":"Monthday configuration. Applicable for `monthly` frequency.","properties":{"edit_policy":{"type":"string","enum":["locked","editable"],"description":"Whether the recipient can edit this value. `Locked` means can't edit. Tenant can always edit irrespective of edit_policy."},"default_value":{"type":"array","description":"Array of monthday objects specifying which days of the month","items":{"type":"object","properties":{"pos":{"type":"integer","description":"Position of the day in the month (1-based)"},"day":{"type":"string","description":"Optional day of the week. If omitted, refers to the calendar day at that position.","enum":["su","mo","tu","we","th","fr","sa"]}}}}}},"dtstart":{"type":"object","description":"Start date-time configuration. Only applicable for `daily` frequency with interval > 1.","properties":{"edit_policy":{"type":"string","enum":["locked","editable"],"description":"Whether the recipient can edit this value. `Locked` means can't edit. Tenant can always edit irrespective of edit_policy."},"default_value":{"type":"string","format":"date-time","description":"Start date-time in ISO 8601 format","example":"2026-06-20T00:00:00Z"}}},"is_default":{"type":"boolean","description":"Whether this option is the default selection. Exactly one option in the array must be set to true."}}}}},"uniqueKey":"root_categories.items.[INDEX].sections.items.[INDEX].categories.items.[INDEX].digest_schedule.oneOf.1","typeLabel":"null"}],"uniqueKey":"root_categories.items.[INDEX].sections.items.[INDEX].categories.items.[INDEX].digest_schedule","typeLabel":"object | null"},"properties":{"oneOf":[{"type":"array","description":"Condition properties for the category (up to 25). Set to null to disable conditions.","maxItems":25,"items":{"type":"object","description":"A condition property that can be configured per category to allow user-level customization.","properties":{"key":{"type":"string","description":"Unique identifier for the property. Must match the pattern [_a-z][a-z0-9_]+ and be at most 64 characters. Reference it in a workflow condition block as `$category.properties.key`. For example, to match a recipient's `role` subscription property against the category's `role` property: `$recipient.subscription.role == $category.properties.role`.","maxLength":64,"uniqueKey":"root_categories.items.[INDEX].sections.items.[INDEX].categories.items.[INDEX].properties.oneOf.0.items.[INDEX].key","typeLabel":"string"},"label":{"type":"string","description":"Optional Display label for the property to be shown to user inside the preference centre.","maxLength":256,"uniqueKey":"root_categories.items.[INDEX].sections.items.[INDEX].categories.items.[INDEX].properties.oneOf.0.items.[INDEX].label","typeLabel":"string"},"value_type":{"type":"string","description":"Data type of the property value","enum":["integer","string","string_choice","list_choice","string_dynamic","list_dynamic"],"uniqueKey":"root_categories.items.[INDEX].sections.items.[INDEX].categories.items.[INDEX].properties.oneOf.0.items.[INDEX].value_type","typeLabel":"enum\u003cstring>"},"is_optional":{"type":"boolean","description":"Whether this property is optional. For optional property, default value is not required.","default":false,"uniqueKey":"root_categories.items.[INDEX].sections.items.[INDEX].categories.items.[INDEX].properties.oneOf.0.items.[INDEX].is_optional","typeLabel":"boolean"},"choices":{"type":"array","description":"Available choices when value_type is `string_choice` or `list_choice`. Up to 25 choices. `string_choice` means single-select list and `list_choice` means multi-select list.","maxItems":25,"items":{"type":"object","properties":{"value":{"type":"string","description":"The underlying value of this choice. This is the value passed to the workflow when the choice is selected.","uniqueKey":"root_categories.items.[INDEX].sections.items.[INDEX].categories.items.[INDEX].properties.oneOf.0.items.[INDEX].choices.items.[INDEX].value","typeLabel":"string"},"label":{"type":"string","description":"Display label for the choice","uniqueKey":"root_categories.items.[INDEX].sections.items.[INDEX].categories.items.[INDEX].properties.oneOf.0.items.[INDEX].choices.items.[INDEX].label","typeLabel":"string"}},"uniqueKey":"root_categories.items.[INDEX].sections.items.[INDEX].categories.items.[INDEX].properties.oneOf.0.items.[INDEX].choices.items.[INDEX]","typeLabel":"object"},"uniqueKey":"root_categories.items.[INDEX].sections.items.[INDEX].categories.items.[INDEX].properties.oneOf.0.items.[INDEX].choices","typeLabel":"object[]"},"default_value":{"oneOf":[{"description":"Default value for the property. Data type depends on value_type — string for string/string_choice/string_dynamic, integer for integer, array of strings for list_choice/list_dynamic. Can be null.","uniqueKey":"root_categories.items.[INDEX].sections.items.[INDEX].categories.items.[INDEX].properties.oneOf.0.items.[INDEX].default_value.oneOf.0","typeLabel":"any"},{"description":"Default value for the property. Data type depends on value_type — string for string/string_choice/string_dynamic, integer for integer, array of strings for list_choice/list_dynamic. Can be null.","type":"null","uniqueKey":"root_categories.items.[INDEX].sections.items.[INDEX].categories.items.[INDEX].properties.oneOf.0.items.[INDEX].default_value.oneOf.1","typeLabel":"null"}],"uniqueKey":"root_categories.items.[INDEX].sections.items.[INDEX].categories.items.[INDEX].properties.oneOf.0.items.[INDEX].default_value","typeLabel":"any | null"},"dynamic_choices_key":{"type":"string","description":"Key path your UI will use to populate dynamic choices. Applicable for `string_dynamic` and `list_dynamic` value types.","uniqueKey":"root_categories.items.[INDEX].sections.items.[INDEX].categories.items.[INDEX].properties.oneOf.0.items.[INDEX].dynamic_choices_key","typeLabel":"string"},"edit_policy":{"type":"string","description":"Whether the recipient can edit this property value. `Locked` means can't edit. Tenant can always edit irrespective of edit_policy.","enum":["locked","editable"],"uniqueKey":"root_categories.items.[INDEX].sections.items.[INDEX].categories.items.[INDEX].properties.oneOf.0.items.[INDEX].edit_policy","typeLabel":"enum\u003cstring>"}},"uniqueKey":"root_categories.items.[INDEX].sections.items.[INDEX].categories.items.[INDEX].properties.oneOf.0.items.[INDEX]","typeLabel":"object"},"uniqueKey":"root_categories.items.[INDEX].sections.items.[INDEX].categories.items.[INDEX].properties.oneOf.0","typeLabel":"object[]"},{"type":"null","description":"Condition properties for the category (up to 25). Set to null to disable conditions.","maxItems":25,"items":{"type":"object","description":"A condition property that can be configured per category to allow user-level customization.","properties":{"key":{"type":"string","description":"Unique identifier for the property. Must match the pattern [_a-z][a-z0-9_]+ and be at most 64 characters. Reference it in a workflow condition block as `$category.properties.key`. For example, to match a recipient's `role` subscription property against the category's `role` property: `$recipient.subscription.role == $category.properties.role`.","maxLength":64},"label":{"type":"string","description":"Optional Display label for the property to be shown to user inside the preference centre.","maxLength":256},"value_type":{"type":"string","description":"Data type of the property value","enum":["integer","string","string_choice","list_choice","string_dynamic","list_dynamic"]},"is_optional":{"type":"boolean","description":"Whether this property is optional. For optional property, default value is not required.","default":false},"choices":{"type":"array","description":"Available choices when value_type is `string_choice` or `list_choice`. Up to 25 choices. `string_choice` means single-select list and `list_choice` means multi-select list.","maxItems":25,"items":{"type":"object","properties":{"value":{"type":"string","description":"The underlying value of this choice. This is the value passed to the workflow when the choice is selected."},"label":{"type":"string","description":"Display label for the choice"}}}},"default_value":{"oneOf":[{"description":"Default value for the property. Data type depends on value_type — string for string/string_choice/string_dynamic, integer for integer, array of strings for list_choice/list_dynamic. Can be null."},{"description":"Default value for the property. Data type depends on value_type — string for string/string_choice/string_dynamic, integer for integer, array of strings for list_choice/list_dynamic. Can be null.","type":"null"}]},"dynamic_choices_key":{"type":"string","description":"Key path your UI will use to populate dynamic choices. Applicable for `string_dynamic` and `list_dynamic` value types."},"edit_policy":{"type":"string","description":"Whether the recipient can edit this property value. `Locked` means can't edit. Tenant can always edit irrespective of edit_policy.","enum":["locked","editable"]}}},"uniqueKey":"root_categories.items.[INDEX].sections.items.[INDEX].categories.items.[INDEX].properties.oneOf.1","typeLabel":"null"}],"uniqueKey":"root_categories.items.[INDEX].sections.items.[INDEX].categories.items.[INDEX].properties","typeLabel":"object[] | null"}},"uniqueKey":"root_categories.items.[INDEX].sections.items.[INDEX].categories.items.[INDEX]","typeLabel":"object"},"uniqueKey":"root_categories.items.[INDEX].sections.items.[INDEX].categories","typeLabel":"object[]"}},"uniqueKey":"root_categories.items.[INDEX].sections.items.[INDEX]","typeLabel":"object"},"uniqueKey":"root_categories.items.[INDEX].sections","typeLabel":"object[]"}},"uniqueKey":"root_categories.items.[INDEX]","typeLabel":"object"},"uniqueKey":"root_categories","typeLabel":"object[]"},"status":{"type":"string","description":"Current status of the preference category","enum":["draft","active"],"example":"draft","uniqueKey":"status","typeLabel":"enum\u003cstring>"},"version_no":{"type":"integer","description":"Version number field as an identifier to track the version","example":3,"uniqueKey":"version_no","typeLabel":"integer"},"commit_message":{"type":"string","description":"Commit message describing the changes that were made","example":null,"uniqueKey":"commit_message","typeLabel":"string"},"committed_at":{"type":"string","format":"date-time","description":"Timestamp when the changes were committed","example":null,"uniqueKey":"committed_at","typeLabel":"string\u003cdate-time>"},"validation_result":{"type":"object","description":"Result of validating the preference category","properties":{"is_valid":{"type":"boolean","description":"true if the preference category is valid, false if there are errors","example":true,"uniqueKey":"validation_result.is_valid","typeLabel":"boolean"},"errors":{"type":"array","description":"Array of error messages when validation fails","items":{"type":"string","uniqueKey":"validation_result.errors.items.[INDEX]","typeLabel":"string"},"uniqueKey":"validation_result.errors","typeLabel":"string[]"}},"uniqueKey":"validation_result","typeLabel":"object"},"commit_result":{"type":"object","description":"Present only when `commit=true` is passed. `is_committed` is false if validation failed or the commit raised an error; the draft is still saved.","properties":{"is_committed":{"type":"boolean","uniqueKey":"commit_result.is_committed","typeLabel":"boolean"},"errors":{"type":"array","items":{"type":"string","uniqueKey":"commit_result.errors.items.[INDEX]","typeLabel":"string"},"uniqueKey":"commit_result.errors","typeLabel":"string[]"}},"uniqueKey":"commit_result","typeLabel":"object"}},"uniqueKey":"","typeLabel":"object"},"example":{"$schema":"https://schema.suprsend.com/preference_category/v1/schema.json","root_categories":[{"root_category":"system","sections":[]},{"root_category":"transactional","sections":[{"name":"Task Updates","description":null,"tags":null,"categories":[{"category":"tagged-to-me","name":"Tagged to Me","description":"Status Update or mentions on tasks assigned by me or tagged to me","default_preference":"opt_in","is_commercial":false,"default_mandatory_channels":null,"default_opt_in_channels":null,"tags":null,"digest_schedule":{"enabled":true,"options":[{"id":"instant","label":"Instant","frequency":"instantly","is_default":true},{"id":"daily-digest","label":"Daily at 9:00 AM","frequency":"daily","interval":1,"time":{"edit_policy":"editable","default_value":"09:00"},"is_default":false}]},"properties":[{"key":"priority","label":"Minimum priority","value_type":"string_choice","is_optional":false,"choices":[{"value":"low","label":"Low"},{"value":"medium","label":"Medium"},{"value":"high","label":"High"}],"default_value":"high","edit_policy":"editable"}]}]}]},{"root_category":"promotional","sections":[{"name":"Product Updates","description":null,"tags":null,"categories":[{"category":"newsletter","name":"Newsletter","description":null,"default_preference":"opt_out","is_commercial":true,"default_mandatory_channels":null,"default_opt_in_channels":null,"tags":null,"digest_schedule":null,"properties":null}]}]}],"version_no":3,"status":"draft","commit_message":null,"committed_at":null,"validation_result":{"is_valid":true}},"examples":{"Example":{"title":"Example","value":{"$schema":"https://schema.suprsend.com/preference_category/v1/schema.json","root_categories":[{"root_category":"system","sections":[]},{"root_category":"transactional","sections":[{"name":"Task Updates","description":null,"tags":null,"categories":[{"category":"tagged-to-me","name":"Tagged to Me","description":"Status Update or mentions on tasks assigned by me or tagged to me","default_preference":"opt_in","is_commercial":false,"default_mandatory_channels":null,"default_opt_in_channels":null,"tags":null,"digest_schedule":{"enabled":true,"options":[{"id":"instant","label":"Instant","frequency":"instantly","is_default":true},{"id":"daily-digest","label":"Daily at 9:00 AM","frequency":"daily","interval":1,"time":{"edit_policy":"editable","default_value":"09:00"},"is_default":false}]},"properties":[{"key":"priority","label":"Minimum priority","value_type":"string_choice","is_optional":false,"choices":[{"value":"low","label":"Low"},{"value":"medium","label":"Medium"},{"value":"high","label":"High"}],"default_value":"high","edit_policy":"editable"}]}]}]},{"root_category":"promotional","sections":[{"name":"Product Updates","description":null,"tags":null,"categories":[{"category":"newsletter","name":"Newsletter","description":null,"default_preference":"opt_out","is_commercial":true,"default_mandatory_channels":null,"default_opt_in_channels":null,"tags":null,"digest_schedule":null,"properties":null}]}]}],"version_no":3,"status":"draft","commit_message":null,"committed_at":null,"validation_result":{"is_valid":true}}}},"exampleType":"examples"}},"exampleType":"examples"},"58c9f759-504b-4067-bf35-75751dbeb1d1":{"description":"Unauthorized (missing, invalid or disabled service token)","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"integer","example":401,"uniqueKey":"code","typeLabel":"integer"},"message":{"type":"string","example":"Unauthorized","uniqueKey":"message","typeLabel":"string"}},"uniqueKey":"","typeLabel":"object"},"example":{"code":401,"message":"Unauthorized"},"examples":{"Example":{"title":"Example","value":{"code":401,"message":"Unauthorized"}}},"exampleType":"examples"}},"exampleType":"examples"},"60d2405b-41cf-4d7c-a7d0-fbdf9e70de24":{"description":"Workspace not found","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"integer","example":404,"uniqueKey":"code","typeLabel":"integer"},"message":{"type":"string","example":"workspace not found for slug/uid: workspace","uniqueKey":"message","typeLabel":"string"}},"uniqueKey":"","typeLabel":"object"},"example":{"code":404,"message":"workspace not found for slug/uid: workspace"},"examples":{"Example":{"title":"Example","value":{"code":404,"message":"workspace not found for slug/uid: workspace"}}},"exampleType":"examples"}},"exampleType":"examples"}},"security":{"38d6497d-a421-4920-931a-b26f356d04bc":{"ServiceTokenAuth":{"type":"apiKey","in":"header","name":"Authorization","description":"Pass as `Authorization: ServiceToken \u003ctoken>`. You can get Service Token from [SuprSend dashboard -> Account Settings -> Service Tokens](https://app.suprsend.com/en/account-settings/service-tokens) section.","scopes":[],"schemeName":"ServiceTokenAuth"}}},"servers":{"17741e5d-8062-4ebe-8777-bb570bda60e7":{"url":"https://management-api.suprsend.com"}},"processedSecurityOptions":[{"schemes":[{"scheme":{"type":"apiKey","in":"header","name":"Authorization","description":"Pass as `Authorization: ServiceToken \u003ctoken>`. You can get Service Token from [SuprSend dashboard -> Account Settings -> Service Tokens](https://app.suprsend.com/en/account-settings/service-tokens) section.","scopes":[],"schemeName":"ServiceTokenAuth"},"schema":{"title":"Authorization","type":"string","description":"Pass as `Authorization: ServiceToken \u003ctoken>`. You can get Service Token from [SuprSend dashboard -> Account Settings -> Service Tokens](https://app.suprsend.com/en/account-settings/service-tokens) section.","isRequired":true,"typeLabel":"string","deprecated":false},"schemeName":"ServiceTokenAuth","name":"Authorization"}],"title":"ServiceTokenAuth"}]},"originalFileLocation":"openapi.yaml"},"subdomain":"suprsend","siteName":"SuprSend: API-first notification infrastructure","title":"Create or Update Preference Category - SuprSend: API-first notification infrastructure","relatedPagesConfig":{"enabled":true,"limit":5,"mode":"automatic"},"navMaps":{"firstHrefInVersion":{},"firstHrefInLanguage":{}},"lastModified":"2026-01-27T06:01:25.547Z","originalFileLocation":"reference/create-update-category.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=\"Use this API to set preference categories to be used in workflow or to show on user preference page.\">\u003cmeta data-mint-head name=\"application-name\" content=\"SuprSend: API-first notification infrastructure\">\u003cmeta data-mint-head name=\"generator\" content=\"Mintlify\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/suprsend/FnIDjx0xTYX1D8EZ/_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/suprsend/FnIDjx0xTYX1D8EZ/_generated/favicon/apple-touch-icon.png\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/suprsend/FnIDjx0xTYX1D8EZ/_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/suprsend/FnIDjx0xTYX1D8EZ/_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/suprsend/FnIDjx0xTYX1D8EZ/_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/suprsend/FnIDjx0xTYX1D8EZ/_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/suprsend/FnIDjx0xTYX1D8EZ/_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/suprsend/FnIDjx0xTYX1D8EZ/_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/suprsend/FnIDjx0xTYX1D8EZ/_generated/favicon-dark/favicon.ico\" media=\"(prefers-color-scheme: dark)\">\u003cmeta data-mint-head property=\"og:title\" content=\"Create or Update Preference Category - SuprSend: API-first notification infrastructure\">\u003cmeta data-mint-head property=\"og:description\" content=\"Use this API to set preference categories to be used in workflow or to show on user preference page.\">\u003cmeta data-mint-head property=\"og:site_name\" content=\"SuprSend: API-first notification infrastructure\">\u003cmeta data-mint-head property=\"og:url\" content=\"https://docs.suprsend.com/reference/create-update-category\">\u003cmeta data-mint-head property=\"og:type\" content=\"website\">\u003cmeta data-mint-head property=\"og:image\" content=\"https://suprsend.mintlify.site/_mintlify/api/og/v2?division=CATEGORIES\u0026amp;title=Create+or+Update+Preference+Category\u0026amp;description=Use+this+API+to+set+preference+categories+to+be+used+in+workflow+or+to+show+on+user+preference+page.\u0026amp;theme=77e430d508312c14f721c90a\u0026amp;signature=aedb82d8fe50259ded8c951c30497c41b3e96ca726c8708dbbe2deabdbe086e5\">\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=\"Create or Update Preference Category - SuprSend: API-first notification infrastructure\">\u003cmeta data-mint-head name=\"twitter:description\" content=\"Use this API to set preference categories to be used in workflow or to show on user preference page.\">\u003cmeta data-mint-head name=\"twitter:image\" content=\"https://suprsend.mintlify.site/_mintlify/api/og/v2?division=CATEGORIES\u0026amp;title=Create+or+Update+Preference+Category\u0026amp;description=Use+this+API+to+set+preference+categories+to+be+used+in+workflow+or+to+show+on+user+preference+page.\u0026amp;theme=77e430d508312c14f721c90a\u0026amp;signature=aedb82d8fe50259ded8c951c30497c41b3e96ca726c8708dbbe2deabdbe086e5\">\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/suprsend/FnIDjx0xTYX1D8EZ/_generated/favicon/browserconfig.xml\">\u003cmeta data-mint-head name=\"apple-mobile-web-app-title\" content=\"SuprSend: API-first notification infrastructure\">\u003cmeta data-mint-head name=\"msapplication-TileColor\" content=\"#2E70E8\">\u003clink data-mint-head rel=\"canonical\" href=\"https://docs.suprsend.com/reference/create-update-category\">\u003clink data-mint-head rel=\"alternate\" type=\"application/xml\" href=\"/sitemap.xml\">\u003clink data-mint-head rel=\"alternate\" type=\"text/markdown\" href=\"/reference/create-update-category.md\">\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@graph\":[{\"@type\":\"Organization\",\"@id\":\"https://docs.suprsend.com/#organization\",\"name\":\"SuprSend: API-first notification infrastructure\",\"url\":\"https://docs.suprsend.com\",\"logo\":{\"@type\":\"ImageObject\",\"url\":\"https://mintcdn.com/suprsend/CMaQBA3E8wM1DyFj/images/suprsend-logo.svg?fit=max\u0026auto=format\u0026n=CMaQBA3E8wM1DyFj\u0026q=85\u0026s=f325b9764c629a0b488476db369b8d47\"}},{\"@type\":\"WebSite\",\"@id\":\"https://docs.suprsend.com#website\",\"name\":\"SuprSend: API-first notification infrastructure\",\"url\":\"https://docs.suprsend.com\",\"publisher\":{\"@id\":\"https://docs.suprsend.com/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https://docs.suprsend.com/reference/create-update-category#webpage\",\"url\":\"https://docs.suprsend.com/reference/create-update-category\",\"name\":\"Create or Update Preference Category\",\"description\":\"Use this API to set preference categories to be used in workflow or to show on user preference page.\",\"dateModified\":\"2026-01-27T06:01:25.547Z\",\"isPartOf\":{\"@id\":\"https://docs.suprsend.com#website\"},\"breadcrumb\":{\"@id\":\"https://docs.suprsend.com/reference/create-update-category#breadcrumb\"}},{\"@type\":\"BreadcrumbList\",\"@id\":\"https://docs.suprsend.com/reference/create-update-category#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"CATEGORIES\",\"item\":\"https://docs.suprsend.com/reference/get-category\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Create or Update Preference Category\",\"item\":\"https://docs.suprsend.com/reference/create-update-category\"}]},{\"@type\":[\"TechArticle\",\"APIReference\"],\"@id\":\"https://docs.suprsend.com/reference/create-update-category#apireference\",\"headline\":\"Create or Update Preference Category\",\"name\":\"Create or Update Preference Category\",\"description\":\"Use this API to set preference categories to be used in workflow or to show on user preference page.\",\"url\":\"https://docs.suprsend.com/reference/create-update-category\",\"mainEntityOfPage\":{\"@id\":\"https://docs.suprsend.com/reference/create-update-category#webpage\"},\"dateModified\":\"2026-01-27T06:01:25.547Z\",\"publisher\":{\"@id\":\"https://docs.suprsend.com/#organization\"},\"isPartOf\":{\"@id\":\"https://docs.suprsend.com#website\"}}]}\u003c/script>\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@type\":\"WebSite\",\"name\":\"SuprSend: API-first notification infrastructure\",\"creator\":{\"@type\":\"Organization\",\"name\":\"Mintlify\",\"url\":\"https://mintlify.com\"}}\u003c/script>","siteName":"SuprSend: API-first notification infrastructure","nav":{"global":{"anchors":[{"anchor":"Community","icon":"slack","color":{"light":"#f59f0b","dark":"#f59f0b"},"href":"https://join.slack.com/t/suprsendcommunity/shared_invite/zt-3932rw936-XNWY1RC8bsffh4if4ZyoXQ"},{"anchor":"Trust Center","icon":"shield-halved","color":{"light":"#2564eb","dark":"#2564eb"},"href":"https://trust.suprsend.com"},{"anchor":"Platform Status","icon":"wifi","color":{"light":"#2564eb","dark":"#2564eb"},"href":"https://status.suprsend.com"},{"anchor":"Postman Collection","icon":"code","color":{"light":"#2564eb","dark":"#2564eb"},"href":"https://www.postman.com/suprsend/suprsend/collection/16bdmwa/suprsend-apis"}]},"tabs":[{"tab":"Documentation","pages":[{"title":"Documentation","href":"/docs/what-is-suprsend"}]},{"tab":"Guides","pages":[{"title":"Guides","href":"/docs/guides/modelling-customers-workspace-vs-tenant"}]},{"tab":"API Reference","pages":[{"title":"API Reference","href":"/reference/overview"}]},{"tab":"Management API","groups":[{"group":"API Reference","pages":[{"title":"Overview","href":"/docs/management-api-overview"},{"title":"Authentication","href":"/reference/service-token-authentication"},{"title":"Errors","href":"/docs/management-api-errors"}]},{"group":"WORKSPACE \u0026 AUTH KEYS","pages":[{"group":"Workspaces","pages":[{"title":"List Workspaces","openapi":"GET /v1/workspace/","sidebarTitle":"List Workspaces","href":"/reference/list-workspaces"},{"title":"Create Workspace","openapi":"POST /v1/workspace/","sidebarTitle":"Create Workspace","href":"/reference/create-workspace"},{"title":"Get Workspace Config","openapi":"GET /v1/workspace/{workspace_slug}/config/","sidebarTitle":"Get Workspace Config","href":"/reference/get-workspace-config"},{"title":"Update Workspace Config","openapi":"PATCH /v1/workspace/{workspace_slug}/config/","sidebarTitle":"Update Workspace Config","href":"/reference/update-workspace-config"}]},{"group":"Workspace keys","pages":[{"title":"List Workspace Keys","openapi":"GET /v1/{workspace}/ws_key/","sidebarTitle":"List Workspace Keys","href":"/reference/list-workspace-keys"},{"title":"Create Workspace Key","openapi":"POST /v1/{workspace}/ws_key/","sidebarTitle":"Create Workspace Key","href":"/reference/create-workspace-key"},{"title":"Get Workspace Key","openapi":"GET /v1/{workspace}/ws_key/{workspace_key_id}/","sidebarTitle":"Get Workspace Key","href":"/reference/get-workspace-key"},{"title":"Rotate Workspace Key Secret","openapi":"PATCH /v1/{workspace}/ws_key/{workspace_key_id}/rotate/","sidebarTitle":"Rotate Secret","href":"/reference/rotate-workspace-key"},{"title":"Delete Workspace Key","openapi":"DELETE /v1/{workspace}/ws_key/{workspace_key_id}/","sidebarTitle":"Delete Workspace Key","href":"/reference/delete-workspace-key"}]},{"group":"API keys","pages":[{"title":"List API Keys","openapi":"GET /v1/{workspace}/ws_api_key/","sidebarTitle":"List API Keys","href":"/reference/list-workspace-api-keys"},{"title":"Create API Key","openapi":"POST /v1/{workspace}/ws_api_key/","sidebarTitle":"Create API Key","href":"/reference/create-workspace-api-key"},{"title":"Delete API Key","openapi":"DELETE /v1/{workspace}/ws_api_key/{api_key_id}/","sidebarTitle":"Delete API Key","href":"/reference/delete-workspace-api-key"}]},{"group":"Public keys","pages":[{"title":"List Workspace Public Keys","openapi":"GET /v1/{workspace}/ws_public_key/","sidebarTitle":"List Public Keys","href":"/reference/list-workspace-public-keys"},{"title":"Create Workspace Public Key","openapi":"POST /v1/{workspace}/ws_public_key/","sidebarTitle":"Create Public Key","href":"/reference/create-workspace-public-key"},{"title":"Enable or Disable Secure Mode on Public Key","openapi":"PATCH /v1/{workspace}/ws_public_key/{public_key_id}/","sidebarTitle":"Toggle Secure Mode","href":"/reference/patch-workspace-public-key"},{"title":"Rotate Workspace Public Key","openapi":"PATCH /v1/{workspace}/ws_public_key/{public_key_id}/rotate/","sidebarTitle":"Rotate Public Key","href":"/reference/rotate-workspace-public-key"},{"title":"Delete Workspace Public Key","openapi":"DELETE /v1/{workspace}/ws_public_key/{public_key_id}/","sidebarTitle":"Delete Public Key","href":"/reference/delete-workspace-public-key"}]},{"group":"Signing keys","pages":[{"title":"List Workspace Signing Keys","openapi":"GET /v1/{workspace}/ws_signing_key/","sidebarTitle":"List Signing Keys","href":"/reference/list-workspace-signing-keys"},{"title":"Create Workspace Signing Key","openapi":"POST /v1/{workspace}/ws_signing_key/","sidebarTitle":"Create Signing Key","href":"/reference/create-workspace-signing-key"},{"title":"Roll Workspace Signing Key","openapi":"POST /v1/{workspace}/ws_signing_key/{signing_key_uid}/roll/","sidebarTitle":"Roll Signing Key","href":"/reference/roll-workspace-signing-key"},{"title":"Delete Workspace Signing Key","openapi":"DELETE /v1/{workspace}/ws_signing_key/{signing_key_uid}/","sidebarTitle":"Delete Signing Key","href":"/reference/delete-workspace-signing-key"}]}]},{"group":"WORKFLOWS","pages":[{"title":"Create or Update Workflow","openapi":"POST /v1/{workspace}/workflow/{slug}/","sidebarTitle":"Create/Update Workflow","href":"/reference/create-update-workflow"},{"title":"Commit Workflow","openapi":"PATCH /v1/{workspace}/workflow/{slug}/commit/","sidebarTitle":"Commit Workflow","href":"/reference/commit-workflow"},{"title":"Get Workflow Details","openapi":"GET /v1/{workspace}/workflow/{slug}/","sidebarTitle":"Get Workflow","href":"/reference/get-workflow"},{"title":"List Workflows","openapi":"GET /v1/{workspace}/workflow/","sidebarTitle":"List Workflows","href":"/reference/list-workflows"},{"title":"Enable/Disable Workflow","openapi":"PATCH /v1/{workspace}/workflow/{slug}/enable/","sidebarTitle":"Enable/Disable Workflow","href":"/reference/enable-disable-workflow"},{"title":"Delete Workflow","openapi":"DELETE /v1/{workspace}/workflow/{slug}/","sidebarTitle":"Delete Workflow","href":"/reference/delete-workflow"},{"group":"Node Schema","pages":[{"title":"Delay","sidebarTitle":"Delay","href":"/reference/workflow-nodes/delay"},{"title":"Batch","sidebarTitle":"Batch","href":"/reference/workflow-nodes/batch"},{"title":"Digest","sidebarTitle":"Digest","href":"/reference/workflow-nodes/digest"},{"title":"Webhook","sidebarTitle":"Webhook","href":"/reference/workflow-nodes/webhook"},{"title":"Fetch","sidebarTitle":"Fetch","href":"/reference/workflow-nodes/fetch"},{"title":"Wait Until","sidebarTitle":"Wait Until","href":"/reference/workflow-nodes/wait-until"},{"title":"Branch","sidebarTitle":"Branch","href":"/reference/workflow-nodes/branch"},{"title":"Data Transform","sidebarTitle":"Data Transform","href":"/reference/workflow-nodes/data-transform"},{"title":"Time Window","sidebarTitle":"Time Window","href":"/reference/workflow-nodes/time-window"},{"title":"Add User to List","sidebarTitle":"Add User to List","href":"/reference/workflow-nodes/add-user-to-list"},{"title":"Remove User from List","sidebarTitle":"Remove User from List","href":"/reference/workflow-nodes/remove-user-from-list"},{"title":"Subscribe to Object","sidebarTitle":"Subscribe to Object","href":"/reference/workflow-nodes/subscribe-to-object"},{"title":"Unsubscribe from Object","sidebarTitle":"Unsubscribe from Object","href":"/reference/workflow-nodes/unsubscribe-from-object"},{"title":"Update User Profile","sidebarTitle":"Update User Profile","href":"/reference/workflow-nodes/update-user-profile"},{"title":"Invoke Workflow","sidebarTitle":"Invoke Workflow","href":"/reference/workflow-nodes/invoke-workflow"},{"title":"Send Email","sidebarTitle":"Send Email","href":"/reference/workflow-nodes/send-email"},{"title":"Send SMS","sidebarTitle":"Send SMS","href":"/reference/workflow-nodes/send-sms"},{"title":"Send WhatsApp","sidebarTitle":"Send WhatsApp","href":"/reference/workflow-nodes/send-whatsapp"},{"title":"Send Mobile Push","sidebarTitle":"Send Mobile Push","href":"/reference/workflow-nodes/send-mobile-push"},{"title":"Send Inbox","sidebarTitle":"Send Inbox","href":"/reference/workflow-nodes/send-inbox"},{"title":"Send Web Push","sidebarTitle":"Send Web Push","href":"/reference/workflow-nodes/send-web-push"},{"title":"Send Slack","sidebarTitle":"Send Slack","href":"/reference/workflow-nodes/send-slack"},{"title":"Send Microsoft Teams","sidebarTitle":"Send Microsoft Teams","href":"/reference/workflow-nodes/send-ms-teams"},{"title":"Send Multi-Channel","sidebarTitle":"Send Multi-Channel","href":"/reference/workflow-nodes/send-multi-channel"},{"title":"Smart Channel Routing","sidebarTitle":"Smart Channel Routing","href":"/reference/workflow-nodes/send-smart-channel-routing"}]}]},{"group":"SCHEMAS","pages":[{"openapi":"POST /v1/{workspace}/schema/{schema_slug}/","title":"Create/Update Schema","href":"/reference/upsert-schema"},{"openapi":"PATCH /v1/{workspace}/schema/{schema_slug}/commit/","title":"Commit Schema","href":"/reference/commit-schema"},{"openapi":"GET /v1/{workspace}/schema/","title":"List Schemas","href":"/reference/list-schemas"},{"openapi":"GET /v1/{workspace}/schema/{schema_slug}/","title":"Get Schema","href":"/reference/get-schema"}]},{"group":"EVENTS","pages":[{"openapi":"POST /v1/{workspace}/event/","title":"Create Event","href":"/reference/create-event"},{"openapi":"PATCH /v1/{workspace}/event/{url_encoded_event_name}/","title":"Update Event","href":"/reference/update-event"},{"openapi":"GET /v1/{workspace}/event/","title":"List Events","href":"/reference/list-events"},{"openapi":"GET /v1/{workspace}/event/{url_encoded_event_name}/","title":"Get Event Details","href":"/reference/get-event"},{"openapi":"GET /v1/{workspace}/event/{url_encoded_event_name}/linked_workflows/","title":"Get Linked Workflows","href":"/reference/get-linked-workflows"},{"openapi":"PATCH /v1/{workspace}/event/{url_encoded_event_name}/delink_schema/","title":"Delink Schema from Event","href":"/reference/delink-event-schema"}]},{"group":"CATEGORIES","pages":[{"title":"Get Preference Category","openapi":"GET /v1/{workspace}/preference_category/","sidebarTitle":"Get Category","description":"Retrieve the current preference category for a workspace","href":"/reference/get-category"},{"title":"Create or Update Preference Category","openapi":"POST /v1/{workspace}/preference_category/","sidebarTitle":"Create/Update Category","href":"/reference/create-update-category"},{"title":"Commit Preference Category","openapi":"PATCH /v1/{workspace}/preference_category/commit/","sidebarTitle":"Commit Category","description":"Commit draft changes to the preference category to make them live","href":"/reference/commit-category"},{"title":"List Category Translation","openapi":"GET /v1/{workspace}/preference_category/translation/locale/","sidebarTitle":"List Translation","href":"/reference/list-category-translation"},{"title":"Get Category Translation","openapi":"GET /v1/{workspace}/preference_category/translation/content/{locale}/","sidebarTitle":"Get Translation","href":"/reference/get-category-translation"},{"title":"Add or Update Category Translation","openapi":"POST /v1/{workspace}/preference_category/translation/content/{locale}/","sidebarTitle":"Add Translation","href":"/reference/add-category-translation"},{"title":"Delete Category Translation","openapi":"DELETE /v1/{workspace}/preference_category/translation/content/{locale}/","sidebarTitle":"Delete Translation","href":"/reference/delete-category-translation"}]},{"group":"TRANSLATIONS","pages":[{"title":"Add Translation","openapi":"POST /v1/{workspace}/translation/content/{locale_file}/","sidebarTitle":"Add Translation","href":"/reference/add-translation"},{"title":"Commit Translation","openapi":"PATCH /v1/{workspace}/translation/commit/","sidebarTitle":"Commit Translation","href":"/reference/commit-translation"},{"title":"Get Translation","openapi":"GET /v1/{workspace}/translation/content/{locale_file}/","sidebarTitle":"Get Translation","href":"/reference/get-translation"},{"title":"List Translations","openapi":"GET /v1/{workspace}/translation/","sidebarTitle":"List Translations","href":"/reference/list-translations"},{"title":"Get Translation History","openapi":"GET /v1/{workspace}/translation/version/{version}/","sidebarTitle":"Get Translation History","href":"/reference/get-translation-history"},{"title":"Rollback Translation","openapi":"POST /v1/{workspace}/translation/version/{version_no}/rollback/","sidebarTitle":"Rollback Translation","href":"/reference/rollback-translation"},{"title":"Delete Translation","openapi":"DELETE /v1/{workspace}/translation/content/{locale_file}/","sidebarTitle":"Delete Translation","href":"/reference/delete-translation"}]},{"group":"TEMPLATES","pages":[{"title":"List Templates","openapi":"GET /v2/{workspace}/template/","sidebarTitle":"List Templates","href":"/reference/list-templates-v2"},{"title":"Get Template Detail","openapi":"GET /v2/{workspace}/template/{template_slug}/","sidebarTitle":"Get Template","href":"/reference/get-template-v2"},{"title":"Create or Update Template","openapi":"POST /v2/{workspace}/template/{template_slug}/","sidebarTitle":"Create/Update Template","href":"/reference/upsert-template-v2"},{"title":"Commit Template","openapi":"PATCH /v2/{workspace}/template/{template_slug}/commit/","sidebarTitle":"Commit Template","href":"/reference/commit-template-v2"},{"group":"Variants","pages":[{"title":"List All Variants","openapi":"GET /v2/{workspace}/template/{template_slug}/variant/","sidebarTitle":"List All Variants","href":"/reference/list-all-variants-v2"},{"title":"List Channel Variants","openapi":"GET /v2/{workspace}/template/{template_slug}/channel/{channel}/variant/","sidebarTitle":"List Channel Variants","href":"/reference/list-channel-variants-v2"},{"title":"Get Variant Detail","openapi":"GET /v2/{workspace}/template/{template_slug}/channel/{channel}/variant/{variant_id}/","sidebarTitle":"Get Variant","href":"/reference/get-variant-v2"},{"title":"Create or Update Variant","openapi":"POST /v2/{workspace}/template/{template_slug}/channel/{channel}/variant/{variant_id}/","sidebarTitle":"Create/Update Variant","href":"/reference/upsert-variant-v2"},{"title":"Discard Variant","openapi":"PATCH /v2/{workspace}/template/{template_slug}/channel/{channel}/variant/{variant_id}/discard/","sidebarTitle":"Discard Variant","href":"/reference/discard-variant-v2"},{"title":"Add/Update Vendor Approval","openapi":"PATCH /v2/{workspace}/template/{template_slug}/channel/{channel}/variant/{variant_id}/vendor_approval/","sidebarTitle":"Vendor Approval","href":"/reference/vendor-approval-v2"}]},{"group":"Mock Data","pages":[{"title":"Get Mock Data","openapi":"GET /v2/{workspace}/template/{template_slug}/mock_data/","sidebarTitle":"Get Mock Data","href":"/reference/get-mock-data-v2"},{"title":"Update Mock Data","openapi":"PATCH /v2/{workspace}/template/{template_slug}/mock_data/","sidebarTitle":"Update Mock Data","href":"/reference/update-mock-data-v2"}]}]}]},{"tab":"CLI","pages":[{"title":"CLI","href":"/reference/cli-intro"}]},{"tab":"Build with AI","pages":[{"title":"Build with AI","href":"/reference/build-with-ai"}]},{"tab":"Developer Resources","pages":[{"title":"Developer Resources","href":"/docs/developer/overview"}]},{"tab":"Self-Hosted","pages":[{"title":"Self-Hosted","href":"/docs/self-hosted/introduction"}]},{"tab":"Changelog","pages":[{"title":"Changelog","href":"/changelog/overview"}]}]},"basePath":"","title":"Create or Update Preference Category - SuprSend: API-first notification infrastructure","buildId":"dpl_DTau1J5HqS9UTgVSDwGksstFWtPa","deploymentId":"dpl_DTau1J5HqS9UTgVSDwGksstFWtPa","dynamics":["c2aa737661","b0f84f53ff","a9bb46feb3","2b790eda92"],"chunks":["OpenApiReferenceProvider-5FCzAcfS.js","utils-SLtAG4EZ.js","cloneDeep-izs3Hzxb.js","_Uint8Array-BVIqJ90l.js","isObjectLike-C8vmzPEN.js","isArray-Dcu1dQ5t.js","utils-2DZi8ZMu.js","toString-BX-iyh8G.js","isSymbol-CSH9U2Gm.js","addUniqueKeysToSchema-D7J3nkzE.js","snippetPresets-D0Alv0AH.js","style-to-object-BY3JEAdk.js","v4-DIgz8zy6.js","conditional-requirements-CFM0id0Q.js","Page-D9ithiIZ.js","ApiExamples-BI4qNJ2c.js","isEqual-BfaiBbcl.js","usePlaygroundInputsStore-BD3uyr8j.js","shallow-D8iEBr5z.js","getApiPlaygroundDisplay-CgNP4lzR.js","CodeSnippet-CX-QHuMs.js","CodeSnippets-VlXE-ZUf.js","getPastedJson-DYNQkZ1M.js","icon-CzacdwOi.js","MethodPill-2JVqoYKi.js","DuplicateIcon-_xVXs-U8.js","createIcon-BRHrweLo.js","DynamicMarkdown-mQG_iQiE.js","SectionHeading-DMpJzv8f.js","axios-vUo_bRtp.js","Markdown-5FGIym-8.js","clsx-D-TRO5q5.js","lib-DuNMoZ05.js","lib-B8HbPgcC.js","html-void-elements-mCSPHezU.js","dist-CdrJecqK.js","katex-YMM-FMeD.js","marked.esm-CZWythHk.js","AssistantPageLink-CHlcWBLM.js"]}