Uploads a schedule file (P6 XER/XML, Phoenix PPX, or Microsoft Project
MPP) and enqueues a sync job to parse and ingest it.
Required scope:write:schedule_files
Constraints:
file must be a multipart/form-data upload.
file_type must be one of xer, xml, ppx, mpp.
Within the same partner family (XER/XML share a family; PPX and MPP
are each their own), the most recent file’s file_type cannot change
between uploads. Switching formats inside a partner returns 422
file_type_mismatch. PPX after XER is allowed because they belong
to different partners.
customer_project_id, if provided, must reference a customer
project owned by the authenticated company.
422 error codes:
invalid_request — missing required parameter (name, file, or
file_type) or file is not a multipart upload.
file_type_mismatch — the most recent file in the same partner
family uses a different file_type.
validation_error — the underlying record failed model-level
validation (including unknown file_type values).
Bearer token obtained from POST /oauth/token. Send as Authorization: Bearer <token>. Tokens expire after 1 hour; refresh by requesting a new one with the same client credentials.
The scheduling integration the file was uploaded under. Null for files uploaded before that link existed, or whose integration was disconnected.
Was this page helpful?
{"docsConfig":{"theme":"mint","$schema":"https://mintlify.com/docs.json","name":"Kroo","colors":{"primary":"#0c7c59","light":"#07C983","dark":"#15803D"},"logo":{"light":"https://dkq5g4kc673o0.cloudfront.net/Kroo%20Logo","dark":"https://dkq5g4kc673o0.cloudfront.net/Kroo%20Logo"},"favicon":"https://mintcdn.com/kroo/Bw1eAmcSMLIYa-Xk/favicon.ico?fit=max\u0026auto=format\u0026n=Bw1eAmcSMLIYa-Xk\u0026q=85\u0026s=8665f3c89de110a01675ff3763e5965d","navbar":{"links":[{"href":"mailto:implementations@getkroo.com","label":"Support"}]},"footer":{"socials":{"linkedin":"https://www.linkedin.com/company/kroo-construction"}},"contextual":{"options":["copy","view","chatgpt","claude","perplexity","mcp","cursor","vscode"],"display":"header"},"styling":{"latex":false},"navigation":{"global":{"anchors":[{"anchor":"Support","icon":"envelope","href":"mailto:implementations@getkroo.com"}]},"pages":[]}},"deployment":{"deploymentMetadataValue":{"subdomain":"kroo","hasAudioNarration":false,"actualSubdomain":"kroo","customDomains":["guide.getkroo.com"],"gitSource":{"type":"github","owner":"getkroo","repo":"docs","deployBranch":"main","contentDirectory":"","isPrivate":true,"mountPath":"","label":""},"chroma":{"liveDeploymentHistoryId":"6adbc5f23501f66ae6b01257","collectionId":"4a7529fd-b11b-44b4-b0f4-9fd9d6c6ff00","schemaVersion":"v3","latestBuiltDeploymentHistoryId":"6adbc5f23501f66ae6b01257"},"feedback":{"edits":true,"issues":true,"thumbs":true},"entitlements":{},"buildId":"6adbc5f23501f66ae6b01257","clientVersion":"0.0.4006","searchFilterCounts":[{"language":"default","tag":"Guides","count":13},{"language":"default","tag":"Platform","count":9},{"language":"default","tag":"Admin \u0026 Support","count":7},{"language":"default","tag":"API Reference","count":6},{"language":"default","tag":"Using the App","count":5},{"language":"default","tag":"Setup","count":5},{"language":"default","tag":"Permissions","count":4},{"language":"default","tag":"Schedule Files","count":4},{"language":"default","tag":"Two-Way Sync","count":3},{"language":"default","tag":"Data Lifecycle","count":3}]},"assistantConfig":{},"basePath":"","hasChatPermissions":false,"hasWebMcpPermissions":false,"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":"editor-v7-file-tree","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-integrations-settings","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-pr-grouping","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"custom-prefix","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"analytics-v7","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"user-flows-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"no-publish-flow","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-onboarding","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"llms-txt-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"pause-universal-search-reconcile","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":"per-site-search-delta","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":"editor-private-page-search","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":"editor-nav-generations","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"billing-page-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workspace-projects","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"assistant-v5","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"byok-sep-25","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fork-pr-previews","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"revalidation-jwt","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"vite-origin","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-agent-model-picker","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"billing-updated-9-15","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-sso-scim","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"hobby-abuse-scan","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"dashboard-inbox","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-signup","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-enabled","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false}],"googleFontsInlined":false},"customCss":[{"filePath":"custom.css","content":".navbar-logo img{width:auto;height:auto;max-height:64px}"}],"page":{"pagePath":"api-reference/schedule-files/upload-a-schedule-file","slug":"/api-reference/schedule-files/upload-a-schedule-file","pageMetadata":{"title":"Upload a schedule file","description":"Uploads a schedule file (P6 XER/XML, Phoenix PPX, or Microsoft Project\nMPP) and enqueues a sync job to parse and ingest it.\n\n**Required scope:** `write:schedule_files`\n\n**Constraints:**\n- `file` must be a multipart/form-data upload.\n- `file_type` must be one of `xer`, `xml`, `ppx`, `mpp`.\n- Within the same partner family (XER/XML share a family; PPX and MPP\n are each their own), the most recent file's `file_type` cannot change\n between uploads. Switching formats inside a partner returns 422\n `file_type_mismatch`. PPX after XER is allowed because they belong\n to different partners.\n- `customer_project_id`, if provided, must reference a customer\n project owned by the authenticated company.\n\n**422 error codes:**\n- `invalid_request` — missing required parameter (`name`, `file`, or\n `file_type`) or `file` is not a multipart upload.\n- `file_type_mismatch` — the most recent file in the same partner\n family uses a different `file_type`.\n- `validation_error` — the underlying record failed model-level\n validation (including unknown `file_type` values).\n","deprecated":null,"version":null,"openapi":"https://api.getkroo.com/api/v3/openapi.yaml post /schedule_files","href":"/api-reference/schedule-files/upload-a-schedule-file","autogeneratedByOpenApi":true},"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 li: \"li\",\n p: \"p\",\n strong: \"strong\",\n ul: \"ul\",\n ..._provideComponents(),\n ...props.components\n };\n return _jsxs(_Fragment, {\n children: [_jsx(_components.p, {\n children: \"Uploads a schedule file (P6 XER/XML, Phoenix PPX, or Microsoft Project\\nMPP) and enqueues a sync job to parse and ingest it.\"\n }), \"\\n\", _jsxs(_components.p, {\n children: [_jsx(_components.strong, {\n children: \"Required scope:\"\n }), \" \", _jsx(_components.code, {\n children: \"write:schedule_files\"\n })]\n }), \"\\n\", _jsx(_components.p, {\n children: _jsx(_components.strong, {\n children: \"Constraints:\"\n })\n }), \"\\n\", _jsxs(_components.ul, {\n children: [\"\\n\", _jsxs(_components.li, {\n children: [_jsx(_components.code, {\n children: \"file\"\n }), \" must be a multipart/form-data upload.\"]\n }), \"\\n\", _jsxs(_components.li, {\n children: [_jsx(_components.code, {\n children: \"file_type\"\n }), \" must be one of \", _jsx(_components.code, {\n children: \"xer\"\n }), \", \", _jsx(_components.code, {\n children: \"xml\"\n }), \", \", _jsx(_components.code, {\n children: \"ppx\"\n }), \", \", _jsx(_components.code, {\n children: \"mpp\"\n }), \".\"]\n }), \"\\n\", _jsxs(_components.li, {\n children: [\"Within the same partner family (XER/XML share a family; PPX and MPP\\nare each their own), the most recent file’s \", _jsx(_components.code, {\n children: \"file_type\"\n }), \" cannot change\\nbetween uploads. Switching formats inside a partner returns 422\\n\", _jsx(_components.code, {\n children: \"file_type_mismatch\"\n }), \". PPX after XER is allowed because they belong\\nto different partners.\"]\n }), \"\\n\", _jsxs(_components.li, {\n children: [_jsx(_components.code, {\n children: \"customer_project_id\"\n }), \", if provided, must reference a customer\\nproject owned by the authenticated company.\"]\n }), \"\\n\"]\n }), \"\\n\", _jsx(_components.p, {\n children: _jsx(_components.strong, {\n children: \"422 error codes:\"\n })\n }), \"\\n\", _jsxs(_components.ul, {\n children: [\"\\n\", _jsxs(_components.li, {\n children: [_jsx(_components.code, {\n children: \"invalid_request\"\n }), \" — missing required parameter (\", _jsx(_components.code, {\n children: \"name\"\n }), \", \", _jsx(_components.code, {\n children: \"file\"\n }), \", or\\n\", _jsx(_components.code, {\n children: \"file_type\"\n }), \") or \", _jsx(_components.code, {\n children: \"file\"\n }), \" is not a multipart upload.\"]\n }), \"\\n\", _jsxs(_components.li, {\n children: [_jsx(_components.code, {\n children: \"file_type_mismatch\"\n }), \" — the most recent file in the same partner\\nfamily uses a different \", _jsx(_components.code, {\n children: \"file_type\"\n }), \".\"]\n }), \"\\n\", _jsxs(_components.li, {\n children: [_jsx(_components.code, {\n children: \"validation_error\"\n }), \" — the underlying record failed model-level\\nvalidation (including unknown \", _jsx(_components.code, {\n children: \"file_type\"\n }), \" values).\"]\n }), \"\\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":"Upload a schedule file","description":"Uploads a schedule file (P6 XER/XML, Phoenix PPX, or Microsoft Project\nMPP) and enqueues a sync job to parse and ingest it.\n\n**Required scope:** `write:schedule_files`\n\n**Constraints:**\n- `file` must be a multipart/form-data upload.\n- `file_type` must be one of `xer`, `xml`, `ppx`, `mpp`.\n- Within the same partner family (XER/XML share a family; PPX and MPP\n are each their own), the most recent file's `file_type` cannot change\n between uploads. Switching formats inside a partner returns 422\n `file_type_mismatch`. PPX after XER is allowed because they belong\n to different partners.\n- `customer_project_id`, if provided, must reference a customer\n project owned by the authenticated company.\n\n**422 error codes:**\n- `invalid_request` — missing required parameter (`name`, `file`, or\n `file_type`) or `file` is not a multipart upload.\n- `file_type_mismatch` — the most recent file in the same partner\n family uses a different `file_type`.\n- `validation_error` — the underlying record failed model-level\n validation (including unknown `file_type` values).\n","deprecated":null,"version":null,"openapi":"https://api.getkroo.com/api/v3/openapi.yaml post /schedule_files","href":"/api-reference/schedule-files/upload-a-schedule-file","autogeneratedByOpenApi":true}}},"mdxSourceWithNoJs":null},"mdxExtracts":{"tableOfContents":[],"codeExamples":{}},"jsLinks":[],"openApiReferenceData":{"operation":{"summary":"Upload a schedule file","tags":["Schedule Files"],"operationId":"uploadScheduleFile","description":"Uploads a schedule file (P6 XER/XML, Phoenix PPX, or Microsoft Project\nMPP) and enqueues a sync job to parse and ingest it.\n\n**Required scope:** `write:schedule_files`\n\n**Constraints:**\n- `file` must be a multipart/form-data upload.\n- `file_type` must be one of `xer`, `xml`, `ppx`, `mpp`.\n- Within the same partner family (XER/XML share a family; PPX and MPP\n are each their own), the most recent file's `file_type` cannot change\n between uploads. Switching formats inside a partner returns 422\n `file_type_mismatch`. PPX after XER is allowed because they belong\n to different partners.\n- `customer_project_id`, if provided, must reference a customer\n project owned by the authenticated company.\n\n**422 error codes:**\n- `invalid_request` — missing required parameter (`name`, `file`, or\n `file_type`) or `file` is not a multipart upload.\n- `file_type_mismatch` — the most recent file in the same partner\n family uses a different `file_type`.\n- `validation_error` — the underlying record failed model-level\n validation (including unknown `file_type` values).\n","security":["468b9991-47d1-4156-bd05-315b81f69026"],"parameters":[],"responses":{"201":"1534dadb-bf79-4b36-9998-67bf724bf1e2","401":"190d2b04-20b4-4420-a9ed-335450943265","403":"266138c4-72de-4d02-901d-598b7bf42e57","404":"1e78d88a-e2e7-4e4a-bfd5-1fddc511c302","422":"5d1288d4-310f-466b-9fa0-47fc0ce427a4","429":"1fc00032-63f6-455e-bafa-b480f9f77474"},"requestBody":"f7b513ea-d142-4908-b116-cfb03fd47f2c","method":"post","type":"path","servers":["bf2fa314-fac3-4063-a317-4bc9bf6701cf"],"path":"/schedule_files","baseUrlOptions":["https://api.getkroo.com/api/v3"],"title":"Upload a schedule file","codeSamples":[],"requiredOnlyExamples":false,"requestExampleType":"generated","responseExampleType":"generated"},"dependencies":{"parameters":{},"requestBody":{"content":{"multipart/form-data":{"schema":{"type":"object","required":["name","file","file_type"],"properties":{"name":{"type":"string","example":"October Baseline","isRequired":true,"uniqueKey":"name","typeLabel":"string"},"file":{"type":"string","format":"binary","description":"The schedule file to upload.","isRequired":true,"uniqueKey":"file","typeLabel":"file"},"file_type":{"type":"string","enum":["xer","xml","ppx","mpp"],"example":"xer","isRequired":true,"uniqueKey":"file_type","typeLabel":"enum\u003cstring>"},"is_baseline":{"type":"boolean","default":false,"uniqueKey":"is_baseline","typeLabel":"boolean"},"customer_project_id":{"oneOf":[{"type":"integer","format":"int64","description":"Optional. Associate the file with a customer project owned by the authenticated company.","uniqueKey":"customer_project_id.oneOf.0","typeLabel":"integer\u003cint64>"},{"type":"null","format":"int64","description":"Optional. Associate the file with a customer project owned by the authenticated company.","uniqueKey":"customer_project_id.oneOf.1","typeLabel":"null"}],"uniqueKey":"customer_project_id","typeLabel":"integer\u003cint64> | null"}},"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"name":"October Baseline","file":"\u003cstring>","file_type":"xer","is_baseline":false,"customer_project_id":123}}},"exampleType":"generated"}},"required":true,"exampleType":"generated"},"responses":{"1534dadb-bf79-4b36-9998-67bf724bf1e2":{"description":"File uploaded; sync job enqueued","content":{"application/json":{"schema":{"type":"object","required":["id","name","is_baseline","company_id","customer_project","created_at"],"properties":{"id":{"type":"integer","format":"int64","description":"Unique identifier for the schedule file.","example":482,"isRequired":true,"uniqueKey":"id","typeLabel":"integer\u003cint64>"},"name":{"type":"string","description":"Human-readable name supplied when the file was uploaded.","example":"October 2026 Baseline","isRequired":true,"uniqueKey":"name","typeLabel":"string"},"is_baseline":{"type":"boolean","description":"True if the file was marked as a baseline at upload time; baselines are preserved for variance reporting.","example":false,"isRequired":true,"uniqueKey":"is_baseline","typeLabel":"boolean"},"company_id":{"type":"integer","format":"int64","description":"ID of the company that owns this file. Always equal to the authenticated client's company.","example":1042,"isRequired":true,"uniqueKey":"company_id","typeLabel":"integer\u003cint64>"},"customer_project":{"oneOf":[{"type":"object","description":"Project association if one was provided on upload. `null` for unassociated files.","properties":{"id":{"type":"integer","format":"int64","description":"Kroo-side project ID.","uniqueKey":"customer_project.oneOf.0.id","typeLabel":"integer\u003cint64>"},"name":{"type":"string","description":"Human-readable project name.","uniqueKey":"customer_project.oneOf.0.name","typeLabel":"string"},"source":{"type":"string","description":"Partner source the project was synced from (e.g. `procore`).","uniqueKey":"customer_project.oneOf.0.source","typeLabel":"string"},"customer_project_id":{"type":"string","description":"Project identifier in the source partner system.","uniqueKey":"customer_project.oneOf.0.customer_project_id","typeLabel":"string"}},"isRequired":true,"uniqueKey":"customer_project.oneOf.0","typeLabel":"object"},{"type":"null","description":"Project association if one was provided on upload. `null` for unassociated files.","properties":{"id":{"type":"integer","format":"int64","description":"Kroo-side project ID."},"name":{"type":"string","description":"Human-readable project name."},"source":{"type":"string","description":"Partner source the project was synced from (e.g. `procore`)."},"customer_project_id":{"type":"string","description":"Project identifier in the source partner system."}},"isRequired":true,"uniqueKey":"customer_project.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"customer_project","typeLabel":"object | null"},"created_at":{"type":"string","format":"date-time","description":"ISO 8601 timestamp of when the upload was accepted.","example":"2026-04-27T15:30:00Z","isRequired":true,"uniqueKey":"created_at","typeLabel":"string\u003cdate-time>"},"file_type":{"type":"string","enum":["xer","xml","ppx","mpp"],"description":"Format the file was uploaded as, which also determines the scheduling integration it belongs to.","example":"xer","uniqueKey":"file_type","typeLabel":"enum\u003cstring>"},"partner_token_id":{"oneOf":[{"type":"integer","format":"int64","description":"The scheduling integration the file was uploaded under. Null for files uploaded before that link existed, or whose integration was disconnected.","uniqueKey":"partner_token_id.oneOf.0","typeLabel":"integer\u003cint64>"},{"type":"null","format":"int64","description":"The scheduling integration the file was uploaded under. Null for files uploaded before that link existed, or whose integration was disconnected.","uniqueKey":"partner_token_id.oneOf.1","typeLabel":"null"}],"uniqueKey":"partner_token_id","typeLabel":"integer\u003cint64> | null"}},"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"id":482,"name":"October 2026 Baseline","is_baseline":false,"company_id":1042,"customer_project":{"id":123,"name":"\u003cstring>","source":"\u003cstring>","customer_project_id":"\u003cstring>"},"created_at":"2026-04-27T15:30:00Z","file_type":"xer","partner_token_id":123}}},"exampleType":"generated"}},"exampleType":"generated"},"190d2b04-20b4-4420-a9ed-335450943265":{"description":"Missing or invalid token","content":{"application/json":{"schema":{"type":"object","required":["error","error_description"],"properties":{"error":{"type":"string","description":"Machine-readable error code. See the operation description for the codes a specific endpoint can return.","isRequired":true,"uniqueKey":"error","typeLabel":"string"},"error_description":{"type":"string","description":"Human-readable description of the error. Safe to log; do not show to end users verbatim.","isRequired":true,"uniqueKey":"error_description","typeLabel":"string"}},"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"error":"\u003cstring>","error_description":"\u003cstring>"}}},"exampleType":"generated"}},"exampleType":"generated"},"266138c4-72de-4d02-901d-598b7bf42e57":{"description":"Token lacks required scope","content":{"application/json":{"schema":{"type":"object","required":["error","error_description"],"properties":{"error":{"type":"string","description":"Machine-readable error code. See the operation description for the codes a specific endpoint can return.","isRequired":true,"uniqueKey":"error","typeLabel":"string"},"error_description":{"type":"string","description":"Human-readable description of the error. Safe to log; do not show to end users verbatim.","isRequired":true,"uniqueKey":"error_description","typeLabel":"string"}},"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"error":"\u003cstring>","error_description":"\u003cstring>"}}},"exampleType":"generated"}},"exampleType":"generated"},"1e78d88a-e2e7-4e4a-bfd5-1fddc511c302":{"description":"Customer project not found for this company","content":{"application/json":{"schema":{"type":"object","required":["error","error_description"],"properties":{"error":{"type":"string","description":"Machine-readable error code. See the operation description for the codes a specific endpoint can return.","isRequired":true,"uniqueKey":"error","typeLabel":"string"},"error_description":{"type":"string","description":"Human-readable description of the error. Safe to log; do not show to end users verbatim.","isRequired":true,"uniqueKey":"error_description","typeLabel":"string"}},"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"error":"\u003cstring>","error_description":"\u003cstring>"}}},"exampleType":"generated"}},"exampleType":"generated"},"5d1288d4-310f-466b-9fa0-47fc0ce427a4":{"description":"Validation failure (see operation description for error codes)","content":{"application/json":{"schema":{"type":"object","required":["error","error_description"],"properties":{"error":{"type":"string","description":"Machine-readable error code. See the operation description for the codes a specific endpoint can return.","isRequired":true,"uniqueKey":"error","typeLabel":"string"},"error_description":{"type":"string","description":"Human-readable description of the error. Safe to log; do not show to end users verbatim.","isRequired":true,"uniqueKey":"error_description","typeLabel":"string"}},"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"error":"\u003cstring>","error_description":"\u003cstring>"}}},"exampleType":"generated"}},"exampleType":"generated"},"1fc00032-63f6-455e-bafa-b480f9f77474":{"description":"Rate limit exceeded","headers":{"X-RateLimit-Limit":{"schema":{"type":"integer"}},"X-RateLimit-Remaining":{"schema":{"type":"integer"}},"X-RateLimit-Reset":{"schema":{"type":"integer","format":"int64"}}},"content":{"application/json":{"schema":{"type":"object","required":["error","error_description"],"properties":{"error":{"type":"string","description":"Machine-readable error code. See the operation description for the codes a specific endpoint can return.","isRequired":true,"uniqueKey":"error","typeLabel":"string"},"error_description":{"type":"string","description":"Human-readable description of the error. Safe to log; do not show to end users verbatim.","isRequired":true,"uniqueKey":"error_description","typeLabel":"string"}},"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"error":"\u003cstring>","error_description":"\u003cstring>"}}},"exampleType":"generated"}},"exampleType":"generated"}},"security":{"468b9991-47d1-4156-bd05-315b81f69026":{"BearerAuth":{"type":"http","scheme":"bearer","bearerFormat":"JWT","description":"Bearer token obtained from `POST /oauth/token`. Send as `Authorization: Bearer \u003ctoken>`. Tokens expire after 1 hour; refresh by requesting a new one with the same client credentials.","scopes":[]}}},"servers":{"bf2fa314-fac3-4063-a317-4bc9bf6701cf":{"url":"https://api.getkroo.com/api/v3","description":"Production"}},"processedSecurityOptions":[{"schemes":[{"scheme":{"type":"http","scheme":"bearer","bearerFormat":"JWT","description":"Bearer token obtained from `POST /oauth/token`. Send as `Authorization: Bearer \u003ctoken>`. Tokens expire after 1 hour; refresh by requesting a new one with the same client credentials.","scopes":[]},"schema":{"title":"Bearer Auth","type":"string","isRequired":true,"description":"Bearer token obtained from `POST /oauth/token`. Send as `Authorization: Bearer \u003ctoken>`. Tokens expire after 1 hour; refresh by requesting a new one with the same client credentials.","format":"bearer","typeLabel":"string\u003cbearer>","deprecated":false},"schemeName":"BearerAuth","name":"Authorization"}],"title":"BearerAuth"}]},"originalFileLocation":"https://api.getkroo.com/api/v3/openapi.yaml"},"subdomain":"kroo","siteName":"Kroo","title":"Upload a schedule file - Kroo","navMaps":{"firstHrefInVersion":{},"firstHrefInLanguage":{}},"lastModified":"2026-09-28T07:35:19.208Z","originalFileLocation":"api-reference/schedule-files/upload-a-schedule-file.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=\"Uploads a schedule file (P6 XER/XML, Phoenix PPX, or Microsoft Project MPP) and enqueues a sync job to parse and ingest it. Required scope: write:schedule_files Constraints: - file must be a multipart/form-data upload. - file_type must be one of xer, xml, ppx, mpp. - Within the same partner family (XER/XML share a family; PPX and MPP are each their own), the most recent file\u0026#x27;s file_type cannot change between uploads. Switching formats inside a partner returns 422 file_type_mismatch. PPX after XER is allowed because they belong to different partners. - customer_project_id, if provided, must reference a customer project owned by the authenticated company. 422 error codes: - invalid_request — missing required parameter (name, file, or file_type) or file is not a multipart upload. - file_type_mismatch — the most recent file in the same partner family uses a different file_type. - validation_error — the underlying record failed model-level validation (including unknown file_type values).\">\u003cmeta data-mint-head name=\"application-name\" content=\"Kroo\">\u003cmeta data-mint-head name=\"generator\" content=\"Mintlify\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/kroo/HftUu_hPSPzYZPZZ/_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/kroo/HftUu_hPSPzYZPZZ/_generated/favicon/apple-touch-icon.png\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/kroo/HftUu_hPSPzYZPZZ/_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/kroo/HftUu_hPSPzYZPZZ/_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/kroo/HftUu_hPSPzYZPZZ/_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/kroo/HftUu_hPSPzYZPZZ/_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/kroo/HftUu_hPSPzYZPZZ/_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/kroo/HftUu_hPSPzYZPZZ/_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/kroo/HftUu_hPSPzYZPZZ/_generated/favicon-dark/favicon.ico\" media=\"(prefers-color-scheme: dark)\">\u003cmeta data-mint-head property=\"og:title\" content=\"Upload a schedule file - Kroo\">\u003cmeta data-mint-head property=\"og:description\" content=\"Uploads a schedule file (P6 XER/XML, Phoenix PPX, or Microsoft Project MPP) and enqueues a sync job to parse and ingest it. Required scope: write:schedule_files Constraints: - file must be a multipart/form-data upload. - file_type must be one of xer, xml, ppx, mpp. - Within the same partner family (XER/XML share a family; PPX and MPP are each their own), the most recent file\u0026#x27;s file_type cannot change between uploads. Switching formats inside a partner returns 422 file_type_mismatch. PPX after XER is allowed because they belong to different partners. - customer_project_id, if provided, must reference a customer project owned by the authenticated company. 422 error codes: - invalid_request — missing required parameter (name, file, or file_type) or file is not a multipart upload. - file_type_mismatch — the most recent file in the same partner family uses a different file_type. - validation_error — the underlying record failed model-level validation (including unknown file_type values).\">\u003cmeta data-mint-head property=\"og:site_name\" content=\"Kroo\">\u003cmeta data-mint-head property=\"og:url\" content=\"https://guide.getkroo.com/api-reference/schedule-files/upload-a-schedule-file\">\u003cmeta data-mint-head property=\"og:type\" content=\"website\">\u003cmeta data-mint-head property=\"og:image\" content=\"https://kroo.mintlify.app/_mintlify/api/og/v2?division=Schedule+Files\u0026amp;title=Upload+a+schedule+file\u0026amp;description=Uploads+a+schedule+file+%28P6+XER%2FXML%2C+Phoenix+PPX%2C+or+Microsoft+Project%0AMPP%29+and+enqueues+a+sync+job+to+parse+and+ingest+it.%0A%0A**Required+scope%3A**+%60write%3Aschedule\u0026amp;theme=5d018ee466719ff565192a11\u0026amp;signature=a86cca1815034d1c112b223eae7395b42bcfed2372c34cd34ea01a61d8313412\">\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=\"Upload a schedule file - Kroo\">\u003cmeta data-mint-head name=\"twitter:description\" content=\"Uploads a schedule file (P6 XER/XML, Phoenix PPX, or Microsoft Project MPP) and enqueues a sync job to parse and ingest it. Required scope: write:schedule_files Constraints: - file must be a multipart/form-data upload. - file_type must be one of xer, xml, ppx, mpp. - Within the same partner family (XER/XML share a family; PPX and MPP are each their own), the most recent file\u0026#x27;s file_type cannot change between uploads. Switching formats inside a partner returns 422 file_type_mismatch. PPX after XER is allowed because they belong to different partners. - customer_project_id, if provided, must reference a customer project owned by the authenticated company. 422 error codes: - invalid_request — missing required parameter (name, file, or file_type) or file is not a multipart upload. - file_type_mismatch — the most recent file in the same partner family uses a different file_type. - validation_error — the underlying record failed model-level validation (including unknown file_type values).\">\u003cmeta data-mint-head name=\"twitter:image\" content=\"https://kroo.mintlify.app/_mintlify/api/og/v2?division=Schedule+Files\u0026amp;title=Upload+a+schedule+file\u0026amp;description=Uploads+a+schedule+file+%28P6+XER%2FXML%2C+Phoenix+PPX%2C+or+Microsoft+Project%0AMPP%29+and+enqueues+a+sync+job+to+parse+and+ingest+it.%0A%0A**Required+scope%3A**+%60write%3Aschedule\u0026amp;theme=5d018ee466719ff565192a11\u0026amp;signature=a86cca1815034d1c112b223eae7395b42bcfed2372c34cd34ea01a61d8313412\">\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/kroo/HftUu_hPSPzYZPZZ/_generated/favicon/browserconfig.xml\">\u003cmeta data-mint-head name=\"apple-mobile-web-app-title\" content=\"Kroo\">\u003cmeta data-mint-head name=\"msapplication-TileColor\" content=\"#0c7c59\">\u003clink data-mint-head rel=\"canonical\" href=\"https://guide.getkroo.com/api-reference/schedule-files/upload-a-schedule-file\">\u003clink data-mint-head rel=\"alternate\" type=\"application/xml\" href=\"/sitemap.xml\">\u003clink data-mint-head rel=\"alternate\" type=\"text/markdown\" href=\"/api-reference/schedule-files/upload-a-schedule-file.md\">\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@graph\":[{\"@type\":\"Organization\",\"@id\":\"https://guide.getkroo.com/#organization\",\"name\":\"Kroo\",\"url\":\"https://guide.getkroo.com\",\"logo\":{\"@type\":\"ImageObject\",\"url\":\"https://dkq5g4kc673o0.cloudfront.net/Kroo%20Logo\"}},{\"@type\":\"WebSite\",\"@id\":\"https://guide.getkroo.com#website\",\"name\":\"Kroo\",\"url\":\"https://guide.getkroo.com\",\"publisher\":{\"@id\":\"https://guide.getkroo.com/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https://guide.getkroo.com/api-reference/schedule-files/upload-a-schedule-file#webpage\",\"url\":\"https://guide.getkroo.com/api-reference/schedule-files/upload-a-schedule-file\",\"name\":\"Upload a schedule file\",\"description\":\"Uploads a schedule file (P6 XER/XML, Phoenix PPX, or Microsoft Project MPP) and enqueues a sync job to parse and ingest it. Required scope: write:schedule_files Constraints: - file must be a multipart/form-data upload. - file_type must be one of xer, xml, ppx, mpp. - Within the same partner family (XER/XML share a family; PPX and MPP are each their own), the most recent file's file_type cannot change between uploads. Switching formats inside a partner returns 422 file_type_mismatch. PPX after XER is allowed because they belong to different partners. - customer_project_id, if provided, must reference a customer project owned by the authenticated company. 422 error codes: - invalid_request — missing required parameter (name, file, or file_type) or file is not a multipart upload. - file_type_mismatch — the most recent file in the same partner family uses a different file_type. - validation_error — the underlying record failed model-level validation (including unknown file_type values).\",\"dateModified\":\"2026-09-28T07:35:19.208Z\",\"isPartOf\":{\"@id\":\"https://guide.getkroo.com#website\"},\"breadcrumb\":{\"@id\":\"https://guide.getkroo.com/api-reference/schedule-files/upload-a-schedule-file#breadcrumb\"}},{\"@type\":\"BreadcrumbList\",\"@id\":\"https://guide.getkroo.com/api-reference/schedule-files/upload-a-schedule-file#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Schedule Files\",\"item\":\"https://guide.getkroo.com/api-reference/schedule-files/list-schedule-files\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Upload a schedule file\",\"item\":\"https://guide.getkroo.com/api-reference/schedule-files/upload-a-schedule-file\"}]},{\"@type\":[\"TechArticle\",\"APIReference\"],\"@id\":\"https://guide.getkroo.com/api-reference/schedule-files/upload-a-schedule-file#apireference\",\"headline\":\"Upload a schedule file\",\"name\":\"Upload a schedule file\",\"description\":\"Uploads a schedule file (P6 XER/XML, Phoenix PPX, or Microsoft Project MPP) and enqueues a sync job to parse and ingest it. Required scope: write:schedule_files Constraints: - file must be a multipart/form-data upload. - file_type must be one of xer, xml, ppx, mpp. - Within the same partner family (XER/XML share a family; PPX and MPP are each their own), the most recent file's file_type cannot change between uploads. Switching formats inside a partner returns 422 file_type_mismatch. PPX after XER is allowed because they belong to different partners. - customer_project_id, if provided, must reference a customer project owned by the authenticated company. 422 error codes: - invalid_request — missing required parameter (name, file, or file_type) or file is not a multipart upload. - file_type_mismatch — the most recent file in the same partner family uses a different file_type. - validation_error — the underlying record failed model-level validation (including unknown file_type values).\",\"url\":\"https://guide.getkroo.com/api-reference/schedule-files/upload-a-schedule-file\",\"mainEntityOfPage\":{\"@id\":\"https://guide.getkroo.com/api-reference/schedule-files/upload-a-schedule-file#webpage\"},\"dateModified\":\"2026-09-28T07:35:19.208Z\",\"publisher\":{\"@id\":\"https://guide.getkroo.com/#organization\"},\"isPartOf\":{\"@id\":\"https://guide.getkroo.com#website\"}}]}\u003c/script>\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@type\":\"WebSite\",\"name\":\"Kroo\",\"creator\":{\"@type\":\"Organization\",\"name\":\"Mintlify\",\"url\":\"https://mintlify.com\"}}\u003c/script>","siteName":"Kroo","nav":{"global":{"anchors":[{"anchor":"Support","icon":"envelope","href":"mailto:implementations@getkroo.com"}]},"tabs":[{"tab":"Platform","pages":[{"title":"Platform","href":""}]},{"tab":"Guides","pages":[{"title":"Guides","href":"/pipeline-analytics"}]},{"tab":"Admin \u0026 Support","pages":[{"title":"Admin \u0026 Support","href":"/sso-setup"}]},{"tab":"API Reference","groups":[{"group":"Authentication","pages":[{"title":"Issue an access token","deprecated":null,"version":null,"openapi":"https://api.getkroo.com/api/v3/openapi.yaml post /oauth/token","href":"/api-reference/authentication/issue-an-access-token"}]},{"group":"Sync Status","pages":[{"title":"List sync status","openapi":"GET /sync_status","href":"/api-reference/list-sync-status"}]},{"group":"Schedule Files","pages":[{"title":"List schedule files","description":"Returns the authenticated company's schedule files in reverse\nchronological order.\n\n**Required scope:** `read:schedule_files`\n","deprecated":null,"version":null,"openapi":"https://api.getkroo.com/api/v3/openapi.yaml get /schedule_files","href":"/api-reference/schedule-files/list-schedule-files"},{"title":"Upload a schedule file","deprecated":null,"version":null,"openapi":"https://api.getkroo.com/api/v3/openapi.yaml post /schedule_files","href":"/api-reference/schedule-files/upload-a-schedule-file"},{"title":"Get a schedule file","description":"Returns a single schedule file owned by the authenticated company.\n\n**Required scope:** `read:schedule_files`\n","deprecated":null,"version":null,"openapi":"https://api.getkroo.com/api/v3/openapi.yaml get /schedule_files/{id}","href":"/api-reference/schedule-files/get-a-schedule-file"},{"title":"Delete a schedule file","deprecated":null,"version":null,"openapi":"https://api.getkroo.com/api/v3/openapi.yaml delete /schedule_files/{id}","href":"/api-reference/schedule-files/delete-a-schedule-file"}]}]}]},"title":"Upload a schedule file - Kroo","buildId":"dpl_2xiSHD9XEvLsPGPcfoMtkLTB3dy9","deploymentId":"dpl_2xiSHD9XEvLsPGPcfoMtkLTB3dy9","dynamics":["c2aa737661","2b790eda92","b0f84f53ff","a9bb46feb3"],"chunks":["OpenApiReferenceProvider-DmVyH30O.js","utils-BHQqGGOd.js","cloneDeep-izs3Hzxb.js","_Uint8Array-BVIqJ90l.js","isObjectLike-C8vmzPEN.js","isArray-Dcu1dQ5t.js","utils-CD-E4BIt.js","toString-BX-iyh8G.js","isSymbol-CSH9U2Gm.js","addUniqueKeysToSchema-Bp5Lq9Ds.js","snippetPresets-C4xAVCFP.js","style-to-object-BY3JEAdk.js","v4-DIgz8zy6.js","ApiExamples-CgXVLxUC.js","isEqual-BfaiBbcl.js","usePlaygroundInputsStore-BF8I5oUf.js","shallow-Byd0lWnC.js","getApiPlaygroundDisplay-BGOZG1OK.js","CodeSnippet-CpvQL0CY.js","CodeSnippets-B8wkBKXa.js","Page-CBCH2P7b.js","getPastedJson-Ry3scI3Y.js","icon-D7a9HcdD.js","MethodPill-CJ8pmHhz.js","DuplicateIcon-rh1HJF0t.js","createIcon-DvGznqYs.js","DynamicMarkdown-Cc6AuSHS.js","SectionHeading-B4A0S-ep.js","axios-vUo_bRtp.js","Markdown-Cc16CX65.js","clsx-Cs6nMGht.js","lib-DuNMoZ05.js","lib-B8HbPgcC.js","html-void-elements-mCSPHezU.js","dist-zbf22OZA.js","katex-YMM-FMeD.js","marked.esm-CZWythHk.js","AssistantPageLink-C_fs-y5n.js"]}