Tenant API keys operate inside the tenant LearnHub workspace. Service-provider API keys use the same endpoint family for service-provider-owned admin training content where supported. Upload sessions return presigned storage URLs; upload the file to the returned URL and complete the session before referencing the upload ID in course or lesson payloads.
{"docsConfig":{"theme":"mint","$schema":"https://mintlify.com/docs.json","name":"SoluDesks APIs","description":"Developer documentation for SoluDesks APIs.","colors":{"primary":"#0ea5e9","light":"#38bdf8","dark":"#0369a1"},"logo":{"light":"https://mintcdn.com/tses/xQ1Aa5t-huIoOO-_/images/soludesks-logo-nav.png?fit=max\u0026auto=format\u0026n=xQ1Aa5t-huIoOO-_\u0026q=85\u0026s=b3286b7169d48ae0c3c2e4ef19067472","dark":"https://mintcdn.com/tses/xQ1Aa5t-huIoOO-_/images/soludesks-logo-nav.png?fit=max\u0026auto=format\u0026n=xQ1Aa5t-huIoOO-_\u0026q=85\u0026s=b3286b7169d48ae0c3c2e4ef19067472","href":"/"},"favicon":"https://mintcdn.com/tses/xQ1Aa5t-huIoOO-_/images/soludesks-logo.png?fit=max\u0026auto=format\u0026n=xQ1Aa5t-huIoOO-_\u0026q=85\u0026s=8bcea94ef6ecd82e5079e6bf8e3c7e9f","api":{"playground":{"display":"interactive"}},"search":{"prompt":"Search SoluDesks APIs, LearnHub, courses..."},"seo":{"metatags":{"og:site_name":"SoluDesks APIs Documentation","og:locale":"en_NG","twitter:card":"summary_large_image","robots":"index, follow","googlebot":"index, follow","keywords":"SoluDesks API, SoluDesks APIs, LearnHub endpoints, course API, LMS API, business operations API"},"indexing":"navigable"},"styling":{"latex":false},"navigation":{"pages":[]}},"deployment":{"deploymentMetadataValue":{"subdomain":"tses","hasAudioNarration":false,"actualSubdomain":"tses","customDomains":["docs.soludesks.com"],"gitSource":{"type":"github","owner":"sissltd","repo":"soludesks-docs","deployBranch":"main","contentDirectory":"","isPrivate":true,"mountPath":"","label":""},"chroma":{"latestBuiltDeploymentHistoryId":"6ab2448f2439612f6630bca6","collectionId":"979913ff-aaf5-4349-ace1-71eba5c0d4eb","liveDeploymentHistoryId":"6ab2448f2439612f6630bca6","schemaVersion":"v3"},"entitlements":{"AI_CHAT":{"status":"DISABLED"},"WEB_MCP":{"status":"DISABLED"},"NARRATION":{"status":"DISABLED"}},"buildId":"6ab2448f2439612f6630bca6","clientVersion":"0.0.4045","searchFilterCounts":[{"language":"default","tag":"API Reference","count":50},{"language":"default","tag":"Guides","count":9},{"language":"default","tag":"Uploads","count":7},{"language":"default","tag":"Assessments","count":6},{"language":"default","tag":"Assignments","count":6},{"language":"default","tag":"Categories","count":6},{"language":"default","tag":"Courses","count":6},{"language":"default","tag":"Lessons","count":6},{"language":"default","tag":"Quizzes","count":6},{"language":"default","tag":"Sections","count":6}]},"assistantConfig":{"enableAskAiButton":false,"enableStarterQuestions":false,"enableContextualStarterQuestions":false,"enableAskAiSearchBar":true},"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":"agent-integrations-settings","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-pr-grouping","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"custom-prefix","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"analytics-v7","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"user-flows-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"no-publish-flow","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-onboarding","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"llms-txt-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving-live","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"stripTemperatureMiddleware","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"support-platform-pylon-zendesk","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"instant-rollback","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications-server","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-fable","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fixed-ai-action-pricing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automation-resolve-merge-conflict","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"scoped-publishing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"mintql","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"page-level-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-version-history-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"billing-page-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"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":"byok-sep-25","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fork-pr-previews","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"revalidation-jwt","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"vite-origin","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"billing-updated-9-15","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-sso-scim","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"hobby-abuse-scan","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"dashboard-inbox","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-signup","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"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":"sso-setup-deadline-banner","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false}],"googleFontsInlined":false},"customCss":[],"page":{"pagePath":"api-reference/uploads/complete-upload","slug":"/api-reference/uploads/complete-upload","pageMetadata":{"title":"Complete Upload","openapi":"api-reference/openapi.json POST /v1/external/learnhub/uploads/{id}/complete","description":"Complete upload through SoluDesks APIs.\n\nTenant API keys operate inside the tenant LearnHub workspace. Service-provider API keys use the same endpoint family for service-provider-owned admin training content where supported. Upload sessions return presigned storage URLs; upload the file to the returned URL and complete the session before referencing the upload ID in course or lesson payloads.","href":"/api-reference/uploads/complete-upload"},"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 p: \"p\",\n ..._provideComponents(),\n ...props.components\n };\n return _jsxs(_Fragment, {\n children: [_jsx(_components.p, {\n children: \"Complete upload through SoluDesks APIs.\"\n }), \"\\n\", _jsx(_components.p, {\n children: \"Tenant API keys operate inside the tenant LearnHub workspace. Service-provider API keys use the same endpoint family for service-provider-owned admin training content where supported. Upload sessions return presigned storage URLs; upload the file to the returned URL and complete the session before referencing the upload ID in course or lesson payloads.\"\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":"Complete Upload","openapi":"api-reference/openapi.json POST /v1/external/learnhub/uploads/{id}/complete","description":"Complete upload through SoluDesks APIs.\n\nTenant API keys operate inside the tenant LearnHub workspace. Service-provider API keys use the same endpoint family for service-provider-owned admin training content where supported. Upload sessions return presigned storage URLs; upload the file to the returned URL and complete the session before referencing the upload ID in course or lesson payloads.","href":"/api-reference/uploads/complete-upload"}}},"mdxSourceWithNoJs":null},"mdxExtracts":{"tableOfContents":[],"codeExamples":{}},"jsLinks":[],"openApiReferenceData":{"operation":{"operationId":"v1_external_learnhub_uploads_complete_create","description":"Complete upload through SoluDesks APIs.\n\nTenant API keys operate inside the tenant LearnHub workspace. Service-provider API keys use the same endpoint family for service-provider-owned admin training content where supported. Upload sessions return presigned storage URLs; upload the file to the returned URL and complete the session before referencing the upload ID in course or lesson payloads.","parameters":["15bba335-c0db-4f57-bc0a-fea00c103a24"],"tags":["Uploads"],"requestBody":"418bc608-04ae-4e55-98fc-4143ece1ac94","security":["afc7153e-9498-4249-92f6-c2c9f7e28ace"],"responses":{"200":"2ac687a3-f7d8-4c05-9511-bdfb660009cb","400":"1fbe09be-275d-4c5a-9325-618c71ca5413","401":"f5775877-5d8a-4f78-bbea-67ac798094c8","403":"632af4fc-d93c-42fd-aa5b-3aa1a4bc4590","404":"0f8ba154-8308-4625-a313-e467d0414908","409":"48730524-d0d5-4018-a04a-5d19ea5e3593","422":"c386345d-178a-4cd7-b46e-9b57888fd9b3","429":"84c066b7-4721-4d82-b344-4b1adb74c8da","500":"860c32c0-4f25-48a1-89dd-dc160ffabc62"},"summary":"Complete upload","method":"post","type":"path","servers":["f5023304-43c5-45b9-8b1d-7d2b85dcf198","5eface98-fa0b-4310-adbe-7a357234de8b"],"path":"/v1/external/learnhub/uploads/{id}/complete","baseUrlOptions":["https://api.soludesks.com","https://staging.api.soludesks.com"],"title":"Complete upload","codeSamples":[],"requiredOnlyExamples":false,"requestExampleType":"generated","responseExampleType":"generated"},"dependencies":{"parameters":{"15bba335-c0db-4f57-bc0a-fea00c103a24":{"in":"path","name":"id","schema":{"type":"string","format":"uuid","isRequired":true,"description":"A UUID string identifying this upload session.","uniqueKey":"","typeLabel":"string\u003cuuid>"},"description":"A UUID string identifying this upload session.","required":true}},"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"parts":{"type":"array","items":{"type":"object","properties":{"part_number":{"type":"integer","minimum":1,"isRequired":true,"uniqueKey":"parts.items.[INDEX].part_number","typeLabel":"integer"},"etag":{"type":"string","minLength":1,"isRequired":true,"uniqueKey":"parts.items.[INDEX].etag","typeLabel":"string"}},"required":["etag","part_number"],"uniqueKey":"parts.items.[INDEX]","typeLabel":"object"},"uniqueKey":"parts","typeLabel":"object[]"}},"uniqueKey":"","typeLabel":"object"},"examples":{"complete_single_part":{"title":"complete_single_part","value":{}},"complete_multipart":{"title":"complete_multipart","value":{"parts":[{"part_number":1,"etag":"\"etag-from-storage\""}]}}},"exampleType":"examples"}},"exampleType":"examples"},"responses":{"2ac687a3-f7d8-4c05-9511-bdfb660009cb":{"content":{"application/json":{"schema":{"type":"object","properties":{"status":{"type":"integer","isRequired":true,"uniqueKey":"status","typeLabel":"integer"},"success":{"type":"boolean","isRequired":true,"uniqueKey":"success","typeLabel":"boolean"},"code":{"type":"string","isRequired":true,"uniqueKey":"code","typeLabel":"string"},"message":{"type":"string","isRequired":true,"uniqueKey":"message","typeLabel":"string"},"data":{"type":"object","properties":{"id":{"type":"string","format":"uuid","readOnly":true,"isRequired":true,"uniqueKey":"data.id","typeLabel":"string\u003cuuid>"},"upload_type":{"type":"string","description":"* `VIDEO` - Video\n* `PROCTORING_VIDEO` - Proctoring Video\n* `DOCUMENT` - Document\n* `IMAGE` - Image","enum":["VIDEO","PROCTORING_VIDEO","DOCUMENT","IMAGE"],"isRequired":true,"uniqueKey":"data.upload_type","typeLabel":"enum\u003cstring>"},"file_name":{"type":"string","readOnly":true,"isRequired":true,"uniqueKey":"data.file_name","typeLabel":"string"},"content_type":{"type":"string","readOnly":true,"isRequired":true,"uniqueKey":"data.content_type","typeLabel":"string"},"file_size":{"type":"integer","readOnly":true,"isRequired":true,"uniqueKey":"data.file_size","typeLabel":"integer"},"status":{"type":"string","description":"* `INITIATED` - Initiated\n* `COMPLETED` - Completed\n* `ABORTED` - Aborted\n* `FAILED` - Failed","enum":["INITIATED","COMPLETED","ABORTED","FAILED"],"isRequired":true,"uniqueKey":"data.status","typeLabel":"enum\u003cstring>"},"part_size":{"type":"integer","readOnly":true,"isRequired":true,"uniqueKey":"data.part_size","typeLabel":"integer"},"total_parts":{"type":"integer","readOnly":true,"isRequired":true,"uniqueKey":"data.total_parts","typeLabel":"integer"},"is_multipart":{"type":"string","readOnly":true,"isRequired":true,"uniqueKey":"data.is_multipart","typeLabel":"string"},"multipart_upload_id":{"oneOf":[{"type":"string","isRequired":true,"uniqueKey":"data.multipart_upload_id.oneOf.0","typeLabel":"string"},{"type":"null","isRequired":true,"uniqueKey":"data.multipart_upload_id.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"data.multipart_upload_id","typeLabel":"string | null"},"expires_datetime":{"type":"string","format":"date-time","readOnly":true,"isRequired":true,"uniqueKey":"data.expires_datetime","typeLabel":"string\u003cdate-time>"},"completed_datetime":{"oneOf":[{"type":"string","format":"date-time","readOnly":true,"isRequired":true,"uniqueKey":"data.completed_datetime.oneOf.0","typeLabel":"string\u003cdate-time>"},{"type":"null","format":"date-time","readOnly":true,"isRequired":true,"uniqueKey":"data.completed_datetime.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"data.completed_datetime","typeLabel":"string\u003cdate-time> | null"},"created_datetime":{"type":"string","format":"date-time","readOnly":true,"description":"datetime of object creation","isRequired":true,"uniqueKey":"data.created_datetime","typeLabel":"string\u003cdate-time>"},"updated_datetime":{"type":"string","format":"date-time","readOnly":true,"description":"datetime of object update","isRequired":true,"uniqueKey":"data.updated_datetime","typeLabel":"string\u003cdate-time>"},"asset_url":{"oneOf":[{"type":"string","format":"uri","readOnly":true,"isRequired":true,"uniqueKey":"data.asset_url.oneOf.0","typeLabel":"string\u003curi>"},{"type":"null","format":"uri","readOnly":true,"isRequired":true,"uniqueKey":"data.asset_url.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"data.asset_url","typeLabel":"string\u003curi> | null"},"asset_url_expires_in":{"type":"string","readOnly":true,"isRequired":true,"uniqueKey":"data.asset_url_expires_in","typeLabel":"string"}},"required":["asset_url","asset_url_expires_in","completed_datetime","content_type","created_datetime","expires_datetime","file_name","file_size","id","is_multipart","multipart_upload_id","part_size","status","total_parts","updated_datetime","upload_type"],"isRequired":true,"uniqueKey":"data","typeLabel":"object"},"errors":{"type":"array","items":{"type":"object","additionalProperties":{"oneOf":[{}],"uniqueKey":"errors.items.[INDEX].additionalProperties","typeLabel":"any"},"uniqueKey":"errors.items.[INDEX]","typeLabel":"object"},"isRequired":true,"uniqueKey":"errors","typeLabel":"object[]"}},"required":["code","data","errors","message","status","success"],"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"status":123,"success":true,"code":"\u003cstring>","message":"\u003cstring>","data":{"id":"3c90c3cc-0d44-4b50-8888-8dd25736052a","upload_type":"VIDEO","file_name":"\u003cstring>","content_type":"\u003cstring>","file_size":123,"status":"INITIATED","part_size":123,"total_parts":123,"is_multipart":"\u003cstring>","multipart_upload_id":"\u003cstring>","expires_datetime":"2023-11-07T05:31:56Z","completed_datetime":"2023-11-07T05:31:56Z","created_datetime":"2023-11-07T05:31:56Z","updated_datetime":"2023-11-07T05:31:56Z","asset_url":"\u003cstring>","asset_url_expires_in":"\u003cstring>"},"errors":[{}]}}},"exampleType":"generated"}},"description":"","exampleType":"generated"},"1fbe09be-275d-4c5a-9325-618c71ca5413":{"description":"Bad request.","content":{"application/json":{"schema":{"type":"object","required":["status","success","code","message","data","errors"],"properties":{"status":{"type":"integer","example":422,"isRequired":true,"uniqueKey":"status","typeLabel":"integer"},"success":{"type":"boolean","example":false,"isRequired":true,"uniqueKey":"success","typeLabel":"boolean"},"code":{"type":"string","example":"VALIDATION_ERROR","isRequired":true,"uniqueKey":"code","typeLabel":"string"},"message":{"type":"string","example":"Some fields contain invalid values.","isRequired":true,"uniqueKey":"message","typeLabel":"string"},"data":{"oneOf":[{"example":null,"isRequired":true},{"example":null,"type":"null","isRequired":true,"uniqueKey":"data.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"data","typeLabel":"null"},"errors":{"type":"array","items":{"type":"object","properties":{"field":{"type":"string","example":"title","uniqueKey":"errors.items.[INDEX].field","typeLabel":"string"},"code":{"type":"string","example":"required","uniqueKey":"errors.items.[INDEX].code","typeLabel":"string"},"message":{"type":"string","example":"This field is required.","uniqueKey":"errors.items.[INDEX].message","typeLabel":"string"}},"uniqueKey":"errors.items.[INDEX]","typeLabel":"object"},"isRequired":true,"uniqueKey":"errors","typeLabel":"object[]"}},"uniqueKey":"","typeLabel":"object"},"examples":{"error":{"title":"error","value":{"status":400,"success":false,"code":"REQUEST_FAILED","message":"Bad request.","data":null,"errors":[]}}},"exampleType":"examples"}},"exampleType":"examples"},"f5775877-5d8a-4f78-bbea-67ac798094c8":{"description":"Missing or invalid API key.","content":{"application/json":{"schema":{"type":"object","required":["status","success","code","message","data","errors"],"properties":{"status":{"type":"integer","example":422,"isRequired":true,"uniqueKey":"status","typeLabel":"integer"},"success":{"type":"boolean","example":false,"isRequired":true,"uniqueKey":"success","typeLabel":"boolean"},"code":{"type":"string","example":"VALIDATION_ERROR","isRequired":true,"uniqueKey":"code","typeLabel":"string"},"message":{"type":"string","example":"Some fields contain invalid values.","isRequired":true,"uniqueKey":"message","typeLabel":"string"},"data":{"oneOf":[{"example":null,"isRequired":true},{"example":null,"type":"null","isRequired":true,"uniqueKey":"data.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"data","typeLabel":"null"},"errors":{"type":"array","items":{"type":"object","properties":{"field":{"type":"string","example":"title","uniqueKey":"errors.items.[INDEX].field","typeLabel":"string"},"code":{"type":"string","example":"required","uniqueKey":"errors.items.[INDEX].code","typeLabel":"string"},"message":{"type":"string","example":"This field is required.","uniqueKey":"errors.items.[INDEX].message","typeLabel":"string"}},"uniqueKey":"errors.items.[INDEX]","typeLabel":"object"},"isRequired":true,"uniqueKey":"errors","typeLabel":"object[]"}},"uniqueKey":"","typeLabel":"object"},"examples":{"error":{"title":"error","value":{"status":401,"success":false,"code":"REQUEST_FAILED","message":"Missing or invalid API key.","data":null,"errors":[]}}},"exampleType":"examples"}},"exampleType":"examples"},"632af4fc-d93c-42fd-aa5b-3aa1a4bc4590":{"description":"Permission denied, inactive service provider, or unsupported key mode.","content":{"application/json":{"schema":{"type":"object","required":["status","success","code","message","data","errors"],"properties":{"status":{"type":"integer","example":422,"isRequired":true,"uniqueKey":"status","typeLabel":"integer"},"success":{"type":"boolean","example":false,"isRequired":true,"uniqueKey":"success","typeLabel":"boolean"},"code":{"type":"string","example":"VALIDATION_ERROR","isRequired":true,"uniqueKey":"code","typeLabel":"string"},"message":{"type":"string","example":"Some fields contain invalid values.","isRequired":true,"uniqueKey":"message","typeLabel":"string"},"data":{"oneOf":[{"example":null,"isRequired":true},{"example":null,"type":"null","isRequired":true,"uniqueKey":"data.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"data","typeLabel":"null"},"errors":{"type":"array","items":{"type":"object","properties":{"field":{"type":"string","example":"title","uniqueKey":"errors.items.[INDEX].field","typeLabel":"string"},"code":{"type":"string","example":"required","uniqueKey":"errors.items.[INDEX].code","typeLabel":"string"},"message":{"type":"string","example":"This field is required.","uniqueKey":"errors.items.[INDEX].message","typeLabel":"string"}},"uniqueKey":"errors.items.[INDEX]","typeLabel":"object"},"isRequired":true,"uniqueKey":"errors","typeLabel":"object[]"}},"uniqueKey":"","typeLabel":"object"},"examples":{"error":{"title":"error","value":{"status":403,"success":false,"code":"REQUEST_FAILED","message":"Permission denied, inactive service provider, or unsupported key mode.","data":null,"errors":[]}}},"exampleType":"examples"}},"exampleType":"examples"},"0f8ba154-8308-4625-a313-e467d0414908":{"description":"Resource not found.","content":{"application/json":{"schema":{"type":"object","required":["status","success","code","message","data","errors"],"properties":{"status":{"type":"integer","example":422,"isRequired":true,"uniqueKey":"status","typeLabel":"integer"},"success":{"type":"boolean","example":false,"isRequired":true,"uniqueKey":"success","typeLabel":"boolean"},"code":{"type":"string","example":"VALIDATION_ERROR","isRequired":true,"uniqueKey":"code","typeLabel":"string"},"message":{"type":"string","example":"Some fields contain invalid values.","isRequired":true,"uniqueKey":"message","typeLabel":"string"},"data":{"oneOf":[{"example":null,"isRequired":true},{"example":null,"type":"null","isRequired":true,"uniqueKey":"data.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"data","typeLabel":"null"},"errors":{"type":"array","items":{"type":"object","properties":{"field":{"type":"string","example":"title","uniqueKey":"errors.items.[INDEX].field","typeLabel":"string"},"code":{"type":"string","example":"required","uniqueKey":"errors.items.[INDEX].code","typeLabel":"string"},"message":{"type":"string","example":"This field is required.","uniqueKey":"errors.items.[INDEX].message","typeLabel":"string"}},"uniqueKey":"errors.items.[INDEX]","typeLabel":"object"},"isRequired":true,"uniqueKey":"errors","typeLabel":"object[]"}},"uniqueKey":"","typeLabel":"object"},"examples":{"error":{"title":"error","value":{"status":404,"success":false,"code":"REQUEST_FAILED","message":"Resource not found.","data":null,"errors":[]}}},"exampleType":"examples"}},"exampleType":"examples"},"48730524-d0d5-4018-a04a-5d19ea5e3593":{"description":"Idempotency conflict or request already in progress.","content":{"application/json":{"schema":{"type":"object","required":["status","success","code","message","data","errors"],"properties":{"status":{"type":"integer","example":422,"isRequired":true,"uniqueKey":"status","typeLabel":"integer"},"success":{"type":"boolean","example":false,"isRequired":true,"uniqueKey":"success","typeLabel":"boolean"},"code":{"type":"string","example":"VALIDATION_ERROR","isRequired":true,"uniqueKey":"code","typeLabel":"string"},"message":{"type":"string","example":"Some fields contain invalid values.","isRequired":true,"uniqueKey":"message","typeLabel":"string"},"data":{"oneOf":[{"example":null,"isRequired":true},{"example":null,"type":"null","isRequired":true,"uniqueKey":"data.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"data","typeLabel":"null"},"errors":{"type":"array","items":{"type":"object","properties":{"field":{"type":"string","example":"title","uniqueKey":"errors.items.[INDEX].field","typeLabel":"string"},"code":{"type":"string","example":"required","uniqueKey":"errors.items.[INDEX].code","typeLabel":"string"},"message":{"type":"string","example":"This field is required.","uniqueKey":"errors.items.[INDEX].message","typeLabel":"string"}},"uniqueKey":"errors.items.[INDEX]","typeLabel":"object"},"isRequired":true,"uniqueKey":"errors","typeLabel":"object[]"}},"uniqueKey":"","typeLabel":"object"},"examples":{"error":{"title":"error","value":{"status":409,"success":false,"code":"REQUEST_FAILED","message":"Idempotency conflict or request already in progress.","data":null,"errors":[]}}},"exampleType":"examples"}},"exampleType":"examples"},"c386345d-178a-4cd7-b46e-9b57888fd9b3":{"description":"Validation failed.","content":{"application/json":{"schema":{"type":"object","required":["status","success","code","message","data","errors"],"properties":{"status":{"type":"integer","example":422,"isRequired":true,"uniqueKey":"status","typeLabel":"integer"},"success":{"type":"boolean","example":false,"isRequired":true,"uniqueKey":"success","typeLabel":"boolean"},"code":{"type":"string","example":"VALIDATION_ERROR","isRequired":true,"uniqueKey":"code","typeLabel":"string"},"message":{"type":"string","example":"Some fields contain invalid values.","isRequired":true,"uniqueKey":"message","typeLabel":"string"},"data":{"oneOf":[{"example":null,"isRequired":true},{"example":null,"type":"null","isRequired":true,"uniqueKey":"data.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"data","typeLabel":"null"},"errors":{"type":"array","items":{"type":"object","properties":{"field":{"type":"string","example":"title","uniqueKey":"errors.items.[INDEX].field","typeLabel":"string"},"code":{"type":"string","example":"required","uniqueKey":"errors.items.[INDEX].code","typeLabel":"string"},"message":{"type":"string","example":"This field is required.","uniqueKey":"errors.items.[INDEX].message","typeLabel":"string"}},"uniqueKey":"errors.items.[INDEX]","typeLabel":"object"},"isRequired":true,"uniqueKey":"errors","typeLabel":"object[]"}},"uniqueKey":"","typeLabel":"object"},"examples":{"error":{"title":"error","value":{"status":422,"success":false,"code":"REQUEST_FAILED","message":"Validation failed.","data":null,"errors":[]}}},"exampleType":"examples"}},"exampleType":"examples"},"84c066b7-4721-4d82-b344-4b1adb74c8da":{"description":"Rate limit exceeded.","content":{"application/json":{"schema":{"type":"object","required":["status","success","code","message","data","errors"],"properties":{"status":{"type":"integer","example":422,"isRequired":true,"uniqueKey":"status","typeLabel":"integer"},"success":{"type":"boolean","example":false,"isRequired":true,"uniqueKey":"success","typeLabel":"boolean"},"code":{"type":"string","example":"VALIDATION_ERROR","isRequired":true,"uniqueKey":"code","typeLabel":"string"},"message":{"type":"string","example":"Some fields contain invalid values.","isRequired":true,"uniqueKey":"message","typeLabel":"string"},"data":{"oneOf":[{"example":null,"isRequired":true},{"example":null,"type":"null","isRequired":true,"uniqueKey":"data.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"data","typeLabel":"null"},"errors":{"type":"array","items":{"type":"object","properties":{"field":{"type":"string","example":"title","uniqueKey":"errors.items.[INDEX].field","typeLabel":"string"},"code":{"type":"string","example":"required","uniqueKey":"errors.items.[INDEX].code","typeLabel":"string"},"message":{"type":"string","example":"This field is required.","uniqueKey":"errors.items.[INDEX].message","typeLabel":"string"}},"uniqueKey":"errors.items.[INDEX]","typeLabel":"object"},"isRequired":true,"uniqueKey":"errors","typeLabel":"object[]"}},"uniqueKey":"","typeLabel":"object"},"examples":{"error":{"title":"error","value":{"status":429,"success":false,"code":"REQUEST_FAILED","message":"Rate limit exceeded.","data":null,"errors":[]}}},"exampleType":"examples"}},"exampleType":"examples"},"860c32c0-4f25-48a1-89dd-dc160ffabc62":{"description":"Internal server error.","content":{"application/json":{"schema":{"type":"object","required":["status","success","code","message","data","errors"],"properties":{"status":{"type":"integer","example":422,"isRequired":true,"uniqueKey":"status","typeLabel":"integer"},"success":{"type":"boolean","example":false,"isRequired":true,"uniqueKey":"success","typeLabel":"boolean"},"code":{"type":"string","example":"VALIDATION_ERROR","isRequired":true,"uniqueKey":"code","typeLabel":"string"},"message":{"type":"string","example":"Some fields contain invalid values.","isRequired":true,"uniqueKey":"message","typeLabel":"string"},"data":{"oneOf":[{"example":null,"isRequired":true},{"example":null,"type":"null","isRequired":true,"uniqueKey":"data.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"data","typeLabel":"null"},"errors":{"type":"array","items":{"type":"object","properties":{"field":{"type":"string","example":"title","uniqueKey":"errors.items.[INDEX].field","typeLabel":"string"},"code":{"type":"string","example":"required","uniqueKey":"errors.items.[INDEX].code","typeLabel":"string"},"message":{"type":"string","example":"This field is required.","uniqueKey":"errors.items.[INDEX].message","typeLabel":"string"}},"uniqueKey":"errors.items.[INDEX]","typeLabel":"object"},"isRequired":true,"uniqueKey":"errors","typeLabel":"object[]"}},"uniqueKey":"","typeLabel":"object"},"examples":{"error":{"title":"error","value":{"status":500,"success":false,"code":"REQUEST_FAILED","message":"Internal server error.","data":null,"errors":[]}}},"exampleType":"examples"}},"exampleType":"examples"}},"security":{"afc7153e-9498-4249-92f6-c2c9f7e28ace":{"apiKeyAuth":{"type":"apiKey","in":"header","name":"Authorization","description":"External API key. Format: Bearer \u003cAPI_KEY>","scopes":[]}}},"servers":{"f5023304-43c5-45b9-8b1d-7d2b85dcf198":{"url":"https://api.soludesks.com","description":"SoluDesks production API"},"5eface98-fa0b-4310-adbe-7a357234de8b":{"url":"https://staging.api.soludesks.com","description":"SoluDesks staging API"}},"processedSecurityOptions":[{"schemes":[{"scheme":{"type":"apiKey","in":"header","name":"Authorization","description":"External API key. Format: Bearer \u003cAPI_KEY>","scopes":[]},"schema":{"title":"Authorization","type":"string","description":"External API key. Format: Bearer \u003cAPI_KEY>","isRequired":true,"typeLabel":"string","deprecated":false},"schemeName":"apiKeyAuth","name":"Authorization"}],"title":"apiKeyAuth"}]},"originalFileLocation":"api-reference/openapi.json"},"subdomain":"tses","siteName":"SoluDesks APIs","title":"Complete Upload - SoluDesks APIs","navMaps":{"firstHrefInVersion":{},"firstHrefInLanguage":{}},"lastModified":"2026-09-19T21:21:14.338Z","originalFileLocation":"api-reference/uploads/complete-upload.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=\"Complete upload through SoluDesks APIs. Tenant API keys operate inside the tenant LearnHub workspace. Service-provider API keys use the same endpoint family for service-provider-owned admin training content where supported. Upload sessions return presigned storage URLs; upload the file to the returned URL and complete the session before referencing the upload ID in course or lesson payloads.\">\u003cmeta data-mint-head name=\"keywords\" content=\"SoluDesks API, SoluDesks APIs, LearnHub endpoints, course API, LMS API, business operations API\">\u003cmeta data-mint-head name=\"application-name\" content=\"SoluDesks APIs\">\u003cmeta data-mint-head name=\"generator\" content=\"Mintlify\">\u003cmeta data-mint-head name=\"robots\" content=\"index, follow\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/tses/bm2YeeT6EUyDFm2A/_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/tses/bm2YeeT6EUyDFm2A/_generated/favicon/apple-touch-icon.png\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/tses/bm2YeeT6EUyDFm2A/_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/tses/bm2YeeT6EUyDFm2A/_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/tses/bm2YeeT6EUyDFm2A/_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/tses/bm2YeeT6EUyDFm2A/_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/tses/bm2YeeT6EUyDFm2A/_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/tses/bm2YeeT6EUyDFm2A/_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/tses/bm2YeeT6EUyDFm2A/_generated/favicon-dark/favicon.ico\" media=\"(prefers-color-scheme: dark)\">\u003cmeta data-mint-head property=\"og:title\" content=\"Complete Upload - SoluDesks APIs\">\u003cmeta data-mint-head property=\"og:description\" content=\"Complete upload through SoluDesks APIs. Tenant API keys operate inside the tenant LearnHub workspace. Service-provider API keys use the same endpoint family for service-provider-owned admin training content where supported. Upload sessions return presigned storage URLs; upload the file to the returned URL and complete the session before referencing the upload ID in course or lesson payloads.\">\u003cmeta data-mint-head property=\"og:site_name\" content=\"SoluDesks APIs Documentation\">\u003cmeta data-mint-head property=\"og:url\" content=\"https://docs.soludesks.com/api-reference/uploads/complete-upload\">\u003cmeta data-mint-head property=\"og:type\" content=\"website\">\u003cmeta data-mint-head property=\"og:image\" content=\"https://tses.mintlify.app/_mintlify/api/og/v2?division=Uploads\u0026amp;title=Complete+Upload\u0026amp;description=Complete+upload+through+SoluDesks+APIs.%0A%0ATenant+API+keys+operate+inside+the+tenant+LearnHub+workspace.+Service-provider+API+keys+use+the+same+endpoint+family+fo\u0026amp;theme=3277d967caecce542ec5121c\u0026amp;signature=e6f63603d3e9dd3c18659028c1bb33be92494e0bb6dbd3179b8617ab7f5126b0\">\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=\"Complete Upload - SoluDesks APIs\">\u003cmeta data-mint-head name=\"twitter:description\" content=\"Complete upload through SoluDesks APIs. Tenant API keys operate inside the tenant LearnHub workspace. Service-provider API keys use the same endpoint family for service-provider-owned admin training content where supported. Upload sessions return presigned storage URLs; upload the file to the returned URL and complete the session before referencing the upload ID in course or lesson payloads.\">\u003cmeta data-mint-head name=\"twitter:image\" content=\"https://tses.mintlify.app/_mintlify/api/og/v2?division=Uploads\u0026amp;title=Complete+Upload\u0026amp;description=Complete+upload+through+SoluDesks+APIs.%0A%0ATenant+API+keys+operate+inside+the+tenant+LearnHub+workspace.+Service-provider+API+keys+use+the+same+endpoint+family+fo\u0026amp;theme=3277d967caecce542ec5121c\u0026amp;signature=e6f63603d3e9dd3c18659028c1bb33be92494e0bb6dbd3179b8617ab7f5126b0\">\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/tses/bm2YeeT6EUyDFm2A/_generated/favicon/browserconfig.xml\">\u003cmeta data-mint-head name=\"apple-mobile-web-app-title\" content=\"SoluDesks APIs\">\u003cmeta data-mint-head name=\"msapplication-TileColor\" content=\"#0ea5e9\">\u003cmeta data-mint-head name=\"og:locale\" content=\"en_NG\">\u003cmeta data-mint-head name=\"googlebot\" content=\"index, follow\">\u003clink data-mint-head rel=\"canonical\" href=\"https://docs.soludesks.com/api-reference/uploads/complete-upload\">\u003clink data-mint-head rel=\"alternate\" type=\"application/xml\" href=\"/sitemap.xml\">\u003clink data-mint-head rel=\"alternate\" type=\"text/markdown\" href=\"/api-reference/uploads/complete-upload.md\">\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@graph\":[{\"@type\":\"Organization\",\"@id\":\"https://docs.soludesks.com/#organization\",\"name\":\"SoluDesks APIs\",\"url\":\"https://docs.soludesks.com\",\"logo\":{\"@type\":\"ImageObject\",\"url\":\"https://mintcdn.com/tses/xQ1Aa5t-huIoOO-_/images/soludesks-logo-nav.png?fit=max\u0026auto=format\u0026n=xQ1Aa5t-huIoOO-_\u0026q=85\u0026s=b3286b7169d48ae0c3c2e4ef19067472\"}},{\"@type\":\"WebSite\",\"@id\":\"https://docs.soludesks.com#website\",\"name\":\"SoluDesks APIs\",\"url\":\"https://docs.soludesks.com\",\"publisher\":{\"@id\":\"https://docs.soludesks.com/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https://docs.soludesks.com/api-reference/uploads/complete-upload#webpage\",\"url\":\"https://docs.soludesks.com/api-reference/uploads/complete-upload\",\"name\":\"Complete Upload\",\"description\":\"Complete upload through SoluDesks APIs. Tenant API keys operate inside the tenant LearnHub workspace. Service-provider API keys use the same endpoint family for service-provider-owned admin training content where supported. Upload sessions return presigned storage URLs; upload the file to the returned URL and complete the session before referencing the upload ID in course or lesson payloads.\",\"dateModified\":\"2026-09-19T21:21:14.338Z\",\"isPartOf\":{\"@id\":\"https://docs.soludesks.com#website\"},\"breadcrumb\":{\"@id\":\"https://docs.soludesks.com/api-reference/uploads/complete-upload#breadcrumb\"}},{\"@type\":\"BreadcrumbList\",\"@id\":\"https://docs.soludesks.com/api-reference/uploads/complete-upload#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Uploads\",\"item\":\"https://docs.soludesks.com/api-reference/uploads/list-uploads\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Complete Upload\",\"item\":\"https://docs.soludesks.com/api-reference/uploads/complete-upload\"}]},{\"@type\":[\"TechArticle\",\"APIReference\"],\"@id\":\"https://docs.soludesks.com/api-reference/uploads/complete-upload#apireference\",\"headline\":\"Complete Upload\",\"name\":\"Complete Upload\",\"description\":\"Complete upload through SoluDesks APIs. Tenant API keys operate inside the tenant LearnHub workspace. Service-provider API keys use the same endpoint family for service-provider-owned admin training content where supported. Upload sessions return presigned storage URLs; upload the file to the returned URL and complete the session before referencing the upload ID in course or lesson payloads.\",\"url\":\"https://docs.soludesks.com/api-reference/uploads/complete-upload\",\"mainEntityOfPage\":{\"@id\":\"https://docs.soludesks.com/api-reference/uploads/complete-upload#webpage\"},\"dateModified\":\"2026-09-19T21:21:14.338Z\",\"publisher\":{\"@id\":\"https://docs.soludesks.com/#organization\"},\"isPartOf\":{\"@id\":\"https://docs.soludesks.com#website\"}}]}\u003c/script>\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@type\":\"WebSite\",\"name\":\"SoluDesks APIs\",\"creator\":{\"@type\":\"Organization\",\"name\":\"Mintlify\",\"url\":\"https://mintlify.com\"}}\u003c/script>","siteName":"SoluDesks APIs","nav":{"global":null,"tabs":[{"tab":"Guides","pages":[{"title":"Guides","href":""}]},{"tab":"API Reference","groups":[{"group":"Introduction","pages":[{"title":"API Reference","href":"/api-reference/introduction"}]},{"group":"Categories","pages":[{"title":"List Categories","openapi":"api-reference/openapi.json GET /v1/external/learnhub/categories","href":"/api-reference/categories/list-categories"},{"title":"Create Category","openapi":"api-reference/openapi.json POST /v1/external/learnhub/categories","href":"/api-reference/categories/create-category"},{"title":"Retrieve Category","openapi":"api-reference/openapi.json GET /v1/external/learnhub/categories/{id}","href":"/api-reference/categories/get-category"},{"title":"Replace Category","openapi":"api-reference/openapi.json PUT /v1/external/learnhub/categories/{id}","href":"/api-reference/categories/update-category"},{"title":"Update Category","openapi":"api-reference/openapi.json PATCH /v1/external/learnhub/categories/{id}","href":"/api-reference/categories/patch-category"},{"title":"Delete Category","openapi":"api-reference/openapi.json DELETE /v1/external/learnhub/categories/{id}","href":"/api-reference/categories/delete-category"}]},{"group":"Courses","pages":[{"title":"List Courses","openapi":"api-reference/openapi.json GET /v1/external/learnhub/courses","href":"/api-reference/courses/list-courses"},{"title":"Create Course","openapi":"api-reference/openapi.json POST /v1/external/learnhub/courses","href":"/api-reference/courses/create-course"},{"title":"Retrieve Course","openapi":"api-reference/openapi.json GET /v1/external/learnhub/courses/{id}","href":"/api-reference/courses/get-course"},{"title":"Replace Course","openapi":"api-reference/openapi.json PUT /v1/external/learnhub/courses/{id}","href":"/api-reference/courses/update-course"},{"title":"Update Course","openapi":"api-reference/openapi.json PATCH /v1/external/learnhub/courses/{id}","href":"/api-reference/courses/patch-course"},{"title":"Delete Course","openapi":"api-reference/openapi.json DELETE /v1/external/learnhub/courses/{id}","href":"/api-reference/courses/delete-course"}]},{"group":"Sections","pages":[{"title":"List Sections","openapi":"api-reference/openapi.json GET /v1/external/learnhub/courses/{course_id}/sections","href":"/api-reference/sections/list-sections"},{"title":"Create Section","openapi":"api-reference/openapi.json POST /v1/external/learnhub/courses/{course_id}/sections","href":"/api-reference/sections/create-section"},{"title":"Retrieve Section","openapi":"api-reference/openapi.json GET /v1/external/learnhub/courses/{course_id}/sections/{id}","href":"/api-reference/sections/get-section"},{"title":"Replace Section","openapi":"api-reference/openapi.json PUT /v1/external/learnhub/courses/{course_id}/sections/{id}","href":"/api-reference/sections/update-section"},{"title":"Update Section","openapi":"api-reference/openapi.json PATCH /v1/external/learnhub/courses/{course_id}/sections/{id}","href":"/api-reference/sections/patch-section"},{"title":"Delete Section","openapi":"api-reference/openapi.json DELETE /v1/external/learnhub/courses/{course_id}/sections/{id}","href":"/api-reference/sections/delete-section"}]},{"group":"Lessons","pages":[{"title":"List Lessons","openapi":"api-reference/openapi.json GET /v1/external/learnhub/courses/{course_id}/sections/{section_id}/lessons","href":"/api-reference/lessons/list-lessons"},{"title":"Create Lesson","openapi":"api-reference/openapi.json POST /v1/external/learnhub/courses/{course_id}/sections/{section_id}/lessons","href":"/api-reference/lessons/create-lesson"},{"title":"Retrieve Lesson","openapi":"api-reference/openapi.json GET /v1/external/learnhub/courses/{course_id}/sections/{section_id}/lessons/{id}","href":"/api-reference/lessons/get-lesson"},{"title":"Replace Lesson","openapi":"api-reference/openapi.json PUT /v1/external/learnhub/courses/{course_id}/sections/{section_id}/lessons/{id}","href":"/api-reference/lessons/update-lesson"},{"title":"Update Lesson","openapi":"api-reference/openapi.json PATCH /v1/external/learnhub/courses/{course_id}/sections/{section_id}/lessons/{id}","href":"/api-reference/lessons/patch-lesson"},{"title":"Delete Lesson","openapi":"api-reference/openapi.json DELETE /v1/external/learnhub/courses/{course_id}/sections/{section_id}/lessons/{id}","href":"/api-reference/lessons/delete-lesson"}]},{"group":"Assessments","pages":[{"title":"List Assessments","openapi":"api-reference/openapi.json GET /v1/external/learnhub/assessments","href":"/api-reference/assessments/list-assessments"},{"title":"Create Assessment","openapi":"api-reference/openapi.json POST /v1/external/learnhub/assessments","href":"/api-reference/assessments/create-assessment"},{"title":"Retrieve Assessment","openapi":"api-reference/openapi.json GET /v1/external/learnhub/assessments/{id}","href":"/api-reference/assessments/get-assessment"},{"title":"Replace Assessment","openapi":"api-reference/openapi.json PUT /v1/external/learnhub/assessments/{id}","href":"/api-reference/assessments/update-assessment"},{"title":"Update Assessment","openapi":"api-reference/openapi.json PATCH /v1/external/learnhub/assessments/{id}","href":"/api-reference/assessments/patch-assessment"},{"title":"Delete Assessment","openapi":"api-reference/openapi.json DELETE /v1/external/learnhub/assessments/{id}","href":"/api-reference/assessments/delete-assessment"}]},{"group":"Assignments","pages":[{"title":"List Assignments","openapi":"api-reference/openapi.json GET /v1/external/learnhub/assignments","href":"/api-reference/assignments/list-assignments"},{"title":"Create Assignment","openapi":"api-reference/openapi.json POST /v1/external/learnhub/assignments","href":"/api-reference/assignments/create-assignment"},{"title":"Retrieve Assignment","openapi":"api-reference/openapi.json GET /v1/external/learnhub/assignments/{id}","href":"/api-reference/assignments/get-assignment"},{"title":"Replace Assignment","openapi":"api-reference/openapi.json PUT /v1/external/learnhub/assignments/{id}","href":"/api-reference/assignments/update-assignment"},{"title":"Update Assignment","openapi":"api-reference/openapi.json PATCH /v1/external/learnhub/assignments/{id}","href":"/api-reference/assignments/patch-assignment"},{"title":"Delete Assignment","openapi":"api-reference/openapi.json DELETE /v1/external/learnhub/assignments/{id}","href":"/api-reference/assignments/delete-assignment"}]},{"group":"Quizzes","pages":[{"title":"List Quizzes","openapi":"api-reference/openapi.json GET /v1/external/learnhub/quizzes","href":"/api-reference/quizzes/list-quizzes"},{"title":"Create Quiz","openapi":"api-reference/openapi.json POST /v1/external/learnhub/quizzes","href":"/api-reference/quizzes/create-quiz"},{"title":"Retrieve Quiz","openapi":"api-reference/openapi.json GET /v1/external/learnhub/quizzes/{id}","href":"/api-reference/quizzes/get-quiz"},{"title":"Replace Quiz","openapi":"api-reference/openapi.json PUT /v1/external/learnhub/quizzes/{id}","href":"/api-reference/quizzes/update-quiz"},{"title":"Update Quiz","openapi":"api-reference/openapi.json PATCH /v1/external/learnhub/quizzes/{id}","href":"/api-reference/quizzes/patch-quiz"},{"title":"Delete Quiz","openapi":"api-reference/openapi.json DELETE /v1/external/learnhub/quizzes/{id}","href":"/api-reference/quizzes/delete-quiz"}]},{"group":"Uploads","pages":[{"title":"List Uploads","openapi":"api-reference/openapi.json GET /v1/external/learnhub/uploads","href":"/api-reference/uploads/list-uploads"},{"title":"Create Upload","openapi":"api-reference/openapi.json POST /v1/external/learnhub/uploads","href":"/api-reference/uploads/create-upload"},{"title":"Retrieve Upload","openapi":"api-reference/openapi.json GET /v1/external/learnhub/uploads/{id}","href":"/api-reference/uploads/get-upload"},{"title":"Sign Upload Parts","openapi":"api-reference/openapi.json POST /v1/external/learnhub/uploads/{id}/sign-parts","href":"/api-reference/uploads/sign-upload-parts"},{"title":"List Upload Parts","openapi":"api-reference/openapi.json GET /v1/external/learnhub/uploads/{id}/parts","description":"List upload parts through SoluDesks APIs.\n\nTenant API keys operate inside the tenant LearnHub workspace. Service-provider API keys use the same endpoint family for service-provider-owned admin training content where supported. Upload sessions return presigned storage URLs; upload the file to the returned URL and complete the session before referencing the upload ID in course or lesson payloads.","href":"/api-reference/uploads/list-upload-parts"},{"title":"Complete Upload","openapi":"api-reference/openapi.json POST /v1/external/learnhub/uploads/{id}/complete","href":"/api-reference/uploads/complete-upload"},{"title":"Abort Upload","openapi":"api-reference/openapi.json POST /v1/external/learnhub/uploads/{id}/abort","description":"Abort upload through SoluDesks APIs.\n\nTenant API keys operate inside the tenant LearnHub workspace. Service-provider API keys use the same endpoint family for service-provider-owned admin training content where supported. Upload sessions return presigned storage URLs; upload the file to the returned URL and complete the session before referencing the upload ID in course or lesson payloads.","href":"/api-reference/uploads/abort-upload"}]}]}]},"basePath":"","title":"Complete Upload - SoluDesks APIs","buildId":"dpl_36EDyZCDfRuoUD9af5CH4M1bqY2h","deploymentId":"dpl_36EDyZCDfRuoUD9af5CH4M1bqY2h","dynamics":["c2aa737661","2b790eda92","b0f84f53ff","a9bb46feb3"],"chunks":["OpenApiReferenceProvider-DCDCdBVX.js","utils-ME8dDnLe.js","cloneDeep-izs3Hzxb.js","_Uint8Array-BVIqJ90l.js","isObjectLike-C8vmzPEN.js","isArray-Dcu1dQ5t.js","utils-0e84ACsd.js","toString-BX-iyh8G.js","isSymbol-CSH9U2Gm.js","addUniqueKeysToSchema-wgRBj-ia.js","snippetPresets-C11Sgb-o.js","style-to-object-BY3JEAdk.js","v4-DIgz8zy6.js","ApiExamples-C0lapOpP.js","isEqual-BfaiBbcl.js","usePlaygroundInputsStore-ZeRQV8fF.js","shallow-BupWh095.js","getApiPlaygroundDisplay-BnYQO2Ss.js","CodeSnippet-RKKOc8c_.js","CodeSnippets-Drf_m8wS.js","Page-Bevw23-4.js","getPastedJson-u6QiPzNZ.js","icon-Bb-CBSxO.js","MethodPill-F7l5AI7V.js","DuplicateIcon-IiAXkdSg.js","createIcon-FliI8EBc.js","DynamicMarkdown-B62XqCSI.js","SectionHeading-Dj31pT03.js","axios-vUo_bRtp.js","Markdown-BOgQCTwD.js","clsx-BIWXJmsZ.js","lib-DuNMoZ05.js","lib-B8HbPgcC.js","html-void-elements-mCSPHezU.js","dist-DKZWslLH.js","katex-YMM-FMeD.js","marked.esm-CZWythHk.js","AssistantPageLink-UDqbR6xh.js"]}