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

bash
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.

Start here · Guides · API reference