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" }
Les conversions vidéo et audio peuvent durer plusieurs minutes, trop longtemps pour maintenir ouverte une seule requête synchrone — celles-ci utilisent donc un flux d’envoi puis d’interrogation plutôt que le point de terminaison ci-dessus. Envoyez un fichier, récupérez immédiatement un job_id, puis interrogez son statut jusqu’à ce qu’il soit terminé.
Envoyer une tâche
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()); } }
Interroger le statut
Interrogez cette adresse toutes les quelques secondes avec le job_id récupéré précédemment. « status » vaut queued, processing, completed ou 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_...
Télécharger le résultat
Une fois le statut « completed », la réponse contient un download_url — la même URL de statut avec &download=1 ajouté. Sa requête renvoie alors les octets bruts du fichier converti, avec les mêmes en-têtes que tout autre point de terminaison de cette page. Le résultat est supprimé dès qu'il est téléchargé, ou automatiquement après une courte période de conservation s'il n'est jamais téléchargé.
scheduleLes résultats des tâches sont supprimés immédiatement après le téléchargement, ou automatiquement après une courte période de conservation s'ils ne sont jamais téléchargés — téléchargez-les rapidement.
Erreurs
Chaque échec renvoie une enveloppe d’erreur JSON avec un "code" que votre application peut tester, ainsi qu’un "message" lisible. Certaines erreurs incluent des champs supplémentaires (quota_exceeded inclut par exemple "limit" et "used").
| Status & code | When it happens |
|---|---|
401 missing_key | Aucun en-tête Authorization n’a été envoyé. |
401 invalid_key | La clé n’existe pas, ou a été révoquée. |
403 account_suspended | Le compte propriétaire de cette clé est suspendu. |
403 plan_required | Le compte est sur l’offre Free — l’accès à l’API nécessite Basic, Lite, Pro ou Team. |
400 invalid_category | "category" n’était pas "image" ni "document". |
400 invalid_target | « target » n’est pas un format de sortie pris en charge pour cette catégorie. |
400 no_file | Aucun fichier n’a été envoyé, ou l’envoi a échoué — le champ doit s’appeler "file". |
413 file_too_large | Le fichier dépasse la taille maximale de téléversement autorisée par votre offre. |
429 quota_exceeded | Le quota mensuel de minutes de conversion de l’offre est épuisé. Réinitialisation au début du mois calendaire suivant. |
429 concurrency_limit | Trop de conversions déjà en cours simultanément pour ce compte (partagé avec le site) — attendez qu’une conversion se termine, puis réessayez. |
404 job_not_found | Aucune tâche avec cet identifiant n’existe pour ce compte (également renvoyé pour le job_id d’un autre compte — son existence n’est jamais révélée). |
410 result_gone | La tâche est terminée, mais son résultat a depuis été supprimé (les résultats sont supprimés immédiatement après le téléchargement, ou automatiquement après une courte période de conservation). |
400/415/422/500/503 conversion_failed | Le fichier lui-même n’a pas pu être converti — "message" en explique la raison. Le code de statut varie selon la cause : 400/415/422 signifient que le fichier ou la cible ne fonctionneront pas, peu importe le nombre de tentatives ; 500/503 signifient un problème côté serveur, et 503 en particulier mérite une brève nouvelle tentative. |
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