# AWS Transcribe Integration via LowCodeAPI
**Last Updated**: February 11, 2026
## Overview
Amazon Transcribe is an automatic speech recognition (ASR) service that makes it easy for developers to add speech-to-text capability to their applications. It uses advanced machine learning models to accurately transcribe audio and video files in multiple languages.
**Main Features**:
- Transcribe speech to text from audio/video files
- Support for 37+ languages and dialects
- Automatic language identification
- Speaker diarization (identifying and labeling different speakers)
- Custom vocabularies and language models
- Medical transcription with specialty support
- Subtitle generation (SRT, VTT formats)
- PII redaction for sensitive data
## Base Endpoint
```
https://api.lowcodeapi.com/awstranscribe
```
**Important**: Always include the provider name `awstranscribe` in the URL path after `api.lowcodeapi.com/`.
## Authentication
AWS Transcribe uses token-based authentication with AWS credentials:
1. **AWS Access Key ID**: Your AWS access key identifier
2. **AWS Secret Access Key**: Your AWS secret access key
3. **AWS Region**: The AWS region where your Transcribe service is configured
### Setting Up Credentials
1. Go to the [AWS IAM Console](https://console.aws.amazon.com/iam/)
2. Create an IAM user with Transcribe permissions or use an existing user
3. Generate an access key for the user
4. Copy the Access Key ID and Secret Access Key
5. Select your region (e.g., `us-east-1`, `us-west-2`, `eu-west-1`)
**Note**: For detailed instructions on creating access keys, visit the [AWS IAM Documentation](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_access-keys.html)
## URL Format
LowCodeAPI supports two URL formats for AWS Transcribe. Always try the **New Format first**, and only fall back to the **Old Format** if it doesn't work.
### New Format (Priority)
Path parameters remain in the URL path. This is the preferred format.
**Pattern**:
```
https://api.lowcodeapi.com/awstranscribe/{path_with_params}?api_token={api_token}
```
### Old Format (Fallback)
Path parameters are converted to query parameters. Use this only if New Format fails.
**Pattern**:
```
https://api.lowcodeapi.com/awstranscribe/{sanitized_path}?{path_params}&api_token={api_token}
```
### Decision Flow for AI Agents
1. **Always try New Format first** - Keep path parameters in the URL path
2. If you receive a 404 or error, **try Old Format** with sanitized path
3. Log which format worked for future requests to AWS Transcribe
### Multiple Path Parameters Handling
For endpoints with multiple path parameters (e.g., medical transcription jobs with custom vocabularies):
```bash
# New Format (Priority)
https://api.lowcodeapi.com/awstranscribe/v1/medicaltranscriptionjobs/{job_name}/vocabularies/{vocabulary_name}?api_token=XXX
# Old Format (Fallback)
https://api.lowcodeapi.com/awstranscribe/v1/medicaltranscriptionjobs/jobname/vocabularies/vocabularyname?job_name={job_name}&vocabulary_name={vocabulary_name}&api_token=XXX
```
## API Categories
- **Transcription Jobs**: Manage standard transcription jobs (start, get, list, delete)
- **Medical Transcription**: Handle medical transcription with specialty support
- **Vocabularies**: Create and manage custom vocabularies for improved accuracy
## Common Endpoints
### Start Transcription Job
**Method**: POST
**New Format URL**:
```
https://api.lowcodeapi.com/awstranscribe/v1/transcriptionjobs?api_token=YOUR_API_TOKEN
```
**Old Format URL**:
```
https://api.lowcodeapi.com/awstranscribe/v1/transcriptionjobs?api_token=YOUR_API_TOKEN
```
**Path Parameters**: None
**Query Parameters**: None
**Request Body**:
| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `TranscriptionJobName` | string | Yes | A unique name for your transcription job |
| `Media` | object | Yes | An object describing the input media file (S3 URI) |
| `LanguageCode` | enum | No* | The language code of the audio (required unless using auto-identification) |
| `MediaFormat` | enum | Yes | The format of the input media file (mp3, mp4, wav, flac, ogg, amr, webm) |
| `MediaSampleRateHertz` | number | No | The sample rate in Hertz of the audio track |
| `IdentifyLanguage` | boolean | No | Enable automatic language identification |
| `IdentifyMultipleLanguages` | boolean | No | Enable multi-language audio detection |
| `LanguageOptions` | array | No | Array of possible language codes |
| `Settings` | object | No | Optional settings (speaker labels, vocabulary, etc.) |
| `ContentRedaction` | object | No | Settings for PII redaction |
| `Subtitles` | object | No | Generate subtitles (VTT, SRT formats) |
| `ModelSettings` | object | No | Custom language model settings |
| `JobExecutionSettings` | object | No | Execution settings (deferred execution, IAM role) |
| `OutputBucketName` | string | No | S3 bucket for transcription output |
| `OutputKey` | string | No | Key prefix for output files |
| `OutputEncryptionKMSKeyId` | string | No | KMS key for encrypting output |
| `KMSEncryptionContext` | object | No | Encryption context pairs |
| `Tags` | array | No | Tags for the transcription job |
**Supported Language Codes**: `af-ZA`, `ar-AE`, `ar-SA`, `cy-GB`, `da-DK`, `de-CH`, `de-DE`, `en-AB`, `en-AU`, `en-GB`, `en-IE`, `en-IN`, `en-NZ`, `en-US`, `en-WL`, `en-ZA`, `es-ES`, `es-US`, `fa-IR`, `fr-CA`, `fr-FR`, `ga-IE`, `gd-GB`, `he-IL`, `hi-IN`, `id-ID`, `it-IT`, `ja-JP`, `ko-KR`, `ms-MY`, `nl-NL`, `pt-BR`, `pt-PT`, `ru-RU`, `ta-IN`, `te-IN`, `tr-TR`, `zh-CN`, `zh-TW`, `th-TH`, `vi-VN`, `de-AT`
**Example Request** (New Format):
```bash
curl -X POST "https://api.lowcodeapi.com/awstranscribe/v1/transcriptionjobs?api_token=YOUR_API_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"TranscriptionJobName": "MyTranscriptionJob",
"LanguageCode": "en-US",
"Media": {
"MediaFileUri": "s3://my-bucket/audio-file.mp3"
},
"MediaFormat": "mp3",
"Settings": {
"ShowSpeakerLabels": true,
"MaxSpeakerLabels": 2
}
}'
```
**Example Response**:
```json
{
"data": {
"TranscriptionJob": {
"TranscriptionJobName": "MyTranscriptionJob",
"TranscriptionJobStatus": "IN_PROGRESS",
"LanguageCode": "en-US",
"Media": {
"MediaFileUri": "s3://my-bucket/audio-file.mp3"
},
"CreationTime": "2026-02-11T06:30:00.000Z",
"Settings": {
"ShowSpeakerLabels": true,
"MaxSpeakerLabels": 2
}
}
}
}
```
**Official Documentation**: [StartTranscriptionJob API Reference](https://docs.aws.amazon.com/transcribe/latest/APIReference/API_StartTranscriptionJob.html)
---
### Get Transcription Job
**Method**: GET
**New Format URL**:
```
https://api.lowcodeapi.com/awstranscribe/v1/transcriptionjobs/{job_name}?api_token=YOUR_API_TOKEN
```
**Old Format URL**:
```
https://api.lowcodeapi.com/awstranscribe/v1/transcriptionjobs/jobname?job_name={job_name}&api_token=YOUR_API_TOKEN
```
**Path Parameters**:
| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `job_name` | string | Yes | The name of the transcription job to retrieve |
**Query Parameters**: None
**Example Request** (New Format):
```bash
curl -X GET "https://api.lowcodeapi.com/awstranscribe/v1/transcriptionjobs/MyTranscriptionJob?api_token=YOUR_API_TOKEN"
```
**Example Response** (Completed Job):
```json
{
"data": {
"TranscriptionJob": {
"TranscriptionJobName": "MyTranscriptionJob",
"TranscriptionJobStatus": "COMPLETED",
"LanguageCode": "en-US",
"Media": {
"MediaFileUri": "s3://my-bucket/audio-file.mp3"
},
"Transcript": {
"TranscriptFileUri": "https://s3.amazonaws.com/my-bucket/MyTranscriptionJob.json"
},
"CreationTime": "2026-02-11T06:30:00.000Z",
"CompletionTime": "2026-02-11T06:32:00.000Z"
}
}
}
```
**Official Documentation**: [GetTranscriptionJob API Reference](https://docs.aws.amazon.com/transcribe/latest/APIReference/API_GetTranscriptionJob.html)
---
### List Transcription Jobs
**Method**: GET
**New Format URL**:
```
https://api.lowcodeapi.com/awstranscribe/v1/transcriptionjobs?api_token=YOUR_API_TOKEN
```
**Old Format URL**:
```
https://api.lowcodeapi.com/awstranscribe/v1/transcriptionjobs?api_token=YOUR_API_TOKEN
```
**Path Parameters**: None
**Query Parameters**:
| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `Status` | enum | No | Filter by job status (QUEUED, IN_PROGRESS, FAILED, COMPLETED) |
| `JobNameContains` | string | No | Filter jobs by name containing this string |
| `NextToken` | string | No | Pagination token for next page |
| `MaxResults` | number | No | Maximum number of jobs to return |
**Example Request**:
```bash
curl -X GET "https://api.lowcodeapi.com/awstranscribe/v1/transcriptionjobs?Status=COMPLETED&MaxResults=10&api_token=YOUR_API_TOKEN"
```
**Example Response**:
```json
{
"data": {
"Status": "COMPLETED",
"TranscriptionJobSummaries": [
{
"TranscriptionJobName": "Job1",
"CreationTime": "2026-02-11T06:00:00.000Z",
"CompletionTime": "2026-02-11T06:02:00.000Z",
"LanguageCode": "en-US",
"TranscriptionJobStatus": "COMPLETED"
}
],
"NextToken": "eyJza2lwIjox..."
}
}
```
**Official Documentation**: [ListTranscriptionJobs API Reference](https://docs.aws.amazon.com/transcribe/latest/APIReference/API_ListTranscriptionJobs.html)
---
### Delete Transcription Job
**Method**: DELETE
**New Format URL**:
```
https://api.lowcodeapi.com/awstranscribe/v1/transcriptionjobs/{job_name}?api_token=YOUR_API_TOKEN
```
**Old Format URL**:
```
https://api.lowcodeapi.com/awstranscribe/v1/transcriptionjobs/jobname?job_name={job_name}&api_token=YOUR_API_TOKEN
```
**Path Parameters**:
| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `job_name` | string | Yes | The name of the transcription job to delete |
**Example Request** (New Format):
```bash
curl -X DELETE "https://api.lowcodeapi.com/awstranscribe/v1/transcriptionjobs/MyTranscriptionJob?api_token=YOUR_API_TOKEN"
```
**Official Documentation**: [DeleteTranscriptionJob API Reference](https://docs.aws.amazon.com/transcribe/latest/APIReference/API_DeleteTranscriptionJob.html)
---
### Start Medical Transcription Job
**Method**: POST
**New Format URL**:
```
https://api.lowcodeapi.com/awstranscribe/v1/medicaltranscriptionjobs?api_token=YOUR_API_TOKEN
```
**Old Format URL**:
```
https://api.lowcodeapi.com/awstranscribe/v1/medicaltranscriptionjobs?api_token=YOUR_API_TOKEN
```
**Request Body**:
| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `MedicalTranscriptionJobName` | string | Yes | Unique name for the medical transcription job |
| `Media` | object | Yes | Input media file (S3 URI) |
| `LanguageCode` | enum | Yes | Language code (currently only en-US) |
| `MediaFormat` | enum | Yes | Media format (mp3, mp4, wav, flac, ogg, amr, webm) |
| `Type` | enum | No | Type of speech (CONVERSATION, DICTATION) |
| `Specialty` | enum | No | Medical specialty (PRIMARYCARE, CARDIOLOGY, NEUROLOGY, ONCOLOGY, RADIOLOGY, UROLOGY) |
| `OutputBucketName` | string | Yes | S3 bucket for output |
| `OutputKey` | string | No | Key prefix for output files |
| `Settings` | object | No | Optional settings (speaker labels, vocabulary) |
| `ContentIdentificationType` | enum | No | Identify PHI entities (PHI) |
| `KMSEncryptionContext` | object | No | Encryption context |
| `OutputEncryptionKMSKeyId` | string | No | KMS key for encryption |
| `Tags` | array | No | Tags for the job |
**Example Request**:
```bash
curl -X POST "https://api.lowcodeapi.com/awstranscribe/v1/medicaltranscriptionjobs?api_token=YOUR_API_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"MedicalTranscriptionJobName": "MedicalDictation1",
"LanguageCode": "en-US",
"Media": {
"MediaFileUri": "s3://medical-bucket/dictation.mp3"
},
"MediaFormat": "mp3",
"Type": "DICTATION",
"Specialty": "PRIMARYCARE",
"OutputBucketName": "medical-output-bucket",
"ContentIdentificationType": "PHI"
}'
```
**Official Documentation**: [StartMedicalTranscriptionJob API Reference](https://docs.aws.amazon.com/transcribe/latest/APIReference/API_StartMedicalTranscriptionJob.html)
---
### Create Vocabulary
**Method**: POST
**New Format URL**:
```
https://api.lowcodeapi.com/awstranscribe/v1/vocabularies?api_token=YOUR_API_TOKEN
```
**Old Format URL**:
```
https://api.lowcodeapi.com/awstranscribe/v1/vocabularies?api_token=YOUR_API_TOKEN
```
**Request Body**:
| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `VocabularyName` | string | Yes | Unique name for the vocabulary |
| `LanguageCode` | enum | Yes | Language code for the vocabulary |
| `Phrases` | array | No* | Array of vocabulary phrases |
| `VocabularyFileUri` | string | No* | S3 location of vocabulary text file |
| `Tags` | array | No | Tags for the vocabulary |
*Note: Either `Phrases` or `VocabularyFileUri` is required.
**Example Request**:
```bash
curl -X POST "https://api.lowcodeapi.com/awstranscribe/v1/vocabularies?api_token=YOUR_API_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"VocabularyName": "MyCustomVocabulary",
"LanguageCode": "en-US",
"Phrases": [
"Transcribe",
"LowCodeAPI",
"Samal",
"AWS Transcribe"
]
}'
```
**Official Documentation**: [CreateVocabulary API Reference](https://docs.aws.amazon.com/transcribe/latest/APIReference/API_CreateVocabulary.html)
---
## Complete Endpoint Reference
## Response Format
All responses from LowCodeAPI are wrapped in a `data` key:
```json
{
"data": {
// Actual response from provider API
}
}
```
The `data` key contains the raw response from the provider's API.
### Transcription Jobs
| Method | New Format Path | Old Format Path | Description |
|--------|-----------------|-----------------|-------------|
| POST | `/v1/transcriptionjobs` | `/v1/transcriptionjobs` | Starts an asynchronous job to transcribe speech to text |
| GET | `/v1/transcriptionjobs/{job_name}` | `/v1/transcriptionjobs/jobname?job_name={job_name}` | Returns information about a transcription job |
| GET | `/v1/transcriptionjobs` | `/v1/transcriptionjobs` | Lists transcription jobs with specified status |
| DELETE | `/v1/transcriptionjobs/{job_name}` | `/v1/transcriptionjobs/jobname?job_name={job_name}` | Deletes a previously submitted transcription job |
### Medical Transcription
| Method | New Format Path | Old Format Path | Description |
|--------|-----------------|-----------------|-------------|
| POST | `/v1/medicaltranscriptionjobs` | `/v1/medicaltranscriptionjobs` | Starts a batch job to transcribe medical speech to text |
| GET | `/v1/medicaltranscriptionjobs/{job_name}` | `/v1/medicaltranscriptionjobs/jobname?job_name={job_name}` | Retrieves information about a medical transcription job |
| GET | `/v1/medicaltranscriptionjobs` | `/v1/medicaltranscriptionjobs` | Lists medical transcription jobs with specified status |
| DELETE | `/v1/medicaltranscriptionjobs/{job_name}` | `/v1/medicaltranscriptionjobs/jobname?job_name={job_name}` | Deletes a medical transcription job |
### Vocabularies
| Method | New Format Path | Old Format Path | Description |
|--------|-----------------|-----------------|-------------|
| POST | `/v1/vocabularies` | `/v1/vocabularies` | Creates a new custom vocabulary |
| GET | `/v1/vocabularies/{vocabulary_name}` | `/v1/vocabularies/vocabularyname?vocabulary_name={vocabulary_name}` | Gets information about a vocabulary |
| GET | `/v1/vocabularies` | `/v1/vocabularies` | Lists all vocabularies matching specified criteria |
| PUT | `/v1/vocabularies/{vocabulary_name}` | `/v1/vocabularies/vocabularyname?vocabulary_name={vocabulary_name}` | Updates an existing vocabulary |
| DELETE | `/v1/vocabularies/{vocabulary_name}` | `/v1/vocabularies/vocabularyname?vocabulary_name={vocabulary_name}` | Deletes a vocabulary |
## API Definition Endpoints
To discover all available endpoints for AWS Transcribe:
**New Format (OpenAPI Spec)**:
```
https://backend.lowcodeapi.com/awstranscribe/openapi
```
**Old Format (API Definition)**:
```
https://backend.lowcodeapi.com/awstranscribe/definition
```
## Usage Examples
### Example 1: Basic Audio Transcription
Transcribe a single audio file with speaker identification.
```bash
# Step 1: Start the transcription job
curl -X POST "https://api.lowcodeapi.com/awstranscribe/v1/transcriptionjobs?api_token=YOUR_API_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"TranscriptionJobName": "MeetingTranscript20260211",
"LanguageCode": "en-US",
"Media": {
"MediaFileUri": "s3://my-bucket/meeting-audio.mp3"
},
"MediaFormat": "mp3",
"Settings": {
"ShowSpeakerLabels": true,
"MaxSpeakerLabels": 4
}
}'
# Step 2: Check job status (use job_name from Step 1 response)
curl -X GET "https://api.lowcodeapi.com/awstranscribe/v1/transcriptionjobs/MeetingTranscript20260211?api_token=YOUR_API_TOKEN"
# Step 3: Once status is COMPLETED, download transcript from TranscriptFileUri
curl "https://s3.amazonaws.com/my-bucket/MeetingTranscript20260211.json"
```
**Note**: In Step 2, the `job_name` comes from the `TranscriptionJobName` you specified in Step 1. In Step 3, the `TranscriptFileUri` is provided in the response when the job status is `COMPLETED`.
---
### Example 2: Auto-Language Identification with Subtitles
Transcribe audio with automatic language detection and subtitle generation.
```bash
curl -X POST "https://api.lowcodeapi.com/awstranscribe/v1/transcriptionjobs?api_token=YOUR_API_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"TranscriptionJobName": "MultiLangVideo20260211",
"IdentifyLanguage": true,
"Media": {
"MediaFileUri": "s3://my-bucket/video-audio.wav"
},
"MediaFormat": "wav",
"Subtitles": {
"Formats": ["vtt", "srt"],
"OutputStartIndex": 0
}
}'
```
**Note**: When `IdentifyLanguage` is `true`, AWS Transcribe automatically detects the language spoken in the audio. No `LanguageCode` is needed. Subtitles are generated in both VTT and SRT formats.
---
### Example 3: Medical Transcription with PHI Redaction
Transcribe medical dictation with specialty support and PHI entity identification.
```bash
# Step 1: Create a custom medical vocabulary
curl -X POST "https://api.lowcodeapi.com/awstranscribe/v1/vocabularies?api_token=YOUR_API_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"VocabularyName": "CardiologyTerms2026",
"LanguageCode": "en-US",
"Phrases": [
"electrocardiogram",
"arrhythmia",
"tachycardia",
"bradycardia",
"myocardial infarction"
]
}'
# Step 2: Start medical transcription job (no ID needed - vocabulary is referenced by name)
curl -X POST "https://api.lowcodeapi.com/awstranscribe/v1/medicaltranscriptionjobs?api_token=YOUR_API_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"MedicalTranscriptionJobName": "CardiologyDictation20260211",
"LanguageCode": "en-US",
"Media": {
"MediaFileUri": "s3://medical-bucket/dictation1.mp3"
},
"MediaFormat": "mp3",
"Type": "DICTATION",
"Specialty": "CARDIOLOGY",
"OutputBucketName": "medical-output-bucket",
"ContentIdentificationType": "PHI",
"Settings": {
"VocabularyName": "CardiologyTerms2026"
}
}'
```
**Note**: In Step 2, the vocabulary is referenced by its `VocabularyName` from Step 1 in the `Settings` object. `ContentIdentificationType: "PHI"` enables automatic detection of Protected Health Information entities.
---
### Example 4: Multi-Participant Meeting with Custom Vocabulary
Transcribe a meeting with multiple speakers and industry-specific terminology.
```bash
# Step 1: Create vocabulary for company-specific terms
curl -X POST "https://api.lowcodeapi.com/awstranscribe/v1/vocabularies?api_token=YOUR_API_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"VocabularyName": "CompanyTechTerms2026",
"LanguageCode": "en-US",
"Phrases": [
"LowCodeAPI",
"connectors",
"provider proxy",
"skill generation",
"BananaDev",
"transcription jobs"
]
}'
# Step 2: Start transcription with speaker labels and vocabulary
curl -X POST "https://api.lowcodeapi.com/awstranscribe/v1/transcriptionjobs?api_token=YOUR_API_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"TranscriptionJobName": "TechTeamMeeting20260211",
"LanguageCode": "en-US",
"Media": {
"MediaFileUri": "s3://team-bucket/meeting-2026-02-11.mp3"
},
"MediaFormat": "mp3",
"Settings": {
"ShowSpeakerLabels": true,
"MaxSpeakerLabels": 8,
"VocabularyName": "CompanyTechTerms2026"
}
}'
```
**Note**: The vocabulary improves recognition accuracy for domain-specific terms. The `MaxSpeakerLabels: 8` setting enables detection of up to 8 different speakers in the meeting.
---
## Error Handling
AWS Transcribe returns standard HTTP status codes:
| Status Code | Meaning |
|-------------|---------|
| 200 | Success - Request processed successfully |
| 400 | Bad Request - Invalid parameters or malformed request |
| 403 | Forbidden - Authentication failed or insufficient permissions |
| 404 | Not Found - Job or vocabulary not found |
| 409 | Conflict - Job name already exists |
| 429 | Too Many Requests - Rate limit exceeded |
| 500 | Internal Server Error - AWS Transcribe service error |
**Common Error Messages**:
- **BadRequestException**: Invalid parameter value (e.g., unsupported language code)
- **LimitExceededException**: Quota exceeded (e.g., too many concurrent jobs)
- **ConflictException**: Resource already exists (e.g., duplicate job name)
- **NotFoundException**: Resource not found (e.g., job or vocabulary doesn't exist)
## Notes
- Transcription jobs are asynchronous and can take minutes to hours depending on audio length
- Use the `Settings.VocabularyName` parameter to improve accuracy for domain-specific content
- `IdentifyLanguage: true` is useful for multi-language content but may increase processing time
- Medical transcription is only available for English (en-US) language
- PII redaction supports entity types: BANK_ACCOUNT_NUMBER, BANK_ROUTING, CREDIT_DEBIT_NUMBER, SSN
- Subtitles are generated only when the transcription job completes successfully
**Official AWS Transcribe Documentation**: [Amazon Transcribe Documentation](https://docs.aws.amazon.com/transcribe/latest/APIReference/Welcome.html)