Skip to main content
The file does not go to the API. It goes straight to object storage through temporary links. The API issues the links and accepts the confirmation.
Your service
AiGenda API
Storage
1
POST /audio/
title, size, content_type
2
id, url[]
part upload URLs
3
PUT part
to url[i]
4
ETag
in the response header
5
POST /complete_upload/
PartNumber and ETag
6
GET /info/
until is_uploaded: true
1
Your service → AiGenda API
POST /audio/
title, size, content_type
2
AiGenda API → Your service
id, url[]
part upload URLs
3
Your service → Storage
PUT part
to url[i]
4
Storage → Your service
ETag
in the response header
5
Your service → AiGenda API
POST /complete_upload/
PartNumber and ETag
6
Your service → AiGenda API
GET /info/
until is_uploaded: true

Steps

1

Create a recording

Response 201
url is always an array: one link per file part, each part about 10 MB. So you usually get several links: an 18 MB file gets two.
2

Upload the parts

Split the file into as many parts as there are links:
  • part size: ceil(size / len(url)) bytes, the last part is shorter;
  • part number i (starting from one) goes to the link url[i-1];
  • method PUT, request body: the part’s bytes, no JSON and no multipart form;
  • save the ETag header from the storage response together with its double quotes: "9b2cf535f27731c974343645a3985328".
The links live for 5 hours after the recording is created. The storage allows browser requests (CORS is open and ETag is readable), so you can upload from a frontend too.
3

Complete the upload

Pass the part numbers and their ETag values in the order you uploaded them.
Response: 200 with an empty body.
4

Wait for confirmation

Poll info/ every 2 seconds until you get is_uploaded: true. It usually takes less than a second. Then start processing.

Ready-to-use code

If something goes wrong

Last modified on October 17, 2026