> ## Documentation Index
> Fetch the complete documentation index at: https://docs.plaud.ai/llms.txt
> Use this file to discover all available pages before exploring further.

# Complete Multipart Upload

> Merge the uploaded parts into a single file.

Submit the `file_id` and `upload_id` from generate-presigned-urls along with the `ETag` collected from each part's `PUT` response.<Note>The returned `DownloadUrl` is valid for **24 hours**.</Note>



## OpenAPI

````yaml /openapi/file.json post /open/partner/files/upload/complete-upload
openapi: 3.0.4
info:
  title: File Upload API
  description: >-
    Upload audio files to Plaud storage via S3 multipart upload, then merge the
    parts into a single download URL you can pass to the Transcription API.
    Authenticate with a `user_access_token` (see the Authentication API).


    The upload is a three-step flow:


    1. **Generate presigned URLs** — request one presigned S3 URL per 5 MB
    chunk.

    2. **Upload each chunk** — `PUT` the raw bytes of each chunk directly to its
    presigned S3 URL (no auth; the URL is pre-authorized). Read the `ETag`
    response header for each part. These calls go straight to AWS S3, not to the
    Plaud platform, so they are not documented as endpoints here.

    3. **Complete the upload** — submit the collected `ETag`s to merge the parts
    and receive a `DownloadUrl` (valid ~24h).
  version: 0.0.1
servers:
  - url: https://platform-us.plaud.ai/developer/api
    description: US partner endpoint
  - url: https://platform-jp.plaud.ai/developer/api
    description: Japan partner endpoint
security: []
paths:
  /open/partner/files/upload/complete-upload:
    post:
      tags:
        - File Upload API
      summary: Complete Multipart Upload
      description: >-
        Merge the uploaded parts into a single file.


        Submit the `file_id` and `upload_id` from generate-presigned-urls along
        with the `ETag` collected from each part's `PUT` response.<Note>The
        returned `DownloadUrl` is valid for **24 hours**.</Note>
      operationId: completeUpload
      parameters:
        - $ref: '#/components/parameters/jsonContentType'
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CompleteUploadRequest'
            example:
              file_id: file_xxx
              upload_id: upload_xxx
              part_list:
                - PartNumber: 1
                  ETag: '"abc123..."'
                - PartNumber: 2
                  ETag: '"def456..."'
              filetype: mp3
              file_md5: 9e107d9d372bb6826bd81d3542a419d6
      responses:
        '200':
          description: Upload completed and parts merged
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CompleteUploadResponse'
              example:
                FileId: file_xxx
                FileType: mp3
                DownloadUrl: https://plaud-bucket.s3.amazonaws.com/...
                FileMd5: 9e107d9d372bb6826bd81d3542a419d6
      security:
        - bearerAuth: []
components:
  parameters:
    jsonContentType:
      in: header
      name: Content-Type
      schema:
        type: string
        default: application/json
      required: true
  schemas:
    CompleteUploadRequest:
      type: object
      required:
        - file_id
        - upload_id
        - part_list
        - filetype
      properties:
        file_id:
          type: string
          description: The `FileId` returned by generate-presigned-urls.
          example: file_xxx
        upload_id:
          type: string
          description: The `UploadId` returned by generate-presigned-urls.
          example: upload_xxx
        part_list:
          type: array
          description: The part number and `ETag` collected from each chunk's PUT response.
          items:
            $ref: '#/components/schemas/CompletedPart'
        filetype:
          type: string
          description: File extension of the audio file.
          example: mp3
        file_md5:
          type: string
          description: >-
            Hex-encoded MD5 of the full file, used to verify integrity.
            Optional.
          example: 9e107d9d372bb6826bd81d3542a419d6
    CompleteUploadResponse:
      type: object
      properties:
        FileId:
          type: string
          description: Identifier for the uploaded file.
          example: file_xxx
        FileType:
          type: string
          description: File extension of the audio file.
          example: mp3
        DownloadUrl:
          type: string
          description: >-
            Pre-signed download URL for the merged file, valid ~24h. Pass as
            `file_url` to the Transcription API.
          example: https://plaud-bucket.s3.amazonaws.com/...
        FileMd5:
          type: string
          description: Hex-encoded MD5 of the merged file.
          example: 9e107d9d372bb6826bd81d3542a419d6
    CompletedPart:
      type: object
      required:
        - PartNumber
        - ETag
      properties:
        PartNumber:
          type: integer
          description: 1-based index of the chunk.
          example: 1
        ETag:
          type: string
          description: The `ETag` returned in the response header of the chunk's PUT to S3.
          example: '"abc123..."'
  securitySchemes:
    bearerAuth:
      type: http
      scheme: bearer
      description: >-
        Bearer authentication using a `user_access_token` (see the
        Authentication API).

````