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" }
Konversi video dan audio bisa berjalan selama beberapa menit — terlalu lama untuk mempertahankan satu permintaan sinkron tetap terbuka — sehingga menggunakan alur submit-lalu-poll, bukan endpoint di atas. Kirim sebuah file, dapatkan job_id sebagai balasan langsung, lalu poll statusnya sampai selesai.
Kirim tugas
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()); } }
Poll status
Poll endpoint ini setiap beberapa detik menggunakan job_id yang Anda terima. "status" berupa salah satu dari queued, processing, completed, atau 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_...
Unduh hasilnya
Setelah status menjadi "completed", respons menyertakan download_url — URL status yang sama dengan tambahan &download=1. Meminta URL ini akan menstream byte mentah file hasil konversi, dengan header yang sama seperti endpoint lain di halaman ini. Hasil akan dihapus begitu diunduh, atau otomatis dihapus setelah periode penyimpanan singkat jika tidak pernah diunduh.
scheduleHasil tugas dihapus segera setelah diunduh, atau otomatis dihapus setelah periode penyimpanan singkat jika tidak pernah diunduh — segera unduh.
Kesalahan
Setiap kegagalan mengembalikan bungkus kesalahan JSON berisi "code" yang dapat digunakan kode Anda untuk pencabangan logika, ditambah "message" yang mudah dibaca manusia. Beberapa kesalahan menyertakan kolom tambahan (misalnya, quota_exceeded menyertakan "limit" dan "used").
| Status & code | When it happens |
|---|---|
401 missing_key | Header Authorization tidak dikirim. |
401 invalid_key | Kunci tidak ada, atau sudah dicabut. |
403 account_suspended | Akun pemilik kunci ini telah ditangguhkan. |
403 plan_required | Akun berada di paket Gratis — akses API memerlukan paket Basic, Lite, Pro, atau Tim. |
400 invalid_category | "category" bukan "image" atau "document". |
400 invalid_target | "target" bukan format keluaran yang didukung untuk kategori tersebut. |
400 no_file | Tidak ada file yang dikirim, atau unggahan gagal — kolom harus diberi nama "file". |
413 file_too_large | Ukuran file melebihi batas unggah maksimum paket Anda. |
429 quota_exceeded | Jatah menit konversi bulanan paket Anda telah habis. Akan diatur ulang di awal bulan kalender berikutnya. |
429 concurrency_limit | Terlalu banyak konversi yang berjalan bersamaan untuk akun ini (dibagi dengan situs web) — tunggu salah satunya selesai lalu coba lagi. |
404 job_not_found | Tidak ada tugas dengan id tersebut untuk akun ini (juga dikembalikan untuk job_id milik akun lain — keberadaannya tidak pernah diungkapkan). |
410 result_gone | Tugas telah selesai, tetapi hasilnya sudah dihapus (hasil dihapus segera setelah diunduh, atau otomatis setelah periode penyimpanan singkat). |
400/415/422/500/503 conversion_failed | File itu sendiri tidak dapat dikonversi — "message" menjelaskan alasannya. Kode status bervariasi tergantung alasannya: 400/415/422 berarti file atau target tidak akan pernah berhasil sebanyak apa pun Anda mencoba ulang; 500/503 berarti ada masalah di sisi server, dan khusus 503 layak dicoba ulang sebentar lagi. |
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