Idempotently creates or updates sub-locations (e.g. a specific fridge in a store), keyed by your own externalId. Safe to re-run.
Up to 2000 rows per call.
Identity:externalId → id. A new sub-location requires an externalId. The externalId is the same one shown and editable in the web app. Send both to change a sub-location’s externalId (match by id); if they name two different sub-locations the row is rejected. Each sub-location can be matched by only one row per call.
Type: exactly one of typeExternalId, typeId or typeName. Location: exactly one of locationExternalId (as used by the Enterprise Locations endpoints) or locationId. The location must be a site: a location on a site level of its hierarchy, or a location with no child locations when the workspace has no levels.
An existing sub-location can be renamed, moved to another site, and have its status changed. Its type cannot change (400). Names are unique per site and type (case-insensitive).
Set attribute values with Bulk Upsert Sub-Location Attribute Values. The call is all-or-nothing; the error message names the failing row (e.g. subLocations[3]).
Requires the Public API workspace feature, CAN_MANAGE_LOCATIONS, and Sub-Locations enabled for the workspace (contact Xenia to enable it; until then every sub-location endpoint returns 404).
{"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.4088","searchFilterCounts":[{"language":"default","tag":"API Reference","count":48},{"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":"Getting Started","count":3},{"language":"default","tag":"Integrations","count":2}]},"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-sub-locations/bulk-upsert-sub-locations","slug":"/api-reference/endpoints/enterprise-sub-locations/bulk-upsert-sub-locations","pageMetadata":{"title":"Bulk Upsert Sub-Locations","openapi":"POST /api/v1/mgt/enterprise/workspaces/{workspaceId}/sub-locations/bulk-upsert","description":"Idempotently creates or updates sub-locations (e.g. a specific fridge in a store), keyed by your own `externalId`. Safe to re-run.\n\nUp to **2000** rows per call.\n\n**Identity:** `externalId` → `id`. A new sub-location requires an `externalId`. The `externalId` is the same one shown and editable in the web app. Send both to change a sub-location's `externalId` (match by `id`); if they name two different sub-locations the row is rejected. Each sub-location can be matched by only one row per call.\n\n**Type:** exactly one of `typeExternalId`, `typeId` or `typeName`. **Location:** exactly one of `locationExternalId` (as used by the Enterprise Locations endpoints) or `locationId`. The location must be a **site**: a location on a site level of its hierarchy, or a location with no child locations when the workspace has no levels.\n\nAn existing sub-location can be renamed, moved to another site, and have its `status` changed. Its type cannot change (`400`). Names are unique per site and type (case-insensitive).\n\nSet attribute values with Bulk Upsert Sub-Location Attribute Values. The call is all-or-nothing; the error message names the failing row (e.g. `subLocations[3]`).\n\nRequires the **Public API** workspace feature, `CAN_MANAGE_LOCATIONS`, and **Sub-Locations** enabled for the workspace (contact Xenia to enable it; until then every sub-location endpoint returns `404`).","href":"/api-reference/endpoints/enterprise-sub-locations/bulk-upsert-sub-locations"},"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 p: \"p\",\n strong: \"strong\",\n ..._provideComponents(),\n ...props.components\n };\n return _jsxs(_Fragment, {\n children: [_jsxs(_components.p, {\n children: [\"Idempotently creates or updates sub-locations (e.g. a specific fridge in a store), keyed by your own \", _jsx(_components.code, {\n children: \"externalId\"\n }), \". Safe to re-run.\"]\n }), \"\\n\", _jsxs(_components.p, {\n children: [\"Up to \", _jsx(_components.strong, {\n children: \"2000\"\n }), \" rows per call.\"]\n }), \"\\n\", _jsxs(_components.p, {\n children: [_jsx(_components.strong, {\n children: \"Identity:\"\n }), \" \", _jsx(_components.code, {\n children: \"externalId\"\n }), \" → \", _jsx(_components.code, {\n children: \"id\"\n }), \". A new sub-location requires an \", _jsx(_components.code, {\n children: \"externalId\"\n }), \". The \", _jsx(_components.code, {\n children: \"externalId\"\n }), \" is the same one shown and editable in the web app. Send both to change a sub-location’s \", _jsx(_components.code, {\n children: \"externalId\"\n }), \" (match by \", _jsx(_components.code, {\n children: \"id\"\n }), \"); if they name two different sub-locations the row is rejected. Each sub-location can be matched by only one row per call.\"]\n }), \"\\n\", _jsxs(_components.p, {\n children: [_jsx(_components.strong, {\n children: \"Type:\"\n }), \" exactly one of \", _jsx(_components.code, {\n children: \"typeExternalId\"\n }), \", \", _jsx(_components.code, {\n children: \"typeId\"\n }), \" or \", _jsx(_components.code, {\n children: \"typeName\"\n }), \". \", _jsx(_components.strong, {\n children: \"Location:\"\n }), \" exactly one of \", _jsx(_components.code, {\n children: \"locationExternalId\"\n }), \" (as used by the Enterprise Locations endpoints) or \", _jsx(_components.code, {\n children: \"locationId\"\n }), \". The location must be a \", _jsx(_components.strong, {\n children: \"site\"\n }), \": a location on a site level of its hierarchy, or a location with no child locations when the workspace has no levels.\"]\n }), \"\\n\", _jsxs(_components.p, {\n children: [\"An existing sub-location can be renamed, moved to another site, and have its \", _jsx(_components.code, {\n children: \"status\"\n }), \" changed. Its type cannot change (\", _jsx(_components.code, {\n children: \"400\"\n }), \"). Names are unique per site and type (case-insensitive).\"]\n }), \"\\n\", _jsxs(_components.p, {\n children: [\"Set attribute values with Bulk Upsert Sub-Location Attribute Values. The call is all-or-nothing; the error message names the failing row (e.g. \", _jsx(_components.code, {\n children: \"subLocations[3]\"\n }), \").\"]\n }), \"\\n\", _jsxs(_components.p, {\n children: [\"Requires the \", _jsx(_components.strong, {\n children: \"Public API\"\n }), \" workspace feature, \", _jsx(_components.code, {\n children: \"CAN_MANAGE_LOCATIONS\"\n }), \", and \", _jsx(_components.strong, {\n children: \"Sub-Locations\"\n }), \" enabled for the workspace (contact Xenia to enable it; until then every sub-location endpoint returns \", _jsx(_components.code, {\n children: \"404\"\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 Sub-Locations","openapi":"POST /api/v1/mgt/enterprise/workspaces/{workspaceId}/sub-locations/bulk-upsert","description":"Idempotently creates or updates sub-locations (e.g. a specific fridge in a store), keyed by your own `externalId`. Safe to re-run.\n\nUp to **2000** rows per call.\n\n**Identity:** `externalId` → `id`. A new sub-location requires an `externalId`. The `externalId` is the same one shown and editable in the web app. Send both to change a sub-location's `externalId` (match by `id`); if they name two different sub-locations the row is rejected. Each sub-location can be matched by only one row per call.\n\n**Type:** exactly one of `typeExternalId`, `typeId` or `typeName`. **Location:** exactly one of `locationExternalId` (as used by the Enterprise Locations endpoints) or `locationId`. The location must be a **site**: a location on a site level of its hierarchy, or a location with no child locations when the workspace has no levels.\n\nAn existing sub-location can be renamed, moved to another site, and have its `status` changed. Its type cannot change (`400`). Names are unique per site and type (case-insensitive).\n\nSet attribute values with Bulk Upsert Sub-Location Attribute Values. The call is all-or-nothing; the error message names the failing row (e.g. `subLocations[3]`).\n\nRequires the **Public API** workspace feature, `CAN_MANAGE_LOCATIONS`, and **Sub-Locations** enabled for the workspace (contact Xenia to enable it; until then every sub-location endpoint returns `404`).","href":"/api-reference/endpoints/enterprise-sub-locations/bulk-upsert-sub-locations"}}},"mdxSourceWithNoJs":null},"mdxExtracts":{"tableOfContents":[],"codeExamples":{}},"jsLinks":[],"openApiReferenceData":{"operation":{"summary":"Bulk Upsert Sub-Locations","description":"Idempotently creates or updates sub-locations (e.g. a specific fridge in a store), keyed by your own `externalId`. Safe to re-run.\n\nUp to **2000** rows per call.\n\n**Identity:** `externalId` → `id`. A new sub-location requires an `externalId`. The `externalId` is the same one shown and editable in the web app. Send both to change a sub-location's `externalId` (match by `id`); if they name two different sub-locations the row is rejected. Each sub-location can be matched by only one row per call.\n\n**Type:** exactly one of `typeExternalId`, `typeId` or `typeName`. **Location:** exactly one of `locationExternalId` (as used by the Enterprise Locations endpoints) or `locationId`. The location must be a **site**: a location on a site level of its hierarchy, or a location with no child locations when the workspace has no levels.\n\nAn existing sub-location can be renamed, moved to another site, and have its `status` changed. Its type cannot change (`400`). Names are unique per site and type (case-insensitive).\n\nSet attribute values with Bulk Upsert Sub-Location Attribute Values. The call is all-or-nothing; the error message names the failing row (e.g. `subLocations[3]`).\n\nRequires the **Public API** workspace feature, `CAN_MANAGE_LOCATIONS`, and **Sub-Locations** enabled for the workspace (contact Xenia to enable it; until then every sub-location endpoint returns `404`).","tags":["Enterprise Sub-Locations"],"parameters":["b5aaa4bf-6ed8-41f6-a2dc-8fa8e3f50485"],"requestBody":"b9a228f2-258f-4a7b-8429-fd54f040711b","responses":{"200":"81e75eb9-bc20-46cc-bc05-7ab9e36751c6","400":"bf085049-e167-4c13-9777-91148b6983ea","401":"d456f340-ca00-4b0a-8cd9-c3ca655a4ce1","403":"f5a427bd-f015-48ef-baa4-3b46bc9e1749","404":"142b11b7-d358-490f-8ef6-b28c91a6c937","409":"f97cb593-dea4-4a76-ac7f-6229ca48019e","422":"7e233a3f-0fa7-4344-a31d-b8d92c24cc77","500":"88192eb0-a495-4c3f-8eb9-e1ee232bfe06"},"security":["79f0a9ba-c699-4ac8-8cbf-dda1fb26e6a4"],"method":"post","type":"path","servers":["0c88cd1a-653a-4164-93a8-ee61374cee2e"],"path":"/api/v1/mgt/enterprise/workspaces/{workspaceId}/sub-locations/bulk-upsert","baseUrlOptions":["https://api.xenia.team"],"title":"Bulk Upsert Sub-Locations","codeSamples":[],"requiredOnlyExamples":false,"requestExampleType":"generated","responseExampleType":"generated"},"dependencies":{"parameters":{"b5aaa4bf-6ed8-41f6-a2dc-8fa8e3f50485":{"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":{"subLocations":{"type":"array","minItems":1,"maxItems":2000,"items":{"type":"object","properties":{"name":{"type":"string","maxLength":255,"isRequired":true,"uniqueKey":"subLocations.items.[INDEX].name","typeLabel":"string"},"externalId":{"type":"string","maxLength":255,"description":"Your own stable key. Required to create.","uniqueKey":"subLocations.items.[INDEX].externalId","typeLabel":"string"},"id":{"type":"string","format":"uuid","description":"Xenia sub-location id.","uniqueKey":"subLocations.items.[INDEX].id","typeLabel":"string\u003cuuid>"},"typeExternalId":{"type":"string","maxLength":255,"uniqueKey":"subLocations.items.[INDEX].typeExternalId","typeLabel":"string"},"typeId":{"type":"string","format":"uuid","uniqueKey":"subLocations.items.[INDEX].typeId","typeLabel":"string\u003cuuid>"},"typeName":{"type":"string","maxLength":120,"uniqueKey":"subLocations.items.[INDEX].typeName","typeLabel":"string"},"locationExternalId":{"type":"string","maxLength":255,"uniqueKey":"subLocations.items.[INDEX].locationExternalId","typeLabel":"string"},"locationId":{"type":"string","format":"uuid","uniqueKey":"subLocations.items.[INDEX].locationId","typeLabel":"string\u003cuuid>"},"status":{"type":"string","enum":["active","inactive","out_of_service"],"description":"Defaults to `active` on create; unchanged when omitted.","uniqueKey":"subLocations.items.[INDEX].status","typeLabel":"enum\u003cstring>"}},"required":["name"],"uniqueKey":"subLocations.items.[INDEX]","typeLabel":"object"},"isRequired":true,"uniqueKey":"subLocations","typeLabel":"object[]"}},"required":["subLocations"],"uniqueKey":"","typeLabel":"object"},"example":{"subLocations":[{"externalId":"STORE-001-FRIDGE-1","name":"Fridge 1","typeExternalId":"FRIDGE","locationExternalId":"STORE-001"},{"externalId":"STORE-001-FRIDGE-2","name":"Fridge 2","typeName":"Fridge","locationExternalId":"STORE-001","status":"out_of_service"}]},"examples":{"Example":{"title":"Example","value":{"subLocations":[{"externalId":"STORE-001-FRIDGE-1","name":"Fridge 1","typeExternalId":"FRIDGE","locationExternalId":"STORE-001"},{"externalId":"STORE-001-FRIDGE-2","name":"Fridge 2","typeName":"Fridge","locationExternalId":"STORE-001","status":"out_of_service"}]}}},"exampleType":"examples"}},"exampleType":"examples"},"responses":{"81e75eb9-bc20-46cc-bc05-7ab9e36751c6":{"description":"One result per input row, in request order.","content":{"application/json":{"example":{"data":[{"externalId":"STORE-001-FRIDGE-1","id":"54fd6d64-4e76-4c9e-8171-f1a4f1c95bf9","name":"Fridge 1","created":true}],"extra_meta":{"message":"Sub-locations upserted"}},"examples":{"Example":{"title":"Example","value":{"data":[{"externalId":"STORE-001-FRIDGE-1","id":"54fd6d64-4e76-4c9e-8171-f1a4f1c95bf9","name":"Fridge 1","created":true}],"extra_meta":{"message":"Sub-locations upserted"}}}},"exampleType":"examples"}},"exampleType":"examples"},"bf085049-e167-4c13-9777-91148b6983ea":{"description":"Bad Request - the row would change a sub-location's type, an `id` does not resolve, `id` and `externalId` name different sub-locations, or two rows match the same sub-location.","content":{"_mintlify/placeholder":{"schema":{"type":"object","description":""}}}},"d456f340-ca00-4b0a-8cd9-c3ca655a4ce1":{"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":""}}}},"f5a427bd-f015-48ef-baa4-3b46bc9e1749":{"description":"Forbidden - missing `CAN_MANAGE_LOCATIONS`, or the **Public API** feature is not enabled for the workspace.","content":{"_mintlify/placeholder":{"schema":{"type":"object","description":""}}}},"142b11b7-d358-490f-8ef6-b28c91a6c937":{"description":"Not Found - Sub-Locations is not enabled for this workspace.","content":{"_mintlify/placeholder":{"schema":{"type":"object","description":""}}}},"f97cb593-dea4-4a76-ac7f-6229ca48019e":{"description":"Conflict - another sub-location of this type at this site already has this name (`SUB_LOCATION_NAME_TAKEN`), or the `externalId` is used by another sub-location (`EXTERNAL_ID_TAKEN`).","content":{"_mintlify/placeholder":{"schema":{"type":"object","description":""}}}},"7e233a3f-0fa7-4344-a31d-b8d92c24cc77":{"description":"Unprocessable Entity - body failed validation, the type or location does not resolve in this workspace, the type is archived (create only), or the location is not a site (`SITE_NOT_LEAF`).","content":{"_mintlify/placeholder":{"schema":{"type":"object","description":""}}}},"88192eb0-a495-4c3f-8eb9-e1ee232bfe06":{"description":"Internal Server Error.","content":{"_mintlify/placeholder":{"schema":{"type":"object","description":""}}}}},"security":{"79f0a9ba-c699-4ac8-8cbf-dda1fb26e6a4":{"clientKey":{"type":"apiKey","in":"header","name":"x-client-key","scopes":[],"schemeName":"clientKey"},"clientSecret":{"type":"apiKey","in":"header","name":"x-client-secret","scopes":[],"schemeName":"clientSecret"}}},"servers":{"0c88cd1a-653a-4164-93a8-ee61374cee2e":{"url":"https://api.xenia.team"}},"processedSecurityOptions":[{"schemes":[{"scheme":{"type":"apiKey","in":"header","name":"x-client-key","scopes":[],"schemeName":"clientKey"},"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":[],"schemeName":"clientSecret"},"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-sub-locations/bulk_upsert_sub_locations.json"},"subdomain":"xeniateam","siteName":"Xenia Team API","title":"Bulk Upsert Sub-Locations - Xenia Team API","navMaps":{"firstHrefInVersion":{},"firstHrefInLanguage":{}},"lastModified":"2026-11-09T11:08:50.276Z","originalFileLocation":"api-reference/endpoints/enterprise-sub-locations/bulk-upsert-sub-locations.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=\"Idempotently creates or updates sub-locations (e.g. a specific fridge in a store), keyed by your own externalId. Safe to re-run. Up to 2000 rows per call. Identity: externalId → id. A new sub-location requires an externalId. The externalId is the same one shown and editable in the web app. Send both to change a sub-location\u0026#x27;s externalId (match by id); if they name two different sub-locations the row is rejected. Each sub-location can be matched by only one row per call. Type: exactly one of typeExternalId, typeId or typeName. Location: exactly one of locationExternalId (as used by the Enterprise Locations endpoints) or locationId. The location must be a site: a location on a site level of its hierarchy, or a location with no child locations when the workspace has no levels. An existing sub-location can be renamed, moved to another site, and have its status changed. Its type cannot change (400). Names are unique per site and type (case-insensitive). Set attribute values with Bulk Upsert Sub-Location Attribute Values. The call is all-or-nothing; the error message names the failing row (e.g. subLocations[3]). Requires the Public API workspace feature, CAN_MANAGE_LOCATIONS, and Sub-Locations enabled for the workspace (contact Xenia to enable it; until then every sub-location endpoint returns 404).\">\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 Sub-Locations - Xenia Team API\">\u003cmeta data-mint-head property=\"og:description\" content=\"Idempotently creates or updates sub-locations (e.g. a specific fridge in a store), keyed by your own externalId. Safe to re-run. Up to 2000 rows per call. Identity: externalId → id. A new sub-location requires an externalId. The externalId is the same one shown and editable in the web app. Send both to change a sub-location\u0026#x27;s externalId (match by id); if they name two different sub-locations the row is rejected. Each sub-location can be matched by only one row per call. Type: exactly one of typeExternalId, typeId or typeName. Location: exactly one of locationExternalId (as used by the Enterprise Locations endpoints) or locationId. The location must be a site: a location on a site level of its hierarchy, or a location with no child locations when the workspace has no levels. An existing sub-location can be renamed, moved to another site, and have its status changed. Its type cannot change (400). Names are unique per site and type (case-insensitive). Set attribute values with Bulk Upsert Sub-Location Attribute Values. The call is all-or-nothing; the error message names the failing row (e.g. subLocations[3]). Requires the Public API workspace feature, CAN_MANAGE_LOCATIONS, and Sub-Locations enabled for the workspace (contact Xenia to enable it; until then every sub-location endpoint returns 404).\">\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-sub-locations/bulk-upsert-sub-locations\">\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+Sub-Locations\u0026amp;title=Bulk+Upsert+Sub-Locations\u0026amp;description=Idempotently+creates+or+updates+sub-locations+%28e.g.+a+specific+fridge+in+a+store%29%2C+keyed+by+your+own+%60externalId%60.+Safe+to+re-run.%0A%0AUp+to+**2000**+rows+per+call\u0026amp;theme=10a62aa493e86ee87dcc54c2\u0026amp;signature=8931aff3e5396ced5fab427bf746f3d68829a349584375cddb13dbd9e73b9216\">\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 Sub-Locations - Xenia Team API\">\u003cmeta data-mint-head name=\"twitter:description\" content=\"Idempotently creates or updates sub-locations (e.g. a specific fridge in a store), keyed by your own externalId. Safe to re-run. Up to 2000 rows per call. Identity: externalId → id. A new sub-location requires an externalId. The externalId is the same one shown and editable in the web app. Send both to change a sub-location\u0026#x27;s externalId (match by id); if they name two different sub-locations the row is rejected. Each sub-location can be matched by only one row per call. Type: exactly one of typeExternalId, typeId or typeName. Location: exactly one of locationExternalId (as used by the Enterprise Locations endpoints) or locationId. The location must be a site: a location on a site level of its hierarchy, or a location with no child locations when the workspace has no levels. An existing sub-location can be renamed, moved to another site, and have its status changed. Its type cannot change (400). Names are unique per site and type (case-insensitive). Set attribute values with Bulk Upsert Sub-Location Attribute Values. The call is all-or-nothing; the error message names the failing row (e.g. subLocations[3]). Requires the Public API workspace feature, CAN_MANAGE_LOCATIONS, and Sub-Locations enabled for the workspace (contact Xenia to enable it; until then every sub-location endpoint returns 404).\">\u003cmeta data-mint-head name=\"twitter:image\" content=\"https://xeniateam.mintlify.site/_mintlify/api/og/v2?division=Enterprise+Sub-Locations\u0026amp;title=Bulk+Upsert+Sub-Locations\u0026amp;description=Idempotently+creates+or+updates+sub-locations+%28e.g.+a+specific+fridge+in+a+store%29%2C+keyed+by+your+own+%60externalId%60.+Safe+to+re-run.%0A%0AUp+to+**2000**+rows+per+call\u0026amp;theme=10a62aa493e86ee87dcc54c2\u0026amp;signature=8931aff3e5396ced5fab427bf746f3d68829a349584375cddb13dbd9e73b9216\">\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-sub-locations/bulk-upsert-sub-locations\">\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-sub-locations/bulk-upsert-sub-locations.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-sub-locations/bulk-upsert-sub-locations#webpage\",\"url\":\"https://docs.xenia.team/api-reference/endpoints/enterprise-sub-locations/bulk-upsert-sub-locations\",\"name\":\"Bulk Upsert Sub-Locations\",\"description\":\"Idempotently creates or updates sub-locations (e.g. a specific fridge in a store), keyed by your own externalId. Safe to re-run. Up to 2000 rows per call. Identity: externalId → id. A new sub-location requires an externalId. The externalId is the same one shown and editable in the web app. Send both to change a sub-location's externalId (match by id); if they name two different sub-locations the row is rejected. Each sub-location can be matched by only one row per call. Type: exactly one of typeExternalId, typeId or typeName. Location: exactly one of locationExternalId (as used by the Enterprise Locations endpoints) or locationId. The location must be a site: a location on a site level of its hierarchy, or a location with no child locations when the workspace has no levels. An existing sub-location can be renamed, moved to another site, and have its status changed. Its type cannot change (400). Names are unique per site and type (case-insensitive). Set attribute values with Bulk Upsert Sub-Location Attribute Values. The call is all-or-nothing; the error message names the failing row (e.g. subLocations[3]). Requires the Public API workspace feature, CAN_MANAGE_LOCATIONS, and Sub-Locations enabled for the workspace (contact Xenia to enable it; until then every sub-location endpoint returns 404).\",\"dateModified\":\"2026-11-09T11:08:50.276Z\",\"isPartOf\":{\"@id\":\"https://docs.xenia.team#website\"},\"breadcrumb\":{\"@id\":\"https://docs.xenia.team/api-reference/endpoints/enterprise-sub-locations/bulk-upsert-sub-locations#breadcrumb\"}},{\"@type\":\"BreadcrumbList\",\"@id\":\"https://docs.xenia.team/api-reference/endpoints/enterprise-sub-locations/bulk-upsert-sub-locations#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Enterprise Sub-Locations\",\"item\":\"https://docs.xenia.team/api-reference/endpoints/enterprise-sub-locations/bulk-upsert-sub-location-types\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Bulk Upsert Sub-Locations\",\"item\":\"https://docs.xenia.team/api-reference/endpoints/enterprise-sub-locations/bulk-upsert-sub-locations\"}]},{\"@type\":[\"TechArticle\",\"APIReference\"],\"@id\":\"https://docs.xenia.team/api-reference/endpoints/enterprise-sub-locations/bulk-upsert-sub-locations#apireference\",\"headline\":\"Bulk Upsert Sub-Locations\",\"name\":\"Bulk Upsert Sub-Locations\",\"description\":\"Idempotently creates or updates sub-locations (e.g. a specific fridge in a store), keyed by your own externalId. Safe to re-run. Up to 2000 rows per call. Identity: externalId → id. A new sub-location requires an externalId. The externalId is the same one shown and editable in the web app. Send both to change a sub-location's externalId (match by id); if they name two different sub-locations the row is rejected. Each sub-location can be matched by only one row per call. Type: exactly one of typeExternalId, typeId or typeName. Location: exactly one of locationExternalId (as used by the Enterprise Locations endpoints) or locationId. The location must be a site: a location on a site level of its hierarchy, or a location with no child locations when the workspace has no levels. An existing sub-location can be renamed, moved to another site, and have its status changed. Its type cannot change (400). Names are unique per site and type (case-insensitive). Set attribute values with Bulk Upsert Sub-Location Attribute Values. The call is all-or-nothing; the error message names the failing row (e.g. subLocations[3]). Requires the Public API workspace feature, CAN_MANAGE_LOCATIONS, and Sub-Locations enabled for the workspace (contact Xenia to enable it; until then every sub-location endpoint returns 404).\",\"url\":\"https://docs.xenia.team/api-reference/endpoints/enterprise-sub-locations/bulk-upsert-sub-locations\",\"mainEntityOfPage\":{\"@id\":\"https://docs.xenia.team/api-reference/endpoints/enterprise-sub-locations/bulk-upsert-sub-locations#webpage\"},\"dateModified\":\"2026-11-09T11:08:50.276Z\",\"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","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","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","description":"Returns every sub-location type in the workspace with its attribute definitions and the `externalId` you mapped to each type and attribute (or `null`). Use it to reconcile your own ids and to look up attribute `key`s and option ids.\n\nRequires the **Public API** workspace feature, `CAN_MANAGE_LOCATIONS`, and **Sub-Locations** enabled for the workspace (contact Xenia to enable it; until then every sub-location endpoint returns `404`).","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","description":"Returns one page of sub-locations with their type, site and attribute values, plus the `externalId`s you mapped to each. Attribute values are keyed by attribute `key`; select values hold option ids (resolve labels with List Sub-Location Types).\n\nResults are ordered stably. Page through with `offset` until a page returns fewer than `limit` rows.\n\nRequires the **Public API** workspace feature, `CAN_MANAGE_LOCATIONS`, and **Sub-Locations** enabled for the workspace (contact Xenia to enable it; until then every sub-location endpoint returns `404`).","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 Sub-Locations - Xenia Team API","buildId":"dpl_DTau1J5HqS9UTgVSDwGksstFWtPa","deploymentId":"dpl_DTau1J5HqS9UTgVSDwGksstFWtPa","dynamics":["c2aa737661","2b790eda92","b0f84f53ff","a9bb46feb3"],"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","ApiExamples-BI4qNJ2c.js","isEqual-BfaiBbcl.js","usePlaygroundInputsStore-BD3uyr8j.js","shallow-D8iEBr5z.js","getApiPlaygroundDisplay-CgNP4lzR.js","CodeSnippet-CX-QHuMs.js","CodeSnippets-VlXE-ZUf.js","Page-D9ithiIZ.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"]}