Recordings
Create Recording
Create a new recording
POST
Create a recording to represent a captured conversation. After creation, use the upload endpoints to upload the audio file.Documentation Index
Fetch the complete documentation index at: https://docs.bota.dev/llms.txt
Use this file to discover all available pages before exploring further.
Authentication
This endpoint behaves differently depending on your authentication method: Using API Keys:- Required:
device_idandend_user_idin request body - Use case: Mobile apps uploading on behalf of users via BLE sync
- Required: Neither
device_idnorend_user_id(automatically extracted from token) - Use case: 4G/WiFi devices uploading directly to the cloud
Request Body
ID of the device that captured (or will capture) the recording. Optional for API-uploaded audio files.Note: When using device tokens (
dtok_*), this field is automatically populated from the token and should NOT be included in the request.ID of the end user. Required when using API keys.Note: When using device tokens (
dtok_*), this field is automatically populated from the token and should NOT be included in the request.Optional human-readable name for the recording (e.g., “Weekly standup”, “Client call with Acme”).
ISO 8601 timestamp of when the recording started (device time).
ISO 8601 timestamp of when the recording ended (device time).
Arbitrary key-value metadata (e.g., meeting type, location).
Response
Returns the created recording object.Response Fields
| Field | Type | Description |
|---|---|---|
id | string | Unique identifier for the recording (rec_*). |
device_id | string | ID of the device that captured the recording. |
end_user_id | string | ID of the associated end user. |
name | string | Human-readable name for the recording. |
status | string | Current recording status (see below). |
duration_ms | integer | null | Recording duration in milliseconds. null until audio is uploaded. |
started_at | string | ISO 8601 timestamp of when the recording started. |
ended_at | string | ISO 8601 timestamp of when the recording ended. |
transcription_id | string | null | ID of the associated transcription. null until transcription is created. |
media | array | Files associated with this recording (audio, images, video). Empty until uploaded. |
media[].id | string | Media identifier (med_*). |
media[].type | string | Media type: audio, image, or video. |
media[].mime_type | string | MIME type (e.g., audio/opus, image/jpeg, video/mp4). |
media[].file_size_bytes | integer | File size in bytes. |
media[].status | string | Upload status: pending, uploaded. |
media[].captured_at | string | null | ISO 8601 timestamp of when the media was captured. |
media[].created_at | string | ISO 8601 timestamp of when the media record was created. |
metadata | object | Arbitrary key-value metadata. |
created_at | string | ISO 8601 timestamp of when the recording was created. |
Recording Status
| Status | Description |
|---|---|
pending | Recording created, awaiting audio upload |
uploaded | Audio uploaded, ready for transcription |
processing | Transcription in progress |
completed | Transcription complete |
failed | Processing failed |
Next Steps
After creating a recording:- Get an upload URL
- Upload audio to the pre-signed S3 URL
- Mark upload complete
- Trigger transcription

