Video Conversion API
Convert video between MP4, MOV, AVI, MKV, and WEBM. Video encodes can take minutes, so 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=video" \ -F "target=MP4" \ -F "file=@clip.mov" # { "job_id": "job_...", "status": "queued" }
Video- en audioconversies kunnen minuten duren — te lang om één synchrone aanvraag open te houden. Deze gebruiken daarom een submit-then-poll-flow in plaats van het bovenstaande endpoint. Dien een bestand in, ontvang direct een job_id terug, en vraag daarna de status op totdat de conversie klaar is.
Een taak indienen
https://transconvert.com/api/v1/convert-async.php
| Field | Description |
|---|---|
Authorization | Required. "Bearer tc_live_...". |
category | Set to "video". |
target | Required. Output format code: "MP4", "MOV", "AVI", "MKV", or "WEBM". |
file | Required. The video file. |
curl -X POST \ https://transconvert.com/api/v1/convert-async.php \ -H "Authorization: Bearer tc_live_your_key_here" \ -F "category=video" \ -F "target=MP4" \ -F "file=@clip.mov" \ -o output.mp4
<?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' => 'video', 'target' => 'MP4', 'file' => new CURLFile('clip.mov'), ], ]); $response = curl_exec($ch); $status = curl_getinfo($ch, CURLINFO_HTTP_CODE); if ($status === 200) { file_put_contents('output.mp4', $response); } else { $error = json_decode($response, true); echo $error['error']['message']; }
const form = new FormData(); form.append('category', 'video'); form.append('target', 'MP4'); form.append('file', new Blob([fs.readFileSync('clip.mov')]), 'clip.mov'); 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.mp4', Buffer.from(await res.arrayBuffer())); } else { const { error } = await res.json(); console.error(error.message); }
import requests with open('clip.mov', 'rb') as f: response = requests.post( 'https://transconvert.com/api/v1/convert-async.php', headers={'Authorization': 'Bearer tc_live_your_key_here'}, data={'category': 'video', 'target': 'MP4'}, files={'file': f}, ) if response.status_code == 200: with open('output.mp4', '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('clip.mov') do |file| req = Net::HTTP::Post::Multipart.new url, 'category' => 'video', 'target' => 'MP4', 'file' => UploadIO.new(file, 'application/octet-stream', 'clip.mov') 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.mp4', 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", "video") .addFormDataPart("target", "MP4") .addFormDataPart("file", "clip.mov", RequestBody.create(new File("clip.mov"), 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.mp4"), response.body().bytes()); } else { System.err.println(response.body().string()); } }
Status opvragen
Vraag dit elke paar seconden op met de job_id die je hebt teruggekregen. "status" is queued, processing, completed of 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_...
Het resultaat downloaden
Zodra de status "completed" is, bevat het antwoord een download_url — dezelfde status-URL met &download=1 toegevoegd. Deze opvragen stuurt vervolgens de ruwe bytes van het geconverteerde bestand, met dezelfde headers als elk ander endpoint op deze pagina. Het resultaat wordt verwijderd zodra het is gedownload, of automatisch na een korte bewaartermijn als het nooit wordt gedownload.
scheduleTaakresultaten worden direct na het downloaden verwijderd, of automatisch na een korte bewaartermijn als ze nooit worden gedownload — download ze op tijd.
Fouten
Elke fout retourneert een JSON-foutobject met een "code" waarop je code kan vertakken, plus een leesbaar "message". Sommige fouten bevatten extra velden (quota_exceeded bevat bijvoorbeeld "limit" en "used").
| Status & code | When it happens |
|---|---|
401 missing_key | Er is geen Authorization-header meegestuurd. |
401 invalid_key | De sleutel bestaat niet, of is ingetrokken. |
403 account_suspended | Het account waartoe deze sleutel behoort, is geschorst. |
403 plan_required | Het account heeft het gratis abonnement — voor API-toegang is Basic, Lite, Pro of Team vereist. |
400 invalid_category | "category" was niet "image" of "document". |
400 invalid_target | "target" is geen ondersteund uitvoerformaat voor die categorie. |
400 no_file | Er is geen bestand verzonden, of de upload is mislukt — het veld moet "file" heten. |
413 file_too_large | Het bestand overschrijdt de maximale uploadgrootte van je abonnement. |
429 quota_exceeded | De maandelijkse toewijzing conversieminuten van het abonnement is op. Wordt gereset aan het begin van de volgende kalendermaand. |
429 concurrency_limit | Er lopen al te veel conversies tegelijk voor dit account (gedeeld met de website) — wacht tot er één klaar is en probeer het opnieuw. |
404 job_not_found | Er bestaat geen taak met dat id voor dit account (dit antwoord wordt ook gegeven voor de job_id van een ander account — het bestaan ervan wordt nooit onthuld). |
410 result_gone | De taak is voltooid, maar het resultaat is inmiddels verwijderd (resultaten worden direct na het downloaden verwijderd, of automatisch na een korte bewaartermijn). |
400/415/422/500/503 conversion_failed | Het bestand zelf kon niet worden geconverteerd — "message" legt uit waarom. De statuscode varieert met de reden: 400/415/422 betekenen dat het bestand of target nooit zal werken, hoe vaak je het ook probeert; 500/503 duiden op een probleem aan de serverkant, en bij 503 is een korte nieuwe poging de moeite waard. |
Supported formats
MP4, MOV, AVI, MKV, WEBM