curl -X POST https://api.bota.dev/v1/transcriptions \
-H "Authorization: Bearer sk_live_..." \
-H "Content-Type: application/json" \
-d '{
"recording_id": "rec_abc123",
"language": "en",
"provider": "whisper"
}'
const response = await fetch('https://api.bota.dev/v1/transcriptions', {
method: 'POST',
headers: {
'Authorization': 'Bearer sk_live_...',
'Content-Type': 'application/json',
},
body: JSON.stringify({
recording_id: 'rec_abc123',
language: 'en',
provider: 'whisper',
}),
});
const transcription = await response.json();
console.log(transcription.id);
console.log(transcription.status);
import requests
response = requests.post(
'https://api.bota.dev/v1/transcriptions',
headers={
'Authorization': 'Bearer sk_live_...',
'Content-Type': 'application/json',
},
json={
'recording_id': 'rec_abc123',
'language': 'en',
'provider': 'whisper',
},
)
transcription = response.json()
print(transcription['id'])
{
"id": "txn_abc123",
"recording_id": "rec_abc123",
"status": "pending",
"language": "en",
"provider": "whisper",
"segments": null,
"full_text": null,
"word_count": null,
"confidence": null,
"error_message": null,
"started_at": null,
"created_at": "2025-01-15T10:10:00Z",
"completed_at": null,
"updated_at": "2025-01-15T10:10:00Z"
}
AI Processing
Create Transcription
Start an asynchronous transcription job for an uploaded recording
POST
/
transcriptions
curl -X POST https://api.bota.dev/v1/transcriptions \
-H "Authorization: Bearer sk_live_..." \
-H "Content-Type: application/json" \
-d '{
"recording_id": "rec_abc123",
"language": "en",
"provider": "whisper"
}'
const response = await fetch('https://api.bota.dev/v1/transcriptions', {
method: 'POST',
headers: {
'Authorization': 'Bearer sk_live_...',
'Content-Type': 'application/json',
},
body: JSON.stringify({
recording_id: 'rec_abc123',
language: 'en',
provider: 'whisper',
}),
});
const transcription = await response.json();
console.log(transcription.id);
console.log(transcription.status);
import requests
response = requests.post(
'https://api.bota.dev/v1/transcriptions',
headers={
'Authorization': 'Bearer sk_live_...',
'Content-Type': 'application/json',
},
json={
'recording_id': 'rec_abc123',
'language': 'en',
'provider': 'whisper',
},
)
transcription = response.json()
print(transcription['id'])
{
"id": "txn_abc123",
"recording_id": "rec_abc123",
"status": "pending",
"language": "en",
"provider": "whisper",
"segments": null,
"full_text": null,
"word_count": null,
"confidence": null,
"error_message": null,
"started_at": null,
"created_at": "2025-01-15T10:10:00Z",
"completed_at": null,
"updated_at": "2025-01-15T10:10:00Z"
}
Start an asynchronous transcription job for a recording. The recording must already be uploaded.
Use webhooks to receive real-time notifications when the transcription completes, or poll Get Transcription.
Authentication
Requires an API key withtranscriptions:write scope.
curl -X POST https://api.bota.dev/v1/transcriptions \
-H "Authorization: Bearer sk_live_..." \
-H "Content-Type: application/json" \
-d '{
"recording_id": "rec_abc123",
"language": "en",
"provider": "whisper"
}'
const response = await fetch('https://api.bota.dev/v1/transcriptions', {
method: 'POST',
headers: {
'Authorization': 'Bearer sk_live_...',
'Content-Type': 'application/json',
},
body: JSON.stringify({
recording_id: 'rec_abc123',
language: 'en',
provider: 'whisper',
}),
});
const transcription = await response.json();
console.log(transcription.id);
console.log(transcription.status);
import requests
response = requests.post(
'https://api.bota.dev/v1/transcriptions',
headers={
'Authorization': 'Bearer sk_live_...',
'Content-Type': 'application/json',
},
json={
'recording_id': 'rec_abc123',
'language': 'en',
'provider': 'whisper',
},
)
transcription = response.json()
print(transcription['id'])
Request Body
string
required
The recording’s unique identifier.
string
Language code for the audio content. If omitted, the provider auto-detects the language when supported.
string
ASR provider to use. If omitted, Bota uses the project configuration default.
Response
Returns the newly created transcription object.{
"id": "txn_abc123",
"recording_id": "rec_abc123",
"status": "pending",
"language": "en",
"provider": "whisper",
"segments": null,
"full_text": null,
"word_count": null,
"confidence": null,
"error_message": null,
"started_at": null,
"created_at": "2025-01-15T10:10:00Z",
"completed_at": null,
"updated_at": "2025-01-15T10:10:00Z"
}
Response Fields
| Field | Type | Description |
|---|---|---|
id | string | The transcription’s unique identifier |
recording_id | string | The recording this transcription belongs to |
status | string | Current status: pending, processing, completed, or failed |
language | string | null | Language code used for transcription |
provider | string | null | ASR provider used |
segments | array | null | Transcript segments, populated on completion |
full_text | string | null | Full transcript text, populated on completion |
word_count | integer | null | Total word count |
confidence | number | null | Overall confidence score |
error_message | string | null | Error details if transcription failed |
started_at | string | null | Processing start timestamp |
created_at | string | ISO 8601 creation timestamp |
completed_at | string | null | ISO 8601 completion timestamp |
updated_at | string | ISO 8601 update timestamp |
Speaker labels and segment timestamps are provider-dependent. Do not send a
diarization field to this endpoint; it is not part of the current public request schema.Was this page helpful?

