AWS Transcribe
How to set up AWS Transcribe with Recall.ai
Important: This guide only applies to workspaces with v1.10 API accessThe v1.10 API is only available to Recall accounts created before May 28, 2025.
Do not use this documentation unless the workspace has access to the v1.10 API. If the workspace creation date is unknown, stop and clarify. All other workspaces must use the v1.11 API documentation instead.
Setup
To use AWS transcribe, you must create a new user in your AWS account with a secret key/access key. Once you have those credentials, add them in the transcription section of the Explorer Dashboard:
Next follow the guides below to add an IAM policy to allow AWS Transcribe access to the newly created user.
The IAM policies for realtime and async transcription are different! Make sure you use the right one!
Realtime Transcription
Policies
We typically recommend developers add the default AmazonTranscribeFullAccess policy to your AWS IAM User. For a minimal config, ensure that you have the transcribe:StartStreamTranscription and transcribe:StartStreamTranscriptionWebSocket actions allowed
Below is a minimal policy to have this working
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "AllowRealtimeStreaming", // Name here is arbitrary
"Effect": "Allow",
"Action": [
"transcribe:StartStreamTranscription",
"transcribe:StartStreamTranscriptionWebSocket"
],
"Resource": "*"
}
]
}Example Request
To successfully make a real-time request using AWS Transcribe, specify exactly one of:
language_codefor one known language (for example,en-US)identify_language: truewith at least two candidates inlanguage_optionsto detect one dominant languageidentify_multiple_languages: truewith at least two candidates inlanguage_optionsfor code-switching
Include only one dialect per language in language_options; for example, do not include both en-US and en-AU.
Here's an example request body:
{
"recording_config": {
"transcript": {
"provider": {
"aws_transcribe_streaming": {
"language_code": "en-US"
}
}
}
}
}To detect one dominant language, set identify_language to true:
{
"recording_config": {
"transcript": {
"provider": {
"aws_transcribe_streaming": {
"identify_language": true,
"language_options": "en-US,es-US",
"preferred_language": "en-US"
}
}
}
}
}To transcribe a stream where speakers may switch languages, set identify_multiple_languages to true:
{
"recording_config": {
"transcript": {
"provider": {
"aws_transcribe_streaming": {
"identify_multiple_languages": true,
"language_options": "en-US,es-US"
}
}
}
}
}Async Transcription
Policies
For a minimal config, ensure that you have the transcribe:GetTranscriptionJob, transcribe:StartTranscriptionJob and s3:GetObject on external buckets is allowed.
Unlike realtime transcription,
AmazonTranscribeFullAccessdoes not provide enough access. You will additionally need at leastAmazonS3ReadOnlyAccess, but we do not recommend this approach as it provides too much access to your account's buckets.
Below is a minimal policy to have this working:
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "TranscribeServiceAccess",
"Effect": "Allow",
"Action": [
"transcribe:GetTranscriptionJob",
"transcribe:StartTranscriptionJob"
],
"Resource": "*"
},
{
"Sid": "S3AccessForTranscribe",
"Effect": "Allow",
"Action": "s3:GetObject",
"Resource": "*",
"Condition": {
"StringNotEquals": {
"s3:ResourceAccount": "YOUR_AWS_ACCOUNT_ID"
}
}
}
]
}Replace YOUR_AWS_ACCOUNT_ID with the output of aws sts get-caller-identity --query Account --output text.
Example Request
To successfully make an async request using AWS Transcribe, specify exactly one of:
language_codefor one known language (for example,en-US)identify_language: trueto detect one dominant languageidentify_multiple_languages: truefor code-switching
To detect one dominant language:
curl --request POST \
--url https://us-west-2.recall.ai/api/v2beta/bot/{BOT_ID}/analyze \
--header "Authorization: $RECALLAI_API_KEY" \
--header "accept: application/json" \
--header "content-type: application/json" \
--data '{
"aws_transcribe_async_transcription": {
"identify_language": true
}
}'To transcribe audio where speakers may switch languages, set identify_multiple_languages to true. You can optionally restrict detection with language_options:
{
"aws_transcribe_async_transcription": {
"identify_multiple_languages": true,
"language_options": ["en-US", "es-US"]
}
}Updated 4 days ago
