Reference
Uploads
An upload sends one audio file to us in parts over presigned URLs, and completing it creates a source that you can add to a session.
When you create an upload, the response has a URL for each part. PUT each part to its URL, keep the ETag header from each response, and then complete the upload with the part numbers and their ETags. Every part except the last is 64 MiB. The upload and its URLs expire 24 hours after you create it.
The upload object
- upload_idstring
The upload's ID.
- part_sizeinteger
The size in bytes of every part except the last, which can be smaller.
- partsarray of objects
A presigned URL for each part.
- expires_attimestamp
When the upload and its part URLs expire.
POST/v1/uploads
Create an upload
Starts an upload and returns a presigned URL for each part.
Needs the jobs:write scope.
Body
- filenamestringrequired
The file's name, which the source returns as
filename. We detect the format from the file's contents. - size_bytesintegerrequired
The file's exact size in bytes, from 1 up to 4294967296, which is 4 GiB.
Returns
curl -X POST "https://platform-api.nomono.co/v1/uploads" \ -H "Authorization: Bearer $NOMONO_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "filename": "host.wav", "size_bytes": 176084204 }'{ "upload_id": "upl_01a1446f235c7448abbe096bfd043ae3", "part_size": 67108864, "parts": [ { "part_number": 1, "url": "https://....s3.eu-west-1.amazonaws.com/...?uploadId=...&partNumber=1&X-Amz-Expires=86400&X-Amz-Signature=..." }, { "part_number": 2, "url": "https://...&partNumber=2&..." }, { "part_number": 3, "url": "https://...&partNumber=3&..." } ], "expires_at": "2026-10-17T09:02:11.204518Z"}POST/v1/uploads/{upload_id}/parts
Reissue part URLs
Returns new presigned URLs for a range of parts of an incomplete upload, and they expire together with the upload.
Needs the jobs:write scope.
Path parameters
- upload_idstringrequired
The ID of the upload.
Query parameters
- fromintegerrequired
The first part to return, up to the upload's last part.
at least 1
- countintegerrequired
How many parts to return.
1 to 100
Returns
- upload_idstring
The upload's ID.
- partsarray of objects
A presigned URL for each part asked for, up to the upload's last part.
- expires_attimestamp
When the upload and these URLs expire.
curl -X POST "https://platform-api.nomono.co/v1/uploads/upl_01a1446f235c7448abbe096bfd043ae3/parts?from=2&count=100" \ -H "Authorization: Bearer $NOMONO_API_KEY"{ "upload_id": "upl_01a1446f235c7448abbe096bfd043ae3", "parts": [ { "part_number": 2, "url": "https://..." }, { "part_number": 3, "url": "https://..." } ], "expires_at": "2026-10-17T09:02:11.204518Z"}POST/v1/uploads/{upload_id}/complete
Complete an upload
Completes an upload and returns the new source, or the same source again if the upload is already complete. If the parts don't add up to the file's size or don't match the parts you uploaded, the request returns 409 upload_incomplete and the upload stays open. If the file isn't a PCM or float WAV file or a FLAC file, or is shorter than one second, it returns 422 source_rejected and the upload is deleted.
Needs the jobs:write scope.
Path parameters
- upload_idstringrequired
The ID of the upload.
Body
- partsarray of objectsrequired
Every uploaded part, each with the ETag its
PUTreturned.
Returns
- source_idstring
The source's ID.
- upload_idstring
The ID of the upload the source came from.
- filenamestring
The file name sent when the upload was created.
- formatstring
The file's format:
wavorflac. - channelsinteger
The number of channels.
- sample_rateinteger
The sample rate in Hz.
- duration_snumber
The length of the audio in seconds.
- size_bytesinteger
The file's size in bytes.
- devicenull
Always
null. - statusstring
Always
ready. - created_attimestamp
When the upload was created.
- expires_atnullable timestamp
When the source expires, after which we delete it. For a source in a session, this is the session's
expires_at.
curl -X POST "https://platform-api.nomono.co/v1/uploads/upl_01a1446f235c7448abbe096bfd043ae3/complete" \ -H "Authorization: Bearer $NOMONO_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "parts": [ { "part_number": 1, "etag": "\"5d41402abc4b2a76b9719d911017c592\"" }, { "part_number": 2, "etag": "7d793037a0760186574b0282f2f435e7" }, { "part_number": 3, "etag": "\"e4d909c290d0fb1ca068ffaddf22cbd0\"" } ] }'{ "source_id": "src_01a1446f235c7448abbe096c9b9adf6c", "upload_id": "upl_01a1446f235c7448abbe096bfd043ae3", "filename": "host.wav", "format": "wav", "channels": 1, "sample_rate": 48000, "duration_s": 1834.21, "size_bytes": 176084204, "device": null, "status": "ready", "created_at": "2026-10-16T09:02:11.204518Z", "expires_at": "2026-10-23T09:04:37.880912Z"}DELETE/v1/uploads/{upload_id}
Abandon an upload
Abandons an incomplete upload and deletes the parts sent so far. A completed upload can't be abandoned and returns 409 conflict. To remove its file, delete the source instead.
Needs the jobs:write scope.
Path parameters
- upload_idstringrequired
The ID of the upload.
Returns
An empty body, with the status 204 No Content.
curl -X DELETE "https://platform-api.nomono.co/v1/uploads/upl_01a1446f8e917b23a4c06d1e5f7a8b92" \ -H "Authorization: Bearer $NOMONO_API_KEY"