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" }
Conversões de vídeo e áudio podem levar minutos — tempo demais para manter uma única requisição síncrona aberta — então elas usam um fluxo de enviar-e-consultar em vez do endpoint acima. Envie um arquivo, receba um job_id na hora e consulte o status até terminar.
Enviar um job
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()); } }
Consultar o status
Consulte este endpoint a cada poucos segundos com o job_id que você recebeu. "status" é um destes: 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_...
Baixar o resultado
Quando o status for "completed", a resposta inclui um download_url — a mesma URL de status com &download=1 adicionado. Ao requisitá-la, você recebe os bytes brutos do arquivo convertido, com os mesmos cabeçalhos de qualquer outro endpoint desta página. O resultado é excluído no momento em que é baixado, ou automaticamente após um curto período de retenção caso nunca seja baixado.
scheduleOs resultados dos jobs são excluídos imediatamente após o download, ou automaticamente após um curto período de retenção caso nunca sejam baixados — baixe assim que possível.
Erros
Toda falha retorna um envelope de erro JSON com um "code" no qual seu código pode se basear, além de uma "message" legível por humanos. Alguns erros incluem campos extras (quota_exceeded inclui "limit" e "used", por exemplo).
| Status & code | When it happens |
|---|---|
401 missing_key | Nenhum cabeçalho Authorization foi enviado. |
401 invalid_key | A chave não existe, ou foi revogada. |
403 account_suspended | A conta dona dessa chave está suspensa. |
403 plan_required | A conta está no plano Gratuito — o acesso à API exige Basic, Lite, Pro ou Equipe. |
400 invalid_category | "category" não era "image" nem "document". |
400 invalid_target | "target" não é um formato de saída compatível para essa categoria. |
400 no_file | Nenhum arquivo foi enviado, ou o upload falhou — o campo precisa se chamar "file". |
413 file_too_large | O arquivo excede o tamanho máximo de upload do seu plano. |
429 quota_exceeded | A cota mensal de minutos de conversão do plano já foi usada. Reinicia no começo do próximo mês do calendário. |
429 concurrency_limit | Já há conversões demais rodando ao mesmo tempo para essa conta (compartilhado com o site) — espere uma terminar e tente de novo. |
404 job_not_found | Não existe nenhum job com esse id para esta conta (também retornado para o job_id de outra conta — sua existência nunca é revelada). |
410 result_gone | O job foi concluído, mas o resultado já foi excluído (os resultados são excluídos imediatamente após o download, ou automaticamente após um curto período de retenção). |
400/415/422/500/503 conversion_failed | O próprio arquivo não pôde ser convertido — "message" explica o motivo. O código de status varia conforme o motivo: 400/415/422 significam que o arquivo ou o target não vão funcionar não importa quantas vezes você tente de novo; 500/503 significam um problema do lado do servidor, e 503 especificamente vale a pena tentar de novo em pouco tempo. |
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