Creates or extends up to 100 hierarchies per call, each with 1–20 levels.
Identity resolution, in priority order: externalId → id → name. Unmatched rows are created; the first hierarchy in a workspace becomes its default.
Level rules (enforced on create): exactly one level must be marked isSite: true — the leaf level that real, task-bearing locations live on — and order values must be unique within the hierarchy. Orders are stored as you send them.
On a match, levels are appended by title: a level whose title already exists is left alone, anything new is appended after the hierarchy’s current last level (the server assigns its order, so the order you send is ignored), and a level marked isSite: true is skipped — a hierarchy keeps the single site level it was created with. Levels are never renamed, reordered, or deleted through this endpoint, so an existing hierarchy’s shape is never destructively rewritten.
No re-parenting. This endpoint shapes the hierarchy; it does not move locations within it. See Bulk Upsert Locations for what placement changes are and are not supported.
Rows are processed one at a time rather than as one atomic batch: if a later row fails, earlier rows stay created. Re-running the same payload is safe, because every row is matched before it is created.
Requires the Public API and Location Attributes workspace features plus CAN_MANAGE_LOCATIONS.
One row per input row. levelsCreated counts only the levels this call added.
{"docsConfig":{"theme":"mint","$schema":"https://mintlify.com/docs.json","name":"Xenia Team API","colors":{"primary":"#8e54e9","light":"#e1cfff","dark":"#e1cfff"},"logo":{"light":"https://mintcdn.com/xeniateam/r-j40vtdxuJKg0Zh/logo/logo-light.svg?fit=max\u0026auto=format\u0026n=r-j40vtdxuJKg0Zh\u0026q=85\u0026s=6e8f1d49ac9946b22863d3dd22346adf","dark":"https://mintcdn.com/xeniateam/r-j40vtdxuJKg0Zh/logo/logo-dark.svg?fit=max\u0026auto=format\u0026n=r-j40vtdxuJKg0Zh\u0026q=85\u0026s=d2260d84971fb9ba7fbe9d3334f9769c"},"favicon":"https://mintcdn.com/xeniateam/r-j40vtdxuJKg0Zh/favicon.ico?fit=max\u0026auto=format\u0026n=r-j40vtdxuJKg0Zh\u0026q=85\u0026s=1ec461628add23e7e21efd17a9c2dea9","navbar":{"links":[{"href":"mailto:support@xenia.team","label":"Support"}],"primary":{"type":"button","label":"Dashboard","href":"https://app.xenia.team/"}},"footer":{"socials":{"linkedin":"https://www.linkedin.com/company/xenia-app"}},"styling":{"latex":false},"navigation":{"pages":[]}},"deployment":{"deploymentMetadataValue":{"subdomain":"xeniateam","hasAudioNarration":false,"actualSubdomain":"xeniateam","customDomains":["docs.xenia.team"],"gitSource":{"type":"github","owner":"xeniaengineering","repo":"docs","deployBranch":"production","contentDirectory":"","isPrivate":true,"mountPath":"","label":""},"entitlements":{"AI_CHAT":{"status":"ENABLED"},"WEB_MCP":{"status":"ENABLED"},"NARRATION":{"status":"ENABLED"}},"buildId":"6af1a9b5ea8a9a7a2693706e","clientVersion":"0.0.4094","searchFilterCounts":[{"language":"default","tag":"API Reference","count":53},{"language":"default","tag":"Reporting","count":12},{"language":"default","tag":"Projects","count":11},{"language":"default","tag":"Guides","count":11},{"language":"default","tag":"Users","count":8},{"language":"default","tag":"Tasks","count":7},{"language":"default","tag":"Enterprise Locations","count":6},{"language":"default","tag":"Workflows","count":6},{"language":"default","tag":"Enterprise Sub-Locations","count":5},{"language":"default","tag":"Getting Started","count":3}]},"assistantConfig":{},"basePath":"","hasChatPermissions":true,"hasWebMcpPermissions":true,"toggles":[{"name":"kill-isr","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-mintlify-slack","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-integrations-settings","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"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}],"googleFontsInlined":false},"customCss":[],"page":{"pagePath":"api-reference/endpoints/enterprise-locations/bulk-upsert-hierarchy","slug":"/api-reference/endpoints/enterprise-locations/bulk-upsert-hierarchy","pageMetadata":{"title":"Bulk Upsert Hierarchies","openapi":"POST /api/v1/mgt/enterprise/workspaces/{workspaceId}/hierarchy/bulk-upsert","description":"Creates or extends up to **100** hierarchies per call, each with 1–20 levels.\n\n**Identity resolution**, in priority order: `externalId` → `id` → `name`. Unmatched rows are created; the first hierarchy in a workspace becomes its default.\n\n**Level rules** (enforced on create): exactly **one** level must be marked `isSite: true` — the leaf level that real, task-bearing locations live on — and `order` values must be unique within the hierarchy. Orders are stored as you send them.\n\n**On a match**, levels are appended by title: a level whose `title` already exists is left alone, anything new is appended **after** the hierarchy's current last level (the server assigns its `order`, so the `order` you send is ignored), and a level marked `isSite: true` is skipped — a hierarchy keeps the single site level it was created with. Levels are never renamed, reordered, or deleted through this endpoint, so an existing hierarchy's shape is never destructively rewritten.\n\n**No re-parenting.** This endpoint shapes the hierarchy; it does not move locations within it. See *Bulk Upsert Locations* for what placement changes are and are not supported.\n\nRows are processed one at a time rather than as one atomic batch: if a later row fails, earlier rows stay created. Re-running the same payload is safe, because every row is matched before it is created.\n\nRequires the **Public API** and **Location Attributes** workspace features plus `CAN_MANAGE_LOCATIONS`.","href":"/api-reference/endpoints/enterprise-locations/bulk-upsert-hierarchy"},"description":{"compiledSource":"\"use strict\";\nconst {Fragment: _Fragment, jsx: _jsx, jsxs: _jsxs} = arguments[0];\nconst {useMDXComponents: _provideComponents} = arguments[0];\nfunction _createMdxContent(props) {\n const _components = {\n code: \"code\",\n em: \"em\",\n p: \"p\",\n strong: \"strong\",\n ..._provideComponents(),\n ...props.components\n };\n return _jsxs(_Fragment, {\n children: [_jsxs(_components.p, {\n children: [\"Creates or extends up to \", _jsx(_components.strong, {\n children: \"100\"\n }), \" hierarchies per call, each with 1–20 levels.\"]\n }), \"\\n\", _jsxs(_components.p, {\n children: [_jsx(_components.strong, {\n children: \"Identity resolution\"\n }), \", in priority order: \", _jsx(_components.code, {\n children: \"externalId\"\n }), \" → \", _jsx(_components.code, {\n children: \"id\"\n }), \" → \", _jsx(_components.code, {\n children: \"name\"\n }), \". Unmatched rows are created; the first hierarchy in a workspace becomes its default.\"]\n }), \"\\n\", _jsxs(_components.p, {\n children: [_jsx(_components.strong, {\n children: \"Level rules\"\n }), \" (enforced on create): exactly \", _jsx(_components.strong, {\n children: \"one\"\n }), \" level must be marked \", _jsx(_components.code, {\n children: \"isSite: true\"\n }), \" — the leaf level that real, task-bearing locations live on — and \", _jsx(_components.code, {\n children: \"order\"\n }), \" values must be unique within the hierarchy. Orders are stored as you send them.\"]\n }), \"\\n\", _jsxs(_components.p, {\n children: [_jsx(_components.strong, {\n children: \"On a match\"\n }), \", levels are appended by title: a level whose \", _jsx(_components.code, {\n children: \"title\"\n }), \" already exists is left alone, anything new is appended \", _jsx(_components.strong, {\n children: \"after\"\n }), \" the hierarchy’s current last level (the server assigns its \", _jsx(_components.code, {\n children: \"order\"\n }), \", so the \", _jsx(_components.code, {\n children: \"order\"\n }), \" you send is ignored), and a level marked \", _jsx(_components.code, {\n children: \"isSite: true\"\n }), \" is skipped — a hierarchy keeps the single site level it was created with. Levels are never renamed, reordered, or deleted through this endpoint, so an existing hierarchy’s shape is never destructively rewritten.\"]\n }), \"\\n\", _jsxs(_components.p, {\n children: [_jsx(_components.strong, {\n children: \"No re-parenting.\"\n }), \" This endpoint shapes the hierarchy; it does not move locations within it. See \", _jsx(_components.em, {\n children: \"Bulk Upsert Locations\"\n }), \" for what placement changes are and are not supported.\"]\n }), \"\\n\", _jsx(_components.p, {\n children: \"Rows are processed one at a time rather than as one atomic batch: if a later row fails, earlier rows stay created. Re-running the same payload is safe, because every row is matched before it is created.\"\n }), \"\\n\", _jsxs(_components.p, {\n children: [\"Requires the \", _jsx(_components.strong, {\n children: \"Public API\"\n }), \" and \", _jsx(_components.strong, {\n children: \"Location Attributes\"\n }), \" workspace features plus \", _jsx(_components.code, {\n children: \"CAN_MANAGE_LOCATIONS\"\n }), \".\"]\n })]\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}=arguments[0];const{useMDXComponents:_provideComponents}=arguments[0];function _createMdxContent(props){return _jsx(_Fragment,{})}function MDXContent(props={}){const{wrapper:MDXLayout}={..._provideComponents(),...props.components};return MDXLayout?_jsx(MDXLayout,{...props,children:_jsx(_createMdxContent,{...props})}):_createMdxContent(props)}return{default:MDXContent}","frontmatter":{},"scope":{"config":{},"pageMetadata":{"title":"Bulk Upsert Hierarchies","openapi":"POST /api/v1/mgt/enterprise/workspaces/{workspaceId}/hierarchy/bulk-upsert","description":"Creates or extends up to **100** hierarchies per call, each with 1–20 levels.\n\n**Identity resolution**, in priority order: `externalId` → `id` → `name`. Unmatched rows are created; the first hierarchy in a workspace becomes its default.\n\n**Level rules** (enforced on create): exactly **one** level must be marked `isSite: true` — the leaf level that real, task-bearing locations live on — and `order` values must be unique within the hierarchy. Orders are stored as you send them.\n\n**On a match**, levels are appended by title: a level whose `title` already exists is left alone, anything new is appended **after** the hierarchy's current last level (the server assigns its `order`, so the `order` you send is ignored), and a level marked `isSite: true` is skipped — a hierarchy keeps the single site level it was created with. Levels are never renamed, reordered, or deleted through this endpoint, so an existing hierarchy's shape is never destructively rewritten.\n\n**No re-parenting.** This endpoint shapes the hierarchy; it does not move locations within it. See *Bulk Upsert Locations* for what placement changes are and are not supported.\n\nRows are processed one at a time rather than as one atomic batch: if a later row fails, earlier rows stay created. Re-running the same payload is safe, because every row is matched before it is created.\n\nRequires the **Public API** and **Location Attributes** workspace features plus `CAN_MANAGE_LOCATIONS`.","href":"/api-reference/endpoints/enterprise-locations/bulk-upsert-hierarchy"}}},"mdxSourceWithNoJs":null},"mdxExtracts":{"tableOfContents":[],"codeExamples":{}},"jsLinks":[],"openApiReferenceData":{"operation":{"summary":"Bulk Upsert Hierarchies","description":"Creates or extends up to **100** hierarchies per call, each with 1–20 levels.\n\n**Identity resolution**, in priority order: `externalId` → `id` → `name`. Unmatched rows are created; the first hierarchy in a workspace becomes its default.\n\n**Level rules** (enforced on create): exactly **one** level must be marked `isSite: true` — the leaf level that real, task-bearing locations live on — and `order` values must be unique within the hierarchy. Orders are stored as you send them.\n\n**On a match**, levels are appended by title: a level whose `title` already exists is left alone, anything new is appended **after** the hierarchy's current last level (the server assigns its `order`, so the `order` you send is ignored), and a level marked `isSite: true` is skipped — a hierarchy keeps the single site level it was created with. Levels are never renamed, reordered, or deleted through this endpoint, so an existing hierarchy's shape is never destructively rewritten.\n\n**No re-parenting.** This endpoint shapes the hierarchy; it does not move locations within it. See *Bulk Upsert Locations* for what placement changes are and are not supported.\n\nRows are processed one at a time rather than as one atomic batch: if a later row fails, earlier rows stay created. Re-running the same payload is safe, because every row is matched before it is created.\n\nRequires the **Public API** and **Location Attributes** workspace features plus `CAN_MANAGE_LOCATIONS`.","tags":["Enterprise Locations"],"parameters":["f8b143a5-4e42-4668-b388-9d5a181d80ce"],"requestBody":"080aa79b-22c8-4ae4-9e63-7974f72ae939","responses":{"200":"b6217c11-44e0-40c5-ac43-1cd6c2f6d9bd","400":"fe7cc626-5698-473e-85b4-edb1f64c6f7b","401":"a1329667-d41f-423d-97f8-85545c5d68b3","403":"813e77e3-e6d4-4b74-a8b4-d841bdc85a83","422":"6b258da9-cd64-44d2-b234-c74bacc7b330","500":"238d0b78-b9af-4341-b562-60ca1737c1fb"},"security":["8d1b087c-8dc7-4a73-9f05-224666b07819"],"method":"post","type":"path","servers":["9f191341-471b-47ce-8abc-ef044a886650"],"path":"/api/v1/mgt/enterprise/workspaces/{workspaceId}/hierarchy/bulk-upsert","baseUrlOptions":["https://api.xenia.team"],"title":"Bulk Upsert Hierarchies","codeSamples":[],"requiredOnlyExamples":false,"requestExampleType":"generated","responseExampleType":"generated"},"dependencies":{"parameters":{"f8b143a5-4e42-4668-b388-9d5a181d80ce":{"name":"workspaceId","in":"path","required":true,"description":"UUID of the workspace. Must be the workspace your API key is bound to.","schema":{"type":"string","format":"uuid","isRequired":true,"description":"UUID of the workspace. Must be the workspace your API key is bound to.","uniqueKey":"","typeLabel":"string\u003cuuid>"}}},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"hierarchies":{"type":"array","minItems":1,"maxItems":100,"items":{"type":"object","properties":{"name":{"type":"string","maxLength":255,"isRequired":true,"uniqueKey":"hierarchies.items.[INDEX].name","typeLabel":"string"},"levels":{"type":"array","minItems":1,"maxItems":20,"description":"Levels top-down. Exactly one must have `isSite: true`.","items":{"type":"object","properties":{"title":{"type":"string","maxLength":255,"isRequired":true,"uniqueKey":"hierarchies.items.[INDEX].levels.items.[INDEX].title","typeLabel":"string"},"order":{"type":"integer","minimum":1,"description":"1-based position, unique within the hierarchy. Used on create; ignored when appending a level to an existing hierarchy.","isRequired":true,"uniqueKey":"hierarchies.items.[INDEX].levels.items.[INDEX].order","typeLabel":"integer"},"isSite":{"type":"boolean","description":"Marks the leaf/site level that real locations belong to.","isRequired":true,"uniqueKey":"hierarchies.items.[INDEX].levels.items.[INDEX].isSite","typeLabel":"boolean"}},"required":["title","order","isSite"],"uniqueKey":"hierarchies.items.[INDEX].levels.items.[INDEX]","typeLabel":"object"},"isRequired":true,"uniqueKey":"hierarchies.items.[INDEX].levels","typeLabel":"object[]"},"externalId":{"type":"string","maxLength":255,"description":"Your own stable key for this hierarchy.","uniqueKey":"hierarchies.items.[INDEX].externalId","typeLabel":"string"},"id":{"type":"string","format":"uuid","description":"Xenia hierarchy UUID, if known.","uniqueKey":"hierarchies.items.[INDEX].id","typeLabel":"string\u003cuuid>"},"description":{"type":"string","maxLength":1000,"uniqueKey":"hierarchies.items.[INDEX].description","typeLabel":"string"},"color":{"type":"string","pattern":"^#[0-9A-Fa-f]{6}$","description":"Six-digit hex colour, e.g. `#7C5CFC`.","uniqueKey":"hierarchies.items.[INDEX].color","typeLabel":"string"}},"required":["name","levels"],"uniqueKey":"hierarchies.items.[INDEX]","typeLabel":"object"},"isRequired":true,"uniqueKey":"hierarchies","typeLabel":"object[]"}},"required":["hierarchies"],"uniqueKey":"","typeLabel":"object"},"example":{"hierarchies":[{"externalId":"OPS","name":"Operations","description":"Company reporting structure","color":"#7C5CFC","levels":[{"title":"Region","order":1,"isSite":false},{"title":"District","order":2,"isSite":false},{"title":"Store","order":3,"isSite":true}]}]},"examples":{"Example":{"title":"Example","value":{"hierarchies":[{"externalId":"OPS","name":"Operations","description":"Company reporting structure","color":"#7C5CFC","levels":[{"title":"Region","order":1,"isSite":false},{"title":"District","order":2,"isSite":false},{"title":"Store","order":3,"isSite":true}]}]}}},"exampleType":"examples"}},"exampleType":"examples"},"responses":{"b6217c11-44e0-40c5-ac43-1cd6c2f6d9bd":{"description":"One row per input row. `levelsCreated` counts only the levels this call added.","content":{"application/json":{"example":{"data":[{"externalId":"OPS","id":"9c2a1b7e-4d3f-4a11-9c88-2f0e5a6b1c34","name":"Operations","created":true,"levelsCreated":3}],"extra_meta":{"message":"Hierarchies upserted"}},"examples":{"Example":{"title":"Example","value":{"data":[{"externalId":"OPS","id":"9c2a1b7e-4d3f-4a11-9c88-2f0e5a6b1c34","name":"Operations","created":true,"levelsCreated":3}],"extra_meta":{"message":"Hierarchies upserted"}}}},"exampleType":"examples"}},"exampleType":"examples"},"fe7cc626-5698-473e-85b4-edb1f64c6f7b":{"description":"Bad Request - level shape rejected on create (not exactly one `isSite` level, duplicate `order` values).","content":{"_mintlify/placeholder":{"schema":{"type":"object","description":""}}}},"a1329667-d41f-423d-97f8-85545c5d68b3":{"description":"Unauthorized - invalid client credentials, or the `workspaceId` in the path is not the workspace your key is bound to (`Client does not belong to this workspace`).","content":{"_mintlify/placeholder":{"schema":{"type":"object","description":""}}}},"813e77e3-e6d4-4b74-a8b4-d841bdc85a83":{"description":"Forbidden - route not allow-listed for API keys, missing `CAN_MANAGE_LOCATIONS`, or the **Public API** / **Location Attributes** feature is not enabled for the workspace.","content":{"_mintlify/placeholder":{"schema":{"type":"object","description":""}}}},"6b258da9-cd64-44d2-b234-c74bacc7b330":{"description":"Unprocessable Entity - body failed validation (missing `levels`, bad `color` format, more than 100 hierarchies or 20 levels).","content":{"_mintlify/placeholder":{"schema":{"type":"object","description":""}}}},"238d0b78-b9af-4341-b562-60ca1737c1fb":{"description":"Internal Server Error.","content":{"_mintlify/placeholder":{"schema":{"type":"object","description":""}}}}},"security":{"8d1b087c-8dc7-4a73-9f05-224666b07819":{"clientKey":{"type":"apiKey","in":"header","name":"x-client-key","scopes":[]},"clientSecret":{"type":"apiKey","in":"header","name":"x-client-secret","scopes":[]}}},"servers":{"9f191341-471b-47ce-8abc-ef044a886650":{"url":"https://api.xenia.team"}},"processedSecurityOptions":[{"schemes":[{"scheme":{"type":"apiKey","in":"header","name":"x-client-key","scopes":[]},"schema":{"title":"x-client-key","type":"string","isRequired":true,"typeLabel":"string","deprecated":false},"schemeName":"clientKey","name":"x-client-key"},{"scheme":{"type":"apiKey","in":"header","name":"x-client-secret","scopes":[]},"schema":{"title":"x-client-secret","type":"string","isRequired":true,"typeLabel":"string","deprecated":false},"schemeName":"clientSecret","name":"x-client-secret"}],"title":"clientKey \u0026 clientSecret"}]},"originalFileLocation":"api-reference/openapi/enterprise-locations/bulk_upsert_hierarchy.json"},"subdomain":"xeniateam","siteName":"Xenia Team API","title":"Bulk Upsert Hierarchies - Xenia Team API","navMaps":{"firstHrefInVersion":{},"firstHrefInLanguage":{}},"lastModified":"2026-07-28T12:47:59.950Z","originalFileLocation":"api-reference/endpoints/enterprise-locations/bulk-upsert-hierarchy.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=\"Creates or extends up to 100 hierarchies per call, each with 1–20 levels. Identity resolution, in priority order: externalId → id → name. Unmatched rows are created; the first hierarchy in a workspace becomes its default. Level rules (enforced on create): exactly one level must be marked isSite: true — the leaf level that real, task-bearing locations live on — and order values must be unique within the hierarchy. Orders are stored as you send them. On a match, levels are appended by title: a level whose title already exists is left alone, anything new is appended after the hierarchy\u0026#x27;s current last level (the server assigns its order, so the order you send is ignored), and a level marked isSite: true is skipped — a hierarchy keeps the single site level it was created with. Levels are never renamed, reordered, or deleted through this endpoint, so an existing hierarchy\u0026#x27;s shape is never destructively rewritten. No re-parenting. This endpoint shapes the hierarchy; it does not move locations within it. See Bulk Upsert Locations for what placement changes are and are not supported. Rows are processed one at a time rather than as one atomic batch: if a later row fails, earlier rows stay created. Re-running the same payload is safe, because every row is matched before it is created. Requires the Public API and Location Attributes workspace features plus CAN_MANAGE_LOCATIONS.\">\u003cmeta data-mint-head name=\"application-name\" content=\"Xenia Team API\">\u003cmeta data-mint-head name=\"generator\" content=\"Mintlify\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/xeniateam/1-R9L-rMXezXpRg2/_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/xeniateam/1-R9L-rMXezXpRg2/_generated/favicon/apple-touch-icon.png\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/xeniateam/1-R9L-rMXezXpRg2/_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/xeniateam/1-R9L-rMXezXpRg2/_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/xeniateam/1-R9L-rMXezXpRg2/_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/xeniateam/1-R9L-rMXezXpRg2/_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/xeniateam/1-R9L-rMXezXpRg2/_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/xeniateam/1-R9L-rMXezXpRg2/_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/xeniateam/1-R9L-rMXezXpRg2/_generated/favicon-dark/favicon.ico\" media=\"(prefers-color-scheme: dark)\">\u003cmeta data-mint-head property=\"og:title\" content=\"Bulk Upsert Hierarchies - Xenia Team API\">\u003cmeta data-mint-head property=\"og:description\" content=\"Creates or extends up to 100 hierarchies per call, each with 1–20 levels. Identity resolution, in priority order: externalId → id → name. Unmatched rows are created; the first hierarchy in a workspace becomes its default. Level rules (enforced on create): exactly one level must be marked isSite: true — the leaf level that real, task-bearing locations live on — and order values must be unique within the hierarchy. Orders are stored as you send them. On a match, levels are appended by title: a level whose title already exists is left alone, anything new is appended after the hierarchy\u0026#x27;s current last level (the server assigns its order, so the order you send is ignored), and a level marked isSite: true is skipped — a hierarchy keeps the single site level it was created with. Levels are never renamed, reordered, or deleted through this endpoint, so an existing hierarchy\u0026#x27;s shape is never destructively rewritten. No re-parenting. This endpoint shapes the hierarchy; it does not move locations within it. See Bulk Upsert Locations for what placement changes are and are not supported. Rows are processed one at a time rather than as one atomic batch: if a later row fails, earlier rows stay created. Re-running the same payload is safe, because every row is matched before it is created. Requires the Public API and Location Attributes workspace features plus CAN_MANAGE_LOCATIONS.\">\u003cmeta data-mint-head property=\"og:site_name\" content=\"Xenia Team API\">\u003cmeta data-mint-head property=\"og:url\" content=\"https://docs.xenia.team/api-reference/endpoints/enterprise-locations/bulk-upsert-hierarchy\">\u003cmeta data-mint-head property=\"og:type\" content=\"website\">\u003cmeta data-mint-head property=\"og:image\" content=\"https://xeniateam.mintlify.site/_mintlify/api/og/v2?division=Enterprise+Locations\u0026amp;title=Bulk+Upsert+Hierarchies\u0026amp;description=Creates+or+extends+up+to+**100**+hierarchies+per+call%2C+each+with+1%E2%80%9320+levels.%0A%0A**Identity+resolution**%2C+in+priority+order%3A+%60externalId%60+%E2%86%92+%60id%60+%E2%86%92+%60name%60.+Unmatch\u0026amp;theme=18381bac2e3844ba8015f227\u0026amp;signature=8d7287a5cdc266b51481ed86f5fce2caeb137e2f4b6e21e1d44de6ec8eec5e59\">\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=\"Bulk Upsert Hierarchies - Xenia Team API\">\u003cmeta data-mint-head name=\"twitter:description\" content=\"Creates or extends up to 100 hierarchies per call, each with 1–20 levels. Identity resolution, in priority order: externalId → id → name. Unmatched rows are created; the first hierarchy in a workspace becomes its default. Level rules (enforced on create): exactly one level must be marked isSite: true — the leaf level that real, task-bearing locations live on — and order values must be unique within the hierarchy. Orders are stored as you send them. On a match, levels are appended by title: a level whose title already exists is left alone, anything new is appended after the hierarchy\u0026#x27;s current last level (the server assigns its order, so the order you send is ignored), and a level marked isSite: true is skipped — a hierarchy keeps the single site level it was created with. Levels are never renamed, reordered, or deleted through this endpoint, so an existing hierarchy\u0026#x27;s shape is never destructively rewritten. No re-parenting. This endpoint shapes the hierarchy; it does not move locations within it. See Bulk Upsert Locations for what placement changes are and are not supported. Rows are processed one at a time rather than as one atomic batch: if a later row fails, earlier rows stay created. Re-running the same payload is safe, because every row is matched before it is created. Requires the Public API and Location Attributes workspace features plus CAN_MANAGE_LOCATIONS.\">\u003cmeta data-mint-head name=\"twitter:image\" content=\"https://xeniateam.mintlify.site/_mintlify/api/og/v2?division=Enterprise+Locations\u0026amp;title=Bulk+Upsert+Hierarchies\u0026amp;description=Creates+or+extends+up+to+**100**+hierarchies+per+call%2C+each+with+1%E2%80%9320+levels.%0A%0A**Identity+resolution**%2C+in+priority+order%3A+%60externalId%60+%E2%86%92+%60id%60+%E2%86%92+%60name%60.+Unmatch\u0026amp;theme=18381bac2e3844ba8015f227\u0026amp;signature=8d7287a5cdc266b51481ed86f5fce2caeb137e2f4b6e21e1d44de6ec8eec5e59\">\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/xeniateam/1-R9L-rMXezXpRg2/_generated/favicon/browserconfig.xml\">\u003cmeta data-mint-head name=\"apple-mobile-web-app-title\" content=\"Xenia Team API\">\u003cmeta data-mint-head name=\"msapplication-TileColor\" content=\"#8e54e9\">\u003clink data-mint-head rel=\"canonical\" href=\"https://docs.xenia.team/api-reference/endpoints/enterprise-locations/bulk-upsert-hierarchy\">\u003clink data-mint-head rel=\"alternate\" type=\"application/xml\" href=\"/sitemap.xml\">\u003clink data-mint-head rel=\"alternate\" type=\"text/markdown\" href=\"/api-reference/endpoints/enterprise-locations/bulk-upsert-hierarchy.md\">\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@graph\":[{\"@type\":\"Organization\",\"@id\":\"https://docs.xenia.team/#organization\",\"name\":\"Xenia Team API\",\"url\":\"https://docs.xenia.team\",\"logo\":{\"@type\":\"ImageObject\",\"url\":\"https://mintcdn.com/xeniateam/r-j40vtdxuJKg0Zh/logo/logo-light.svg?fit=max\u0026auto=format\u0026n=r-j40vtdxuJKg0Zh\u0026q=85\u0026s=6e8f1d49ac9946b22863d3dd22346adf\"}},{\"@type\":\"WebSite\",\"@id\":\"https://docs.xenia.team#website\",\"name\":\"Xenia Team API\",\"url\":\"https://docs.xenia.team\",\"publisher\":{\"@id\":\"https://docs.xenia.team/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https://docs.xenia.team/api-reference/endpoints/enterprise-locations/bulk-upsert-hierarchy#webpage\",\"url\":\"https://docs.xenia.team/api-reference/endpoints/enterprise-locations/bulk-upsert-hierarchy\",\"name\":\"Bulk Upsert Hierarchies\",\"description\":\"Creates or extends up to 100 hierarchies per call, each with 1–20 levels. Identity resolution, in priority order: externalId → id → name. Unmatched rows are created; the first hierarchy in a workspace becomes its default. Level rules (enforced on create): exactly one level must be marked isSite: true — the leaf level that real, task-bearing locations live on — and order values must be unique within the hierarchy. Orders are stored as you send them. On a match, levels are appended by title: a level whose title already exists is left alone, anything new is appended after the hierarchy's current last level (the server assigns its order, so the order you send is ignored), and a level marked isSite: true is skipped — a hierarchy keeps the single site level it was created with. Levels are never renamed, reordered, or deleted through this endpoint, so an existing hierarchy's shape is never destructively rewritten. No re-parenting. This endpoint shapes the hierarchy; it does not move locations within it. See Bulk Upsert Locations for what placement changes are and are not supported. Rows are processed one at a time rather than as one atomic batch: if a later row fails, earlier rows stay created. Re-running the same payload is safe, because every row is matched before it is created. Requires the Public API and Location Attributes workspace features plus CAN_MANAGE_LOCATIONS.\",\"dateModified\":\"2026-07-28T12:47:59.950Z\",\"isPartOf\":{\"@id\":\"https://docs.xenia.team#website\"},\"breadcrumb\":{\"@id\":\"https://docs.xenia.team/api-reference/endpoints/enterprise-locations/bulk-upsert-hierarchy#breadcrumb\"}},{\"@type\":\"BreadcrumbList\",\"@id\":\"https://docs.xenia.team/api-reference/endpoints/enterprise-locations/bulk-upsert-hierarchy#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Xenia Team API\",\"item\":\"https://docs.xenia.team\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Bulk Upsert Hierarchies\",\"item\":\"https://docs.xenia.team/api-reference/endpoints/enterprise-locations/bulk-upsert-hierarchy\"}]},{\"@type\":[\"TechArticle\",\"APIReference\"],\"@id\":\"https://docs.xenia.team/api-reference/endpoints/enterprise-locations/bulk-upsert-hierarchy#apireference\",\"headline\":\"Bulk Upsert Hierarchies\",\"name\":\"Bulk Upsert Hierarchies\",\"description\":\"Creates or extends up to 100 hierarchies per call, each with 1–20 levels. Identity resolution, in priority order: externalId → id → name. Unmatched rows are created; the first hierarchy in a workspace becomes its default. Level rules (enforced on create): exactly one level must be marked isSite: true — the leaf level that real, task-bearing locations live on — and order values must be unique within the hierarchy. Orders are stored as you send them. On a match, levels are appended by title: a level whose title already exists is left alone, anything new is appended after the hierarchy's current last level (the server assigns its order, so the order you send is ignored), and a level marked isSite: true is skipped — a hierarchy keeps the single site level it was created with. Levels are never renamed, reordered, or deleted through this endpoint, so an existing hierarchy's shape is never destructively rewritten. No re-parenting. This endpoint shapes the hierarchy; it does not move locations within it. See Bulk Upsert Locations for what placement changes are and are not supported. Rows are processed one at a time rather than as one atomic batch: if a later row fails, earlier rows stay created. Re-running the same payload is safe, because every row is matched before it is created. Requires the Public API and Location Attributes workspace features plus CAN_MANAGE_LOCATIONS.\",\"url\":\"https://docs.xenia.team/api-reference/endpoints/enterprise-locations/bulk-upsert-hierarchy\",\"mainEntityOfPage\":{\"@id\":\"https://docs.xenia.team/api-reference/endpoints/enterprise-locations/bulk-upsert-hierarchy#webpage\"},\"dateModified\":\"2026-07-28T12:47:59.950Z\",\"publisher\":{\"@id\":\"https://docs.xenia.team/#organization\"},\"isPartOf\":{\"@id\":\"https://docs.xenia.team#website\"}}]}\u003c/script>\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@type\":\"WebSite\",\"name\":\"Xenia Team API\",\"creator\":{\"@type\":\"Organization\",\"name\":\"Mintlify\",\"url\":\"https://mintlify.com\"}}\u003c/script>","siteName":"Xenia Team API","nav":{"global":null,"tabs":[{"tab":"Guides","pages":[{"title":"Guides","href":"/guides/getting-started"}]},{"tab":"API Reference","groups":[{"group":"Authentication","pages":[{"title":"Client Key Setup","href":"/api-reference/endpoints/authentication"}]},{"group":"Users","pages":[{"title":"Provision Users","openapi":"POST /api/v1/mgt/users/provision","href":"/api-reference/endpoints/users/provision-users"},{"title":"Get Users","openapi":"GET /api/v1/mgt/workspaces/{workspaceId}/users","href":"/api-reference/endpoints/users/get-users"},{"title":"Get User Context","openapi":"GET /api/v1/mgt/user-context","href":"/api-reference/endpoints/users/user-context"},{"title":"Change User Role","openapi":"PATCH /api/v1/mgt/workspaces/{workspaceId}/users/{userId}/role","href":"/api-reference/endpoints/users/change-user-role"},{"title":"Replace User Locations","openapi":"PUT /api/v1/mgt/workspaces/{workspaceId}/users/{userId}/locations","href":"/api-reference/endpoints/users/replace-user-locations"},{"title":"Set User Password","openapi":"PATCH /api/v1/mgt/workspaces/{workspaceId}/set-password","href":"/api-reference/endpoints/users/set-password"},{"title":"Set User Login Pin","openapi":"PUT /api/v1/mgt/set-login-pin","href":"/api-reference/endpoints/users/set-login-pin"},{"title":"Delete User","openapi":"DELETE /api/v1/mgt/workspaces/{workspaceId}/users/{userId}","href":"/api-reference/endpoints/users/delete-user"}]},{"group":"Locations","pages":[{"title":"Get Locations - Sub Locations Hierarchy","openapi":"GET /api/v1/mgt/workspaces/{workspaceId}/locations","description":"Fetches all locations for a workspace.\n\n- **Default (grouped tree):** locations are grouped by hierarchy, and sub-locations are nested under `Sublocations`. Best for rendering an org tree.\n- **`notree=true` (flat list):** one flat array with no nesting; each location carries `LocationHierarchyId` plus a resolved `Hierarchy` object. Best for dropdowns, filters, and for resolving `location_ids` when provisioning users.\n\nBoth shapes are shown in the response examples below.","href":"/api-reference/endpoints/locations/get-locations"}]},{"group":"Enterprise Locations","pages":[{"title":"Bulk Upsert Hierarchies","openapi":"POST /api/v1/mgt/enterprise/workspaces/{workspaceId}/hierarchy/bulk-upsert","href":"/api-reference/endpoints/enterprise-locations/bulk-upsert-hierarchy"},{"title":"Bulk Upsert Locations","openapi":"POST /api/v1/mgt/enterprise/workspaces/{workspaceId}/locations/bulk-upsert","description":"Creates or renames up to **2,000** locations per call.\n\n**Identity resolution:** `externalId` (recorded on first create, so re-runs resolve to the same location) → `id`. At least one is required. Unmatched rows create a new location.\n\n**Placement on create** is optional: `hierarchyId`, `levelId`, and a parent given as either `parentExternalId` or `parentId` (not both). New locations inherit the workspace timezone and get the next location number.\n\n**Placement on an existing location is rejected.** Supplying a `hierarchyId`, `levelId`, or parent that differs from the location's current placement returns `400` — *\"Location \"…\" cannot be moved or re-parented via the enterprise API (V1 supports create + rename only)\"*. Omit the placement fields to rename in place. Moving a location between parents (for example a store from one district to another) is planned for a later version; until then, do it in the Xenia UI, or model the changing dimension as a **location attribute** and update it through *Bulk Upsert Attribute Values*.\n\nThe whole batch runs in **one transaction**: if any row fails, no locations from that call are created.\n\nRequires the **Public API** and **Location Attributes** workspace features plus `CAN_MANAGE_LOCATIONS`.","href":"/api-reference/endpoints/enterprise-locations/bulk-upsert-locations"},{"title":"List Locations with External IDs","openapi":"GET /api/v1/mgt/enterprise/workspaces/{workspaceId}/locations","href":"/api-reference/endpoints/enterprise-locations/list-locations"},{"title":"Bulk Upsert Location Attributes","openapi":"POST /api/v1/mgt/enterprise/workspaces/{workspaceId}/location-attributes/bulk-upsert","href":"/api-reference/endpoints/enterprise-locations/bulk-upsert-attributes"},{"title":"List Location Attributes","openapi":"GET /api/v1/mgt/enterprise/workspaces/{workspaceId}/location-attributes","href":"/api-reference/endpoints/enterprise-locations/list-attributes"},{"title":"Bulk Upsert Attribute Values","openapi":"POST /api/v1/mgt/enterprise/workspaces/{workspaceId}/location-attribute-values/bulk-upsert","href":"/api-reference/endpoints/enterprise-locations/bulk-upsert-attribute-values"}]},{"group":"Enterprise Sub-Locations","pages":[{"title":"Bulk Upsert Sub-Location Types","openapi":"POST /api/v1/mgt/enterprise/workspaces/{workspaceId}/sub-location-types/bulk-upsert","href":"/api-reference/endpoints/enterprise-sub-locations/bulk-upsert-sub-location-types"},{"title":"List Sub-Location Types","openapi":"GET /api/v1/mgt/enterprise/workspaces/{workspaceId}/sub-location-types","href":"/api-reference/endpoints/enterprise-sub-locations/list-sub-location-types"},{"title":"Bulk Upsert Sub-Locations","openapi":"POST /api/v1/mgt/enterprise/workspaces/{workspaceId}/sub-locations/bulk-upsert","href":"/api-reference/endpoints/enterprise-sub-locations/bulk-upsert-sub-locations"},{"title":"List Sub-Locations","openapi":"GET /api/v1/mgt/enterprise/workspaces/{workspaceId}/sub-locations","href":"/api-reference/endpoints/enterprise-sub-locations/list-sub-locations"},{"title":"Bulk Upsert Sub-Location Attribute Values","openapi":"POST /api/v1/mgt/enterprise/workspaces/{workspaceId}/sub-location-attribute-values/bulk-upsert","href":"/api-reference/endpoints/enterprise-sub-locations/bulk-upsert-sub-location-attribute-values"}]},{"group":"Roles","pages":[{"title":"Get Roles","openapi":"GET /api/v1/mgt/workspaces/{workspaceId}/roles","href":"/api-reference/endpoints/roles/get"}]},{"group":"Teams","pages":[{"title":"List Teams","openapi":"GET /api/v1/mgt/workspaces/{workspaceId}/teams","href":"/api-reference/endpoints/teams/get-teams"}]},{"group":"Tasks","pages":[{"title":"Get Tasks","openapi":"POST /api/v1/ops/workspaces/{workspaceId}/tasks/catalog","href":"/api-reference/endpoints/tasks/get-tasks"},{"title":"Get Task","openapi":"GET /api/v1/ops/workspaces/{workspaceId}/tasks/{taskId}/details","href":"/api-reference/endpoints/tasks/get-task-by-id"},{"title":"Get Task List","openapi":"POST /api/v1/ops/workspaces/{workspaceId}/tasks/list","href":"/api-reference/endpoints/tasks/get-task-list"},{"title":"Create Task","openapi":"POST /api/v1/ops/workspaces/{workspaceId}/tasks","href":"/api-reference/endpoints/tasks/create-task"},{"title":"Edit Task","openapi":"POST /api/v1/ops/workspaces/{workspaceId}/tasks/{taskId}/edit","href":"/api-reference/endpoints/tasks/edit-task"},{"title":"Change Task Status","openapi":"PATCH /api/v1/ops/workspaces/{workspaceId}/tasks/{taskId}/status","href":"/api-reference/endpoints/tasks/set-task-status"},{"title":"Delete Task","openapi":"DELETE /api/v1/ops/workspaces/{workspaceId}/tasks/{taskId}","href":"/api-reference/endpoints/tasks/delete-task"}]},{"group":"Projects","pages":[{"title":"Create Project","href":"/api-reference/endpoints/projects/create-project"},{"title":"List Projects","openapi":"GET /api/v1/ops/workspaces/{workspaceId}/projects","href":"/api-reference/endpoints/projects/list-projects"},{"title":"Search Projects","openapi":"POST /api/v1/ops/workspaces/{workspaceId}/projects","href":"/api-reference/endpoints/projects/search-projects"},{"title":"Get Project","openapi":"GET /api/v1/ops/workspaces/{workspaceId}/projects/{projectId}","href":"/api-reference/endpoints/projects/get-project-by-id"},{"title":"Get Project Active Tasks","openapi":"GET /api/v1/ops/workspaces/{workspaceId}/projects/{projectId}/active/tasks","href":"/api-reference/endpoints/projects/get-project-active-tasks"},{"title":"Get Project Schedule Analytics","openapi":"POST /api/v1/ops/workspaces/{workspaceId}/projects/{projectId}/schedules/analytics","href":"/api-reference/endpoints/projects/project-schedule-analytics"},{"title":"Get Project Task Analytics","openapi":"POST /api/v1/ops/workspaces/{workspaceId}/projects/{projectId}/tasks/analytics","href":"/api-reference/endpoints/projects/project-task-analytics"},{"title":"Edit Project","openapi":"PATCH /api/v1/ops/workspaces/{workspaceId}/projects/{projectId}/edit","href":"/api-reference/endpoints/projects/edit-project"},{"title":"Pause or Resume Project","openapi":"GET /api/v1/ops/workspaces/{workspaceId}/projects/{projectId}/toggle-pause","href":"/api-reference/endpoints/projects/pause-resume-project"},{"title":"End Project","openapi":"PUT /api/v1/ops/workspaces/{workspaceId}/projects/{projectId}/end","href":"/api-reference/endpoints/projects/end-project"},{"title":"Delete Project","openapi":"DELETE /api/v1/ops/workspaces/{workspaceId}/projects/{projectId}","href":"/api-reference/endpoints/projects/delete-project"}]},{"group":"Reporting","pages":[{"title":"Submission Records","openapi":"POST /api/v1/ops/template-submissions","href":"/api-reference/endpoints/reporting/submission-records"},{"title":"Get Submission","openapi":"GET /api/v1/ops/workspaces/{workspaceId}/logs/{logId}","href":"/api-reference/endpoints/reporting/submission-record"},{"title":"Submission Counts by Status","openapi":"POST /api/v1/ops/submissions-count-by-status","href":"/api-reference/endpoints/reporting/submission-counts-by-status"},{"title":"Task Count by Status","openapi":"POST /api/v1/ops/reports/tasks/count-by-status","href":"/api-reference/endpoints/reporting/task-count-by-status"},{"title":"Task Count by Assignees","openapi":"POST /api/v1/ops/reports/tasks/count-by-assignees","href":"/api-reference/endpoints/reporting/task-count-by-assignees"},{"title":"Task Count by Categories","openapi":"POST /api/v1/ops/reports/tasks/count-by-categories","href":"/api-reference/endpoints/reporting/task-count-by-categories"},{"title":"Weekly Completion","openapi":"POST /api/v1/ops/reports/tasks/weekly-completion","href":"/api-reference/endpoints/reporting/weekly-completion"},{"title":"Schedule Completion by Location","openapi":"POST /api/v1/ops/reports/tasks/schedule-completion-by-location","href":"/api-reference/endpoints/reporting/schedule-completion-by-location"},{"title":"On-Time / Late Submission by Location","openapi":"POST /api/v1/ops/reports/tasks/on-time-late-submission-by-location","href":"/api-reference/endpoints/reporting/on-time-late-submission-by-location"},{"title":"Daily Compliance","openapi":"POST /api/v1/ops/reports/tasks/daily-compliance","href":"/api-reference/endpoints/reporting/daily-compliance"},{"title":"List Grid Reports","openapi":"GET /api/v1/mgt/grid-reports","href":"/api-reference/endpoints/reporting/grid-reports-list"},{"title":"Grid Report View Spreadsheet","openapi":"GET /api/v1/mgt/grid-report-views/{viewId}/spreadsheet","href":"/api-reference/endpoints/reporting/grid-report-spreadsheet"}]}]}]},"basePath":"","title":"Bulk Upsert Hierarchies - Xenia Team API","buildId":"dpl_42LwxxU1kGN114H4XzwGYXa9ZDah","deploymentId":"dpl_42LwxxU1kGN114H4XzwGYXa9ZDah","dynamics":["c2aa737661","2b790eda92","b0f84f53ff","a9bb46feb3"],"chunks":["OpenApiReferenceProvider-C-hEh3I2.js","utils-CnF4QiUD.js","cloneDeep-izs3Hzxb.js","_Uint8Array-BVIqJ90l.js","isObjectLike-C8vmzPEN.js","isArray-Dcu1dQ5t.js","utils-C7PVNbel.js","toString-BX-iyh8G.js","isSymbol-CSH9U2Gm.js","addUniqueKeysToSchema-8ytevL2A.js","snippetPresets-BT1alx3v.js","style-to-object-BY3JEAdk.js","v4-DIgz8zy6.js","conditional-requirements-CFM0id0Q.js","ApiExamples-BLXC0i_W.js","isEqual-BfaiBbcl.js","usePlaygroundInputsStore-CyLIGI9_.js","shallow-DC0lGVIW.js","getApiPlaygroundDisplay-CgDQ85tN.js","CodeSnippet-6-I-Gpv9.js","CodeSnippets-BAk1kDdu.js","Page-C945cI-W.js","getPastedJson-B276RuWN.js","icon-BqP8etTm.js","MethodPill-DM6sbxG1.js","DuplicateIcon-PyJglOaE.js","createIcon-CMeOMAc_.js","DynamicMarkdown-BoyYAA8K.js","SectionHeading-DAYv3gvZ.js","axios-vUo_bRtp.js","Markdown-BhTTmazV.js","clsx-CR-RHrVC.js","lib-DuNMoZ05.js","lib-B8HbPgcC.js","html-void-elements-mCSPHezU.js","dist-CBUH0-zX.js","katex-YMM-FMeD.js","marked.esm-CZWythHk.js","AssistantPageLink-BmARFYNC.js"]}