AWS Transcribe

How to set up AWS Transcribe with Recall.ai

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 request using AWS Transcribe, you must specify either:

  • language_code (e.g en-US) OR
  • Set language_identification to true AND specify language_options (e.g en-US, fr-FR, es-US, de-DE, it-IT).

Here's an example request body:

{
  "recording_config": {
    "transcript": {
      "provider": {
        "aws_transcribe_streaming": {
          "language_code": "en-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, AmazonTranscribeFullAccess does not provide enough access. You will additionally need at least AmazonS3ReadOnlyAccess, 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 a request using AWS Transcribe, you must specify either:

  • language_code (e.g en-US) OR
  • Set identify_language to true

Here's an example request:

curl --request POST \
     --url https://us-west-2.recall.ai/api/v1/recording/{RECORDING_ID}/create_transcript/ \
     --header "Authorization: $RECALLAI_API_KEY" \
     --header "accept: application/json" \
     --header "content-type: application/json" \
     --data '{
  "provider": {
    "aws_transcribe_async": {
      "identify_language": true
    }
  }
}'