Audio Conversion API
Convert audio between any of 23 supported formats — MP3, WAV, OGG, AAC, FLAC, M4A, WMA, OPUS, AIFF, AMR, AU, CAF, AC3, DTS, GSM, IRCAM, MP2, TTA, VOC, W64, WV, SPX, and RM. Like video, this is an async, submit-then-poll endpoint rather than one blocking request — same ffmpeg engine behind TransConvert's website converter.
curl -X POST \ .../api/v1/convert-async.php \ -H "Authorization: Bearer ..." \ -F "category=audio" \ -F "target=MP3" \ -F "file=@track.wav" # { "job_id": "job_...", "status": "queued" }
Video- und Audiokonvertierungen können mehrere Minuten dauern — zu lange, um eine einzelne synchrone Anfrage offen zu halten. Dafür wird statt des obigen Endpunkts ein Submit-dann-Poll-Ablauf verwendet: Sie senden eine Datei, erhalten sofort eine job_id zurück und fragen dann deren Status ab, bis der Vorgang abgeschlossen ist.
Auftrag einreichen
https://transconvert.com/api/v1/convert-async.php
| Field | Description |
|---|---|
Authorization | Required. "Bearer tc_live_...". |
category | Set to "audio". |
target | Required. Output format code: "MP3", "WAV", "OGG", "AAC", "FLAC", "M4A", "WMA", "OPUS", "AIFF", "AMR", "AU", "CAF", "AC3", "DTS", "GSM", "IRCAM", "MP2", "TTA", "VOC", "W64", "WV", "SPX", or "RM". |
file | Required. The audio file. |
curl -X POST \ https://transconvert.com/api/v1/convert-async.php \ -H "Authorization: Bearer tc_live_your_key_here" \ -F "category=audio" \ -F "target=MP3" \ -F "file=@track.wav" \ -o output.mp3
<?php $ch = curl_init('https://transconvert.com/api/v1/convert-async.php'); curl_setopt_array($ch, [ CURLOPT_POST => true, CURLOPT_RETURNTRANSFER => true, CURLOPT_HTTPHEADER => ['Authorization: Bearer tc_live_your_key_here'], CURLOPT_POSTFIELDS => [ 'category' => 'audio', 'target' => 'MP3', 'file' => new CURLFile('track.wav'), ], ]); $response = curl_exec($ch); $status = curl_getinfo($ch, CURLINFO_HTTP_CODE); if ($status === 200) { file_put_contents('output.mp3', $response); } else { $error = json_decode($response, true); echo $error['error']['message']; }
const form = new FormData(); form.append('category', 'audio'); form.append('target', 'MP3'); form.append('file', new Blob([fs.readFileSync('track.wav')]), 'track.wav'); const res = await fetch('https://transconvert.com/api/v1/convert-async.php', { method: 'POST', headers: { Authorization: 'Bearer tc_live_your_key_here' }, body: form, }); if (res.ok) { fs.writeFileSync('output.mp3', Buffer.from(await res.arrayBuffer())); } else { const { error } = await res.json(); console.error(error.message); }
import requests with open('track.wav', 'rb') as f: response = requests.post( 'https://transconvert.com/api/v1/convert-async.php', headers={'Authorization': 'Bearer tc_live_your_key_here'}, data={'category': 'audio', 'target': 'MP3'}, files={'file': f}, ) if response.status_code == 200: with open('output.mp3', 'wb') as out: out.write(response.content) else: print(response.json()['error']['message'])
# gem install multipart-post require 'net/http' require 'net/http/post/multipart' url = URI('https://transconvert.com/api/v1/convert-async.php') File.open('track.wav') do |file| req = Net::HTTP::Post::Multipart.new url, 'category' => 'audio', 'target' => 'MP3', 'file' => UploadIO.new(file, 'application/octet-stream', 'track.wav') req['Authorization'] = 'Bearer tc_live_your_key_here' res = Net::HTTP.start(url.host, url.port, use_ssl: true) do |http| http.request(req) end if res.code == '200' File.write('output.mp3', res.body) else puts JSON.parse(res.body)['error']['message'] end end
// Gradle: implementation("com.squareup.okhttp3:okhttp:4.+") OkHttpClient client = new OkHttpClient(); RequestBody body = new MultipartBody.Builder() .setType(MultipartBody.FORM) .addFormDataPart("category", "audio") .addFormDataPart("target", "MP3") .addFormDataPart("file", "track.wav", RequestBody.create(new File("track.wav"), MediaType.parse("application/octet-stream"))) .build(); Request request = new Request.Builder() .url("https://transconvert.com/api/v1/convert-async.php") .header("Authorization", "Bearer tc_live_your_key_here") .post(body) .build(); try (Response response = client.newCall(request).execute()) { if (response.isSuccessful()) { Files.write(Paths.get("output.mp3"), response.body().bytes()); } else { System.err.println(response.body().string()); } }
Status abfragen
Fragen Sie diesen Endpunkt alle paar Sekunden mit der erhaltenen job_id ab. „status" ist einer von queued, processing, completed oder failed.
https://transconvert.com/api/v1/job-status.php?job_id=job_...
curl -H "Authorization: Bearer tc_live_your_key_here" \ https://transconvert.com/api/v1/job-status.php?job_id=job_...
Ergebnis herunterladen
Sobald der Status „completed" ist, enthält die Antwort eine download_url — dieselbe Status-URL mit angehängtem &download=1. Ruft man sie auf, werden die Rohdaten der konvertierten Datei gestreamt, mit denselben Headern wie bei jedem anderen Endpunkt auf dieser Seite. Das Ergebnis wird in dem Moment gelöscht, in dem es heruntergeladen wird, oder automatisch nach einem kurzen Aufbewahrungszeitraum, falls es nie heruntergeladen wird.
scheduleAuftragsergebnisse werden sofort nach dem Herunterladen gelöscht oder automatisch nach einem kurzen Aufbewahrungszeitraum, falls sie nie heruntergeladen werden — laden Sie sie zeitnah herunter.
Fehler
Jeder Fehler liefert einen JSON-Fehlerumschlag mit einem „code", anhand dessen Ihr Code Fallunterscheidungen treffen kann, sowie einer lesbaren „message". Manche Fehler enthalten zusätzliche Felder (quota_exceeded enthält beispielsweise „limit" und „used").
| Status & code | When it happens |
|---|---|
401 missing_key | Es wurde kein Authorization-Header gesendet. |
401 invalid_key | Der Schlüssel existiert nicht oder wurde widerrufen. |
403 account_suspended | Das Konto, dem dieser Schlüssel gehört, ist gesperrt. |
403 plan_required | Das Konto nutzt den kostenlosen Plan – für API-Zugriff ist Basic, Lite, Pro oder Team erforderlich. |
400 invalid_category | „category" war weder „image" noch „document". |
400 invalid_target | „target" ist kein unterstütztes Ausgabeformat für diese Kategorie. |
400 no_file | Es wurde keine Datei gesendet, oder der Upload ist fehlgeschlagen – das Feld muss „file" heißen. |
413 file_too_large | Die Datei überschreitet die maximale Upload-Größe Ihres Plans. |
429 quota_exceeded | Das monatliche Kontingent an Umwandlungsminuten des Plans ist aufgebraucht. Es wird zu Beginn des nächsten Kalendermonats zurückgesetzt. |
429 concurrency_limit | Für dieses Konto laufen bereits zu viele Konvertierungen gleichzeitig (gemeinsam mit der Website genutzt) – warten Sie, bis eine davon abgeschlossen ist, und versuchen Sie es erneut. |
404 job_not_found | Für dieses Konto existiert kein Auftrag mit dieser ID (wird auch für die job_id eines anderen Kontos zurückgegeben — deren Existenz wird nie preisgegeben). |
410 result_gone | Der Auftrag wurde abgeschlossen, aber sein Ergebnis wurde inzwischen gelöscht (Ergebnisse werden sofort nach dem Herunterladen oder automatisch nach einem kurzen Aufbewahrungszeitraum entfernt). |
400/415/422/500/503 conversion_failed | Die Datei selbst konnte nicht konvertiert werden – „message" erklärt den Grund. Der Statuscode hängt vom Grund ab: 400/415/422 bedeuten, dass die Datei oder das Zielformat unabhängig von der Anzahl der Versuche nicht funktionieren wird; 500/503 bedeuten ein serverseitiges Problem, wobei sich bei 503 insbesondere ein kurzer erneuter Versuch lohnt. |
Supported formats
MP3, WAV, OGG, AAC, FLAC, M4A, WMA, OPUS, AIFF, AMR, AU, CAF, AC3, DTS, GSM, IRCAM, MP2, TTA, VOC, W64, WV, SPX, RM