Speech To Text API Documentation and Reference
Get started with Ebby.co powerful Speech To Text API
Getting started
Introduction
Ebby's Speech To Text API is available to all customers.
Using the API you can programmatically upload, transcribe and get your transcript or closed captions.
Base URL and Versioning
Base URL has the following format: https://api.ebby.co/VERSION
The latest version is v1
, so the most current base URL is https://api.ebby.co/v1
Endpoints described in the documentation are relative to the base URL above.
Authentication
Ebby's API uses API keys to authenticate requests.
Generate an API key in your Account page.
Your API key carry many privileges, so be sure to keep it secure! Do not share your API key in publicly accessible areas such as GitHub, client-side code, etc.
All API requests should include a Bearer Authorization
header with your API key.
Authorization: Bearer API_KEY
Unauthorized requests
Unauthorized API requests will return an HTTP response code 401
with the following JSON:
{
"message": "Unauthenticated."
}
Error Codes
Ebby uses conventional HTTP response codes to indicate the success or failure of an API request.
In general: Codes in the 2xx
range indicate success. Codes in the 4xx
range indicate an error that failed given the information provided (e.g., a required parameter was omitted, unauthorized request, etc.). Codes in the 5xx
range indicate an error with
Ebby's servers (which are rare).
Erroneous responses include a message
with more information:
{
"message": "Unauthenticated."
}
Response code | Meaning | Description |
---|---|---|
200 |
OK | Everything worked as expected. |
204 |
No Content | The requested transcript has no text. Usually due to low quality audio or wrong transcription language/dialect (the provided language parameter does not actually match the spoken language in the recording). |
401 |
Unauthorized Request | Usually due to invalid or missing API Key. |
400 |
Bad Request | Ebby cannot process your request, usually due to invalid or missing parameters. |
402 |
Payment Required | You do not have sufficient transcription credit to transcribe this file. |
403 |
Forbidden | Unauthorized request. |
404 |
Not Found | The file you requested was not found. |
429 |
Too Many Requests | You have reached your rate limit. |
500 |
Internal Server Error | Ebby failed to process your request. |
Rates & Limits
Ebby's API accepts no more than one request every 3 seconds.
Transcribe
Send a media file for transcription
Request
HTTP Method | POST |
Endpoint | /transcribe |
Parameters
Name | Required | Default | Description |
---|---|---|---|
file |
The audio or video file as multi-part form data. | ||
language |
Language code describing the spoken language in the media file. See supported languages for valid language codes. | ||
callback_url |
URL for Ebby to make a POST request once transcription is done (successfully or not). See callback URL for more information. | ||
multi_speakers |
true | Indicate if there's more than one speaker in the recording. | |
identify_speakers |
false |
When set to |
|
num_speakers |
2 | If identify_speakers is set to true , specify how many speakers are in the recording. |
|
filter_profanity |
false | Ebby will attempt to filter out profane words by replacing them with their first letter followed by asterisks (e.g. f***). This filter is not applied to phrases. |
Example
curl -XPOST https://api.ebby.co/v1/transcribe \
-H "Authorization: Bearer API_KEY" \
-F file=@interview.mp3 \
-F language=en-us \
-F callback_url=https://example.com/ebby_callback
Response
Name | Type | Description |
---|---|---|
id |
string |
Unique ID of the transcribed file |
name |
string |
The name of the transcribed file |
duration |
int |
The transcribed file's duration, in seconds |
created_at |
string |
ISO-8601 compatible date |
updated_at |
string |
ISO-8601 compatible date |
status |
string |
transcribing |
Example
{
"id": "RwwHNc97",
"name": "interview.mp3",
"duration": 3600,
"created_at": "2021-02-18T13:16:32.000000Z",
"updated_at": "2021-02-18T13:16:32.000000Z",
"status": "transcribing"
}
Limits
Only one concurrent call is allowed.
If you need to make several Transcribe
calls, execute the next call after the response was received.
Callback URL
Ebby will POST
the callback_url
once the transcription process is done, either successfully or not.
Transcription completed successfully
Will include status
property with completed
as its value.
{
"id": "RwwHNc97",
"name": "interview.mp3",
"duration": 3600,
"created_at": "2021-02-18T13:16:32.000000Z",
"updated_at": "2021-02-18T13:16:32.000000Z",
"status": "completed"
}
Transcription failed
Will include status
property with failed
as its value.
The message
property provides additional information.
{
"id": "RwwHNc97",
"name": "interview.mp3",
"duration": 3600,
"created_at": "2021-02-18T13:16:32.000000Z",
"updated_at": "2021-02-18T13:16:32.000000Z",
"status": "failed",
"message": "Identify Speakers is not supported for Hindi (India)"
}
Supported Languages
Lists of all supported languages and their codes
Name | Language Code |
---|---|
Afrikaans (South Africa) | af-za |
Albanian (Albania) | sq-al |
Amharic (Ethiopia) | am-et |
Arabic (Algeria) | ar-dz |
Arabic (Bahrain) | ar-bh |
Arabic (Egypt) | ar-eg |
Arabic (Iraq) | ar-iq |
Arabic (Israel) | ar-il |
Arabic (Jordan) | ar-jo |
Arabic (Kuwait) | ar-kw |
Arabic (Lebanon) | ar-lb |
Arabic (Mauritania) | ar-mr |
Arabic (Morocco) | ar-ma |
Arabic (Oman) | ar-om |
Arabic (Qatar) | ar-qa |
Arabic (Saudi Arabia) | ar-sa |
Arabic (State of Palestine) | ar-ps |
Arabic (Tunisia) | ar-tn |
Arabic (United Arab Emirates) | ar-ae |
Arabic (Yemen) | ar-ye |
Armenian (Armenia) | hy-am |
Azerbaijani (Azerbaijan) | az-az |
Basque (Spain) | eu-es |
Bengali (Bangladesh) | bn-bd |
Bengali (India) | bn-in |
Bosnian (Bosnia and Herzegovina) | bs-ba |
Bulgarian (Bulgaria) | bg-bg |
Burmese (Myanmar) | my-mm |
Catalan (Spain) | ca-es |
Chinese, Cantonese (Traditional Hong Kong) | yue-hant-hk |
Chinese, Mandarin (Simplified, China) | zh |
Chinese, Mandarin (Traditional, Taiwan) | zh-tw |
Croatian (Croatia) | hr-hr |
Czech (Czech Republic) | cs-cz |
Danish (Denmark) | da-dk |
Dutch (Belgium) | nl-be |
Dutch (Netherlands) | nl-nl |
English (Australia) | en-au |
English (Canada) | en-ca |
English (Ghana) | en-gh |
English (Hong Kong) | en-hk |
English (India) | en-in |
English (Ireland) | en-ie |
English (Kenya) | en-ke |
English (New Zealand) | en-nz |
English (Nigeria) | en-ng |
English (Pakistan) | en-pk |
English (Philippines) | en-ph |
English (Scotland) | en-ab |
English (Singapore) | en-sg |
English (South Africa) | en-za |
English (Tanzania) | en-tz |
English (United Kingdom) | en-gb |
English (United States) | en-us |
English (Wales) | en-wl |
Estonian (Estonia) | et-ee |
Filipino (Philippines) | fil-ph |
Finnish (Finland) | fi-fi |
French (Belgium) | fr-be |
French (Canada) | fr-ca |
French (France) | fr-fr |
French (Switzerland) | fr-ch |
Galician (Spain) | gl-es |
Georgian (Georgia) | ka-ge |
German (Austria) | de-at |
German (Germany) | de-de |
German (Switzerland) | de-ch |
Greek (Greece) | el-gr |
Gujarati (India) | gu-in |
Hebrew (Israel) | iw-il |
Hindi (India) | hi-in |
Hungarian (Hungary) | hu-hu |
Icelandic (Iceland) | is-is |
Indonesian (Indonesia) | id-id |
Italian (Italy) | it-it |
Italian (Switzerland) | it-ch |
Japanese (Japan) | ja-jp |
Javanese (Indonesia) | jv-id |
Kannada (India) | kn-in |
Kazakh (Kazakhstan) | kk-kz |
Khmer (Cambodia) | km-kh |
Korean (South Korea) | ko-kr |
Lao (Laos) | lo-la |
Latvian (Latvia) | lv-lv |
Lithuanian (Lithuania) | lt-lt |
Macedonian (North Macedonia) | mk-mk |
Malay (Malaysia) | ms-my |
Malayalam (India) | ml-in |
Marathi (India) | mr-in |
Mongolian (Mongolia) | mn-mn |
Nepali (Nepal) | ne-np |
Norwegian Bokmål (Norway) | no-no |
Norwegian Bokmål (Norway) | nb-no |
Persian (Iran) | fa-ir |
Polish (Poland) | pl-pl |
Portuguese (Brazil) | pt-br |
Portuguese (Portugal) | pt-pt |
Punjabi (Gurmukhi India) | pa-guru-in |
Romanian (Romania) | ro-ro |
Russian (Russia) | ru-ru |
Serbian (Serbia) | sr-rs |
Sinhala (Sri Lanka) | si-lk |
Slovak (Slovakia) | sk-sk |
Slovenian (Slovenia) | sl-si |
Spanish (Argentina) | es-ar |
Spanish (Bolivia) | es-bo |
Spanish (Chile) | es-cl |
Spanish (Colombia) | es-co |
Spanish (Costa Rica) | es-cr |
Spanish (Dominican Republic) | es-do |
Spanish (Ecuador) | es-ec |
Spanish (El Salvador) | es-sv |
Spanish (Guatemala) | es-gt |
Spanish (Honduras) | es-hn |
Spanish (Mexico) | es-mx |
Spanish (Nicaragua) | es-ni |
Spanish (Panama) | es-pa |
Spanish (Paraguay) | es-py |
Spanish (Peru) | es-pe |
Spanish (Puerto Rico) | es-pr |
Spanish (Spain) | es-es |
Spanish (United States) | es-us |
Spanish (Uruguay) | es-uy |
Spanish (Venezuela) | es-ve |
Sundanese (Indonesia) | su-id |
Swahili (Kenya) | sw-ke |
Swahili (Tanzania) | sw-tz |
Swedish (Sweden) | sv-se |
Tamil (India) | ta-in |
Tamil (Malaysia) | ta-my |
Tamil (Singapore) | ta-sg |
Tamil (Sri Lanka) | ta-lk |
Telugu (India) | te-in |
Thai (Thailand) | th-th |
Turkish (Turkey) | tr-tr |
Ukrainian (Ukraine) | uk-ua |
Urdu (India) | ur-in |
Urdu (Pakistan) | ur-pk |
Uzbek (Uzbekistan) | uz-uz |
Vietnamese (Vietnam) | vi-vn |
Zulu (South Africa) | zu-za |
Get Transcript
Get the transcript in your desired format
Request
HTTP Method | GET |
Endpoint | /transcript/{id}/{format} |
Path Parameters
Name | Required | Default | Description |
---|---|---|---|
id |
The file's id . |
||
format |
Valid values are text , html , word , pdf , srt , vtt and json . |
Query Parameters
Name | Required | Default | Description |
---|---|---|---|
speakers |
true |
Include speaker names in the transcript? Valid values are multi_speakers=true .
|
|
ts |
true |
Include paragraph timecode in the transcript? Valid values are text , html , word and pdf formats.
|
|
inline_ts |
false |
Add inline timecodes to the transcript? Valid values are text , html , word and pdf formats.
|
|
inline_ts_frequency |
10 |
How often, in seconds should an inline timecode be inserted into the transcript. Valid value is an text , html , word and pdf formats, when inline_ts is set to true .
|
Get Subtitles
An example for srt
request and response
Request
curl -XGET https://api.ebby.co/v1/transcript/RwwHNc97/srt \
-H "Authorization: Bearer API_KEY"
Response
{
"name": "interview.mp3",
"transcript": [
{
"speaker": "Speaker 1",
"words": [
{
"startTime": 0.3,
"endTime": 0.8,
"text": "Hello"
},
{
"startTime": 0.8,
"endTime": 1,
"text": "World"
}
]
}
]
}
Get Word
An example request for a transcript exported as a Word document, without speaker names:
Request
curl -XGET https://api.ebby.co/v1/transcript/RwwHNc97/word?speakers=false \
-H "Authorization: Bearer API_KEY" \
--output interview.docx
Get File
Get information about a file
Request
HTTP Method | GET |
Endpoint | /file/{id} |
Parameters
Name | Required | Default | Description |
---|---|---|---|
id |
The file's id . |
Response
Name | Type | Description |
---|---|---|
id |
string |
Unique ID of the transcribed file |
name |
string |
The name of the transcribed file |
duration |
int |
The transcribed file's duration, in seconds |
created_at |
string |
ISO-8601 compatible date |
updated_at |
string |
ISO-8601 compatible date |
language |
string |
The file's transcription language code |
status |
string |
The file's transcription status. One of: waiting - the file has been uploaded and pending transcription transcribing - the file is being transcribed completed - the file was successfully transcribed failed - the file's last transcription attempt failed
|
Example
{
"id": "RwwHNc97",
"name": "interview.mp3",
"duration": 3600,
"created_at": "2021-02-18T13:16:32.000000Z",
"updated_at": "2021-02-18T13:16:32.000000Z",
"language": "en-us",
"status": "completed"
}
List Files
Get information about all your files
Request
HTTP Method | GET |
Endpoint | /files |
Query Parameters
Name | Required | Default | Description |
---|---|---|---|
page |
1 | Requested page number. |
Response
See Get File
response for file
properties' description
Example
{
"data": [
{
"id": "RwwHNc91",
"name": "interview.mp3",
"duration": 3600,
"created_at": "2021-02-18T13:16:32.000000Z",
"updated_at": "2021-02-18T13:16:32.000000Z",
"language": "en-us",
"status": "completed"
},
{
"id": "RwwHNc92",
"name": "interview2.mp3",
"duration": 3600,
"created_at": "2021-02-18T13:16:32.000000Z",
"updated_at": "2021-02-18T13:16:32.000000Z",
"language": "en-us",
"status": "completed"
},
{
"id": "RwwHNc93",
"name": "interview3.mp3",
"duration": 3600,
"created_at": "2021-02-18T13:16:32.000000Z",
"updated_at": "2021-02-18T13:16:32.000000Z",
"language": "en-us",
"status": "completed"
},
{
"id": "RwwHNc94",
"name": "interview4.mp3",
"duration": 3600,
"created_at": "2021-02-18T13:16:32.000000Z",
"updated_at": "2021-02-18T13:16:32.000000Z",
"language": "en-us",
"status": "completed"
},
{
"id": "RwwHNc95",
"name": "interview5.mp3",
"duration": 3600,
"created_at": "2021-02-18T13:16:32.000000Z",
"updated_at": "2021-02-18T13:16:32.000000Z",
"language": "en-us",
"status": "completed"
},
{
"id": "RwwHNc96",
"name": "interview6.mp3",
"duration": 3600,
"created_at": "2021-02-18T13:16:32.000000Z",
"updated_at": "2021-02-18T13:16:32.000000Z",
"language": "en-us",
"status": "completed"
},
{
"id": "RwwHNc97",
"name": "interview7.mp3",
"duration": 3600,
"created_at": "2021-02-18T13:16:32.000000Z",
"updated_at": "2021-02-18T13:16:32.000000Z",
"language": "en-us",
"status": "completed"
},
{
"id": "RwwHNc98",
"name": "interview8.mp3",
"duration": 3600,
"created_at": "2021-02-18T13:16:32.000000Z",
"updated_at": "2021-02-18T13:16:32.000000Z",
"language": "en-us",
"status": "completed"
},
{
"id": "RwwHNc99",
"name": "interview9.mp3",
"duration": 3600,
"created_at": "2021-02-18T13:16:32.000000Z",
"updated_at": "2021-02-18T13:16:32.000000Z",
"language": "en-us",
"status": "completed"
},
{
"id": "RwwHNc10",
"name": "interview10.mp3",
"duration": 3600,
"created_at": "2021-02-18T13:16:32.000000Z",
"updated_at": "2021-02-18T13:16:32.000000Z",
"language": "en-us",
"status": "waiting"
}
],
"links": {
"first": "https://api.ebby.co/v1/files?page=1",
"last": "https://api.ebby.co/v1/files?page=3",
"prev": null,
"next": "https://api.ebby.co/v1/files?page=2"
},
"meta": {
"current_page": 1,
"from": 1,
"last_page": 3,
"path": "https://api.ebby.co/v1/files",
"per_page": 10,
"to": 10,
"total": 27
}
}
Update File
Update a file's name
Request
HTTP Method | POST |
Endpoint | /file/update/{id} |
Parameters
Name | Required | Default | Description |
---|---|---|---|
id |
The file's id . |
||
name |
The file's new name. |
Example
curl -XPOST https://api.ebby.co/v1/file/update/RwwHNc97 \
-H "Authorization: Bearer API_KEY" \
-F name="Phone call with John"
Response
See Get File
response for file
properties' description
Delete File
Delete a file
Request
HTTP Method | DELETE |
Endpoint | /file/{id} |
Parameters
Name | Required | Default | Description |
---|---|---|---|
id |
The file's id . |
Example
curl -XDELETE https://api.ebby.co/v1/file/RwwHNc97 \
-H "Authorization: Bearer API_KEY"
Response
See Get File
response for file
properties' description
Get User
Get your user information
Request
HTTP Method | GET |
Endpoint | /user |
Example
curl -XGET https://api.ebby.co/v1/user \
-H "Authorization: Bearer API_KEY"
Response
Name | Type | Description |
---|---|---|
name |
string |
Your name |
email |
string |
Your email |
remaining_credit |
int |
Your remaining transcription credit, in seconds |
Example
{
"name": "John",
"email": "john@example.com",
"remaining_credit": 3600
}