AWS Transcribe
You can use AWS Transcribe as a speech-to-text provider for transcription. This guide explains how to:
- Set up AWS Transcribe as a speech-to-text provider and configure AWS Transcribe for post-meeting and real-time transcription
- Learn how to configure AWS Transcribe for multilingual transcription and access custom AWS Transcribe-specific fields on the transcript data (available when not using Perfect Diarization or Hybrid Diarization)
- Covers FAQs
You can use this sample app to compare transcription quality and output across multiple third-party providers using Recall.ai's async transcription API.
Setup
Before using AWS Transcribe with Recall.ai, you must create an AWS IAM user, attach the required IAM permissions, create access keys for that user, and add those credentials to the Recall.ai dashboard.
Create an IAM user for Recall.ai
Create a new IAM user in your AWS account for Recall.ai to use with AWS Transcribe.
This user should be dedicated to Recall.ai transcription and should only have the permissions required for the transcription workflows you plan to use.
Add IAM permissions for AWS Transcribe
The IAM permissions for post-meeting transcription and real-time transcription are different. Make sure the IAM user has permissions for the transcription workflow you plan to use. If you plan to use both post-meeting transcription and real-time transcription, attach both sets of permissions to the IAM user.
Post-meeting transcription permissions
For post-meeting transcription, the IAM user must be allowed to start and retrieve transcription jobs, and read the external S3 object used for transcription.
AmazonTranscribeFullAccessalone is not sufficient for post-meeting transcription. You also need S3 read access for external buckets.
Below is a minimal IAM policy for post-meeting transcription:
{
"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 textReal-time transcription permissions
For real-time transcription, the IAM user must be allowed to start AWS Transcribe streaming transcription sessions.
Below is a minimal IAM policy for real-time transcription:
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "AllowRealtimeStreaming",
"Effect": "Allow",
"Action": [
"transcribe:StartStreamTranscription",
"transcribe:StartStreamTranscriptionWebSocket"
],
"Resource": "*"
}
]
}Create an access key for the IAM user
After adding the required IAM permissions, create an access key for the IAM user.
Take note of the:
- AWS access key ID
- AWS secret access key
See AWS IAM access keys for more details.
Add your AWS credentials to the Recall.ai transcription dashboard
Add the AWS access key ID and secret access key in the Recall.ai dashboard for the Recall region where you will create recordings:
Recall.ai regions are isolated, so you must add your AWS credentials in each Recall.ai region where you want to use AWS Transcribe.
Quickstart
Supported transcription workflows
| Workflow | Supported |
|---|---|
| Post-meeting transcription | ✅ Yes |
| Real-time transcription with meeting bots | ✅ Yes |
| Real-time transcription with Desktop Recording SDK | ❌ No |
AWS Transcribe for post-meeting transcription
Use post-meeting transcription when you want to transcribe a recording after the recording has completed.
To use AWS Transcribe for post-meeting transcription, call the Create Async Transcript endpoint and set provider to aws_transcribe_async along with your preferred AWS Transcribe options.
AWS Transcribe requires you to either set language_code or enable identify_language.
curl --request POST \
--url https://RECALL_REGION.recall.ai/api/v1/recording/RECORDING_ID/create_transcript/ \
--header "Authorization: RECALL_API_KEY" \
--header "accept: application/json" \
--header "content-type: application/json" \
--data '
{
"provider": {
"aws_transcribe_async": {
"language_code": "en-US"
}
}
}
'See the provider.aws_transcribe_async field on the Create Async Transcript endpoint for the full list of options available.
See post-meeting transcription for the full post-meeting transcription implementation, including when to create the post-meeting transcript, which webhook events to listen for, how to retrieve the completed transcript, how to handle transcription failures, and more.
AWS Transcribe for real-time transcription
To use AWS Transcribe for real-time transcription, set the provider to aws_transcribe_streaming when creating the recording. Real-time transcript delivery is configured separately through recording_config.realtime_endpoints.
AWS Transcribe requires you to either:
- Set
language_code, for exampleen-US - Set
language_identificationtotrueand specifylanguage_options
Meeting bots
To use AWS Transcribe real-time transcription with meeting bots, set recording_config.transcript.provider.aws_transcribe_streaming in the Create Bot request along with your preferred AWS Transcribe options:
curl --request POST \
--url https://RECALL_REGION.recall.ai/api/v1/bot/ \
--header "Authorization: RECALL_API_KEY" \
--header "accept: application/json" \
--header "content-type: application/json" \
--data '
{
"meeting_url": "MEETING_URL",
"recording_config": {
"transcript": {
"provider": {
"aws_transcribe_streaming": {
"language_code": "en-US"
}
}
},
"realtime_endpoints": [
{
"url": "REAL_TIME_TRANSCRIPT_WEBHOOK_ENDPOINT",
"type": "webhook",
"events": ["transcript.data"]
}
]
}
}
'See the recording_config.transcript.provider.aws_transcribe_streaming field on the Create Bot endpoint for the full list of options available.
See Meeting Bot Real-time Transcription for the full meeting bot implementation, including how to create a bot with real-time transcription enabled, configure real-time transcript delivery, subscribe to transcript events, and receive transcript data from a live meeting.
Desktop Recording SDK
AWS Transcribe is not supported for real-time transcription with the Desktop Recording SDK.
If you are using the Desktop Recording SDK and need real-time transcription, use a real-time transcription provider that supports the Desktop Recording SDK like Recall.ai Transcription.
Additional configurations
Multilingual transcription with AWS Transcribe
In some meetings, participants may speak in more than one language, and you may not know ahead of time which language or languages will be used. In those cases, you can use a transcription provider that supports multilingual transcription. Multilingual transcription generally includes two distinct features:
| Feature | Description |
|---|---|
| Language detection | Detects the spoken language without requiring you to set a language explicitly. |
| Code-switching | Handles conversations where speakers switch between two or more languages during the same meeting. |
Multilingual transcription options for post-meeting transcription
AWS Transcribe post-meeting transcription supports multilingual transcription. To enable language detection with AWS Transcribe, set identify_language to true:
{
// ... other Create Async Transcript request options
"provider": {
"aws_transcribe_async": {
"identify_language": true
}
}
}Multilingual transcription options for real-time transcription
AWS Transcribe real-time transcription supports multilingual transcription when you provide the possible languages ahead of time.
To enable language identification for real-time transcription, set language_identification to true, specify language_options, and optionally set preferred_language:
{
// ... other request options
"recording_config": {
// ... other recording options
"transcript": {
// ... other transcript options
"provider": {
"aws_transcribe_streaming": {
"language_identification": true,
"language_options": ["en-US", "es-US"],
"preferred_language": "en-US"
}
}
}
}
}See AWS Transcribe supported languages for the latest AWS Transcribe language support.
Accessing provider-specific fields from AWS Transcribe transcript data
If you need AWS Transcribe-specific fields that are not exposed in the normalized Recall transcript, you can access the provider data.
Provider data is not available when using Perfect Diarization or Hybrid Diarization
Accessing AWS Transcribe provider data post-meeting
For post-meeting transcription, you can access the raw AWS Transcribe transcription response from the completed transcript artifact. To access provider data after the meeting, fetch the transcript artifact using the Retrieve Transcript endpoint. Use the data.provider_data_download_url field from the response to download the raw provider response.
The response returned by provider_data_download_url varies by provider. See the accessing provider data section of the post-meeting transcription guide for implementation details.
Accessing AWS Transcribe provider data in real time
For real-time transcription, subscribe to transcript.provider_data in your real-time endpoint configuration if you need AWS Transcribe-specific payloads:
{
"url": "REAL_TIME_TRANSCRIPT_WEBHOOK_ENDPOINT",
"type": "webhook",
"events": ["transcript.data", "transcript.provider_data"]
}See the accessing provider data section of the real-time transcription docs for implementation details.
FAQ
Do I need to add AWS credentials in every Recall.ai region?
Yes. Recall.ai regions are isolated, so you must add your AWS credentials in each Recall.ai region where you want to use AWS Transcribe.
What regions can I configure with AWS Transcribe?
You can configure AWS Transcribe in any supported AWS region for real-time transcription. For post-meeting transcription, the transcribed region will be the same region as your Recall workspace.
Are the IAM permissions different for post-meeting and real-time transcription?
Yes. The IAM permissions are different for post-meeting transcription and real-time transcription.
For real-time transcription, the IAM user must be allowed to start AWS Transcribe streaming transcription sessions.
For post-meeting transcription, the IAM user must be allowed to start and retrieve transcription jobs, and read the external S3 object used for transcription.
Can I use AWS Transcribe for real-time transcription with the Desktop Recording SDK?
No. AWS Transcribe is not supported for real-time transcription with the Desktop Recording SDK.
You can still use AWS Transcribe for post-meeting transcription on completed recordings by creating a post-meeting transcript after the recording has completed.
Why do I need to specify a language for AWS Transcribe?
AWS Transcribe requires language configuration before transcription starts.
For post-meeting transcription, set either language_code or identify_language.
For real-time transcription, set either language_code, or set language_identification to true and specify language_options.
Can I configure AWS Transcribe to detect the language automatically?
Yes.
For post-meeting transcription, set identify_language to true.
For real-time transcription, set language_identification to true and provide the possible languages in language_options.
Do you support cross-account IAM role authentication with sts:AssumeRole and ExternalId?
sts:AssumeRole and ExternalId?Not today. Recall does not currently support cross-account IAM role authentication using sts:AssumeRole with ExternalId, either in the dashboard or through an API. Today, AWS Transcribe credentials are configured using IAM user access keys.
Can I scope the S3 permissions to a stable bucket ARN instead of using Resource: "*"?
Resource: "*"?Not currently.
For async transcription with AWS Transcribe, Recall reads from Recall-owned S3 buckets rather than a stable, per-customer bucket in your AWS account. Because of this, we cannot currently provide a stable S3 bucket ARN pattern that you can use to scope the policy to specific bucket ARNs.
The minimal recommended policy is the one shown in the AWS Transcribe setup docs listed above in this guide. It scopes access by using a StringNotEquals condition on s3:ResourceAccount, which prevents access to S3 resources outside the intended Recall-owned account pattern while still allowing Recall to use the S3 buckets required for transcription.
Because the bucket names are not stable per customer, the policy currently requires a wildcard resource with the account-based condition.
Do you enforce a per-customer concurrency cap for AWS Transcribe usage?
Recall does not currently expose a hard, customer-configurable concurrency cap for AWS Transcribe calls. We recommend combining Recall’s minimal IAM policy with AWS-side controls, such as:
- AWS Service Quotas for Transcribe where applicable
- CloudWatch billing or usage alarms
- Cost anomaly detection
- Automated key rotation
- Monitoring for unexpected Transcribe or S3 usage
These controls can help with visibility since Recall does not currently provide a customer-visible concurrency limit for AWS Transcribe usage.
Updated 12 days ago