Upload a recording to align
POST /v1/uploads
Takes a recording of up to 200 MB as the request body, with its type. One alignment takes up to an hour of audio, or 10 minutes with a test key. Uploads are kept for 7 days (a day with a test key), long enough to align them; this is not a storage service.
Limited to 30 a minute per key.
Authentication
Send Authorization: Bearer $KEY from your server. Create or rotate keys.
Example request
curl https://play.fellowverse.app/v1/uploads \
-H "Authorization: Bearer $KEY" -H 'Content-Type: audio/mpeg' \
--data-binary @chapter.mp3
Example IDs are placeholders. Use the upload or job ID returned by your own request.
Request body
The recording itself as the body, with its type in Content-Type. MP3, WAV, M4A, OGG, WebM and FLAC are read.
Accepted content types: audio/mpeg, audio/mp3, audio/wav, audio/x-wav, audio/wave, audio/webm, audio/ogg, audio/mp4, audio/x-m4a, audio/aac, audio/flac, application/octet-stream.
Send the raw audio bytes as the entire request body, with the matching Content-Type. Do not wrap the recording in multipart form data or JSON.
Responses
| Status | Meaning |
|---|---|
| 201 | The upload was kept. Use its id to start an alignment. |
| 400 | The request could not be used. invalid_request when a field is missing or has the wrong type; bad_request when the audio or a value could not be read. |
| 401 | The key is missing, wrong, revoked, or past the end of its grace period after a roll. The code is api_unauthorized, and the reason says which. |
| 403 | The account is suspended (api_suspended), or a live key was used on an account that has test keys only (api_live_locked). |
| 413 | The body is over the limit: 200 MB for an upload, 10 MB for voice search. The code is request_error. |
| 415 | The Content-Type is not one of the audio types read. The code is request_error. |
| 429 | A per-key limit for the minute was reached (api_rate_limited; the reason names the limit), or a test key used up its account's daily allowance (api_test_quota; the fix says when it resets). |
| 500 | Something went wrong on our side. The code is internal. |
201: application/json
| Field | Type | Required | Description and constraints |
|---|---|---|---|
id |
string | Yes | Pattern: ^upl_[A-Za-z0-9_-]{12}$. |
bytes |
integer | Yes | Minimum: 1. |
“Required” is relative to the containing object. Optional success results and failure errors depend on the job state.
Errors and limits
JSON errors contain error.code, error.problem, error.reason and error.fix. Handle errors and retries and check test and live limits.
Need the contract? Download OpenAPI. Manage keys and account access in the developer console.