Python
import requests
url = "https://api.wav.com/api/public/v1/audio_transcribe"
headers = {"Authorization": "<API_KEY>"}
payload = {
"language": "en",
"translate": True,
"transcription_format": "plain_text",
"word_timestamps": True
}
# Option 1: audio_url
payload["audio_url"] = "<YOUR_AUDIO_URL>"
response = requests.post(url, headers=headers, data=payload)
# Option 2: File Upload
# with open("audio.mp3", "rb") as f:
# files = {"audio_file": f}
# response = requests.post(url, headers=headers, data=payload, files=files)
print(response.json())curl --request POST \
--url https://api.wav.com/api/public/v1/audio_transcribe \
--header 'Authorization: <api-key>' \
--header 'Content-Type: multipart/form-data' \
--form 'audio_url=<string>' \
--form 'audio_file=<string>' \
--form language=en \
--form translate=false \
--form transcription_format=plain_text \
--form translation_format=plain_text \
--form word_timestamps=false \
--form webhook_url=http://your-webhook-url.com/callbackconst form = new FormData();
form.append('audio_url', '<string>');
form.append('audio_file', '<string>');
form.append('language', 'en');
form.append('translate', 'false');
form.append('transcription_format', 'plain_text');
form.append('translation_format', 'plain_text');
form.append('word_timestamps', 'false');
form.append('webhook_url', 'http://your-webhook-url.com/callback');
const options = {method: 'POST', headers: {Authorization: '<api-key>'}};
options.body = form;
fetch('https://api.wav.com/api/public/v1/audio_transcribe', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.wav.com/api/public/v1/audio_transcribe",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => "-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"audio_url\"\r\n\r\n<string>\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"audio_file\"\r\n\r\n<string>\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"language\"\r\n\r\nen\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"translate\"\r\n\r\nfalse\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"transcription_format\"\r\n\r\nplain_text\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"translation_format\"\r\n\r\nplain_text\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"word_timestamps\"\r\n\r\nfalse\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"webhook_url\"\r\n\r\nhttp://your-webhook-url.com/callback\r\n-----011000010111000001101001--",
CURLOPT_HTTPHEADER => [
"Authorization: <api-key>",
"Content-Type: multipart/form-data; boundary=---011000010111000001101001"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.wav.com/api/public/v1/audio_transcribe"
payload := strings.NewReader("-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"audio_url\"\r\n\r\n<string>\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"audio_file\"\r\n\r\n<string>\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"language\"\r\n\r\nen\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"translate\"\r\n\r\nfalse\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"transcription_format\"\r\n\r\nplain_text\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"translation_format\"\r\n\r\nplain_text\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"word_timestamps\"\r\n\r\nfalse\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"webhook_url\"\r\n\r\nhttp://your-webhook-url.com/callback\r\n-----011000010111000001101001--")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "<api-key>")
req.Header.Add("Content-Type", "multipart/form-data; boundary=---011000010111000001101001")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://api.wav.com/api/public/v1/audio_transcribe")
.header("Authorization", "<api-key>")
.header("Content-Type", "multipart/form-data; boundary=---011000010111000001101001")
.body("-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"audio_url\"\r\n\r\n<string>\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"audio_file\"\r\n\r\n<string>\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"language\"\r\n\r\nen\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"translate\"\r\n\r\nfalse\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"transcription_format\"\r\n\r\nplain_text\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"translation_format\"\r\n\r\nplain_text\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"word_timestamps\"\r\n\r\nfalse\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"webhook_url\"\r\n\r\nhttp://your-webhook-url.com/callback\r\n-----011000010111000001101001--")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.wav.com/api/public/v1/audio_transcribe")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = '<api-key>'
request["Content-Type"] = 'multipart/form-data; boundary=---011000010111000001101001'
request.body = "-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"audio_url\"\r\n\r\n<string>\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"audio_file\"\r\n\r\n<string>\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"language\"\r\n\r\nen\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"translate\"\r\n\r\nfalse\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"transcription_format\"\r\n\r\nplain_text\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"translation_format\"\r\n\r\nplain_text\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"word_timestamps\"\r\n\r\nfalse\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"webhook_url\"\r\n\r\nhttp://your-webhook-url.com/callback\r\n-----011000010111000001101001--"
response = http.request(request)
puts response.read_body{
"success": true,
"task_id": "cade1dea-a9fb-49d3-a5b2-52f786ea5ad3",
"conversion_id": "1c5a2543-5b99-499c-8bb4-28424497e60f",
"eta": 46,
"credit_estimate": 0.04,
"message": "",
"status": "IN_QUEUE"
}{
"success": false,
"error_code": "INSUFFICIENT_CREDITS",
"message": ""
}{
"success": false,
"error_code": "UNPROCESSABLE_CONTENT",
"message": ""
}{
"success": false,
"error_code": "INTERNAL_SERVER_ERROR",
"message": ""
}Features
Audio Transcribe
Processes an audio file to generate a transcription of the spoken content with support for language detection, translation, and multiple output formats.
POST
/
v1
/
audio_transcribe
Python
import requests
url = "https://api.wav.com/api/public/v1/audio_transcribe"
headers = {"Authorization": "<API_KEY>"}
payload = {
"language": "en",
"translate": True,
"transcription_format": "plain_text",
"word_timestamps": True
}
# Option 1: audio_url
payload["audio_url"] = "<YOUR_AUDIO_URL>"
response = requests.post(url, headers=headers, data=payload)
# Option 2: File Upload
# with open("audio.mp3", "rb") as f:
# files = {"audio_file": f}
# response = requests.post(url, headers=headers, data=payload, files=files)
print(response.json())curl --request POST \
--url https://api.wav.com/api/public/v1/audio_transcribe \
--header 'Authorization: <api-key>' \
--header 'Content-Type: multipart/form-data' \
--form 'audio_url=<string>' \
--form 'audio_file=<string>' \
--form language=en \
--form translate=false \
--form transcription_format=plain_text \
--form translation_format=plain_text \
--form word_timestamps=false \
--form webhook_url=http://your-webhook-url.com/callbackconst form = new FormData();
form.append('audio_url', '<string>');
form.append('audio_file', '<string>');
form.append('language', 'en');
form.append('translate', 'false');
form.append('transcription_format', 'plain_text');
form.append('translation_format', 'plain_text');
form.append('word_timestamps', 'false');
form.append('webhook_url', 'http://your-webhook-url.com/callback');
const options = {method: 'POST', headers: {Authorization: '<api-key>'}};
options.body = form;
fetch('https://api.wav.com/api/public/v1/audio_transcribe', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.wav.com/api/public/v1/audio_transcribe",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => "-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"audio_url\"\r\n\r\n<string>\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"audio_file\"\r\n\r\n<string>\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"language\"\r\n\r\nen\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"translate\"\r\n\r\nfalse\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"transcription_format\"\r\n\r\nplain_text\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"translation_format\"\r\n\r\nplain_text\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"word_timestamps\"\r\n\r\nfalse\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"webhook_url\"\r\n\r\nhttp://your-webhook-url.com/callback\r\n-----011000010111000001101001--",
CURLOPT_HTTPHEADER => [
"Authorization: <api-key>",
"Content-Type: multipart/form-data; boundary=---011000010111000001101001"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.wav.com/api/public/v1/audio_transcribe"
payload := strings.NewReader("-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"audio_url\"\r\n\r\n<string>\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"audio_file\"\r\n\r\n<string>\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"language\"\r\n\r\nen\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"translate\"\r\n\r\nfalse\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"transcription_format\"\r\n\r\nplain_text\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"translation_format\"\r\n\r\nplain_text\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"word_timestamps\"\r\n\r\nfalse\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"webhook_url\"\r\n\r\nhttp://your-webhook-url.com/callback\r\n-----011000010111000001101001--")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "<api-key>")
req.Header.Add("Content-Type", "multipart/form-data; boundary=---011000010111000001101001")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://api.wav.com/api/public/v1/audio_transcribe")
.header("Authorization", "<api-key>")
.header("Content-Type", "multipart/form-data; boundary=---011000010111000001101001")
.body("-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"audio_url\"\r\n\r\n<string>\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"audio_file\"\r\n\r\n<string>\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"language\"\r\n\r\nen\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"translate\"\r\n\r\nfalse\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"transcription_format\"\r\n\r\nplain_text\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"translation_format\"\r\n\r\nplain_text\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"word_timestamps\"\r\n\r\nfalse\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"webhook_url\"\r\n\r\nhttp://your-webhook-url.com/callback\r\n-----011000010111000001101001--")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.wav.com/api/public/v1/audio_transcribe")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = '<api-key>'
request["Content-Type"] = 'multipart/form-data; boundary=---011000010111000001101001'
request.body = "-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"audio_url\"\r\n\r\n<string>\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"audio_file\"\r\n\r\n<string>\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"language\"\r\n\r\nen\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"translate\"\r\n\r\nfalse\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"transcription_format\"\r\n\r\nplain_text\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"translation_format\"\r\n\r\nplain_text\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"word_timestamps\"\r\n\r\nfalse\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"webhook_url\"\r\n\r\nhttp://your-webhook-url.com/callback\r\n-----011000010111000001101001--"
response = http.request(request)
puts response.read_body{
"success": true,
"task_id": "cade1dea-a9fb-49d3-a5b2-52f786ea5ad3",
"conversion_id": "1c5a2543-5b99-499c-8bb4-28424497e60f",
"eta": 46,
"credit_estimate": 0.04,
"message": "",
"status": "IN_QUEUE"
}{
"success": false,
"error_code": "INSUFFICIENT_CREDITS",
"message": ""
}{
"success": false,
"error_code": "UNPROCESSABLE_CONTENT",
"message": ""
}{
"success": false,
"error_code": "INTERNAL_SERVER_ERROR",
"message": ""
}Convert your audio recordings into high-accuracy text using AI.
Audio Transcribe enables seamless transcription for podcasts, interviews, lectures, meetings, and more.
Use this endpoint to transcribe audio recordings into text.
- Fast and accurate speech-to-text conversion
- Supports multiple languages
- Instant or asynchronous transcription with webhook support
Endpoint
POST /v1/audio_transcribe
Sample Output
Transcript Output of Charlie Puth and Wiz Khalifa’s See You Again:“It’s been a long day without you, my friend, and I’ll tell you all about it when I see you again. We’ve come a long way from where we began. Oh, I’ll tell you all about it when I see you again, when I see you again. Damn, you know, all the planes we flew, good things we’ve been through. And I’ll be standing right here talking to you about another pap. I know we love to hit the road and laugh, but something told me that it wouldn’t last. Had to switch up, looking things different, see the bigger picture. Those were the days, hard work for ever pays. Now I see you in a better place. See you in a better place. Oh, after we not talk about family, we family is all that we got. Everything I would do, you would stand in there by my side. And now you’ve got me with me for the last ride. It’s been a long day without you, my friend, and I’ll tell you all about it when I see you again. We’ve come a long way from where we began. Oh, I’ll tell you all about it when I see you again, when I see you again. First you both go out your way and the vibe is feeling stronger. It was small, turned to a friendship, but friendship turned to a bond. And that bond will never be broken. The love will never get lost. And when brotherhood comes first, then the land will never be crossed. It’s never stood on our own when that land had to be drawn. And that land is where we reach. So remember me when I’m gone. How can we not talk about family, we family is all that we got. Everything I would do, you would stand in there by my side. And now you’ve got me with me for the last ride. Let the light go on your way. Hold every memory as you go. And every road you take will always be true. Oh, it’s been a long day without you, my friend. And I’ll tell you all about it when I see you again. We’ve come a long way from where we began. Oh, I’ll tell you all about it when I see you again. When I see you again. Oh, I’ll tell you all about it when I see you again. Oh, I’ll tell you all about it when I see you again.”
Try it Yourself
Visit the Audio Transcribe Endpoint Explorer to upload audio files and get instant transcripts.Request Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
audio_url | String | Yes | URL to the audio file you want to transcribe. |
audio_file | File | Optional | Upload the audio file directly. Required if audio_url is not provided. |
language | String | Optional | Language code (e.g., en, es, fr) for targeted accuracy |
webhook_url | String | Optional | Webhook URL to receive the transcription asynchronously |
Max input audio length: 8 minutes. See Audio Length Limits.
content-type: multipart/form-data
Sample Request
Python
import requests
url = "https://api.wav.com/api/public/v1/audio_transcribe"
headers = {"Authorization": "<API_KEY>"}
payload = {
"language": "en",
"translate": True,
"transcription_format": "plain_text",
"word_timestamps": True
}
# Option 1: audio_url
payload["audio_url"] = "<YOUR_AUDIO_URL>"
response = requests.post(url, headers=headers, data=payload)
# Option 2: File Upload
# with open("audio.mp3", "rb") as f:
# files = {"audio_file": f}
# response = requests.post(url, headers=headers, data=payload, files=files)
print(response.json())
Sample Response
Success (200 OK)
{
"success":true,
"task_id":"cade1dea-a9fb-49d3-a5b2-52f786ea5ad3",
"conversion_id":"1c5a2543-5b99-499c-8bb4-28424497e60f",
"eta":46,
"credit_estimate":0.04,
"message":"",
"status":"IN_QUEUE"
}
Webhook Response
When transcription completes, your webhook will receive:{
"success": true,
"conversion_type": "Audio Transcription",
"task_id": "cade1dea-a9fb-49d3-a5b2-52f786ea5ad3",
"conversion_id": "1c5a2543-5b99-499c-8bb4-28424497e60f",
"transcription": "It's been a long day without you, my friend, and I'll tell you all about it when I see you again. We've come a long way from where we began. Oh, I'll tell you all about it when I see you again, when I see you again. Damn, you know, all the planes we flew, good things we've been through. And I'll be standing right here talking to you about another pap. I know we love to hit the road and laugh, but something told me that it wouldn't last.",
"translation": null,
"detected_language": "en",
"title": "Audio Transcription",
"word_timestamps": [
{
"index": 0,
"text": "It's",
"start": 0,
"end": 420
},
{
"index": 1,
"text": "been",
"start": 420,
"end": 550
},
{
"index": 2,
"text": "a",
"start": 550,
"end": 680
},
{
"index": 3,
"text": "long",
"start": 680,
"end": 1010
}
]
}
Payload and Request Formation
Authorizations
Body
multipart/form-data
- Option 1
- Option 2
Input audio URL (supported format: YouTube URL).
Audio file to upload and process directly.
Language spoken in the audio (empty for auto-detection).
Example:
"en"
Whether to translate the transcription to English.
Example:
false
Format of the transcribed output.
Available options:
plain_text, formatted_text, srt, vtt Example:
"plain_text"
Format of the translated output (currently unused).
Available options:
plain_text, formatted_text, srt, vtt Example:
"plain_text"
Whether to include word-level timestamps.
Example:
false
Callback URL for async processing results.
Example:
"http://your-webhook-url.com/callback"

