Finalize a direct upload started via POST /v1/files/init-upload. The file then goes through FFprobe for media metadata; status changes as UPLOADED and becomes STORED when analysis completes. See the direct upload guide for the full flow.
Step 3 of 3 in the direct-upload flow. See the direct upload guide for the full flow.After this call succeeds, Rendi analyzes the file with FFprobe to extract media metadata. The response returns status: UPLOADED immediately; poll GET /v1/files/{file_id} — status becomes STORED when analysis completes and metadata (duration, dimensions, codec, mime type, bitrate, etc.) is populated.
Whether the file is stored privately. Private files are accessible via their storage_url only if you request a presigned URL by passing presigned_ttl_seconds on GET /v1/files/{file_id} (for a single file) or GET /v1/commands/{command_id} (for a command's output files) to receive a time-limited downloadable URL. Not available on free plans.
{"docsConfig":{"theme":"mint","$schema":"https://mintlify.com/docs.json","name":"Rendi - FFmpeg API","description":"Rendi - FFmpeg API - Documentation","colors":{"primary":"#6BB666","light":"#F3FFB7","dark":"#6BB666"},"logo":{"light":"https://mintcdn.com/rendi/UkCjje3cRpAu-Pzn/logo/rendi_light.svg?fit=max\u0026auto=format\u0026n=UkCjje3cRpAu-Pzn\u0026q=85\u0026s=9221ec14a8479069fb9656f72cb52c3c","dark":"https://mintcdn.com/rendi/UkCjje3cRpAu-Pzn/logo/rendi_dark.svg?fit=max\u0026auto=format\u0026n=UkCjje3cRpAu-Pzn\u0026q=85\u0026s=6f9b0a9e2ae19a1062d9415927758188","href":"https://rendi.dev/"},"favicon":"https://mintcdn.com/rendi/UkCjje3cRpAu-Pzn/favicon_rendi.svg?fit=max\u0026auto=format\u0026n=UkCjje3cRpAu-Pzn\u0026q=85\u0026s=5b2fa0a0cfb3e3bb80e6d6e2f26eadb6","appearance":{"default":"light"},"navbar":{"links":[{"href":"https://github.com/orgs/rendi-api/discussions","label":"Support"},{"href":"https://app.rendi.dev/sign-in","label":"Sign In"}],"primary":{"type":"button","label":"Get Started","href":"https://app.rendi.dev/sign-up?loc=docs-top-right"}},"footer":{"socials":{"x":"https://x.com/rendi_dev","youtube":"https://www.youtube.com/playlist?list=PLJafqrbyIUfzM4MM6wKeN4qkwCviI3IHw","github":"https://github.com/rendi-api/ffmpeg-cheatsheet"}},"seo":{"metatags":{"description":"Learn how to run FFmpeg online easily using Rendi’s FFmpeg API - no installation needed. Fast, scalable, and reliable FFmpeg as a Service.","og:site_name":"Rendi - FFmpeg API - Documentation","og:description":"Learn how to run FFmpeg online easily using Rendi’s FFmpeg API - no installation needed. Fast, scalable, and reliable FFmpeg as a Service.","og:url":"https://rendi.dev/docs","og:locale":"en_US","og:logo":"/logo/rendi_logo.svg","twitter:description":"Learn how to run FFmpeg online easily - no installation needed. Fast, scalable, and reliable FFmpeg as a Service."}},"integrations":{"ga4":{"measurementId":"G-TX18XXSKL8"},"gtm":{"tagId":"GTM-5892H3NR"},"hotjar":{"hjid":"5186749","hjsv":"6"},"mixpanel":{"projectToken":"28dc0233f8ad77a5de6722a2dddabaf5"}},"contextual":{"options":["view","copy","chatgpt","claude"],"display":"header"},"styling":{"latex":false},"navigation":{"global":{"anchors":[{"anchor":"GitHub","icon":"github","href":"https://github.com/rendi-api/ffmpeg-cheatsheet"},{"anchor":"System Status","icon":"display-chart-up","href":"https://status.rendi.dev"},{"anchor":"YouTube","icon":"youtube","href":"https://youtube.com/playlist?list=PLJafqrbyIUfzM4MM6wKeN4qkwCviI3IHw\u0026si=VqyZiQMBqJrbrngc"}]},"pages":[]}},"deployment":{"deploymentMetadataValue":{"subdomain":"rendi","hasAudioNarration":false,"actualSubdomain":"rendi","customDomains":["rendi.dev"],"gitSource":{"type":"github","owner":"rendi-api","repo":"rendi-docs","deployBranch":"main","contentDirectory":"","isPrivate":true,"mountPath":"","label":""},"feedback":{"thumbs":true},"entitlements":{},"buildId":"6ae74578f7d3a0f8561dcd62","clientVersion":"0.0.4087","searchFilterCounts":[{"language":"default","tag":"Documentation","count":26},{"language":"default","tag":"API Reference","count":14},{"language":"default","tag":"Examples","count":14},{"language":"default","tag":"Features","count":6},{"language":"default","tag":"File Storage","count":4},{"language":"default","tag":"Listing Assets","count":4},{"language":"default","tag":"Generate","count":4},{"language":"default","tag":"Deleting Assets","count":3},{"language":"default","tag":"Get Started","count":3},{"language":"default","tag":"Convert","count":3}]},"assistantConfig":{},"basePath":"/docs","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":"rbac-expansion","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-pr-grouping","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"custom-prefix","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"analytics-v7","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"user-flows-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"no-publish-flow","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-onboarding","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"llms-txt-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving-live","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"stripTemperatureMiddleware","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"support-platform-pylon-zendesk","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"instant-rollback","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications-server","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-fable","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fixed-ai-action-pricing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automation-resolve-merge-conflict","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"scoped-publishing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"mintql","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"page-level-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-version-history-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"billing-page-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"full-page-search","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workspace-projects","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"assistant-v5","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fork-pr-previews","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"revalidation-jwt","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-sso-scim","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"hobby-abuse-scan","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"dashboard-inbox","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-signup","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"turbopuffer-dual-write","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-enabled","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"approve-review-flow","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-metadata","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"sso-setup-deadline-banner","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"turbopuffer-serve","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"live-agents","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"comment-mode","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false}],"googleFontsInlined":false},"customCss":[],"page":{"pagePath":"api-reference/endpoint/complete-upload","slug":"/api-reference/endpoint/complete-upload","pageMetadata":{"title":"Complete a Multipart Upload","openapi":"POST /v1/files/{file_id}/complete-upload","description":"Finalize a direct upload started via `POST /v1/files/init-upload`. The file then goes through FFprobe for media metadata; `status` changes as `UPLOADED` and becomes `STORED` when analysis completes. See the [direct upload guide](https://docs.rendi.dev/direct-upload) for the full flow.","href":"/api-reference/endpoint/complete-upload"},"description":{"compiledSource":"\"use strict\";\nconst {jsx: _jsx, jsxs: _jsxs} = arguments[0];\nconst {useMDXComponents: _provideComponents} = arguments[0];\nfunction _createMdxContent(props) {\n const _components = {\n a: \"a\",\n code: \"code\",\n p: \"p\",\n ..._provideComponents(),\n ...props.components\n };\n return _jsxs(_components.p, {\n children: [\"Finalize a direct upload started via \", _jsx(_components.code, {\n children: \"POST /v1/files/init-upload\"\n }), \". The file then goes through FFprobe for media metadata; \", _jsx(_components.code, {\n children: \"status\"\n }), \" changes as \", _jsx(_components.code, {\n children: \"UPLOADED\"\n }), \" and becomes \", _jsx(_components.code, {\n children: \"STORED\"\n }), \" when analysis completes. See the \", _jsx(_components.a, {\n href: \"https://docs.rendi.dev/direct-upload\",\n children: \"direct upload guide\"\n }), \" for the full flow.\"]\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{jsx:_jsx,jsxs:_jsxs}=arguments[0];const{useMDXComponents:_provideComponents}=arguments[0];function _createMdxContent(props){const _components={a:`a`,code:`code`,p:`p`,..._provideComponents(),...props.components},{Note}=_components;if(!Note)_missingMdxReference(`Note`,true);return _jsxs(Note,{children:[_jsxs(_components.p,{children:[`Step 3 of 3 in the direct-upload flow. See the `,_jsx(_components.a,{href:`/direct-upload`,children:`direct upload guide`}),` for the full flow.`]}),_jsxs(_components.p,{children:[`After this call succeeds, Rendi analyzes the file with FFprobe to extract media metadata. The response returns `,_jsx(_components.code,{children:`status: UPLOADED`}),` immediately; poll `,_jsx(_components.a,{href:`/api-reference/endpoint/get-file`,children:_jsx(_components.code,{children:`GET /v1/files/{file_id}`})}),` — `,_jsx(_components.code,{children:`status`}),` becomes `,_jsx(_components.code,{children:`STORED`}),` when analysis completes and metadata (duration, dimensions, codec, mime type, bitrate, etc.) is populated.`]})]})}function MDXContent(props={}){const{wrapper:MDXLayout}={..._provideComponents(),...props.components};return MDXLayout?_jsx(MDXLayout,{...props,children:_jsx(_createMdxContent,{...props})}):_createMdxContent(props)}return{default:MDXContent};function _missingMdxReference(id,component){throw new Error(`Expected `+(component?`component`:`object`)+\" `\"+id+\"` to be defined: you likely forgot to import, pass, or provide it.\")}","frontmatter":{},"scope":{"config":{},"pageMetadata":{"title":"Complete a Multipart Upload","openapi":"POST /v1/files/{file_id}/complete-upload","description":"Finalize a direct upload started via `POST /v1/files/init-upload`. The file then goes through FFprobe for media metadata; `status` changes as `UPLOADED` and becomes `STORED` when analysis completes. See the [direct upload guide](https://docs.rendi.dev/direct-upload) for the full flow.","href":"/api-reference/endpoint/complete-upload"}}},"mdxSourceWithNoJs":null},"mdxExtracts":{"tableOfContents":[],"codeExamples":{}},"jsLinks":[],"openApiReferenceData":{"operation":{"tags":["API","File Management"],"summary":"Complete a multipart upload","description":"Finalize a direct upload started via `POST /v1/files/init-upload`. The file then goes through FFprobe for media metadata; `status` changes as `UPLOADED` and becomes `STORED` when analysis completes. See the [direct upload guide](https://docs.rendi.dev/direct-upload) for the full flow.","operationId":"complete_upload_v1_files__file_id__complete_upload_post","security":["811401e9-ae54-41ae-bbb4-e8d58dd21a1a"],"parameters":["0a15e662-4ee4-4d1f-a553-dc4c0e50e278"],"requestBody":"d09a9958-8777-4f01-bc0e-7dbfb40c276e","responses":{"200":"72d727e6-62d0-42ee-a666-0b3825fc79e0","400":"3cfa0ed5-8eac-4f72-85e8-77fc5af4263a","401":"2155c739-fa70-4f41-999d-30491c3a960b","404":"2ca78fc9-0ce7-4896-9228-a502101ca174","422":"cdac8061-eb3d-44a8-a84a-cf0f4e92b498"},"method":"post","type":"path","servers":["d582982c-db85-4362-982a-9f76c7a080f9"],"path":"/v1/files/{file_id}/complete-upload","baseUrlOptions":["https://api.rendi.dev"],"title":"Complete a multipart upload","codeSamples":[],"requiredOnlyExamples":false,"requestExampleType":"generated","responseExampleType":"generated"},"dependencies":{"parameters":{"0a15e662-4ee4-4d1f-a553-dc4c0e50e278":{"name":"file_id","in":"path","required":true,"schema":{"type":"string","title":"File Id","isRequired":true,"uniqueKey":"","typeLabel":"string"}}},"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"parts":{"items":{"properties":{"part_number":{"type":"integer","minimum":1,"title":"Part Number","description":"1-based part number, matching the index in `upload_urls`.","examples":[1],"isRequired":true,"uniqueKey":"parts.items.[INDEX].part_number","typeLabel":"integer"},"etag":{"type":"string","title":"Etag","description":"ETag returned by R2 in the response of the part's PUT request.","examples":["\"7d865e959b2466918c9863afca942d0f\""],"isRequired":true,"uniqueKey":"parts.items.[INDEX].etag","typeLabel":"string"}},"type":"object","required":["part_number","etag"],"title":"UploadPart","uniqueKey":"parts.items.[INDEX]","typeLabel":"UploadPart · object"},"type":"array","minItems":1,"title":"Parts","description":"One entry per uploaded part, in order. Every part_number from 1 to N must be present.","isRequired":true,"uniqueKey":"parts","typeLabel":"UploadPart · object[]"}},"type":"object","required":["parts"],"title":"CompleteUploadRequest","uniqueKey":"","typeLabel":"CompleteUploadRequest · object"},"examples":{"Example":{"title":"Example","value":{"parts":[{"part_number":1,"etag":"\"7d865e959b2466918c9863afca942d0f\""}]}}},"exampleType":"generated"}},"exampleType":"generated"},"responses":{"72d727e6-62d0-42ee-a666-0b3825fc79e0":{"description":"Upload completed; file is being ffrpobed","content":{"application/json":{"schema":{"properties":{"file_id":{"type":"string","title":"File Id","description":"Unique identifier for the stored file","examples":["987fcdeb-a89b-43d3-b456-789012345678"],"isRequired":true,"uniqueKey":"file_id","typeLabel":"string"},"environment_name":{"oneOf":[{"type":"string","title":"Environment Name","description":"The environment this file was stored in (e.g., 'main', 'test', 'dev').","example":"main","uniqueKey":"environment_name.oneOf.0","typeLabel":"string"},{"type":"null","title":"Environment Name","description":"The environment this file was stored in (e.g., 'main', 'test', 'dev').","example":"main","uniqueKey":"environment_name.oneOf.1","typeLabel":"null"}],"uniqueKey":"environment_name","typeLabel":"string | null"},"storage_url":{"oneOf":[{"type":"string","title":"Storage Url","description":"URL where the file is stored","example":"https://storage.rendi.dev/123e4567-e89b-12d3-a456-426614174000/output.avi","uniqueKey":"storage_url.oneOf.0","typeLabel":"string"},{"type":"null","title":"Storage Url","description":"URL where the file is stored","example":"https://storage.rendi.dev/123e4567-e89b-12d3-a456-426614174000/output.avi","uniqueKey":"storage_url.oneOf.1","typeLabel":"null"}],"uniqueKey":"storage_url","typeLabel":"string | null"},"status":{"oneOf":[{"type":"string","title":"FileStatus","description":"Status of the file","enum":["QUEUED","DOWNLOADING","DOWNLOADED","UPLOADED","FAILED","STORED"],"example":"STORED","uniqueKey":"status.oneOf.0","typeLabel":"enum\u003cstring>"},{"type":"null","description":"Status of the file","example":"STORED","uniqueKey":"status.oneOf.1","typeLabel":"null"}],"uniqueKey":"status","typeLabel":"enum\u003cstring> | null"},"rendi_store_type":{"oneOf":[{"type":"string","title":"RendiFileStoreType","description":"Type of storage of the file in rendi","enum":["INPUT","OUTPUT","STORED_FILE"],"example":"STORED_FILE","uniqueKey":"rendi_store_type.oneOf.0","typeLabel":"enum\u003cstring>"},{"type":"null","description":"Type of storage of the file in rendi","example":"STORED_FILE","uniqueKey":"rendi_store_type.oneOf.1","typeLabel":"null"}],"uniqueKey":"rendi_store_type","typeLabel":"enum\u003cstring> | null"},"error_status":{"oneOf":[{"type":"string","title":"Error Status","description":"Status of any error that occurred during file processing","example":"UNREACHABLE_INPUT_FILE","uniqueKey":"error_status.oneOf.0","typeLabel":"string"},{"type":"null","title":"Error Status","description":"Status of any error that occurred during file processing","example":"UNREACHABLE_INPUT_FILE","uniqueKey":"error_status.oneOf.1","typeLabel":"null"}],"uniqueKey":"error_status","typeLabel":"string | null"},"external_error_message":{"oneOf":[{"type":"string","title":"External Error Message","description":"Error details if the file failed to be processed","example":"Input file url https://rendi.dev/example is not reachable.","uniqueKey":"external_error_message.oneOf.0","typeLabel":"string"},{"type":"null","title":"External Error Message","description":"Error details if the file failed to be processed","example":"Input file url https://rendi.dev/example is not reachable.","uniqueKey":"external_error_message.oneOf.1","typeLabel":"null"}],"uniqueKey":"external_error_message","typeLabel":"string | null"},"is_deleted":{"oneOf":[{"type":"boolean","title":"Is Deleted","description":"Whether the file has been deleted","example":false,"uniqueKey":"is_deleted.oneOf.0","typeLabel":"boolean"},{"type":"null","title":"Is Deleted","description":"Whether the file has been deleted","example":false,"uniqueKey":"is_deleted.oneOf.1","typeLabel":"null"}],"uniqueKey":"is_deleted","typeLabel":"boolean | null"},"size_mbytes":{"oneOf":[{"type":"number","title":"Size Mbytes","description":"Size of the output file or folder in megabytes","example":15.2,"uniqueKey":"size_mbytes.oneOf.0","typeLabel":"number"},{"type":"null","title":"Size Mbytes","description":"Size of the output file or folder in megabytes","example":15.2,"uniqueKey":"size_mbytes.oneOf.1","typeLabel":"null"}],"uniqueKey":"size_mbytes","typeLabel":"number | null"},"file_count":{"oneOf":[{"type":"integer","title":"File Count","description":"Number of files in the output folder/playlist","example":5,"uniqueKey":"file_count.oneOf.0","typeLabel":"integer"},{"type":"null","title":"File Count","description":"Number of files in the output folder/playlist","example":5,"uniqueKey":"file_count.oneOf.1","typeLabel":"null"}],"uniqueKey":"file_count","typeLabel":"integer | null"},"size_compressed_mbytes":{"oneOf":[{"type":"number","title":"Size Compressed Mbytes","description":"Size of the output compressed folder in megabytes","example":15.2,"uniqueKey":"size_compressed_mbytes.oneOf.0","typeLabel":"number"},{"type":"null","title":"Size Compressed Mbytes","description":"Size of the output compressed folder in megabytes","example":15.2,"uniqueKey":"size_compressed_mbytes.oneOf.1","typeLabel":"null"}],"uniqueKey":"size_compressed_mbytes","typeLabel":"number | null"},"is_private":{"oneOf":[{"type":"boolean","title":"Is Private","description":"Whether the file is stored privately. Private files are accessible via their `storage_url` only if you request a presigned URL by passing `presigned_ttl_seconds` on `GET /v1/files/{file_id}` (for a single file) or `GET /v1/commands/{command_id}` (for a command's output files) to receive a time-limited downloadable URL. Not available on free plans.","example":false,"uniqueKey":"is_private.oneOf.0","typeLabel":"boolean"},{"type":"null","title":"Is Private","description":"Whether the file is stored privately. Private files are accessible via their `storage_url` only if you request a presigned URL by passing `presigned_ttl_seconds` on `GET /v1/files/{file_id}` (for a single file) or `GET /v1/commands/{command_id}` (for a command's output files) to receive a time-limited downloadable URL. Not available on free plans.","example":false,"uniqueKey":"is_private.oneOf.1","typeLabel":"null"}],"uniqueKey":"is_private","typeLabel":"boolean | null"},"original_file_url":{"oneOf":[{"type":"string","title":"Original File Url","description":"URL of the original file (or just name in case of uploaded file)","example":"https://somehwereonline.stored.com/file_to_store.mp4","uniqueKey":"original_file_url.oneOf.0","typeLabel":"string"},{"type":"null","title":"Original File Url","description":"URL of the original file (or just name in case of uploaded file)","example":"https://somehwereonline.stored.com/file_to_store.mp4","uniqueKey":"original_file_url.oneOf.1","typeLabel":"null"}],"uniqueKey":"original_file_url","typeLabel":"string | null"},"duration":{"oneOf":[{"type":"number","title":"Duration","description":"Duration of the media file in seconds","example":30.5,"uniqueKey":"duration.oneOf.0","typeLabel":"number"},{"type":"null","title":"Duration","description":"Duration of the media file in seconds","example":30.5,"uniqueKey":"duration.oneOf.1","typeLabel":"null"}],"uniqueKey":"duration","typeLabel":"number | null"},"file_type":{"oneOf":[{"type":"string","title":"File Type","description":"Type of the media file (video, audio, image, subtitles, etc.)","example":"video","uniqueKey":"file_type.oneOf.0","typeLabel":"string"},{"type":"null","title":"File Type","description":"Type of the media file (video, audio, image, subtitles, etc.)","example":"video","uniqueKey":"file_type.oneOf.1","typeLabel":"null"}],"uniqueKey":"file_type","typeLabel":"string | null"},"file_format":{"oneOf":[{"type":"string","title":"File Format","description":"Format/container of the media file","example":"avi","uniqueKey":"file_format.oneOf.0","typeLabel":"string"},{"type":"null","title":"File Format","description":"Format/container of the media file","example":"avi","uniqueKey":"file_format.oneOf.1","typeLabel":"null"}],"uniqueKey":"file_format","typeLabel":"string | null"},"width":{"oneOf":[{"type":"integer","title":"Width","description":"Width of the video in pixels","example":1920,"uniqueKey":"width.oneOf.0","typeLabel":"integer"},{"type":"null","title":"Width","description":"Width of the video in pixels","example":1920,"uniqueKey":"width.oneOf.1","typeLabel":"null"}],"uniqueKey":"width","typeLabel":"integer | null"},"height":{"oneOf":[{"type":"integer","title":"Height","description":"Height of the video in pixels","example":1080,"uniqueKey":"height.oneOf.0","typeLabel":"integer"},{"type":"null","title":"Height","description":"Height of the video in pixels","example":1080,"uniqueKey":"height.oneOf.1","typeLabel":"null"}],"uniqueKey":"height","typeLabel":"integer | null"},"codec":{"oneOf":[{"type":"string","title":"Codec","description":"Codec used for the media file","example":"msmpeg4v2","uniqueKey":"codec.oneOf.0","typeLabel":"string"},{"type":"null","title":"Codec","description":"Codec used for the media file","example":"msmpeg4v2","uniqueKey":"codec.oneOf.1","typeLabel":"null"}],"uniqueKey":"codec","typeLabel":"string | null"},"timebase":{"oneOf":[{"type":"string","title":"Timebase","description":"How time is represented in the media file","example":"1/25","uniqueKey":"timebase.oneOf.0","typeLabel":"string"},{"type":"null","title":"Timebase","description":"How time is represented in the media file","example":"1/25","uniqueKey":"timebase.oneOf.1","typeLabel":"null"}],"uniqueKey":"timebase","typeLabel":"string | null"},"pixel_format":{"oneOf":[{"type":"string","title":"Pixel Format","description":"How the pixel data is stored in the media file","example":"yuv420p","uniqueKey":"pixel_format.oneOf.0","typeLabel":"string"},{"type":"null","title":"Pixel Format","description":"How the pixel data is stored in the media file","example":"yuv420p","uniqueKey":"pixel_format.oneOf.1","typeLabel":"null"}],"uniqueKey":"pixel_format","typeLabel":"string | null"},"mime_type":{"oneOf":[{"type":"string","title":"Mime Type","description":"MIME type of the media file","example":"video/mp4","uniqueKey":"mime_type.oneOf.0","typeLabel":"string"},{"type":"null","title":"Mime Type","description":"MIME type of the media file","example":"video/mp4","uniqueKey":"mime_type.oneOf.1","typeLabel":"null"}],"uniqueKey":"mime_type","typeLabel":"string | null"},"frame_rate":{"oneOf":[{"type":"number","title":"Frame Rate","description":"Frame rate of the video in frames per second","example":30,"uniqueKey":"frame_rate.oneOf.0","typeLabel":"number"},{"type":"null","title":"Frame Rate","description":"Frame rate of the video in frames per second","example":30,"uniqueKey":"frame_rate.oneOf.1","typeLabel":"null"}],"uniqueKey":"frame_rate","typeLabel":"number | null"},"bitrate_video_kb":{"oneOf":[{"type":"number","title":"Bitrate Video Kb","description":"Video bitrate in kilobits per second","example":4000,"uniqueKey":"bitrate_video_kb.oneOf.0","typeLabel":"number"},{"type":"null","title":"Bitrate Video Kb","description":"Video bitrate in kilobits per second","example":4000,"uniqueKey":"bitrate_video_kb.oneOf.1","typeLabel":"null"}],"uniqueKey":"bitrate_video_kb","typeLabel":"number | null"},"bitrate_audio_kb":{"oneOf":[{"type":"number","title":"Bitrate Audio Kb","description":"Audio bitrate in kilobits per second","example":128,"uniqueKey":"bitrate_audio_kb.oneOf.0","typeLabel":"number"},{"type":"null","title":"Bitrate Audio Kb","description":"Audio bitrate in kilobits per second","example":128,"uniqueKey":"bitrate_audio_kb.oneOf.1","typeLabel":"null"}],"uniqueKey":"bitrate_audio_kb","typeLabel":"number | null"},"video_profile_level":{"oneOf":[{"type":"string","title":"Video Profile Level","description":"Video profile level","example":"main","uniqueKey":"video_profile_level.oneOf.0","typeLabel":"string"},{"type":"null","title":"Video Profile Level","description":"Video profile level","example":"main","uniqueKey":"video_profile_level.oneOf.1","typeLabel":"null"}],"uniqueKey":"video_profile_level","typeLabel":"string | null"},"is_varying_frame_rate":{"oneOf":[{"type":"boolean","title":"Is Varying Frame Rate","description":"Whether the video has a variable frame rate","example":false,"uniqueKey":"is_varying_frame_rate.oneOf.0","typeLabel":"boolean"},{"type":"null","title":"Is Varying Frame Rate","description":"Whether the video has a variable frame rate","example":false,"uniqueKey":"is_varying_frame_rate.oneOf.1","typeLabel":"null"}],"uniqueKey":"is_varying_frame_rate","typeLabel":"boolean | null"}},"type":"object","required":["file_id"],"title":"RendiStoredFile","description":"Represents a file stored by rendi. Could either be an uploaded file or a file generated by running a command.\n\nThis model contains metadata about files stored in rendi storage, including file details,\nmedia information, and storage location.","example":{"bitrate_audio_kb":128,"bitrate_video_kb":4000,"codec":"h264","duration":30,"environment_name":"main","file_format":"mp4","file_id":"987fcdeb-a89b-43d3-b456-789012345678","file_type":"video","frame_rate":30,"height":1080,"is_deleted":false,"is_varying_frame_rate":false,"mime_type":"video/mp4","original_file_url":"https://storage.rendi.dev/sample/big_buck_bunny_720p_5sec_intro.mp4","pixel_format":"yuv420p","rendi_store_type":"STORED_FILE","size_mbytes":2.27,"status":"STORED","storage_url":"https://storage.rendi.dev/files/224ea098-5c10-419b-8a77-707d89443c56/987fcdeb-a89b-43d3-b456-789012345678/output.mp4","timebase":"1/25","video_profile_level":"main","width":1920},"uniqueKey":"","typeLabel":"RendiStoredFile · object"},"examples":{"Example":{"title":"Example","value":{"bitrate_audio_kb":128,"bitrate_video_kb":4000,"codec":"h264","duration":30,"environment_name":"main","file_format":"mp4","file_id":"987fcdeb-a89b-43d3-b456-789012345678","file_type":"video","frame_rate":30,"height":1080,"is_deleted":false,"is_varying_frame_rate":false,"mime_type":"video/mp4","original_file_url":"https://storage.rendi.dev/sample/big_buck_bunny_720p_5sec_intro.mp4","pixel_format":"yuv420p","rendi_store_type":"STORED_FILE","size_mbytes":2.27,"status":"STORED","storage_url":"https://storage.rendi.dev/files/224ea098-5c10-419b-8a77-707d89443c56/987fcdeb-a89b-43d3-b456-789012345678/output.mp4","timebase":"1/25","video_profile_level":"main","width":1920}}},"exampleType":"generated"}},"exampleType":"generated"},"3cfa0ed5-8eac-4f72-85e8-77fc5af4263a":{"description":"File is not in an upload-in-progress state, or the upload session has expired","content":{"_mintlify/placeholder":{"schema":{"type":"object","description":""}}}},"2155c739-fa70-4f41-999d-30491c3a960b":{"description":"Invalid API key","content":{"application/json":{"example":{"detail":"Invalid authorization key"},"examples":{"Example":{"title":"Example","value":{"detail":"Invalid authorization key"}}},"exampleType":"examples"}},"exampleType":"examples"},"2ca78fc9-0ce7-4896-9228-a502101ca174":{"description":"File not found","content":{"_mintlify/placeholder":{"schema":{"type":"object","description":""}}}},"cdac8061-eb3d-44a8-a84a-cf0f4e92b498":{"description":"Validation Error","content":{"application/json":{"schema":{"properties":{"detail":{"items":{"properties":{"loc":{"items":{"oneOf":[{"type":"string","uniqueKey":"detail.items.[INDEX].loc.items.[INDEX].oneOf.0","typeLabel":"string"},{"type":"integer","uniqueKey":"detail.items.[INDEX].loc.items.[INDEX].oneOf.1","typeLabel":"integer"}],"uniqueKey":"detail.items.[INDEX].loc.items.[INDEX]","typeLabel":"string | integer"},"type":"array","title":"Location","isRequired":true,"uniqueKey":"detail.items.[INDEX].loc","typeLabel":"(string | integer)[]"},"msg":{"type":"string","title":"Message","isRequired":true,"uniqueKey":"detail.items.[INDEX].msg","typeLabel":"string"},"type":{"type":"string","title":"Error Type","isRequired":true,"uniqueKey":"detail.items.[INDEX].type","typeLabel":"string"}},"type":"object","required":["loc","msg","type"],"title":"ValidationError","uniqueKey":"detail.items.[INDEX]","typeLabel":"ValidationError · object"},"type":"array","title":"Detail","uniqueKey":"detail","typeLabel":"ValidationError · object[]"}},"type":"object","title":"HTTPValidationError","uniqueKey":"","typeLabel":"HTTPValidationError · object"},"examples":{"Example":{"title":"Example","value":{"detail":[{"loc":["\u003cstring>"],"msg":"\u003cstring>","type":"\u003cstring>"}]}}},"exampleType":"generated"}},"exampleType":"generated"}},"security":{"811401e9-ae54-41ae-bbb4-e8d58dd21a1a":{"APIKeyHeader":{"type":"apiKey","in":"header","name":"X-API-KEY","scopes":[],"schemeName":"APIKeyHeader"}}},"servers":{"d582982c-db85-4362-982a-9f76c7a080f9":{"url":"https://api.rendi.dev","description":"Rendi - FFmpeg API"}},"processedSecurityOptions":[{"schemes":[{"scheme":{"type":"apiKey","in":"header","name":"X-API-KEY","scopes":[],"schemeName":"APIKeyHeader"},"schema":{"title":"X-API-KEY","type":"string","isRequired":true,"typeLabel":"string","deprecated":false},"schemeName":"APIKeyHeader","name":"X-API-KEY"}],"title":"APIKeyHeader"}]},"originalFileLocation":"api-reference/openapi.json"},"subdomain":"rendi","siteName":"Rendi - FFmpeg API","title":"Complete a Multipart Upload - Rendi - FFmpeg API","navMaps":{"firstHrefInVersion":{},"firstHrefInLanguage":{}},"lastModified":"2026-07-02T06:34:01.516Z","originalFileLocation":"api-reference/endpoint/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=\"light\"}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=\"Finalize a direct upload started via POST /v1/files/init-upload. The file then goes through FFprobe for media metadata; status changes as UPLOADED and becomes STORED when analysis completes. See the direct upload guide for the full flow.\">\u003cmeta data-mint-head name=\"application-name\" content=\"Rendi - FFmpeg API\">\u003cmeta data-mint-head name=\"generator\" content=\"Mintlify\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/docs/mintlify-assets/_mintlify/favicons/rendi/yMbVXDfCy7ERSCJP/_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=\"/docs/mintlify-assets/_mintlify/favicons/rendi/yMbVXDfCy7ERSCJP/_generated/favicon/apple-touch-icon.png\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/docs/mintlify-assets/_mintlify/favicons/rendi/yMbVXDfCy7ERSCJP/_generated/favicon/favicon-16x16.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"/docs/mintlify-assets/_mintlify/favicons/rendi/yMbVXDfCy7ERSCJP/_generated/favicon/favicon-32x32.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"shortcut icon\" type=\"image/x-icon\" href=\"/docs/mintlify-assets/_mintlify/favicons/rendi/yMbVXDfCy7ERSCJP/_generated/favicon/favicon.ico\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/docs/mintlify-assets/_mintlify/favicons/rendi/yMbVXDfCy7ERSCJP/_generated/favicon-dark/android-chrome-192x192.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/docs/mintlify-assets/_mintlify/favicons/rendi/yMbVXDfCy7ERSCJP/_generated/favicon-dark/favicon-16x16.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"/docs/mintlify-assets/_mintlify/favicons/rendi/yMbVXDfCy7ERSCJP/_generated/favicon-dark/favicon-32x32.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"shortcut icon\" type=\"image/x-icon\" href=\"/docs/mintlify-assets/_mintlify/favicons/rendi/yMbVXDfCy7ERSCJP/_generated/favicon-dark/favicon.ico\" media=\"(prefers-color-scheme: dark)\">\u003cmeta data-mint-head property=\"og:title\" content=\"Complete a Multipart Upload - Rendi - FFmpeg API\">\u003cmeta data-mint-head property=\"og:description\" content=\"Learn how to run FFmpeg online easily using Rendi’s FFmpeg API - no installation needed. Fast, scalable, and reliable FFmpeg as a Service.\">\u003cmeta data-mint-head property=\"og:site_name\" content=\"Rendi - FFmpeg API - Documentation\">\u003cmeta data-mint-head property=\"og:url\" content=\"https://rendi.dev/docs/api-reference/endpoint/complete-upload\">\u003cmeta data-mint-head property=\"og:type\" content=\"website\">\u003cmeta data-mint-head property=\"og:image\" content=\"https://rendi.mintlify.site/docs/_mintlify/api/og/v2?division=File+Storage\u0026amp;title=Complete+a+Multipart+Upload\u0026amp;description=Finalize+a+direct+upload+started+via+%60POST+%2Fv1%2Ffiles%2Finit-upload%60.+The+file+then+goes+through+FFprobe+for+media+metadata%3B+%60status%60+changes+as+%60UPLOADED%60+and+bec\u0026amp;theme=20f28108fb429c5ee8009a96\u0026amp;signature=681bc872f075314d87ba2ccc7028f8cf847db4d995735f87192e34fae57d5700\">\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 a Multipart Upload - Rendi - FFmpeg API\">\u003cmeta data-mint-head name=\"twitter:description\" content=\"Learn how to run FFmpeg online easily - no installation needed. Fast, scalable, and reliable FFmpeg as a Service.\">\u003cmeta data-mint-head name=\"twitter:image\" content=\"https://rendi.mintlify.site/docs/_mintlify/api/og/v2?division=File+Storage\u0026amp;title=Complete+a+Multipart+Upload\u0026amp;description=Finalize+a+direct+upload+started+via+%60POST+%2Fv1%2Ffiles%2Finit-upload%60.+The+file+then+goes+through+FFprobe+for+media+metadata%3B+%60status%60+changes+as+%60UPLOADED%60+and+bec\u0026amp;theme=20f28108fb429c5ee8009a96\u0026amp;signature=681bc872f075314d87ba2ccc7028f8cf847db4d995735f87192e34fae57d5700\">\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=\"/docs/mintlify-assets/_mintlify/favicons/rendi/yMbVXDfCy7ERSCJP/_generated/favicon/browserconfig.xml\">\u003cmeta data-mint-head name=\"apple-mobile-web-app-title\" content=\"Rendi - FFmpeg API\">\u003cmeta data-mint-head name=\"msapplication-TileColor\" content=\"#6BB666\">\u003cmeta data-mint-head name=\"og:locale\" content=\"en_US\">\u003cmeta data-mint-head name=\"og:logo\" content=\"/logo/rendi_logo.svg\">\u003clink data-mint-head rel=\"canonical\" href=\"https://rendi.dev/docs/api-reference/endpoint/complete-upload\">\u003clink data-mint-head rel=\"alternate\" type=\"application/xml\" href=\"/docs/sitemap.xml\">\u003clink data-mint-head rel=\"alternate\" type=\"text/markdown\" href=\"/docs/api-reference/endpoint/complete-upload.md\">\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@graph\":[{\"@type\":\"Organization\",\"@id\":\"https://rendi.dev/#organization\",\"name\":\"Rendi - FFmpeg API\",\"url\":\"https://rendi.dev\",\"logo\":{\"@type\":\"ImageObject\",\"url\":\"https://mintcdn.com/rendi/UkCjje3cRpAu-Pzn/logo/rendi_light.svg?fit=max\u0026auto=format\u0026n=UkCjje3cRpAu-Pzn\u0026q=85\u0026s=9221ec14a8479069fb9656f72cb52c3c\"}},{\"@type\":\"WebSite\",\"@id\":\"https://rendi.dev/docs#website\",\"name\":\"Rendi - FFmpeg API\",\"url\":\"https://rendi.dev/docs\",\"publisher\":{\"@id\":\"https://rendi.dev/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https://rendi.dev/docs/api-reference/endpoint/complete-upload#webpage\",\"url\":\"https://rendi.dev/docs/api-reference/endpoint/complete-upload\",\"name\":\"Complete a Multipart Upload\",\"description\":\"Finalize a direct upload started via POST /v1/files/init-upload. The file then goes through FFprobe for media metadata; status changes as UPLOADED and becomes STORED when analysis completes. See the direct upload guide for the full flow.\",\"dateModified\":\"2026-07-02T06:34:01.516Z\",\"isPartOf\":{\"@id\":\"https://rendi.dev/docs#website\"},\"breadcrumb\":{\"@id\":\"https://rendi.dev/docs/api-reference/endpoint/complete-upload#breadcrumb\"}},{\"@type\":\"BreadcrumbList\",\"@id\":\"https://rendi.dev/docs/api-reference/endpoint/complete-upload#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"File Storage\",\"item\":\"https://rendi.dev/docs/api-reference/endpoint/store-file\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Complete a Multipart Upload\",\"item\":\"https://rendi.dev/docs/api-reference/endpoint/complete-upload\"}]},{\"@type\":[\"TechArticle\",\"APIReference\"],\"@id\":\"https://rendi.dev/docs/api-reference/endpoint/complete-upload#apireference\",\"headline\":\"Complete a Multipart Upload\",\"name\":\"Complete a Multipart Upload\",\"description\":\"Finalize a direct upload started via POST /v1/files/init-upload. The file then goes through FFprobe for media metadata; status changes as UPLOADED and becomes STORED when analysis completes. See the direct upload guide for the full flow.\",\"url\":\"https://rendi.dev/docs/api-reference/endpoint/complete-upload\",\"mainEntityOfPage\":{\"@id\":\"https://rendi.dev/docs/api-reference/endpoint/complete-upload#webpage\"},\"dateModified\":\"2026-07-02T06:34:01.516Z\",\"publisher\":{\"@id\":\"https://rendi.dev/#organization\"},\"isPartOf\":{\"@id\":\"https://rendi.dev/docs#website\"}}]}\u003c/script>\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@type\":\"WebSite\",\"name\":\"Rendi - FFmpeg API\",\"creator\":{\"@type\":\"Organization\",\"name\":\"Mintlify\",\"url\":\"https://mintlify.com\"}}\u003c/script>","siteName":"Rendi - FFmpeg API","nav":{"global":{"anchors":[{"anchor":"GitHub","icon":"github","href":"https://github.com/rendi-api/ffmpeg-cheatsheet"},{"anchor":"System Status","icon":"display-chart-up","href":"https://status.rendi.dev"},{"anchor":"YouTube","icon":"youtube","href":"https://youtube.com/playlist?list=PLJafqrbyIUfzM4MM6wKeN4qkwCviI3IHw\u0026si=VqyZiQMBqJrbrngc"}]},"tabs":[{"tab":"Documentation","pages":[{"title":"Documentation","href":"/introduction"}]},{"tab":"API Reference","groups":[{"group":"API Documentation","pages":[{"title":"API Reference","href":"/api-reference/introduction"}]},{"group":"Running FFmpeg","pages":[{"title":"Run FFmpeg Command","openapi":"POST /v1/run-ffmpeg-command","href":"/api-reference/endpoint/run-ffmpeg-command"},{"title":"Run Chained FFmpeg Commands","openapi":"POST /v1/run-chained-ffmpeg-commands","href":"/api-reference/endpoint/run-chained-ffmpeg-commands"}]},{"group":"Listing Assets","pages":[{"title":"Poll FFmpeg Command","openapi":"GET /v1/commands/{command_id}","href":"/api-reference/endpoint/poll-command"},{"title":"List FFmpeg Commands","openapi":"GET /v1/commands","href":"/api-reference/endpoint/list-commands"},{"title":"Get File","openapi":"GET /v1/files/{file_id}","href":"/api-reference/endpoint/get-file"},{"title":"List Stored Files","openapi":"GET /v1/files","href":"/api-reference/endpoint/list-files"}]},{"group":"File Storage","pages":[{"title":"FFprobe and store a file","openapi":"POST /v1/files/store-file","href":"/api-reference/endpoint/store-file"},{"title":"Initiate a Multipart Upload","openapi":"POST /v1/files/init-upload","description":"Start uploading a local file directly to Rendi's storage. Returns a per-part list of presigned PUT URLs that you upload chunks to. See the [direct upload guide](https://docs.rendi.dev/direct-upload) for the full flow and code samples.","href":"/api-reference/endpoint/init-upload"},{"title":"Complete a Multipart Upload","openapi":"POST /v1/files/{file_id}/complete-upload","href":"/api-reference/endpoint/complete-upload"},{"title":"Abort a Multipart Upload","openapi":"POST /v1/files/{file_id}/abort-upload","description":"Cancel a direct upload started via `POST /v1/files/init-upload`. Discards any parts already uploaded to storage and marks the file as failed. See the [direct upload guide](https://docs.rendi.dev/direct-upload) for the full flow.","href":"/api-reference/endpoint/abort-upload"}]},{"group":"Deleting Assets","pages":[{"title":"Delete Command Files","openapi":"DELETE /v1/commands/{command_id}/files","href":"/api-reference/endpoint/delete-command-files"},{"title":"Delete File","openapi":"DELETE /v1/files/{file_id}","href":"/api-reference/endpoint/delete-file"},{"title":"Delete Files in Bulk","openapi":"POST /v1/files/bulk-delete","href":"/api-reference/endpoint/delete-files"}]}]}]},"basePath":"","title":"Complete a Multipart Upload - Rendi - FFmpeg API","buildId":"dpl_BSPUBxEoKhhK7HzXVDPxdPvWx4xc","deploymentId":"dpl_BSPUBxEoKhhK7HzXVDPxdPvWx4xc","dynamics":["c2aa737661","2b790eda92","b0f84f53ff","a9bb46feb3"],"chunks":["OpenApiReferenceProvider-Do6EtGSl.js","utils-id4tQ6My.js","cloneDeep-izs3Hzxb.js","_Uint8Array-BVIqJ90l.js","isObjectLike-C8vmzPEN.js","isArray-Dcu1dQ5t.js","utils-Byrixac4.js","toString-BX-iyh8G.js","isSymbol-CSH9U2Gm.js","addUniqueKeysToSchema-nakYa3Zl.js","snippetPresets-Bq-pUS7h.js","style-to-object-BY3JEAdk.js","v4-DIgz8zy6.js","conditional-requirements-CFM0id0Q.js","ApiExamples-CujTC_9K.js","isEqual-BfaiBbcl.js","usePlaygroundInputsStore-FneVUsVu.js","shallow-DY9WpUCz.js","getApiPlaygroundDisplay-Bz8WpPfA.js","CodeSnippet-DgCuJg4G.js","CodeSnippets-Dub9c4T0.js","Page-CePXnjd1.js","getPastedJson-xdI8y2XB.js","icon--yVw5vkr.js","MethodPill-C47t7MdS.js","DuplicateIcon-BzwJ2LeC.js","createIcon-BzggGy84.js","DynamicMarkdown-AlxJK8VR.js","SectionHeading-CMlwFxdK.js","axios-vUo_bRtp.js","Markdown-BNgNrPsi.js","clsx-apD-Q0Oo.js","lib-DuNMoZ05.js","lib-B8HbPgcC.js","html-void-elements-mCSPHezU.js","dist-qmLwQyWY.js","katex-YMM-FMeD.js","marked.esm-CZWythHk.js","AssistantPageLink-Dc4qTkWx.js"]}