Overview
Auto-Processing lets you automatically transcribe recordings when they’re uploaded, and optionally generate summaries when transcription completes — without any additional API calls.
Benefits:
Zero-code processing pipeline — upload once, get transcription and summary automatically
Configurable per organization, project, end user, or device
Choose your preferred ASR provider and LLM provider at each level
Non-blocking — auto-processing errors never fail the upload
Use Cases:
Medical clinics: Upload recording → auto-transcribe → auto-generate SOAP notes
Sales teams: Upload call recording → auto-transcribe → auto-generate deal summary
Legal firms: Upload consultation → auto-transcribe → auto-generate legal memo
Enterprise: Upload meeting → auto-transcribe → auto-generate meeting notes
Quick Start
Enable auto-processing for an entire project with a single API call:
curl -X PUT https://api.bota.dev/v1/projects/proj_xxx/config/processing \
-H "Authorization: Bearer sk_live_..." \
-H "Content-Type: application/json" \
-d '{
"auto_transcription": {
"enabled": true
},
"auto_summary": {
"enabled": true,
"template": "general_notes"
}
}'
Now every recording uploaded in this project will be automatically transcribed and summarized.
How It Works
Processing Flow
Recording upload completes — your app calls POST /v1/recordings/:id/upload-complete
Auto-transcription check — the system resolves the processing config for the recording’s device/end_user/project
If enabled — a transcription job is queued automatically (same as calling POST /v1/recordings/:id/transcribe)
Transcription completes — the worker checks the same config for auto-summary settings
If enabled — a summary job is queued automatically (same as calling POST /v1/summaries)
Webhooks fire — transcription.completed and summary.completed events are sent as usual
Config Resolution
The system determines which processing settings to apply based on the recording’s context:
This means you can set different processing rules at each level. See Hierarchical Configuration for details on how inheritance works.
Error Handling
Auto-processing is non-blocking . If auto-transcription or auto-summary fails:
The upload still completes successfully
The error is logged but does not affect the parent operation
You can always retry manually via the API
Auto-processing requires that the relevant AI provider API keys are configured. If you’re using user-provided API keys , they will be used automatically. Otherwise, the system falls back to Bota’s default keys.
Configuration
Processing Config Schema
{
"processing" : {
"auto_transcription" : {
"enabled" : false ,
"provider" : "whisper"
},
"auto_summary" : {
"enabled" : false ,
"provider" : "gemini" ,
"template" : "general_notes"
}
}
}
Auto-Transcription Settings
Field Type Default Description enabledboolean falseEnable automatic transcription on upload providerstring System default ASR provider to use
Available ASR Providers:
Provider Description whisperOpenAI Whisper (default) — 99 languages, word timestamps deepgramDeepgram Nova-2 — real-time capable, speaker diarization assemblyaiAssemblyAI — Best/Nano models elevenlabsElevenLabs — high accuracy, language detection
Auto-Summary Settings
Field Type Default Description enabledboolean falseEnable automatic summary after transcription providerstring System default LLM provider to use templatestring general_notesSummary template
Available LLM Providers:
Provider Description geminiGoogle Gemini 2.0 Flash (default) — JSON output openaiOpenAI GPT-4o — JSON mode claudeAnthropic Claude Sonnet 4 — structured output
Available Templates:
Template Industry Output general_notesGeneral meetings Key points, action items, decisions sales_callSales Pain points, budget, timeline, next steps clinical_soapHealthcare SOAP notes (Subjective, Objective, Assessment, Plan) legal_memoLegal Facts, issues, analysis, conclusion
Setting Config at Different Levels
Auto-processing uses the hierarchical configuration system , so you can set it at any level.
Project Level
Apply to all recordings in a project:
curl -X PUT https://api.bota.dev/v1/projects/proj_xxx/config/processing \
-H "Authorization: Bearer sk_live_..." \
-d '{
"auto_transcription": { "enabled": true, "provider": "whisper" },
"auto_summary": { "enabled": true, "template": "sales_call" }
}'
End User Level
Override for a specific end user (e.g., a clinician who needs SOAP notes):
curl -X PUT https://api.bota.dev/v1/end-users/eu_drsmith/config/processing \
-H "Authorization: Bearer sk_live_..." \
-d '{
"auto_summary": { "template": "clinical_soap" }
}'
You only need to specify the fields you want to override. Dr. Smith’s recordings will still inherit auto_transcription and auto_summary.enabled from the project level — only the template changes.
Device Level
Override for a specific device:
curl -X PUT https://api.bota.dev/v1/devices/dev_abc123/config/processing \
-H "Authorization: Bearer sk_live_..." \
-d '{
"auto_transcription": { "provider": "deepgram" }
}'
Disable for a Specific Entity
Disable auto-processing at a lower level even if the parent has it enabled:
# Project has auto-transcription enabled, but disable for this device
curl -X PUT https://api.bota.dev/v1/devices/dev_abc123/config/processing \
-H "Authorization: Bearer sk_live_..." \
-d '{
"auto_transcription": { "enabled": false }
}'
Remove Override (Revert to Inherited)
Delete the processing override to revert to the parent’s settings:
curl -X DELETE https://api.bota.dev/v1/devices/dev_abc123/config/processing \
-H "Authorization: Bearer sk_live_..."
Monitoring
Webhook Events
Auto-processing triggers the same webhook events as manual processing:
Event Trigger transcription.startedAuto-transcription job begins transcription.completedAuto-transcription finished transcription.failedAuto-transcription failed summary.startedAuto-summary job begins summary.completedAuto-summary finished summary.failedAuto-summary failed
Subscribe to these events to track processing status. See Webhook Events for payload details.
Checking Results
After auto-processing completes, retrieve results the same way as manual processing:
# Get transcription for a recording
curl https://api.bota.dev/v1/transcriptions/txn_abc123 \
-H "Authorization: Bearer sk_live_..."
# Get summary
curl https://api.bota.dev/v1/summaries/sum_abc123 \
-H "Authorization: Bearer sk_live_..."
Verifying Current Config
Check the resolved processing config for any entity:
curl https://api.bota.dev/v1/devices/dev_abc123/config/processing \
-H "Authorization: Bearer sk_live_..."
{
"data" : {
"auto_transcription" : {
"enabled" : true ,
"provider" : "whisper"
},
"auto_summary" : {
"enabled" : true ,
"provider" : "gemini" ,
"template" : "clinical_soap"
}
}
}
Troubleshooting
Recording Uploaded But Not Auto-Transcribed
Check:
Processing config is enabled: GET /v1/devices/:id/config/processing
Recording reached uploaded status (check recording.uploaded webhook)
ASR provider API key is configured (system default or user-provided )
Auto-Transcription Works But No Summary
Check:
auto_summary.enabled is true in resolved config
Transcription completed successfully (not failed)
LLM provider API key is configured
Wrong Provider or Template Used
Config is resolved from the recording’s context at the time of processing. Check which level the setting is coming from:
# Check device-level override
GET /v1/devices/:id/config/processing
# Check end-user-level override
GET /v1/end-users/:id/config/processing
# Check project-level config
GET /dashboard/projects/:projectId/config
A more specific level always takes precedence. To revert to the parent’s setting, delete the override at the lower level.
Hierarchical Config Learn how config inheritance works
Create Transcription Manual transcription API reference
Create Summary Manual summary API reference
Webhook Events Subscribe to processing events