Endpoints
Uploads
Upload audio or video files with a signed PUT URL, then confirm the upload for transcription.
If your media is not reachable at a public URL, upload it first. The flow has three steps: request a signed URL, PUT the file to that URL, then confirm the upload. The resulting upload_id is passed to POST /v2/transcripts.
POST /v2/uploads/signwith the filename and content type. You get back anupload_idand a signedurl.PUTthe raw file bytes tourlwith the exactContent-Typeheader echoed in the response. No API key is needed on this request; the URL itself is the credential and expires after 1 hour.POST /v2/uploads/{upload_id}/completeto verify the file reached storage.
Uploads accept audio and video files up to 5 GiB, including mp3, wav, m4a, flac, ogg, opus, aac, wma, mp4, mov, mkv, webm, and many more. Files reported by the browser as
application/octet-stream are accepted when the file extension is a recognized media type.Create a signed upload
POST
/v2/uploads/signRegister an upload and receive a signed PUT URLRequest body
| Field | Type | Required | Description |
|---|---|---|---|
| filename | string | Yes | Original filename, extension included. Used to validate the media type and as the default transcript title. |
| content_type | string | Yes | MIME type of the file, for example audio/mpeg or video/mp4. Must be an audio or video type, or resolvable from the filename extension. |
| size_bytes | integer | No | File size in bytes. When provided it must be positive (400 invalid_size) and at most 5 GiB (413 upload_too_large). |
Response
| Field | Type | Description |
|---|---|---|
| upload_id | string | Identifier to confirm the upload and to reference it in POST /v2/transcripts. |
| url | string | Signed storage URL. Send the file here with an HTTP PUT. |
| method | string | Always PUT. |
| headers | object | Headers that must be sent with the PUT, currently the exact Content-Type. |
| expires_in | integer | Signed URL lifetime in seconds, currently 3600. |
Errors
| Status | Code | When |
|---|---|---|
| 400 | unsupported_media_type | The content type and filename do not describe an audio or video file. |
| 400 | invalid_size | size_bytes is zero or negative. |
| 413 | upload_too_large | size_bytes exceeds 5 GiB. |
curl -X POST https://api.realtimevoicekit.com/v2/uploads/sign \
-H "Authorization: Bearer rtvk_your_api_key" \
-H "Content-Type: application/json" \
-d '{"filename": "meeting.mp3", "content_type": "audio/mpeg", "size_bytes": 4194304}'{
"upload_id": "upl_9f2c1e7ab4",
"url": "https://storage.googleapis.com/…signed…",
"method": "PUT",
"headers": { "Content-Type": "audio/mpeg" },
"expires_in": 3600
}Upload the file
Send the raw bytes to the signed url with PUT. The Content-Type header must match the one returned in headers exactly, or storage rejects the request. Do not send your API key to the storage host.
curl -X PUT "https://storage.googleapis.com/…signed…" \
-H "Content-Type: audio/mpeg" \
--data-binary @meeting.mp3Complete the upload
POST
/v2/uploads/{upload_id}/completeVerify the file reached storage and mark the upload readyPath parameters
| Parameter | Type | Description |
|---|---|---|
| upload_id | string | The id returned by POST /v2/uploads/sign. |
Response
| Field | Type | Description |
|---|---|---|
| id | string | The upload id. |
| status | string | uploaded once confirmed. Calling complete again on a confirmed upload is a no-op and returns the same object. |
| filename | string or null | The registered filename. |
| content_type | string or null | The registered content type. |
| size_bytes | integer or null | The registered size, when provided at sign time. |
Errors
| Status | Code | When |
|---|---|---|
| 404 | not_found | The upload id does not exist or belongs to another account. |
| 400 | upload_incomplete | The file is not in storage yet. Retry the PUT, then call complete again. |
curl -X POST https://api.realtimevoicekit.com/v2/uploads/upl_9f2c1e7ab4/complete \
-H "Authorization: Bearer rtvk_your_api_key"Now create the transcript with {"upload_id": "upl_9f2c1e7ab4"} on POST /v2/transcripts.