curl --request POST \
--url https://api.recoupable.dev/api/transcribe \
--header 'Content-Type: application/json' \
--header 'x-api-key: <api-key>' \
--data '
{
"audio_url": "https://example.com/song.mp3",
"artist_account_id": "550e8400-e29b-41d4-a716-446655440001",
"account_id": "550e8400-e29b-41d4-a716-446655440000",
"title": "My Song",
"include_timestamps": false
}
'import requests
url = "https://api.recoupable.dev/api/transcribe"
payload = {
"audio_url": "https://example.com/song.mp3",
"artist_account_id": "550e8400-e29b-41d4-a716-446655440001",
"account_id": "550e8400-e29b-41d4-a716-446655440000",
"title": "My Song",
"include_timestamps": False
}
headers = {
"x-api-key": "<api-key>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {'x-api-key': '<api-key>', 'Content-Type': 'application/json'},
body: JSON.stringify({
audio_url: 'https://example.com/song.mp3',
artist_account_id: '550e8400-e29b-41d4-a716-446655440001',
account_id: '550e8400-e29b-41d4-a716-446655440000',
title: 'My Song',
include_timestamps: false
})
};
fetch('https://api.recoupable.dev/api/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.recoupable.dev/api/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 => json_encode([
'audio_url' => 'https://example.com/song.mp3',
'artist_account_id' => '550e8400-e29b-41d4-a716-446655440001',
'account_id' => '550e8400-e29b-41d4-a716-446655440000',
'title' => 'My Song',
'include_timestamps' => false
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json",
"x-api-key: <api-key>"
],
]);
$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.recoupable.dev/api/transcribe"
payload := strings.NewReader("{\n \"audio_url\": \"https://example.com/song.mp3\",\n \"artist_account_id\": \"550e8400-e29b-41d4-a716-446655440001\",\n \"account_id\": \"550e8400-e29b-41d4-a716-446655440000\",\n \"title\": \"My Song\",\n \"include_timestamps\": false\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("x-api-key", "<api-key>")
req.Header.Add("Content-Type", "application/json")
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.recoupable.dev/api/transcribe")
.header("x-api-key", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"audio_url\": \"https://example.com/song.mp3\",\n \"artist_account_id\": \"550e8400-e29b-41d4-a716-446655440001\",\n \"account_id\": \"550e8400-e29b-41d4-a716-446655440000\",\n \"title\": \"My Song\",\n \"include_timestamps\": false\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.recoupable.dev/api/transcribe")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["x-api-key"] = '<api-key>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"audio_url\": \"https://example.com/song.mp3\",\n \"artist_account_id\": \"550e8400-e29b-41d4-a716-446655440001\",\n \"account_id\": \"550e8400-e29b-41d4-a716-446655440000\",\n \"title\": \"My Song\",\n \"include_timestamps\": false\n}"
response = http.request(request)
puts response.read_body{
"success": true,
"audioFile": {
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"fileName": "<string>",
"storageKey": "<string>"
},
"transcriptFile": {
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"fileName": "<string>",
"storageKey": "<string>"
},
"text": "<string>",
"language": "<string>"
}{
"error": "<string>"
}{
"error": "<string>"
}{
"error": "<string>"
}{
"error": "<string>"
}{
"error": "<string>"
}{
"error": "<string>"
}Transcribe Audio
Transcribe audio files using OpenAI Whisper. The API saves both the original audio file and the generated markdown transcript to the customer’s files in Supabase Storage. The owner account is derived from your credentials; you must have access to the specified artist_account_id.
curl --request POST \
--url https://api.recoupable.dev/api/transcribe \
--header 'Content-Type: application/json' \
--header 'x-api-key: <api-key>' \
--data '
{
"audio_url": "https://example.com/song.mp3",
"artist_account_id": "550e8400-e29b-41d4-a716-446655440001",
"account_id": "550e8400-e29b-41d4-a716-446655440000",
"title": "My Song",
"include_timestamps": false
}
'import requests
url = "https://api.recoupable.dev/api/transcribe"
payload = {
"audio_url": "https://example.com/song.mp3",
"artist_account_id": "550e8400-e29b-41d4-a716-446655440001",
"account_id": "550e8400-e29b-41d4-a716-446655440000",
"title": "My Song",
"include_timestamps": False
}
headers = {
"x-api-key": "<api-key>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {'x-api-key': '<api-key>', 'Content-Type': 'application/json'},
body: JSON.stringify({
audio_url: 'https://example.com/song.mp3',
artist_account_id: '550e8400-e29b-41d4-a716-446655440001',
account_id: '550e8400-e29b-41d4-a716-446655440000',
title: 'My Song',
include_timestamps: false
})
};
fetch('https://api.recoupable.dev/api/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.recoupable.dev/api/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 => json_encode([
'audio_url' => 'https://example.com/song.mp3',
'artist_account_id' => '550e8400-e29b-41d4-a716-446655440001',
'account_id' => '550e8400-e29b-41d4-a716-446655440000',
'title' => 'My Song',
'include_timestamps' => false
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json",
"x-api-key: <api-key>"
],
]);
$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.recoupable.dev/api/transcribe"
payload := strings.NewReader("{\n \"audio_url\": \"https://example.com/song.mp3\",\n \"artist_account_id\": \"550e8400-e29b-41d4-a716-446655440001\",\n \"account_id\": \"550e8400-e29b-41d4-a716-446655440000\",\n \"title\": \"My Song\",\n \"include_timestamps\": false\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("x-api-key", "<api-key>")
req.Header.Add("Content-Type", "application/json")
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.recoupable.dev/api/transcribe")
.header("x-api-key", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"audio_url\": \"https://example.com/song.mp3\",\n \"artist_account_id\": \"550e8400-e29b-41d4-a716-446655440001\",\n \"account_id\": \"550e8400-e29b-41d4-a716-446655440000\",\n \"title\": \"My Song\",\n \"include_timestamps\": false\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.recoupable.dev/api/transcribe")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["x-api-key"] = '<api-key>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"audio_url\": \"https://example.com/song.mp3\",\n \"artist_account_id\": \"550e8400-e29b-41d4-a716-446655440001\",\n \"account_id\": \"550e8400-e29b-41d4-a716-446655440000\",\n \"title\": \"My Song\",\n \"include_timestamps\": false\n}"
response = http.request(request)
puts response.read_body{
"success": true,
"audioFile": {
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"fileName": "<string>",
"storageKey": "<string>"
},
"transcriptFile": {
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"fileName": "<string>",
"storageKey": "<string>"
},
"text": "<string>",
"language": "<string>"
}{
"error": "<string>"
}{
"error": "<string>"
}{
"error": "<string>"
}{
"error": "<string>"
}{
"error": "<string>"
}{
"error": "<string>"
}Authorizations
Your Recoup API key. Learn more.
Body
Audio transcription request
Public URL to the audio file (mp3, wav, m4a, webm)
"https://example.com/song.mp3"
Artist account ID for file storage
"550e8400-e29b-41d4-a716-446655440001"
Deprecated and ignored. The owner account is derived from your credentials. Sending this field is harmless but no longer affects attribution.
"550e8400-e29b-41d4-a716-446655440000"
Optional title for the audio and transcription files
"My Song"
Whether to include timestamps in the markdown transcript
Response
Audio transcribed successfully
Whether the transcription was successful
Information about the saved audio file
Show child attributes
Show child attributes
Information about the saved transcript file
Show child attributes
Show child attributes
The full transcription text
Detected language code (e.g., 'en', 'es', 'fr')
Was this page helpful?
