Skip to main content
The File Upload API uploads audio files from your users’ mobile apps to Plaud storage. Once files are uploaded, these files can be passed to the Transcription API to take advantage of Plaud’s transcription and ASR models.
1

Generate Presigned URLs

Using the POST /generate-presigned-urls endpoint, Plaud will send an array of pre-signed S3 upload endpoint for you to upload your users’ audio files
You must send <5MB of data to each PresignedUrl.
2

Upload Each Chunk

PUT the raw bytes of each chunk directly to its presigned S3 URL (no auth needed), then read the ETag (Entity Tag) response header for each part.
3

Complete the Upload

Send your list of ETags to the POST /complete-upload endpoint to receive your file’s DownloadUrl

Using the File Upload API

Prerequisites

The File Upload API authenticates with a User Token. Use the Authentication API if you don’t have a User Token or need a new one.

Find Your Region

The File Upload API is served with Plaud’s region-level API services. There is no global host for these calls; pick the host of the region your client was provisioned in when using the File Upload API.
RegionPublic hostStatus
USplatform-us.plaud.ai/developer/apiAvailable
Japanplatform-jp.plaud.ai/developer/apiAvailable
Europeplatform-eu.plaud.ai/developer/apiComing soon
Singaporeplatform-sg.plaud.ai/developer/apiComing soon

Generate Presigned Upload URLs

Request presigned S3 URLs for a multipart upload from Plaud’s API. The number of presigned URLs will depend on your file size.
POST [REGION_SPECIFIC_HOST]/open/partner/files/upload/generate-presigned-urls
Content-Type: application/json
Authorization: Bearer <user_access_token>

{
  "filesize": 10485760,
  "filetype": "mp3"
}
{
  "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/..." }
  ]
}

Upload Each Chunk to S3

For each part, PUT up to the ChunkSize of raw bytes (5MB) to its PresignedUrl. These AWS S3 calls are presigned thus no authentication is needed.
Keep the ETag (Entity Tags) found in the response headers from each PUT call. These are needed in POST /complete-upload.
PUT [PresignedUrl]

[raw bytes of chunk]
The S3 response includes the ETag header for that part:
ETag: "abc123..."

Complete the Multipart Upload

Submit the:
  1. file_id from the first step
  2. upload_id from the first step
  3. Array of ETag with its corresponding PartNumber from the second step
POST [REGION_SPECIFIC_HOST]/open/partner/files/upload/complete-upload
Content-Type: application/json
Authorization: Bearer <user_access_token>

{
  "file_id": "file_xxx",
  "upload_id": "upload_xxx",
  "part_list": [
    { "PartNumber": 1, "ETag": "\"abc123...\"" },
    { "PartNumber": 2, "ETag": "\"def456...\"" }
  ],
  "filetype": "mp3",
  "file_md5": "9e107d9d372bb6826bd81d3542a419d6"
}
{
  "FileId": "file_xxx",
  "FileType": "mp3",
  "DownloadUrl": "https://plaud-bucket.s3.amazonaws.com/...",
  "FileMd5": "9e107d9d372bb6826bd81d3542a419d6"
}
The returned DownloadUrl is valid for 24 hours. Pass it as file_url to the Transcription API to transcribe your file!