This documentation is valid for the following list of our models:
#g1_whisper-small
Note:
Previously, our STT models operated via a single API call to POST https://api.aimlapi.com/v1/stt. You can view the API schema here.
Now, we are switching to a new two-step process:
POST https://api.aimlapi.com/v1/stt/create – Creates and submits a speech-to-text processing task to the server. This method accepts the same parameters as the old version but returns a generation_id instead of the final transcript.
GET https://api.aimlapi.com/v1/stt/{generation_id} – Retrieves the generated transcript from the server using the generation_id obtained from the previous API call.
This approach helps prevent generation failures due to timeouts.
We've prepared a couple of examples below to make the transition to the new STT API easier for you.
Model Overview
The Whisper models are primarily for AI research, focusing on model robustness, generalization, and biases, and are also effective for English speech recognition. The use of Whisper models for transcribing non-consensual recordings or in high-risk decision-making contexts is strongly discouraged due to potential inaccuracies and ethical concerns.
The models are trained using 680,000 hours of audio and corresponding transcripts from the internet, with 65% being English audio and transcripts, 18% non-English audio with English transcripts, and 17% non-English audio with matching non-English transcripts, covering 98 languages in total.
Setup your API Key
If you don’t have an API key for the AI/ML API yet, feel free to use our Quickstart guide.
Submit a request
API Schema
Creating and sending a speech-to-text conversion task to the server
Requesting the result of the task from the server using the generation_id
Quick Code Examples
Let's use the #g1_whisper-small model to transcribe the following audio fragment:
Example #1: Processing a Speech Audio File via URL
import time
import requests
base_url = "https://api.aimlapi.com/v1"
# Insert your AIML API Key instead of <YOUR_AIMLAPI_KEY>:
api_key = "<YOUR_AIMLAPI_KEY>"
# Creating and sending a speech-to-text conversion task to the server
def create_stt():
url = f"{base_url}/stt/create"
headers = {
"Authorization": f"Bearer {api_key}",
}
data = {
"model": "#g1_whisper-small",
"url": "https://audio-samples.github.io/samples/mp3/blizzard_primed/sample-0.mp3"
}
response = requests.post(url, json=data, headers=headers)
if response.status_code >= 400:
print(f"Error: {response.status_code} - {response.text}")
else:
response_data = response.json()
print(response_data)
return response_data
# Requesting the result of the task from the server using the generation_id
def get_stt(gen_id):
url = f"{base_url}/stt/{gen_id}"
headers = {
"Authorization": f"Bearer {api_key}",
}
response = requests.get(url, headers=headers)
return response.json()
# First, start the generation, then repeatedly request the result from the server every 10 seconds.
def main():
stt_response = create_stt()
gen_id = stt_response.get("generation_id")
if gen_id:
start_time = time.time()
timeout = 600
while time.time() - start_time < timeout:
response_data = get_stt(gen_id)
if response_data is None:
print("Error: No response from API")
break
status = response_data.get("status")
if status == "waiting" or status == "active":
("Still waiting... Checking again in 10 seconds.")
time.sleep(10)
else:
print("Processing complete:/n", response_data["result"]['results']["channels"][0]["alternatives"][0]["transcript"])
return response_data
print("Timeout reached. Stopping.")
return None
if __name__ == "__main__":
main()
Response
{'generation_id': '88a282a7-6f90-4532-a2a2-882c9d20d08e'}
Processing complete:
He doesn't belong to you, and I don't see how you have anything to do with what is be his power yet. He's he personed that from this stage to you. Be fire-
Example #2: Processing a Speech Audio File via File Path
import time
import requests
base_url = "https://api.aimlapi.com/v1"
# Insert your AIML API Key instead of <YOUR_AIMLAPI_KEY>:
api_key = "<YOUR_AIMLAPI_KEY>"
# Creating and sending a speech-to-text conversion task to the server
def create_stt():
url = f"{base_url}/stt/create"
headers = {
"Authorization": f"Bearer {api_key}",
}
data = {
"model": "#g1_whisper-small",
}
with open("stt-sample.mp3", "rb") as file:
files = {"audio": ("sample.mp3", file, "audio/mpeg")}
response = requests.post(url, data=data, headers=headers, files=files)
if response.status_code >= 400:
print(f"Error: {response.status_code} - {response.text}")
else:
response_data = response.json()
print(response_data)
return response_data
# Requesting the result of the task from the server using the generation_id
def get_stt(gen_id):
url = f"{base_url}/stt/{gen_id}"
headers = {
"Authorization": f"Bearer {api_key}",
}
response = requests.get(url, headers=headers)
return response.json()
# First, start the generation, then repeatedly request the result from the server every 10 seconds.
def main():
stt_response = create_stt()
gen_id = stt_response.get("generation_id")
if gen_id:
start_time = time.time()
timeout = 600
while time.time() - start_time < timeout:
response_data = get_stt(gen_id)
if response_data is None:
print("Error: No response from API")
break
status = response_data.get("status")
if status == "waiting" or status == "active":
("Still waiting... Checking again in 10 seconds.")
time.sleep(10)
else:
print("Processing complete:/n", response_data["result"]['results']["channels"][0]["alternatives"][0]["transcript"])
return response_data
print("Timeout reached. Stopping.")
return None
if __name__ == "__main__":
main()
Response
{'generation_id': '88a282a7-6f90-4532-a2a2-882c9d20d08e'}
Processing complete:
He doesn't belong to you, and I don't see how you have anything to do with what is be his power yet. He's he personed that from this stage to you. Be fire-