One entry per chunk, each with a presigned S3 URL to PUT the chunk to.
Show child attributes
Was this page helpful?
{"docsConfig":{"theme":"mint","$schema":"https://mintlify.com/docs.json","name":"Plaud Dev API","colors":{"primary":"#23a1ba","light":"#23a1ba","dark":"#23a1ba"},"logo":{"light":"https://mintcdn.com/plaud/NcIGXAbuUj5XMDGP/assets/logo/light.svg?fit=max\u0026auto=format\u0026n=NcIGXAbuUj5XMDGP\u0026q=85\u0026s=a5604c3522966e950c83b135b5447fd2","dark":"https://mintcdn.com/plaud/NcIGXAbuUj5XMDGP/assets/logo/dark.svg?fit=max\u0026auto=format\u0026n=NcIGXAbuUj5XMDGP\u0026q=85\u0026s=e201b4f55334c7fe676da8bff7f8efe8"},"favicon":"https://mintcdn.com/plaud/YxiKJ7IMBL1gGn13/assets/favicon/light.svg?fit=max\u0026auto=format\u0026n=YxiKJ7IMBL1gGn13\u0026q=85\u0026s=24c68e9f1e431eac31fbad0c996d1ca8","api":{"examples":{"defaults":"all","languages":["curl","python"]}},"navbar":{"links":[{"icon":"discord","href":"https://discord.gg/9FKhEBk5wa","label":"Community"},{"icon":"phone","href":"https://dev.plaud.ai/contact","label":"Contact Sales"}],"primary":{"type":"button","label":"Become a Partner","href":"https://dev.plaud.ai/contact"}},"footer":{"socials":{"website":"https://plaud.ai","github":"https://github.com/plaud-ai"}},"seo":{"metatags":{"google-site-verification":"RgykNSELwR2FfPjJ67wnEJvRZnLbvvWj1Jq-OC1mDts"}},"styling":{"codeblocks":"system","latex":false},"integrations":{"gtm":{"tagId":"GTM-KSGBLZTN"}},"navigation":{"languages":[{"language":"en","default":true,"href":"overview"},{"language":"es","href":"overview"},{"language":"fr","href":"overview"},{"language":"de","href":"overview"},{"language":"pt","href":"overview"},{"language":"it","href":"overview"},{"language":"zh-Hant","href":"overview"},{"language":"nl","href":"overview"},{"language":"jp","href":"overview"}]}},"deployment":{"deploymentMetadataValue":{"subdomain":"plaud","hasAudioNarration":false,"actualSubdomain":"plaud","customDomains":["docs.plaud.ai"],"gitSource":{"type":"github","owner":"plaud-ai","repo":"plaud-dev-docs","deployBranch":"main","contentDirectory":"","isPrivate":true,"mountPath":"","label":""},"chroma":{"liveDeploymentHistoryId":"6ad7fcd950a0ac3d389e4a19","collectionId":"1c67a25a-bfbb-424d-93d6-9d76ab10abee","schemaVersion":"v3","latestBuiltDeploymentHistoryId":"6ad7fcd950a0ac3d389e4a19"},"feedback":{"thumbs":true},"entitlements":{"AI_CHAT":{"status":"ENABLED"},"WEB_MCP":{"status":"ENABLED"},"NARRATION":{"status":"ENABLED"}},"buildId":"6ad7fcd950a0ac3d389e4a19","clientVersion":"0.0.4043","searchFilterCounts":[{"language":"en","tag":"Plaud Embedded","count":29},{"language":"en","tag":"API Reference","count":15},{"language":"en","tag":"Starter Apps \u0026 Guides","count":6},{"language":"de","tag":"Plaud MCP \u0026 CLI","count":4},{"language":"es","tag":"Plaud MCP \u0026 CLI","count":4},{"language":"fr","tag":"Plaud MCP \u0026 CLI","count":4},{"language":"it","tag":"Plaud MCP \u0026 CLI","count":4},{"language":"jp","tag":"Plaud MCP \u0026 CLI","count":4},{"language":"nl","tag":"Plaud MCP \u0026 CLI","count":4},{"language":"en","tag":"Embedded SDK Reference","count":4},{"language":"en","tag":"Authentication API","count":4},{"language":"en","tag":"Device Binding API","count":4},{"language":"en","tag":"Plaud MCP \u0026 CLI","count":4},{"language":"pt","tag":"Plaud MCP \u0026 CLI","count":4},{"language":"zh-Hant","tag":"Plaud MCP \u0026 CLI","count":4},{"language":"default","tag":"Plaud Embedded","count":3},{"language":"default","tag":"Overview","count":3},{"language":"en","tag":"Resources","count":3},{"language":"en","tag":"File Upload API","count":3},{"language":"en","tag":"Transcription API","count":3},{"language":"default","tag":"Developer Platform","count":1},{"language":"default","tag":"Platform","count":1}]},"assistantConfig":{"enableStarterQuestions":false,"deflection":{"enabled":true,"type":"link","email":"jack.mu@plaud.ai","url":"https://dev.plaud.ai/support/"}},"basePath":"","hasChatPermissions":true,"hasWebMcpPermissions":true,"toggles":[{"name":"kill-isr","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-mintlify-slack","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-integrations-settings","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"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}],"googleFontsInlined":false},"customCss":[{"filePath":"style.css","content":".nav-logo{width:102px;height:63px}.nav-tabs{width:100%!important}"}],"page":{"pagePath":"api-reference/file-upload-api/generate-presigned-upload-urls","slug":"/api-reference/file-upload-api/generate-presigned-upload-urls","pageMetadata":{"title":"Generate Presigned Upload URLs","description":"Request presigned S3 URLs for a multipart upload.\n\n\u003cNote>The file is split into chunks of 5 MB with one presigned URL per part.\u003c/Note>\n\nFor each part returned:\n\n1. **Send raw bytes to S3** — `PUT PresignedUrl` the raw bytes of the chunk to (no auth needed).\n2. **Collect the `ETag`** from each S3 response header — These will be needed in the [complete-upload endpoint](/api-reference/file-upload-api/complete-multipart-upload).","deprecated":null,"version":null,"openapi":"/openapi/file.json post /open/partner/files/upload/generate-presigned-urls","href":"/api-reference/file-upload-api/generate-presigned-upload-urls","autogeneratedByOpenApi":true},"description":{"compiledSource":"\"use strict\";\nconst {Fragment: _Fragment, jsx: _jsx, jsxs: _jsxs} = arguments[0];\nconst {useMDXComponents: _provideComponents} = arguments[0];\nfunction _createMdxContent(props) {\n const _components = {\n a: \"a\",\n code: \"code\",\n li: \"li\",\n ol: \"ol\",\n p: \"p\",\n strong: \"strong\",\n ..._provideComponents(),\n ...props.components\n }, {Note} = _components;\n if (!Note) _missingMdxReference(\"Note\", true);\n return _jsxs(_Fragment, {\n children: [_jsx(_components.p, {\n children: \"Request presigned S3 URLs for a multipart upload.\"\n }), \"\\n\", _jsx(Note, {\n children: \"The file is split into chunks of 5 MB with one presigned URL per part.\"\n }), \"\\n\", _jsx(_components.p, {\n children: \"For each part returned:\"\n }), \"\\n\", _jsxs(_components.ol, {\n children: [\"\\n\", _jsxs(_components.li, {\n children: [_jsx(_components.strong, {\n children: \"Send raw bytes to S3\"\n }), \" — \", _jsx(_components.code, {\n children: \"PUT PresignedUrl\"\n }), \" the raw bytes of the chunk to (no auth needed).\"]\n }), \"\\n\", _jsxs(_components.li, {\n children: [_jsxs(_components.strong, {\n children: [\"Collect the \", _jsx(_components.code, {\n children: \"ETag\"\n })]\n }), \" from each S3 response header — These will be needed in the \", _jsx(_components.a, {\n href: \"/api-reference/file-upload-api/complete-multipart-upload\",\n children: \"complete-upload endpoint\"\n }), \".\"]\n }), \"\\n\"]\n })]\n });\n}\nfunction MDXContent(props = {}) {\n const {wrapper: MDXLayout} = {\n ..._provideComponents(),\n ...props.components\n };\n return MDXLayout ? _jsx(MDXLayout, {\n ...props,\n children: _jsx(_createMdxContent, {\n ...props\n })\n }) : _createMdxContent(props);\n}\nreturn {\n default: MDXContent\n};\nfunction _missingMdxReference(id, component) {\n throw new Error(\"Expected \" + (component ? \"component\" : \"object\") + \" `\" + id + \"` to be defined: you likely forgot to import, pass, or provide it.\");\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":{"codeStyling":"system","config":{},"pageMetadata":{"title":"Generate Presigned Upload URLs","description":"Request presigned S3 URLs for a multipart upload.\n\n\u003cNote>The file is split into chunks of 5 MB with one presigned URL per part.\u003c/Note>\n\nFor each part returned:\n\n1. **Send raw bytes to S3** — `PUT PresignedUrl` the raw bytes of the chunk to (no auth needed).\n2. **Collect the `ETag`** from each S3 response header — These will be needed in the [complete-upload endpoint](/api-reference/file-upload-api/complete-multipart-upload).","deprecated":null,"version":null,"openapi":"/openapi/file.json post /open/partner/files/upload/generate-presigned-urls","href":"/api-reference/file-upload-api/generate-presigned-upload-urls","autogeneratedByOpenApi":true}}},"mdxSourceWithNoJs":null},"mdxExtracts":{"tableOfContents":[],"codeExamples":{}},"jsLinks":["/_mintlify/custom/plaud/295957221f91259e/tab-nav.js"],"openApiReferenceData":{"operation":{"operationId":"generatePresignedUrls","summary":"Generate Presigned Upload URLs","description":"Request presigned S3 URLs for a multipart upload.\n\n\u003cNote>The file is split into chunks of 5 MB with one presigned URL per part.\u003c/Note>\n\nFor each part returned:\n\n1. **Send raw bytes to S3** — `PUT PresignedUrl` the raw bytes of the chunk to (no auth needed).\n2. **Collect the `ETag`** from each S3 response header — These will be needed in the [complete-upload endpoint](/api-reference/file-upload-api/complete-multipart-upload).","tags":["File Upload API"],"security":["3426d22d-49a4-46bb-9838-f151ced28586"],"parameters":["ce10e83a-e690-4d5f-b4d2-b7dd8082aab5"],"requestBody":"990ddf89-188c-42f8-ad1b-3049a8488a2c","responses":{"200":"86171743-c16e-4258-9950-2e3486c67a4c"},"method":"post","type":"path","servers":["6a72cef0-5c97-45f8-b768-bc09c1802701","0c71e50e-14c2-4e0c-96ce-f864b35dd220"],"path":"/open/partner/files/upload/generate-presigned-urls","baseUrlOptions":["https://platform-us.plaud.ai/developer/api","https://platform-jp.plaud.ai/developer/api"],"title":"Generate Presigned Upload URLs","codeSamples":[],"requestExampleLanguages":["bash","python"],"requiredOnlyExamples":false,"requestExampleType":"generated","responseExampleType":"generated"},"dependencies":{"parameters":{"ce10e83a-e690-4d5f-b4d2-b7dd8082aab5":{"in":"header","name":"Content-Type","schema":{"type":"string","default":"application/json","isRequired":true,"uniqueKey":"","typeLabel":"string"},"required":true}},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["filesize","filetype"],"properties":{"filesize":{"type":"integer","description":"Total size of the file, in bytes. Determines how many parts are returned.","example":10485760,"isRequired":true,"uniqueKey":"filesize","typeLabel":"integer"},"filetype":{"type":"string","description":"File extension of the audio file. (\"mp3\" or \"opus\")","example":"mp3","isRequired":true,"uniqueKey":"filetype","typeLabel":"string"}},"uniqueKey":"","typeLabel":"object"},"example":{"filesize":10485760,"filetype":"mp3"},"examples":{"Example":{"title":"Example","value":{"filesize":10485760,"filetype":"mp3"}}},"exampleType":"examples"}},"exampleType":"examples"},"responses":{"86171743-c16e-4258-9950-2e3486c67a4c":{"description":"Presigned URLs issued","content":{"application/json":{"schema":{"type":"object","properties":{"FileId":{"type":"string","description":"Identifier for the file being uploaded. Pass to complete-upload.","example":"file_xxx","uniqueKey":"FileId","typeLabel":"string"},"UploadId":{"type":"string","description":"Identifier for the multipart upload session. Pass to complete-upload.","example":"upload_xxx","uniqueKey":"UploadId","typeLabel":"string"},"ChunkSize":{"type":"integer","description":"Size of each chunk, in bytes. The file should be split into chunks of this size.","example":5242880,"uniqueKey":"ChunkSize","typeLabel":"integer"},"Parts":{"type":"array","description":"One entry per chunk, each with a presigned S3 URL to PUT the chunk to.","items":{"type":"object","properties":{"PartNumber":{"type":"integer","description":"1-based index of the chunk.","example":1,"uniqueKey":"Parts.items.[INDEX].PartNumber","typeLabel":"integer"},"PresignedUrl":{"type":"string","description":"Pre-authorized S3 URL. PUT the raw bytes of this chunk to it directly (no auth header), then read the `ETag` response header.","example":"https://plaud-bucket.s3.amazonaws.com/...","uniqueKey":"Parts.items.[INDEX].PresignedUrl","typeLabel":"string"}},"uniqueKey":"Parts.items.[INDEX]","typeLabel":"object"},"uniqueKey":"Parts","typeLabel":"object[]"}},"uniqueKey":"","typeLabel":"object"},"example":{"FileId":"file_xxx","UploadId":"upload_xxx","ChunkSize":5242880,"Parts":[{"PartNumber":1,"PresignedUrl":"https://plaud-bucket.s3.amazonaws.com/..."},{"PartNumber":2,"PresignedUrl":"https://plaud-bucket.s3.amazonaws.com/..."}]},"examples":{"Example":{"title":"Example","value":{"FileId":"file_xxx","UploadId":"upload_xxx","ChunkSize":5242880,"Parts":[{"PartNumber":1,"PresignedUrl":"https://plaud-bucket.s3.amazonaws.com/..."},{"PartNumber":2,"PresignedUrl":"https://plaud-bucket.s3.amazonaws.com/..."}]}}},"exampleType":"examples"}},"exampleType":"examples"}},"security":{"3426d22d-49a4-46bb-9838-f151ced28586":{"bearerAuth":{"type":"http","scheme":"bearer","description":"Bearer authentication using a `user_access_token` (see the Authentication API).","scopes":[]}}},"servers":{"6a72cef0-5c97-45f8-b768-bc09c1802701":{"url":"https://platform-us.plaud.ai/developer/api","description":"US partner endpoint"},"0c71e50e-14c2-4e0c-96ce-f864b35dd220":{"url":"https://platform-jp.plaud.ai/developer/api","description":"Japan partner endpoint"}},"processedSecurityOptions":[{"schemes":[{"scheme":{"type":"http","scheme":"bearer","description":"Bearer authentication using a `user_access_token` (see the Authentication API).","scopes":[]},"schema":{"title":"Bearer Auth","type":"string","isRequired":true,"description":"Bearer authentication using a `user_access_token` (see the Authentication API).","format":"bearer","typeLabel":"string\u003cbearer>","deprecated":false},"schemeName":"bearerAuth","name":"Authorization"}],"title":"bearerAuth"}]},"originalFileLocation":"openapi/file.json"},"subdomain":"plaud","siteName":"Plaud Dev API","title":"Generate Presigned Upload URLs - Plaud Dev API","navMaps":{"firstHrefInVersion":{},"firstHrefInLanguage":{"en":{"href":"/api-reference/file-upload-api/generate-presigned-upload-urls","matchLevel":0},"es":{"href":"/overview","matchLevel":4},"fr":{"href":"/overview","matchLevel":4},"de":{"href":"/overview","matchLevel":4},"pt":{"href":"/overview","matchLevel":4},"it":{"href":"/overview","matchLevel":4},"zh-Hant":{"href":"/overview","matchLevel":4},"nl":{"href":"/overview","matchLevel":4},"jp":{"href":"/overview","matchLevel":4}}},"lastModified":"2026-06-30T22:37:55.391Z","originalFileLocation":"api-reference/file-upload-api/generate-presigned-upload-urls.mdx","locale":"en"},"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=\"Request presigned S3 URLs for a multipart upload. The file is split into chunks of 5 MB with one presigned URL per part. For each part returned: 1. Send raw bytes to S3 — PUT PresignedUrl the raw bytes of the chunk to (no auth needed). 2. Collect the ETag from each S3 response header — These will be needed in the complete-upload endpoint.\">\u003cmeta data-mint-head name=\"application-name\" content=\"Plaud Dev API\">\u003cmeta data-mint-head name=\"generator\" content=\"Mintlify\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/plaud/nlLfkc9tz92mhJFv/_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/plaud/nlLfkc9tz92mhJFv/_generated/favicon/apple-touch-icon.png\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/plaud/nlLfkc9tz92mhJFv/_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/plaud/nlLfkc9tz92mhJFv/_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/plaud/nlLfkc9tz92mhJFv/_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/plaud/nlLfkc9tz92mhJFv/_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/plaud/nlLfkc9tz92mhJFv/_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/plaud/nlLfkc9tz92mhJFv/_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/plaud/nlLfkc9tz92mhJFv/_generated/favicon-dark/favicon.ico\" media=\"(prefers-color-scheme: dark)\">\u003cmeta data-mint-head property=\"og:title\" content=\"Generate Presigned Upload URLs - Plaud Dev API\">\u003cmeta data-mint-head property=\"og:description\" content=\"Request presigned S3 URLs for a multipart upload. The file is split into chunks of 5 MB with one presigned URL per part. For each part returned: 1. Send raw bytes to S3 — PUT PresignedUrl the raw bytes of the chunk to (no auth needed). 2. Collect the ETag from each S3 response header — These will be needed in the complete-upload endpoint.\">\u003cmeta data-mint-head property=\"og:site_name\" content=\"Plaud Dev API\">\u003cmeta data-mint-head property=\"og:url\" content=\"https://docs.plaud.ai/api-reference/file-upload-api/generate-presigned-upload-urls\">\u003cmeta data-mint-head property=\"og:type\" content=\"website\">\u003cmeta data-mint-head property=\"og:image\" content=\"https://plaud.mintlify.app/_mintlify/api/og/v2?division=File+Upload+API\u0026amp;title=Generate+Presigned+Upload+URLs\u0026amp;description=Request+presigned+S3+URLs+for+a+multipart+upload.%0A%0A%3CNote%3EThe+file+is+split+into+chunks+of+5+MB+with+one+presigned+URL+per+part.%3C%2FNote%3E%0A%0AFor+each+part+returned%3A%0A\u0026amp;theme=11aaecb1918fbe201ed10540\u0026amp;signature=bddf9a944bdff985126e44048b59730ac467a48471a27b9cea40f249f4f301f3\">\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=\"Generate Presigned Upload URLs - Plaud Dev API\">\u003cmeta data-mint-head name=\"twitter:description\" content=\"Request presigned S3 URLs for a multipart upload. The file is split into chunks of 5 MB with one presigned URL per part. For each part returned: 1. Send raw bytes to S3 — PUT PresignedUrl the raw bytes of the chunk to (no auth needed). 2. Collect the ETag from each S3 response header — These will be needed in the complete-upload endpoint.\">\u003cmeta data-mint-head name=\"twitter:image\" content=\"https://plaud.mintlify.app/_mintlify/api/og/v2?division=File+Upload+API\u0026amp;title=Generate+Presigned+Upload+URLs\u0026amp;description=Request+presigned+S3+URLs+for+a+multipart+upload.%0A%0A%3CNote%3EThe+file+is+split+into+chunks+of+5+MB+with+one+presigned+URL+per+part.%3C%2FNote%3E%0A%0AFor+each+part+returned%3A%0A\u0026amp;theme=11aaecb1918fbe201ed10540\u0026amp;signature=bddf9a944bdff985126e44048b59730ac467a48471a27b9cea40f249f4f301f3\">\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/plaud/nlLfkc9tz92mhJFv/_generated/favicon/browserconfig.xml\">\u003cmeta data-mint-head name=\"apple-mobile-web-app-title\" content=\"Plaud Dev API\">\u003cmeta data-mint-head name=\"msapplication-TileColor\" content=\"#23a1ba\">\u003cmeta data-mint-head name=\"google-site-verification\" content=\"RgykNSELwR2FfPjJ67wnEJvRZnLbvvWj1Jq-OC1mDts\">\u003clink data-mint-head rel=\"canonical\" href=\"https://docs.plaud.ai/api-reference/file-upload-api/generate-presigned-upload-urls\">\u003clink data-mint-head rel=\"alternate\" type=\"application/xml\" href=\"/sitemap.xml\">\u003clink data-mint-head rel=\"alternate\" type=\"text/markdown\" href=\"/api-reference/file-upload-api/generate-presigned-upload-urls.md\">\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@graph\":[{\"@type\":\"Organization\",\"@id\":\"https://docs.plaud.ai/#organization\",\"name\":\"Plaud Dev API\",\"url\":\"https://docs.plaud.ai\",\"logo\":{\"@type\":\"ImageObject\",\"url\":\"https://mintcdn.com/plaud/NcIGXAbuUj5XMDGP/assets/logo/light.svg?fit=max\u0026auto=format\u0026n=NcIGXAbuUj5XMDGP\u0026q=85\u0026s=a5604c3522966e950c83b135b5447fd2\"}},{\"@type\":\"WebSite\",\"@id\":\"https://docs.plaud.ai#website\",\"name\":\"Plaud Dev API\",\"url\":\"https://docs.plaud.ai\",\"publisher\":{\"@id\":\"https://docs.plaud.ai/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https://docs.plaud.ai/api-reference/file-upload-api/generate-presigned-upload-urls#webpage\",\"url\":\"https://docs.plaud.ai/api-reference/file-upload-api/generate-presigned-upload-urls\",\"name\":\"Generate Presigned Upload URLs\",\"description\":\"Request presigned S3 URLs for a multipart upload. The file is split into chunks of 5 MB with one presigned URL per part. For each part returned: 1. Send raw bytes to S3 — PUT PresignedUrl the raw bytes of the chunk to (no auth needed). 2. Collect the ETag from each S3 response header — These will be needed in the complete-upload endpoint.\",\"dateModified\":\"2026-06-30T22:37:55.391Z\",\"isPartOf\":{\"@id\":\"https://docs.plaud.ai#website\"},\"breadcrumb\":{\"@id\":\"https://docs.plaud.ai/api-reference/file-upload-api/generate-presigned-upload-urls#breadcrumb\"}},{\"@type\":\"BreadcrumbList\",\"@id\":\"https://docs.plaud.ai/api-reference/file-upload-api/generate-presigned-upload-urls#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"API Reference\",\"item\":\"https://docs.plaud.ai/plaud-embedded/auth-api-overview\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"File Upload API\",\"item\":\"https://docs.plaud.ai/plaud-embedded/file-api-overview\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"Generate Presigned Upload URLs\",\"item\":\"https://docs.plaud.ai/api-reference/file-upload-api/generate-presigned-upload-urls\"}]},{\"@type\":[\"TechArticle\",\"APIReference\"],\"@id\":\"https://docs.plaud.ai/api-reference/file-upload-api/generate-presigned-upload-urls#apireference\",\"headline\":\"Generate Presigned Upload URLs\",\"name\":\"Generate Presigned Upload URLs\",\"description\":\"Request presigned S3 URLs for a multipart upload. The file is split into chunks of 5 MB with one presigned URL per part. For each part returned: 1. Send raw bytes to S3 — PUT PresignedUrl the raw bytes of the chunk to (no auth needed). 2. Collect the ETag from each S3 response header — These will be needed in the complete-upload endpoint.\",\"url\":\"https://docs.plaud.ai/api-reference/file-upload-api/generate-presigned-upload-urls\",\"mainEntityOfPage\":{\"@id\":\"https://docs.plaud.ai/api-reference/file-upload-api/generate-presigned-upload-urls#webpage\"},\"dateModified\":\"2026-06-30T22:37:55.391Z\",\"publisher\":{\"@id\":\"https://docs.plaud.ai/#organization\"},\"isPartOf\":{\"@id\":\"https://docs.plaud.ai#website\"}}]}\u003c/script>\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@type\":\"WebSite\",\"name\":\"Plaud Dev API\",\"creator\":{\"@type\":\"Organization\",\"name\":\"Mintlify\",\"url\":\"https://mintlify.com\"}}\u003c/script>","siteName":"Plaud Dev API","nav":{"global":null,"languages":[{"language":"en","default":true,"tabs":[{"tab":"Developer Platform","pages":[{"title":"Developer Platform","href":"/overview"}]},{"tab":"Plaud Embedded","pages":[{"group":"Overview","pages":[{"title":"Plaud Embedded Overview","sidebarTitle":"Embedded Overview","href":"/plaud-embedded/overview"},{"title":"Plaud Devices","mode":"wide","href":"/plaud-embedded/devices"},{"title":"Quickstart","sidebarTitle":"Quickstart","href":"/plaud-embedded/quickstart"},{"title":"How Plaud Embedded Works","sidebarTitle":"How Plaud Embedded Works","href":"/plaud-embedded/how-plaud-embedded-works"}]},{"group":"Embedded SDK Reference","pages":[{"group":"iOS SDK","icon":"apple","pages":[{"title":"iOS SDK","sidebarTitle":"General iOS SDK Usage","href":"/plaud-embedded/ios-sdk"},{"title":"Low-Level iOS SDK Methods","sidebarTitle":"Advanced iOS SDK Usage","href":"/plaud-embedded/advanced-ios-sdk"}]},{"group":"Android SDK","icon":"android","pages":[{"title":"Android SDK","sidebarTitle":"General Android SDK Usage","href":"/plaud-embedded/android-sdk"},{"title":"Low-Level Android SDK Methods","sidebarTitle":"Advanced Android SDK Usage","href":"/plaud-embedded/advanced-android-sdk"}]}]},{"group":"API Reference","pages":[{"group":"Authentication API","pages":[{"title":"Authentication APIs","sidebarTitle":"Overview","href":"/plaud-embedded/auth-api-overview"},{"title":"Get Partner Token","deprecated":null,"version":null,"openapi":"/openapi/auth.json post /oauth/partner/access-token","href":"/api-reference/authentication-api/get-partner-token"},{"title":"Refresh Partner Token","deprecated":null,"version":null,"openapi":"/openapi/auth.json post /oauth/partner/access-token/refresh","href":"/api-reference/authentication-api/refresh-partner-token"},{"title":"Get User Token","deprecated":null,"version":null,"openapi":"/openapi/auth.json post /open/partner/users/access-token","href":"/api-reference/authentication-api/get-user-token"}]},{"group":"Device Binding API","pages":[{"title":"Device Binding APIs","sidebarTitle":"Overview","href":"/plaud-embedded/device-binding-api-overview"},{"title":"Bind Device","deprecated":null,"version":null,"openapi":"/openapi/binding.json post /open/partner/sdk/bind","href":"/api-reference/device-binding-api/bind-device"},{"title":"Unbind Device","deprecated":null,"version":null,"openapi":"/openapi/binding.json post /open/partner/sdk/unbind","href":"/api-reference/device-binding-api/unbind-device"},{"title":"Get Device Binding","deprecated":null,"version":null,"openapi":"/openapi/binding.json get /open/partner/sdk/binding","href":"/api-reference/device-binding-api/get-device-binding"}]},{"group":"File Upload API","pages":[{"title":"File Upload API","description":"Upload your user's conversation audio to Plaud storage and get a download URL to pass to the Transcription API.","sidebarTitle":"Overview","href":"/plaud-embedded/file-api-overview"},{"title":"Generate Presigned Upload URLs","deprecated":null,"version":null,"openapi":"/openapi/file.json post /open/partner/files/upload/generate-presigned-urls","href":"/api-reference/file-upload-api/generate-presigned-upload-urls"},{"title":"Complete Multipart Upload","description":"Merge the uploaded parts into a single file.\n\nSubmit the `file_id` and `upload_id` from generate-presigned-urls along with the `ETag` collected from each part's `PUT` response.\u003cNote>The returned `DownloadUrl` is valid for **24 hours**.\u003c/Note>","deprecated":null,"version":null,"openapi":"/openapi/file.json post /open/partner/files/upload/complete-upload","href":"/api-reference/file-upload-api/complete-multipart-upload"}]},{"group":"Transcription API","pages":[{"title":"Transcription API","sidebarTitle":"Overview","href":"/plaud-embedded/transcription-api-overview"},{"title":"Submit Audio for Transcription","deprecated":null,"version":null,"openapi":"/openapi/transcription.json post /open/partner/ai/transcriptions/","href":"/api-reference/transcription-api/submit-audio-for-transcription"},{"title":"Get Transcription Task","deprecated":null,"version":null,"openapi":"/openapi/transcription.json get /open/partner/ai/transcriptions/{transcription_id}","href":"/api-reference/transcription-api/get-transcription-task"}]},{"title":"API Playground","url":"https://plaud-embedded-playground.vercel.app/","href":"/plaud-embedded/api-playground"}]},{"group":"Starter Apps \u0026 Guides","pages":[{"title":"iOS Starter App","sidebarTitle":"iOS Starter App","icon":"apple","href":"/plaud-embedded/ios-starter-app"},{"title":"Android Starter App","sidebarTitle":"Android Starter App","icon":"android","href":"/plaud-embedded/android-starter-app"},{"title":"Using React Native","sidebarTitle":"Using React Native","href":"/plaud-embedded/react-native"},{"title":"Using Flutter","sidebarTitle":"Using Flutter","href":"/plaud-embedded/flutter"},{"title":"Web App to Mobile App","sidebarTitle":"Web App to Mobile App","href":"/plaud-embedded/web-app-wrapper"},{"title":"Background Syncs","href":"/plaud-embedded/background-syncs"}]},{"group":"Resources","pages":[{"title":"Billing","href":"/plaud-embedded/billing"},{"title":"Data Retention","href":"/plaud-embedded/data-retention"},{"title":"Changelog","sidebarTitle":"Changelog","href":"/plaud-embedded/changelog"}]}]},{"tab":"Plaud MCP \u0026 CLI","pages":[{"title":"Plaud MCP \u0026 CLI","href":"/plaud-mcp-cli/mcp"}]},{"tab":"Enterprise API","hidden":true,"pages":[{"title":"Enterprise API","href":"/enterprise-api/overview"}]}]},{"language":"es","pages":[{"title":"es","href":"/overview"}]},{"language":"fr","pages":[{"title":"fr","href":"/overview"}]},{"language":"de","pages":[{"title":"de","href":"/overview"}]},{"language":"pt","pages":[{"title":"pt","href":"/overview"}]},{"language":"it","pages":[{"title":"it","href":"/overview"}]},{"language":"zh-Hant","pages":[{"title":"zh-Hant","href":"/overview"}]},{"language":"nl","pages":[{"title":"nl","href":"/overview"}]},{"language":"jp","pages":[{"title":"jp","href":"/overview"}]}]},"basePath":"","title":"Generate Presigned Upload URLs - Plaud Dev API","buildId":"dpl_G9nrg4qeJSZtah1Ziwbc2n6WkLch","deploymentId":"dpl_G9nrg4qeJSZtah1Ziwbc2n6WkLch","dynamics":["c2aa737661","2b790eda92","b0f84f53ff","a9bb46feb3"],"chunks":["OpenApiReferenceProvider-B7XKH4J3.js","utils-lOYzL7z-.js","cloneDeep-izs3Hzxb.js","_Uint8Array-BVIqJ90l.js","isObjectLike-C8vmzPEN.js","isArray-Dcu1dQ5t.js","utils-DF6jUUIM.js","toString-BX-iyh8G.js","isSymbol-CSH9U2Gm.js","addUniqueKeysToSchema-Dpsj5f7C.js","snippetPresets-CYeiDe8v.js","style-to-object-BY3JEAdk.js","v4-DIgz8zy6.js","ApiExamples-CUFz1YZ_.js","isEqual-BfaiBbcl.js","usePlaygroundInputsStore-D8H_iLS4.js","shallow-DdluZBHX.js","getApiPlaygroundDisplay-B9922vev.js","CodeSnippet-CMoRNGYs.js","CodeSnippets-DwyrPHuw.js","Page-DSVu9Ucl.js","getPastedJson-G-zIvlHh.js","icon-B03fnEy0.js","MethodPill-CW7teklc.js","DuplicateIcon-CtO8eekd.js","createIcon-DZTKdM_A.js","DynamicMarkdown-D5M2At0B.js","SectionHeading-C_2NaA2U.js","axios-vUo_bRtp.js","Markdown-D7QRHV3m.js","clsx-D1Z-ELXV.js","lib-DuNMoZ05.js","lib-B8HbPgcC.js","html-void-elements-mCSPHezU.js","dist-lvhuD9Du.js","katex-YMM-FMeD.js","marked.esm-CZWythHk.js","AssistantPageLink-CKfC4ywL.js"]}