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" }
Penukaran video dan audio boleh mengambil masa beberapa minit — terlalu lama untuk mengekalkan satu permintaan segerak terbuka — jadi ia menggunakan aliran hantar-kemudian-tinjau, bukan titik akhir di atas. Hantar fail, dapatkan job_id serta-merta, kemudian tinjau statusnya sehingga selesai.
Hantar 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()); } }
Tinjau status
Tinjau ini setiap beberapa saat menggunakan job_id yang diterima. "status" ialah salah satu daripada 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_...
Muat turun hasil
Apabila status ialah "completed", respons menyertakan download_url — URL status yang sama dengan &download=1 ditambah di hujungnya. Memintanya kemudian menstrim bait mentah fail yang telah ditukar, dengan header yang sama seperti setiap titik akhir lain pada halaman ini. Hasil akan dipadam sebaik sahaja dimuat turun, atau dipadam secara automatik selepas tempoh penyimpanan yang singkat jika tidak pernah dimuat turun.
scheduleHasil tugas dipadam sejurus selepas dimuat turun, atau dipadam secara automatik selepas tempoh penyimpanan yang singkat jika tidak pernah dimuat turun — muat turun dengan segera.
Ralat
Setiap kegagalan memulangkan sampul ralat JSON dengan "code" yang boleh digunakan kod anda untuk bercabang, ditambah "message" yang boleh dibaca manusia. Sesetengah ralat menyertakan medan tambahan (quota_exceeded menyertakan "limit" dan "used", sebagai contoh).
| Status & code | When it happens |
|---|---|
401 missing_key | Tiada header Authorization dihantar. |
401 invalid_key | Kunci tersebut tidak wujud, atau telah dibatalkan. |
403 account_suspended | Akaun yang memiliki kunci ini telah digantung. |
403 plan_required | Akaun berada pada pelan Percuma — akses API memerlukan Basic, Lite, Pro, atau Team. |
400 invalid_category | "category" bukan "image" atau "document". |
400 invalid_target | "target" bukan format output yang disokong untuk kategori tersebut. |
400 no_file | Tiada fail dihantar, atau muat naik gagal — medan itu mesti dinamakan "file". |
413 file_too_large | Fail melebihi saiz muat naik maksimum pelan anda. |
429 quota_exceeded | Peruntukan minit penukaran bulanan pelan telah habis digunakan. Direset pada awal bulan kalendar berikutnya. |
429 concurrency_limit | Terlalu banyak penukaran sedang berjalan serentak untuk akaun ini (dikongsi dengan laman web) — tunggu sehingga salah satu selesai dan cuba lagi. |
404 job_not_found | Tiada tugas dengan id tersebut wujud untuk akaun ini (turut dikembalikan untuk job_id akaun lain — kewujudannya tidak pernah didedahkan). |
410 result_gone | Tugas telah selesai, tetapi hasilnya telah pun dipadam (hasil dipadam sejurus selepas dimuat turun, atau secara automatik selepas tempoh penyimpanan yang singkat). |
400/415/422/500/503 conversion_failed | Fail itu sendiri tidak dapat ditukar — "message" menerangkan sebabnya. Kod status berbeza mengikut sebab: 400/415/422 bermaksud fail atau target tidak akan berfungsi tidak kira berapa kali anda cuba semula; 500/503 bermaksud masalah di pihak pelayan, dan 503 khususnya berbaloi untuk dicuba semula dengan singkat. |
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