Introduction
Base url
https://www.happyscribe.com/api/v1
https://www.happyscribe.com/api/v1
Welcome to the Happy Scribe API 👋
With this API you can automatically submit files to be transcribed by Happy Scribe, access existing transcriptions and export them to various formats.
This is a REST API that uses predictable resource names and verbs. Our API is versioned where breaking changes are released as incremental versions. We'll try our best not to release versions too often, and to reasonably support legacy versions.
If you have any questions, please write to us at dev@happyscribe.co. We'd love to hear from you!
— happyscribe team
Authentication
To authorize, use this code:
# With shell, you can just pass the correct header with each request
curl "https://www.happyscribe.com/api/v1/transcriptions" \
-H "Authorization: Bearer **your_api_key_here**"
fetch('https://www.happyscribe.com/api/v1/transcriptions', {
headers: {
authorization: 'Bearer **your_api_key_here**'
}
})
Make sure to replace
**your_api_key_here**
with your API key.
Happy Scribe uses API keys to allow access to the API. You can get your API key by logging in and going to settings
Happy Scribe expects the API key to be included in all API requests to the server in a header that looks like the following:
Authorization: Bearer **your_api_key_here**"
Uploads
When creating a transcription, a media file URL (accessible to our servers) must be provided.
This can be a publicly accessible URL hosted by yourselves or a third-party. We also support public links from services like YouTube and Vimeo. Alternatively, you can upload files directly to our storage system (AWS S3 bucket) and create the transcription using the returned URL.
To upload files to our AWS S3 bucket, you must first request a signed URL using the endpoints below.
1. Get a Signed Url
curl "https://www.happyscribe.com/api/v1/uploads/new?filename=my_media.mp3" \
-H "Authorization: Bearer **your_api_key_here**"
fetch('https://www.happyscribe.com/api/v1/uploads/new?filename=my_media.mp3', {
headers: {
authorization: 'Bearer **your_api_key_here**',
}
})
The above command returns JSON structured like this:
{
"signedUrl": "https://happy-scribe-domain.s3.eu-west-1.amazonaws.com/xxxxxx?x-amx-signature=xxxxx..."
}
This endpoint returns a signed URL which can be used to make PUT requests to our S3 bucket. More information here: docs.aws.amazon.com
Once the file is uploaded, this same url should be used as the tmp_url
when creating the associated transcription.
HTTP Request
GET https://www.happyscribe.com/api/v1/uploads/new
Parameters
Parameter | Description |
---|---|
filename | (required) The filename and extension of the media file (e.g. my_media.mp3 ) |
2. Upload your file with the Signed Url
curl -X PUT -T my_media.mp3 -L https://signed-url...
curl -X PUT -T my_media.mp3 -L https://signed-url...
Simple upload to an AWS S3 Bucket
Once you have a signed url, you have to upload the file there, and you do it as you would with any AWS S3 bucket.
To upload a file to the signed URL you may use cURL like the example on the right.
Here you have more information about how to deal with AWS S3 signed urls docs.aws.amazon.com.
Transcriptions
List All Transcriptions
curl "https://www.happyscribe.com/api/v1/transcriptions" \
-H "Authorization: Bearer **your_api_key_here**"
fetch('https://www.happyscribe.com/api/v1/transcriptions', {
headers: {
authorization: 'Bearer **your_api_key_here**'
}
})
The above command returns JSON structured like this:
{
"results": [
{
"id": "e458099e7f8da14f9625854ba7b6a026917ad306",
"name": "interview1.mov",
"createdAt": "2018-10-29T14:31:29.799Z",
"updatedAt": "2018-10-29T14:31:38.495Z",
"state": "automatic_done",
"sharingEnabled": false,
"language": "en-GB",
"audioLengthInSeconds": 42,
"_links": {
"self": {
"url": "https://www.happyscribe.com/api/v1/transcriptions/e458099e7f8da14f9625854ba7b6a026917ad306"
}
}
},
{
"id": "9jossdjdf09j309omsldknslkjndfjknsdfs",
"name": "interview2.mov",
"createdAt": "2018-10-29T14:31:29.799Z",
"updatedAt": "2018-10-29T14:31:38.495Z",
"state": "automatic_done",
"sharingEnabled": false,
"language": "en-GB",
"audioLengthInSeconds": 42,
"_links": {
"self": {
"url": "https://www.happyscribe.com/api/v1/transcriptions/9jossdjdf09j309omsldknslkjndfjknsdfs"
}
}
},
...
],
"_links": {
"next": {
"url": "https://www.happyscribe.com/api/v1/transcriptions?page=2"
}
}
}
Returns a list of transcriptions you’ve previously created. The transcriptions are returned in sorted order, with the most recent charges appearing first. The information returned is metadata about each transcription, not the actual transcript. To retrieve a specific transcript you have to use the export endpoint.
HTTP Request
GET https://www.happyscribe.com/api/v1/transcriptions
Query Parameters
Parameter | Default | Description |
---|---|---|
organization_id | - | (required) Id of the organization to get the transcriptions from |
page | 0 | Request a specific page |
Create a Transcription
curl -X POST "https://www.happyscribe.com/api/v1/transcriptions" \
-H "Authorization: Bearer **your_api_key_here**" \
-H "Content-Type: application/json" \
-d '{
"transcription": {
"name": "My Interview",
"language": "en-GB",
"tmp_url": "https://example.com/my_media.mp3",
"is_subtitle": false,
"organization_id": "420",
"folder_id": "521"
}
}'
fetch('https://www.happyscribe.com/api/v1/transcriptions', {
method: 'POST',
headers: {
authorization: 'Bearer **your_api_key_here**',
'content-type': 'application/json',
},
body: JSON.stringify({
transcription: {
name: 'My Interview',
language: 'en-GB',
tmp_url: 'https://example.com/my_media.mp3',
is_subtitle: false,
organization_id: '420'
}
})
})
The above command returns JSON structured like this:
{
"id": "9josdjdfo09j309omsldknslkjndfjknsdfs",
"name": "My Interview",
"createdAt": "2018-10-29T14:31:29.799Z",
"updatedAt": "2018-10-29T14:31:38.495Z",
"sharingEnabled": false,
"state": "ingesting",
"language": "en-GB",
"_links": {
"self": {
"url": "https://www.happyscribe.com/api/v1/transcriptions/f6511f81s5611daede28dc85f25a796ae7996d11"
},
}
}
This endpoint creates a new transcription. After a transcription is created, the system will proceed to automatically transcribe it. You can watch if the transcription process has finished by retrieving a transcription.
HTTP Request
POST https://www.happyscribe.com/api/v1/transcriptions
Parameters
Parameter | Type | Description |
---|---|---|
name | String | (required) Name of the transcription |
language | String | (required) BCP-47 language code. Full list here |
tmp_url | String | (required) A url where the media file is located and can be retrieved by our server. |
is_subtitle | Boolean | (default: false) If set to true, we will treat this transcription as subtitles. |
service | String | auto (default) : Machine generated transcription/subtitles. pro : transcription/subtitles hand-crafted by human professionals. alignment : Align the text provided in document_url with the media from tmp_url Note: check the supported languages. |
organization_id | String | (required) Id of the organization to save the transcription in. |
folder | String | (optional) Path of the folder to save the transcription in. Example: path/to/my folder . |
folder_id | String | (optional) Id of the folder to save the transcription in. |
document_url | String | (only for alignment ) An accessible url to a plain text document that needs to be aligned with the media provided in tmp_url . |
sharing_enabled | Boolean | (default: false) If set to true, everyone with the editor url will be able to access it. |
use_vocabulary | Boolean | (default: false) If set to true, we will use the vocabulary that you can set on https://www.happyscribe.com/my_vocab |
Retrieve a Transcription
curl "https://www.happyscribe.com/api/v1/transcriptions/<ID>" \
-H "Authorization: Bearer **your_api_key_here**"
fetch('https://www.happyscribe.com/api/v1/transcriptions/<ID>', {
headers: {
authorization: 'Bearer **your_api_key_here**'
}
})
The above command returns JSON structured like this:
{
"id": "9josdjdfo09j309omsldknslkjndfjknsdfs",
"name": "interview2.mov",
"createdAt": "2018-10-29T14:31:29.799Z",
"updatedAt": "2018-10-29T14:31:38.495Z",
"sharingEnabled": false,
"state": "automatic_done",
"language": "en-GB",
"audioLengthInSeconds": 42,
"soundwaveUrl":"https://hs-soundwaves-prod.s3-eu-west-1.amazonaws.com/e4c8e370a92aafb8b03da708c5016bb6-10.dat",
"_links": {
"self": {
"url": "https://www.happyscribe.com/api/v1/transcriptions/f6511f81156114aede28dc85325a796ae7996d11"
},
"editor": {
"url": "https://www.happyscribe.com/transcriptions/9josdjdfo09j309omsldknslkjndfjknsdfs/edit_v2",
},
}
}
This endpoint retrieves information about a specific transcription. To retrieve the transcript you have to use the export endpoint.
HTTP Request
GET https://www.happyscribe.com/api/v1/transcriptions/<ID>
Soundwave
It's only generated for subtitles ("is_subtitle": true
). The soundwaveUrl is not available until the state is automatic_done
Transcription State Descriptions
Value | Description |
---|---|
initial |
Transcription is waiting to be processed |
ingesting |
Media file is being ingested |
automatic_transcribing |
Audio is being transcribed to text |
automatic_done |
Transcription is finished and ready to export! |
aligning |
Text is being realigned with the audio |
locked |
Transcription is locked due to insufficient credits |
failed |
File failed to process |
demo |
The initial demo file |
Delete a Transcription
curl -X DELETE "https://www.happyscribe.com/api/v1/transcriptions/<ID>" \
-H "Authorization: Bearer **your_api_key_here**"
fetch('https://www.happyscribe.com/api/v1/transcriptions/<ID>', {
headers: {
authorization: 'Bearer **your_api_key_here**'
}
})
This endpoint deletes a transcription.
HTTP Request
DELETE https://www.happyscribe.com/api/v1/transcriptions/<ID>
Query Parameters
Parameter | Default | Description |
---|---|---|
permanent | false | When set to "true" the action is irreversible. Otherwise, the transcription can be found in the Trash. |
Exports
Create an Export
curl -X POST "https://www.happyscribe.com/api/v1/exports" \
-H "Authorization: Bearer **your_api_key_here**" \
-H 'Content-Type: application/json' \
-d '{
"export": {
"format": "txt",
"transcription_ids": [
"**transcription_id_1**"
]
}
}'
fetch('https://www.happyscribe.com/api/v1/exports', {
method: 'POST',
headers: {
authorization: 'Bearer **your_api_key_here**',
'content-type': 'application/json',
},
body: JSON.stringify({
export: {
format: 'txt',
transcription_ids:
[
'**transcription_id_1**'
]
}
})
})
The above command returns JSON structured like this:
{
"id":"**export_id**",
"state":"pending",
"format":"txt",
"show_timestamps":false,
"show_speakers":false,
"show_comments":false,
"show_highlights":false,
"transcription_ids":[
"**transcription_id_1**"
]
}
This endpoint creates a new export. After an export is created, the system will proceed to generate it. You can watch if the exporting process has finished by retrieving an export.
The exporting process is generally very fast. Each file takes ~10s to complete. You can submit more than one file at the same time.
HTTP Request
POST https://www.happyscribe.com/api/v1/exports
JSON Parameters
Parameter | Default | Description |
---|---|---|
format | none | (required) Specify the export format (see chart below) |
show_timestamps | false | Include timestamps (only formats: txt , docx , pdf ) |
timestamps_frequency | nil | Include inline timecodes at a given frequency (valid values: 5s, 10s, 15s, 20s, 30s, 60s) |
show_speakers | false | Include speaker labels (only formats: txt , docx , pdf ) |
show_comments | false | Include comments (only formats: txt , docx , pdf ) |
show_highlights | false | Include highlights (only formats: docx , pdf ) |
show_highlights_only | false | Include only highlights (only formats: docx , pdf ) |
Export formats
Value | Description |
---|---|
txt | Text Document (.txt) |
docx | Word Document (.docx) |
PDF Document (.pdf) | |
srt | Subtitles (SubRip .srt) |
vtt | Subtitles (WebVTT .vtt) |
stl | Subtitles (EBU-STL .stl) |
avid | Avid Markers (.txt) |
html | Interactive Transcript (.html) |
premiere | Premiere Pro (Beta) (.xml) |
maxqda | Maxqda (.txt) |
json | JSON (.json) |
fcp | Final Cut Pro (.fcp) |
Retrieve an Export
curl "https://www.happyscribe.com/api/v1/exports/<ID>" \
-H "Authorization: Bearer **your_api_key_here**"
fetch('https://www.happyscribe.com/api/v1/exports/<ID>', {
headers: {
authorization: 'Bearer **your_api_key_here**'
}
})
The above command returns JSON structured like this:
{
"id":"**export_id**",
"state":"ready",
"format":"txt",
"show_timestamps":false,
"show_speakers":false,
"show_comments":false,
"show_highlights":false,
"transcription_ids":[
"**transcription_id_1**",
],
"download_link":"**download_link**"
}
This endpoint retrieves information about a specific export. To download it you can use the returned download_link
.
HTTP Request
GET https://www.happyscribe.com/api/v1/exports/<ID>
Export State Descriptions
Value | Description |
---|---|
pending |
Waiting to be processed |
processing |
The export is being generated |
ready |
The export is ready to download |
expired |
No longer available |
failed |
A problem occurred |
Translation
Create a Translation Task
curl -X POST "https://www.happyscribe.com/api/v1/task/transcription_translation" \
-H "Authorization: Bearer **your_api_key_here**" \
-H 'Content-Type: application/json' \
-d '{
"source_transcription_id": "**source_transcription_id**",
"target_language": "es"
}'
fetch('https://www.happyscribe.com/api/v1/task/transcription_translation', {
method: 'POST',
headers: {
authorization: 'Bearer **your_api_key_here**',
'content-type': 'application/json',
},
body: JSON.stringify({
source_transcription_id: "**source_transcription_id**",
target_language: "es"
})
})
The above command returns JSON structured like this:
{
"id": "054fe9f3aa0b446baea730fba688f96c",
"state": "working",
"failureReason": null,
"progressPercent": null,
"targetLanguage": "es"
}
Creates a new translation task given a source transcription and a target language code.
After a translation task is created, the system will proceed to generate a new transcription
with the translated content. You can watch the task status and get the result
by retrieving a translation task using the response
id
property.
The translation task typically takes ~10s to complete, but can take up to two minutes if the source transcription is large.
HTTP Request
POST https://www.happyscribe.com/api/v1/task/transcription_translation
JSON Parameters
Parameter | Default | Description |
---|---|---|
source_transcription_id | none | (required) Specify the id of the transcription you want to translate from. It must be in one of the supported source translation languages. |
target_language | none | (required) The language code of the language you want to translate to. Full list here. |
Target translation languages
Code | Language |
---|---|
af | Afrikaans |
sq | Albanian |
am | Amharic |
ar | Arabic |
hy | Armenian |
az | Azerbaijani |
eu | Basque |
bn | Bengali |
bs | Bosnian |
bg | Bulgarian |
ca | Catalan |
zh | Chinese |
hr | Croatian |
cs | Czech |
da | Danish |
nl | Dutch |
en | English |
et | Estonian |
fil | Filipino |
fi | Finnish |
fr | French |
gl | Galician |
ka | Georgian |
de | German |
el | Greek |
gu | Gujarati |
he | Hebrew |
hi | Hindi |
hu | Hungarian |
is | Icelandic |
id | Indonesian |
it | Italian |
ja | Japanese |
jv | Javanese |
kn | Kannada |
km | Khmer |
ko | Korean |
lo | Lao |
lv | Latvian |
lt | Lithuanian |
mk | Macedonian |
ms | Malay |
ml | Malayalam |
mr | Marathi |
mn | Mongolian |
my | Burmese |
ne | Nepali |
no | Norwegian |
fa | Persian |
pl | Polish |
pt-PT | Portuguese (Portugal) |
pt-BR | Portuguese (Brazil) |
pa | Punjabi |
ro | Romanian |
ru | Russian |
sr | Serbian |
si | Sinhala |
sk | Slovak |
sl | Slovenian |
es | Spanish |
su | Sundanese |
sw | Swahili |
sv | Swedish |
ta | Tamil |
te | Telugu |
th | Thai |
tr | Turkish |
uk | Ukrainian |
ur | Urdu |
uz | Uzbek |
vi | Vietnamese |
zu | Zulu |
Supported source translation languages
Language Code | Language Name |
---|---|
af | Afrikaans |
sq | Albanian |
am | Amharic |
ar | Arabic |
hy | Armenian |
az | Azerbaijani |
eu | Basque |
bn | Bengali |
bs | Bosnian |
bg | Bulgarian |
ca | Catalan |
cmn-Hans-CN | Chinese, Mandarin (Simplified, China) |
cmn-Hans-HK | Chinese, Mandarin (Simplified, Hong Kong) |
cmn-Hant-TW | Chinese, Mandarin (Traditional, Taiwan) |
hr | Croatian |
cs | Czech |
da | Danish |
nl | Dutch |
en | English |
et | Estonian |
fil | Filipino |
fi | Finnish |
fr | French |
gl | Galician |
ka | Georgian |
de | German |
el | Greek |
gu | Gujarati |
he | Hebrew |
hi | Hindi |
hu | Hungarian |
is | Icelandic |
id | Indonesian |
it | Italian |
ja | Japanese |
jv | Javanese |
kn | Kannada |
km | Khmer |
ko | Korean |
lo | Lao |
lv | Latvian |
lt | Lithuanian |
mk | Macedonian |
ms | Malay |
ml | Malayalam |
mr | Marathi |
mn | Mongolian |
my | Burmese |
ne | Nepali |
no | Norwegian |
fa | Persian |
pl | Polish |
pt | Portuguese |
pa | Punjabi |
ro | Romanian |
ru | Russian |
sr | Serbian |
si | Sinhala |
sk | Slovak |
sl | Slovenian |
es | Spanish |
su | Sundanese |
sw | Swahili |
sv | Swedish |
ta | Tamil |
te | Telugu |
th | Thai |
tr | Turkish |
uk | Ukrainian |
ur | Urdu |
uz | Uzbek |
vi | Vietnamese |
zu | Zulu |
Retrieve a Translation Task
curl "https://www.happyscribe.com/api/v1/task/transcription_translation/<ID>" \
-H "Authorization: Bearer **your_api_key_here**"
fetch('https://www.happyscribe.com/api/v1/task/transcription_translation/<ID>', {
headers: {
authorization: 'Bearer **your_api_key_here**'
}
})
The above command returns a JSON structured like the following:
{
"id": "054fe9f3aa0b446baea730fba688f96c",
"state": "done",
"failureReason": null,
"progressPercent": 100.0,
"targetLanguage": "es",
"translatedTranscriptionId": "372e9530d8f24ba68ccbcce11de43f9d"
}
This endpoint returns information about a translation task. To get the translated
trancription when the task has finished you can use the translatedTranscriptionId
property in
the response. Remember that you can use the transcription endpoint
or the export endpoint to retrieve the information and
content of the transcription given the transcription id.
HTTP Request
GET https://www.happyscribe.com/api/v1/task/transcription_translation/<id>
Translation task state descriptions
Value | Description |
---|---|
initial | The task is waiting to be processed |
working | The translation is being generated |
failed | A problem occured. See the failureReason attribute. |
done | The translated transcription is ready. The translatedTranscriptionId attribute can be used to retrieve the translated transcription. |
Errors
The Happy Scribe API uses the following error codes:
Error Code | Meaning |
---|---|
400 | Bad Request -- Your request is invalid. |
401 | Unauthorized -- Your API key is wrong or you don't have permission to access that resource. |
403 | Forbidden -- The resource requested is hidden for administrators only. |
404 | Not Found -- The specified resource could not be found. |
405 | Method Not Allowed -- You tried to access a resource with an invalid method. |
406 | Not Acceptable -- You requested a format that isn't json. |
410 | Gone -- The resource requested has been removed from our servers. |
418 | I'm a teapot. |
422 | Unprocessable Entity -- There was an error processing your request. |
429 | Too Many Requests -- You're requesting too many resources! Slow down! |
500 | Internal Server Error -- We had a problem with our server. Try again later. |
503 | Service Unavailable -- We're temporarily offline for maintenance. Please try again later. |
Languages
We support the following languages, by their IETF BCP-47 language codes:
Code | Language | Human service available? |
---|---|---|
af-ZA |
Afrikaans (South Africa) | |
am-ET |
Amharic (Ethiopia) | |
ar-DZ |
Arabic (Algeria) | |
ar-BH |
Arabic (Bahrain) | |
ar-EG |
Arabic (Egypt) | |
ar-IQ |
Arabic (Iraq) | |
ar-IL |
Arabic (Israel) | |
ar-JO |
Arabic (Jordan) | |
ar-KW |
Arabic (Kuwait) | |
ar-LB |
Arabic (Lebanon) | |
ar-MA |
Arabic (Morocco) | |
ar-OM |
Arabic (Oman) | |
ar-QA |
Arabic (Qatar) | |
ar-SA |
Arabic (Saudi Arabia) | |
ar-PS |
Arabic (State of Palestine) | |
ar-TN |
Arabic (Tunisia) | |
ar-AE |
Arabic (United Arab Emirates) | |
ar-YE |
Arabic (Yemen) | |
hy-AM |
Armenian (Armenia) | |
az-AZ |
Azerbaijani (Azerbaijan) | |
eu-ES |
Basque (Spain) | |
bn-BD |
Bengali (Bangladesh) | |
bn-IN |
Bengali (India) | |
bg-BG |
Bulgarian (Bulgaria) | |
ca-ES |
Catalan (Spain) | |
yue-Hant-HK |
Chinese, Cantonese (Traditional, Hong Kong) | |
cmn-Hans-CN |
Chinese, Mandarin (Simplified, China) | |
cmn-Hans-HK |
Chinese, Mandarin (Simplified, Hong Kong) | |
cmn-Hant-TW |
Chinese, Mandarin (Traditional, Taiwan) | |
hr-HR |
Croatian (Croatia) | |
cs-CZ |
Czech (Czech Republic) | |
da-DK |
Danish (Denmark) | |
nl-NL |
Dutch (Netherlands) | human ✅ |
nl-BE |
Dutch (Belgium) | human ✅ |
en-AU |
English (Australia) | human ✅ |
en-CA |
English (Canada) | human ✅ |
en-GH |
English (Ghana) | human ✅ |
en-IN |
English (India) | human ✅ |
en-IE |
English (Ireland) | human ✅ |
en-KE |
English (Kenya) | human ✅ |
en-NZ |
English (New Zealand) | human ✅ |
en-NG |
English (Nigeria) | human ✅ |
en-PH |
English (Philippines) | human ✅ |
en-ZA |
English (South Africa) | human ✅ |
en-TZ |
English (Tanzania) | human ✅ |
en-HK |
English (Hong Kong) | human ✅ |
en-PK |
English (Pakistan) | human ✅ |
en-SG |
English (Singapore) | human ✅ |
en-GB |
English (United Kingdom) | human ✅ |
en-US |
English (United States) | human ✅ |
fil-PH |
Filipino (Philippines) | |
fi-FI |
Finnish (Finland) | |
fr-CA |
French (Canada) | human ✅ |
fr-FR |
French (France) | human ✅ |
fr-BE |
French (Belgium) | human ✅ |
fr-CH |
French (Switzerland) | human ✅ |
gl-ES |
Galician (Spain) | |
ka-GE |
Georgian (Georgia) | |
de-DE |
German (Germany) | human ✅ |
de-AT |
German (Austria) | human ✅ |
de-CH |
German (Switzerland) | |
el-GR |
Greek (Greece) | |
gu-IN |
Gujarati (India) | |
he-IL |
Hebrew (Israel) | |
hi-IN |
Hindi (India) | |
hu-HU |
Hungarian (Hungary) | |
is-IS |
Icelandic (Iceland) | |
id-ID |
Indonesian (Indonesia) | |
it-IT |
Italian (Italy) | human ✅ |
it-CH |
Italian (Switzerland) | human ✅ |
ja-JP |
Japanese (Japan) | |
jv-ID |
Javanese (Indonesia) | |
kn-IN |
Kannada (India) | |
km-KH |
Khmer (Cambodia) | |
ko-KR |
Korean (South Korea) | |
lo-LA |
Lao (Laos) | |
lv-LV |
Latvian (Latvia) | |
lt-LT |
Lithuanian (Lithuania) | |
ms-MY |
Malay (Malaysia) | |
ml-IN |
Malayalam (India) | |
mr-IN |
Marathi (India) | |
ne-NP |
Nepali (Nepal) | |
nb-NO |
Norwegian Bokmål (Norway) | |
fa-IR |
Persian (Iran) | |
pl-PL |
Polish (Poland) | human ✅ |
pt-BR |
Portuguese (Brazil) | human ✅ |
pt-PT |
Portuguese (Portugal) | human ✅ |
ro-RO |
Romanian (Romania) | |
ru-RU |
Russian (Russia) | |
sr-RS |
Serbian (Serbia) | |
si-LK |
Sinhala (Srilanka) | |
sk-SK |
Slovak (Slovakia) | |
sl-SI |
Slovenian (Slovenia) | |
es-AR |
Spanish (Argentina) | human ✅ |
es-BO |
Spanish (Bolivia) | human ✅ |
es-CL |
Spanish (Chile) | human ✅ |
es-CO |
Spanish (Colombia) | human ✅ |
es-CR |
Spanish (Costa Rica) | human ✅ |
es-DO |
Spanish (Dominican Republic) | human ✅ |
es-EC |
Spanish (Ecuador) | human ✅ |
es-SV |
Spanish (El Salvador) | human ✅ |
es-GT |
Spanish (Guatemala) | human ✅ |
es-HN |
Spanish (Honduras) | human ✅ |
es-MX |
Spanish (Mexico) | human ✅ |
es-NI |
Spanish (Nicaragua) | human ✅ |
es-PA |
Spanish (Panama) | human ✅ |
es-PY |
Spanish (Paraguay) | human ✅ |
es-PE |
Spanish (Peru) | human ✅ |
es-PR |
Spanish (Puerto Rico) | human ✅ |
es-ES |
Spanish (Spain) | human ✅ |
es-US |
Spanish (United States) | human ✅ |
es-UY |
Spanish (Uruguay) | human ✅ |
es-VE |
Spanish (Venezuela) | human ✅ |
su-ID |
Sundanese (Indonesia) | |
sw-KE |
Swahili (Kenya) | |
sw-TZ |
Swahili (Tanzania) | |
sv-SE |
Swedish (Sweden) | |
ta-IN |
Tamil (India) | |
ta-MY |
Tamil (Malaysia) | |
ta-SG |
Tamil (Singapore) | |
ta-LK |
Tamil (Sri Lanka) | |
te-IN |
Telugu (India) | |
th-TH |
Thai (Thailand) | |
tr-TR |
Turkish (Turkey) | |
uk-UA |
Ukrainian (Ukraine) | |
ur-IN |
Urdu (India) | |
ur-PK |
Urdu (Pakistan) | |
vi-VN |
Vietnamese (Vietnam) | |
zu-ZA |
Zulu (South Africa) | |
sq-AL |
Albanian (Albania) | |
bs-BA |
Bosnian (Bosnia and Herzegovina) | |
my-MM |
Burmese (Myanmar) | |
et-EE |
Estonian (Estonia) | |
mk-MK |
Macedonian (North Macedonia) | |
mn-MN |
Mongolian (Mongolia) | |
pa-Guru-IN |
Punjabi (Gurmukhi India) | |
uz-UZ |
Uzbek (Uzbekistan) |